diff options
author | Alexander Larsson <alexl@redhat.com> | 2009-03-03 19:02:16 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2009-03-03 19:02:16 +0000 |
commit | 896c3d1b2cff1b73b6634ab66672fe5df81a5749 (patch) | |
tree | a7283001e7d958b53197bbaa05235b17facabda6 | |
parent | f891d4e04e702b83b1099edb2ce2e0ae01bd4160 (diff) |
Bug 561172 – gnome-open fails on local URIs with anchors
2009-03-03 Alexander Larsson <alexl@redhat.com>
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.
svn path=/trunk/; revision=7953
-rw-r--r-- | gio/ChangeLog | 12 | ||||
-rw-r--r-- | gio/gdesktopappinfo.c | 24 | ||||
-rw-r--r-- | gio/glocalvfs.c | 18 |
3 files changed, 44 insertions, 10 deletions
diff --git a/gio/ChangeLog b/gio/ChangeLog index d3fb32006..594f71eaf 100644 --- a/gio/ChangeLog +++ b/gio/ChangeLog @@ -1,5 +1,17 @@ 2009-03-03 Alexander Larsson <alexl@redhat.com> + 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 <alexl@redhat.com> + Bug 562613 – Missing const modifier in string parameters * gfileinputstream.[ch]: 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 <pwd.h> #endif +#include <string.h> #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 |