From 5c91af7e41443252857cdcf6fe0f0dabdc0b5250 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Fri, 3 Feb 2012 11:10:50 -0500 Subject: [PATCH] glocalfile: fix g_file_get_parse_name() on win32 When getting the parse name for a file: URI on win32, we were not translating "\" to "/", resulting in incorrect output. https://bugzilla.gnome.org/show_bug.cgi?id=669331 --- gio/glocalfile.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/gio/glocalfile.c b/gio/glocalfile.c index 176817d70..0c54727c8 100644 --- a/gio/glocalfile.c +++ b/gio/glocalfile.c @@ -414,6 +414,23 @@ g_local_file_get_parse_name (GFile *file) } else { +#ifdef G_OS_WIN32 + char *dup_filename, *p, *backslash; + + /* Turn backslashes into forward slashes like + * g_filename_to_uri() would do (but we can't use that because + * it doesn't output IRIs). + */ + dup_filename = g_strdup (filename); + filename = p = dup_filename; + + while ((backslash = strchr (p, '\\')) != NULL) + { + *backslash = '/'; + p = backslash + 1; + } +#endif + escaped_path = g_uri_escape_string (filename, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT "/", TRUE); @@ -423,7 +440,9 @@ g_local_file_get_parse_name (GFile *file) NULL); g_free (escaped_path); - +#ifdef G_OS_WIN32 + g_free (dup_filename); +#endif if (free_utf8_filename) g_free (utf8_filename); }