diff --git a/gio/ChangeLog b/gio/ChangeLog index d3fb32006..594f71eaf 100644 --- a/gio/ChangeLog +++ b/gio/ChangeLog @@ -1,3 +1,15 @@ +2009-03-03 Alexander Larsson + + Bug 561172 – gnome-open fails on local URIs with anchors + + * gdesktopappinfo.c: + Don't force uris to filenames if the uri has an anchor, because + that would strip the anchor. + + * glocalvfs.c: + Strip anchor from file:// uris when creating GFile, since + g_filename_from_uri doesn't handle them. + 2009-03-03 Alexander Larsson Bug 562613 – Missing const modifier in string parameters diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c index ffe1bde21..fcd77375c 100644 --- a/gio/gdesktopappinfo.c +++ b/gio/gdesktopappinfo.c @@ -567,6 +567,7 @@ expand_macro (char macro, char *expanded; gboolean force_file_uri; char force_file_uri_macro; + char *uri; g_return_if_fail (exec != NULL); @@ -602,15 +603,18 @@ expand_macro (char macro, case 'n': if (uris) { - if (!force_file_uri) + uri = uris->data; + if (!force_file_uri || + /* Pass URI if it contains an anchor */ + strchr (uri, '#') != NULL) { - expanded = expand_macro_single (macro, uris->data); + expanded = expand_macro_single (macro, uri); } else { - expanded = expand_macro_single (force_file_uri_macro, uris->data); + expanded = expand_macro_single (force_file_uri_macro, uri); if (expanded == NULL) - expanded = expand_macro_single (macro, uris->data); + expanded = expand_macro_single (macro, uri); } if (expanded) @@ -629,15 +633,19 @@ expand_macro (char macro, case 'N': while (uris) { - if (!force_file_uri) + uri = uris->data; + + if (!force_file_uri || + /* Pass URI if it contains an anchor */ + strchr (uri, '#') != NULL) { - expanded = expand_macro_single (macro, uris->data); + expanded = expand_macro_single (macro, uri); } else { - expanded = expand_macro_single (force_file_uri_macro, uris->data); + expanded = expand_macro_single (force_file_uri_macro, uri); if (expanded == NULL) - expanded = expand_macro_single (macro, uris->data); + expanded = expand_macro_single (macro, uri); } if (expanded) diff --git a/gio/glocalvfs.c b/gio/glocalvfs.c index 980e1cfdd..cd535e38a 100644 --- a/gio/glocalvfs.c +++ b/gio/glocalvfs.c @@ -31,6 +31,7 @@ #ifdef HAVE_PWD_H #include #endif +#include #include "gioalias.h" @@ -90,9 +91,22 @@ g_local_vfs_get_file_for_uri (GVfs *vfs, { char *path; GFile *file; + char *stripped_uri, *hash; + + if (strchr (uri, '#') != NULL) + { + stripped_uri = g_strdup (uri); + hash = strchr (stripped_uri, '#'); + *hash = 0; + } + else + stripped_uri = (char *)uri; + + path = g_filename_from_uri (stripped_uri, NULL, NULL); - path = g_filename_from_uri (uri, NULL, NULL); - + if (stripped_uri != uri) + g_free (stripped_uri); + if (path != NULL) file = _g_local_file_new (path); else