URIs vs. half-baked URIs (was Filesel drag and drop)
- From: Darin Adler <darin bentspoon com>
 
- To: Alex Larsson <alexl redhat com>
 
- Cc: gtk-devel-list gnome org, gnome-hackers gnome org
 
- Subject: URIs vs. half-baked URIs (was Filesel drag and drop)
 
- Date: Thu, 2 Aug 2001 14:45:44 -0700
 
On Thursday, August 2, 2001, at 02:33  PM, Alex Larsson wrote:
+static gchar *
+uri_extract_filename (const gchar* uri)
+{
+  /* file uri with a hostname */
+  if (strncmp(uri, "file://", strlen("file://"))==0)
+    {
+      const char *hostname = &uri[strlen("file://")];
+      char *p = strchr (hostname,'/');
+
+      /* if we can't find the '/' this uri is bad */
+      if(!p)
+	return NULL;
+
+      return g_strdup (p);
+
+      /* if the file doesn't have the //, we take it containing
+	 a local path */
+    }
+  else if (strncmp (uri, "file:", strlen("file:"))==0)
+    {
+      const char *path = &uri[strlen("file:")];
+      /* if empty bad */
+      if (!*path)
+	return NULL;
+      return g_strdup (path);
+    }
+  return NULL;
+}
I know this kind of code is already in GNOME, but eventually we have to 
distinguish real URIs from half-baked URIs: paths with "file:" or 
"file://<hostname>" prefixes but without URI escaping. The code above 
strips the prefix (ignoring the hostname) and then uses the rest as a path.
 This won't work for files with "%" characters in their name, it won't 
work properly if the URIs have "%" escape sequences in them, and it will 
do the wrong thing for URIs with host names (other than the current host) 
in them.
I don't mean to pick on Alex, he just happened to be the one who posted 
the code, but this is a real problem. At some point we have to start 
distinguishing between places that use real URIs and places that use these 
kinds of half-baked URIs if we want to be able to drag files that have "%" 
characters in the file name.
An easy way to do this correctly for code that can have a gnome-vfs 
dependency is to use gnome_vfs_get_local_path_from_uri or 
gnome_vfs_get_uri_from_local_path. Maybe we should put these two functions 
into glib or somewhere in gtk since it's *so* easy and common to get them 
wrong, and they affect drag and drop.
Relevant functions to look at to see the problem in existing GNOME code 
are gnome_uri_list_extract_filenames, which extracts paths from URIs in 
this same half-baked way, and add_one_compatible_uri from eel-dnd.c which 
goes out of its way to construct half-baked URIs that 
gnome_uri_list_extract_filenames can deal with.
    -- Darin
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]