glib r7953 - trunk/gio



Author: alexl
Date: Tue Mar  3 19:02:16 2009
New Revision: 7953
URL: http://svn.gnome.org/viewvc/glib?rev=7953&view=rev

Log:
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.




Modified:
   trunk/gio/ChangeLog
   trunk/gio/gdesktopappinfo.c
   trunk/gio/glocalvfs.c

Modified: trunk/gio/gdesktopappinfo.c
==============================================================================
--- trunk/gio/gdesktopappinfo.c	(original)
+++ trunk/gio/gdesktopappinfo.c	Tue Mar  3 19:02:16 2009
@@ -567,6 +567,7 @@
   char *expanded;
   gboolean force_file_uri;
   char force_file_uri_macro;
+  char *uri;
 
   g_return_if_fail (exec != NULL);
 
@@ -602,15 +603,18 @@
     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 @@
     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)

Modified: trunk/gio/glocalvfs.c
==============================================================================
--- trunk/gio/glocalvfs.c	(original)
+++ trunk/gio/glocalvfs.c	Tue Mar  3 19:02:16 2009
@@ -31,6 +31,7 @@
 #ifdef HAVE_PWD_H
 #include <pwd.h>
 #endif
+#include <string.h>
 
 #include "gioalias.h"
 
@@ -90,9 +91,22 @@
 {
   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



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]