diff --git a/ChangeLog b/ChangeLog index 06bc4fcec..0f7e33d67 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-11-27 Alexander Larsson + + * gio/Makefile.am: + * gio/gurifuncs.[ch]: + * glib/Makefile.am: + * glib/gstring.[ch]: + * glib/gurifuncs.[ch]: + Moved gurifuncs from gio to glib + 2007-11-27 Alexander Larsson * gio/gfileinfo.[ch]: diff --git a/gio/Makefile.am b/gio/Makefile.am index 4141162ef..b33750a25 100644 --- a/gio/Makefile.am +++ b/gio/Makefile.am @@ -143,7 +143,6 @@ libgio_2_0_la_SOURCES = \ gthemedicon.c \ gunionvolumemonitor.c \ gunionvolumemonitor.h \ - gurifuncs.c \ gvfs.c \ gvolume.c \ gvolumemonitor.c \ @@ -211,7 +210,6 @@ gioinclude_HEADERS = \ gsocketinputstream.h \ gsocketoutputstream.h \ gthemedicon.h \ - gurifuncs.h \ gvfs.h \ gvolume.h \ gvolumemonitor.h \ diff --git a/glib/Makefile.am b/glib/Makefile.am index 287b60b67..72472c46f 100644 --- a/glib/Makefile.am +++ b/glib/Makefile.am @@ -157,6 +157,7 @@ libglib_2_0_la_SOURCES = \ gunidecomp.h \ gunidecomp.c \ gunicodeprivate.h \ + gurifuncs.c \ gutils.c \ gdebug.h \ gprintf.c \ @@ -230,6 +231,7 @@ glibsubinclude_HEADERS = \ gtree.h \ gtypes.h \ gunicode.h \ + gurifuncs.h \ gutils.h \ gwin32.h \ gprintf.h diff --git a/glib/gstring.c b/glib/gstring.c index 0542339b6..712dc1cda 100644 --- a/glib/gstring.c +++ b/glib/gstring.c @@ -1398,5 +1398,88 @@ g_string_append_printf (GString *string, va_end (args); } +#define SUB_DELIM_CHARS "!$&'()*+,;=" + +static gboolean +is_valid (char c, const char *reserved_chars_allowed) +{ + if (g_ascii_isalnum (c) || + c == '-' || + c == '.' || + c == '_' || + c == '~') + return TRUE; + + if (reserved_chars_allowed && + strchr (reserved_chars_allowed, c) != NULL) + return TRUE; + + return FALSE; +} + +static gboolean +gunichar_ok (gunichar c) +{ + return + (c != (gunichar) -2) && + (c != (gunichar) -1); +} + +/** + * g_string_append_uri_escaped: + * @string: a #GString + * @unescaped: a string + * @reserved_chars_allowed: a string of reserved characters allowed to be used + * @allow_utf8: set %TRUE if the escaped string may include UTF8 characters + * + * Appends @unescaped to @string, escaped any characters that + * are reserved in URIs using URI-style escape sequences. + * + * Returns: @string + * + * Since: 2.16 + **/ +GString * +g_string_append_uri_escaped (GString *string, + const char *unescaped, + const char *reserved_chars_allowed, + gboolean allow_utf8) +{ + unsigned char c; + const char *end; + static const gchar hex[16] = "0123456789ABCDEF"; + + g_return_val_if_fail (string != NULL, NULL); + g_return_val_if_fail (unescaped != NULL, NULL); + + end = unescaped + strlen (unescaped); + + while ((c = *unescaped) != 0) + { + if (c >= 0x80 && allow_utf8 && + gunichar_ok (g_utf8_get_char_validated (unescaped, end - unescaped))) + { + int len = g_utf8_skip [c]; + g_string_append_len (string, unescaped, len); + unescaped += len; + } + else if (is_valid (c, reserved_chars_allowed)) + { + g_string_append_c (string, c); + unescaped++; + } + else + { + g_string_append_c (string, '%'); + g_string_append_c (string, hex[((guchar)c) >> 4]); + g_string_append_c (string, hex[((guchar)c) & 0xf]); + unescaped++; + } + } + + return string; +} + + #define __G_STRING_C__ #include "galiasdef.c" diff --git a/glib/gstring.h b/glib/gstring.h index 42018162c..427b56eef 100644 --- a/glib/gstring.h +++ b/glib/gstring.h @@ -129,6 +129,10 @@ void g_string_append_vprintf (GString *string, void g_string_append_printf (GString *string, const gchar *format, ...) G_GNUC_PRINTF (2, 3); +GString * g_string_append_uri_escaped(GString *string, + const char *unescaped, + const char *reserved_chars_allowed, + gboolean allow_utf8); /* -- optimize g_strig_append_c --- */ #ifdef G_CAN_INLINE diff --git a/gio/gurifuncs.c b/glib/gurifuncs.c similarity index 74% rename from gio/gurifuncs.c rename to glib/gurifuncs.c index 757a9c0e2..150f3667d 100644 --- a/gio/gurifuncs.c +++ b/glib/gurifuncs.c @@ -62,6 +62,8 @@ unescape_character (const char *scanner) * * Returns: an unescaped version of @escaped_string or %NULL on error. * The returned string should be freed when no longer needed. + * + * Since: 2.16 **/ char * g_uri_unescape_segment (const char *escaped_string, @@ -126,6 +128,8 @@ g_uri_unescape_segment (const char *escaped_string, * * Returns: an unescaped version of @escaped_string. The returned string * should be freed when no longer needed. + * + * Since: 2.16 **/ char * g_uri_unescape_string (const char *escaped_string, @@ -144,6 +148,8 @@ g_uri_unescape_string (const char *escaped_string, * * Returns: The "Scheme" component of the URI, or %NULL on error. * The returned string should be freed when no longer needed. + * + * Since: 2.16 **/ char * g_uri_get_scheme (const char *uri) @@ -183,85 +189,6 @@ g_uri_get_scheme (const char *uri) return g_strndup (uri, p - uri - 1); } -#define SUB_DELIM_CHARS "!$&'()*+,;=" - -static gboolean -is_valid (char c, const char *reserved_chars_allowed) -{ - if (g_ascii_isalnum (c) || - c == '-' || - c == '.' || - c == '_' || - c == '~') - return TRUE; - - if (reserved_chars_allowed && - strchr (reserved_chars_allowed, c) != NULL) - return TRUE; - - return FALSE; -} - -static gboolean -gunichar_ok (gunichar c) -{ - return - (c != (gunichar) -2) && - (c != (gunichar) -1); -} - -/** - * g_string_append_uri_escaped: - * @string: a #GString to append to. - * @unescaped: the input C string of unescaped URI data. - * @reserved_chars_allowed: a string of reserve characters allowed to be used. - * @allow_utf8: set %TRUE if the return value may include UTF8 characters. - * - * Appends an escaped URI to @string. - * - * Returns: a #GString with the escaped URI appended. - **/ -GString * -g_string_append_uri_escaped (GString *string, - const char *unescaped, - const char *reserved_chars_allowed, - gboolean allow_utf8) -{ - unsigned char c; - const char *end; - static const gchar hex[16] = "0123456789ABCDEF"; - - g_return_val_if_fail (string != NULL, NULL); - g_return_val_if_fail (unescaped != NULL, NULL); - - end = unescaped + strlen (unescaped); - - while ((c = *unescaped) != 0) - { - if (c >= 0x80 && allow_utf8 && - gunichar_ok (g_utf8_get_char_validated (unescaped, end - unescaped))) - { - int len = g_utf8_skip [c]; - g_string_append_len (string, unescaped, len); - unescaped += len; - } - else if (is_valid (c, reserved_chars_allowed)) - { - g_string_append_c (string, c); - unescaped++; - } - else - { - g_string_append_c (string, '%'); - g_string_append_c (string, hex[((guchar)c) >> 4]); - g_string_append_c (string, hex[((guchar)c) & 0xf]); - unescaped++; - } - } - - return string; -} - /** * g_uri_escape_string: * @unescaped: the unescaped input string. @@ -272,6 +199,8 @@ g_string_append_uri_escaped (GString *string, * * Returns: an escaped version of @unescaped. The returned string should be * freed when no longer needed. + * + * Since: 2.16 **/ char * g_uri_escape_string (const char *unescaped, diff --git a/gio/gurifuncs.h b/glib/gurifuncs.h similarity index 93% rename from gio/gurifuncs.h rename to glib/gurifuncs.h index f162d0d76..a59db6bc5 100644 --- a/gio/gurifuncs.h +++ b/glib/gurifuncs.h @@ -71,13 +71,6 @@ char * g_uri_get_scheme (const char *uri); char * g_uri_escape_string (const char *unescaped, const char *reserved_chars_allowed, gboolean allow_utf8); -GString *g_string_append_uri_escaped (GString *string, - const char *unescaped, - const char *reserved_chars_allowed, - gboolean allow_utf8); - - - G_END_DECLS