diff options
author | Dan Winship <danw@src.gnome.org> | 2004-08-09 16:58:10 +0000 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2004-08-09 16:58:10 +0000 |
commit | bc974b8a31721e3036da518d1c337ff18d9dee54 (patch) | |
tree | 4de1aed380203a9fc476efcfe6a6ccfd860e23d1 | |
parent | ffaab3e9f0f34d0ac031dfd9404828707e999088 (diff) | |
download | libsoup-bc974b8a31721e3036da518d1c337ff18d9dee54.tar.gz |
Add flag "broken_encoding" to SoupUri.
* libsoup/soup-uri.h: Add flag "broken_encoding" to SoupUri.
* libsoup/soup-uri.c: (soup_uri_to_string): if broken_encoding is
set, don't re-encode the URL parts. Based on a patch by
Alfred.Peng@Sun.COM.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | libsoup/soup-uri.c | 28 | ||||
-rw-r--r-- | libsoup/soup-uri.h | 3 |
3 files changed, 32 insertions, 7 deletions
@@ -1,3 +1,11 @@ +2004-08-02 Dan Winship <danw@novell.com> + + * libsoup/soup-uri.h: Add flag "broken_encoding" to SoupUri. + + * libsoup/soup-uri.c: (soup_uri_to_string): if broken_encoding is + set, don't re-encode the URL parts. Based on a patch by + Alfred.Peng@Sun.COM. + 2004-07-19 JP Rosevear <jpr@novell.com> * configure.in: bump version, libtool number diff --git a/libsoup/soup-uri.c b/libsoup/soup-uri.c index ea7d09dd..8e57f51e 100644 --- a/libsoup/soup-uri.c +++ b/libsoup/soup-uri.c @@ -11,6 +11,8 @@ #include "soup-uri.h" +static void append_uri_encoded (GString *str, const char *in, const char *extra_enc_chars); + static inline SoupProtocol soup_uri_get_protocol (const char *proto, int len) { @@ -40,8 +42,6 @@ soup_protocol_default_port (SoupProtocol proto) return 0; } -static void append_uri_encoded (GString *str, const char *in, const char *extra_enc_chars); - /** * soup_uri_new_with_base: * @base: a base URI @@ -255,6 +255,17 @@ soup_uri_new (const char *uri_string) return uri; } + +static inline void +append_uri (GString *str, const char *in, const char *extra_enc_chars, + gboolean pre_encoded) +{ + if (pre_encoded) + g_string_append (str, in); + else + append_uri_encoded (str, in, extra_enc_chars); +} + /** * soup_uri_to_string: * @uri: a #SoupUri @@ -267,6 +278,7 @@ soup_uri_to_string (const SoupUri *uri, gboolean just_path) { GString *str; char *return_result; + gboolean pre_encoded = uri->broken_encoding; /* IF YOU CHANGE ANYTHING IN THIS FUNCTION, RUN * tests/uri-parsing AFTERWARD. @@ -279,10 +291,10 @@ soup_uri_to_string (const SoupUri *uri, gboolean just_path) if (uri->host && !just_path) { g_string_append (str, "//"); if (uri->user) { - append_uri_encoded (str, uri->user, ":;@/"); + append_uri (str, uri->user, ":;@/", pre_encoded); g_string_append_c (str, '@'); } - append_uri_encoded (str, uri->host, ":/"); + append_uri (str, uri->host, ":/", pre_encoded); if (uri->port && uri->port != soup_protocol_default_port (uri->protocol)) g_string_append_printf (str, ":%d", uri->port); if (!uri->path && (uri->query || uri->fragment)) @@ -290,17 +302,17 @@ soup_uri_to_string (const SoupUri *uri, gboolean just_path) } if (uri->path && *uri->path) - append_uri_encoded (str, uri->path, "?"); + append_uri (str, uri->path, "?", pre_encoded); else if (just_path) g_string_append_c (str, '/'); if (uri->query) { g_string_append_c (str, '?'); - append_uri_encoded (str, uri->query, NULL); + append_uri (str, uri->query, NULL, pre_encoded); } if (uri->fragment && !just_path) { g_string_append_c (str, '#'); - append_uri_encoded (str, uri->fragment, NULL); + append_uri (str, uri->fragment, NULL, pre_encoded); } return_result = str->str; @@ -326,6 +338,8 @@ soup_uri_copy (const SoupUri *uri) dup->query = g_strdup (uri->query); dup->fragment = g_strdup (uri->fragment); + dup->broken_encoding = uri->broken_encoding; + return dup; } diff --git a/libsoup/soup-uri.h b/libsoup/soup-uri.h index 728a2218..5ad65039 100644 --- a/libsoup/soup-uri.h +++ b/libsoup/soup-uri.h @@ -28,6 +28,9 @@ struct SoupUri { char *query; char *fragment; + + /* Don't use this */ + gboolean broken_encoding; }; SoupUri *soup_uri_new_with_base (const SoupUri *base, |