summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@src.gnome.org>2004-08-09 16:58:10 +0000
committerDan Winship <danw@src.gnome.org>2004-08-09 16:58:10 +0000
commitbc974b8a31721e3036da518d1c337ff18d9dee54 (patch)
tree4de1aed380203a9fc476efcfe6a6ccfd860e23d1
parentffaab3e9f0f34d0ac031dfd9404828707e999088 (diff)
downloadlibsoup-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--ChangeLog8
-rw-r--r--libsoup/soup-uri.c28
-rw-r--r--libsoup/soup-uri.h3
3 files changed, 32 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 5e11bc63..c49f5163 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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,