summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2009-03-03 19:02:16 +0000
committerAlexander Larsson <alexl@src.gnome.org>2009-03-03 19:02:16 +0000
commit896c3d1b2cff1b73b6634ab66672fe5df81a5749 (patch)
treea7283001e7d958b53197bbaa05235b17facabda6
parentf891d4e04e702b83b1099edb2ce2e0ae01bd4160 (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/ChangeLog12
-rw-r--r--gio/gdesktopappinfo.c24
-rw-r--r--gio/glocalvfs.c18
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