Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/glib/ChangeLog,v
retrieving revision 1.1559
diff -u -r1.1559 ChangeLog
--- ChangeLog	15 Apr 2004 13:58:29 -0000	1.1559
+++ ChangeLog	19 Apr 2004 18:39:35 -0000
@@ -1,3 +1,14 @@
+2004-04-19  Federico Mena Quintero  <federico@ximian.com>
+
+	Fixes #140532.
+
+	* glib/gconvert.c (is_asciialphanum): Renamed from
+	is_escalphanum(); ensures that this is an ASCII character.
+	(is_asciiescalpha): Renamed from is_escalpha().
+	(hostname_validate): Use the two functions above.
+	(g_filename_to_uri): Don't convert the filename to UTF-8.
+	(g_filename_from_uri): Don't convert the filename from UTF-8.
+
 2004-04-15  Matthias Clasen  <mclasen@redhat.com>
 
 	* tests/patterntest.c (main): Add tests for the empty pattern.
Index: glib/gconvert.c
===================================================================
RCS file: /cvs/gnome/glib/glib/gconvert.c,v
retrieving revision 1.53
diff -u -r1.53 gconvert.c
--- glib/gconvert.c	13 Dec 2003 14:38:18 -0000	1.53
+++ glib/gconvert.c	19 Apr 2004 18:39:36 -0000
@@ -1411,15 +1411,15 @@
 }
 
 static gboolean
-is_escalphanum (gunichar c)
+is_asciialphanum (gunichar c)
 {
-  return c > 0x7F || g_ascii_isalnum (c);
+  return c <= 0x7F && g_ascii_isalnum (c);
 }
 
 static gboolean
-is_escalpha (gunichar c)
+is_asciialpha (gunichar c)
 {
-  return c > 0x7F || g_ascii_isalpha (c);
+  return c <= 0x7F && g_ascii_isalpha (c);
 }
 
 /* allows an empty string */
@@ -1437,7 +1437,7 @@
       /* read in a label */
       c = g_utf8_get_char (p);
       p = g_utf8_next_char (p);
-      if (!is_escalphanum (c))
+      if (!is_asciialphanum (c))
 	return FALSE;
       first_char = c;
       do
@@ -1446,13 +1446,13 @@
 	  c = g_utf8_get_char (p);
 	  p = g_utf8_next_char (p);
 	}
-      while (is_escalphanum (c) || c == '-');
+      while (is_asciialphanum (c) || c == '-');
       if (last_char == '-')
 	return FALSE;
       
       /* if that was the last label, check that it was a toplabel */
       if (c == '\0' || (c == '.' && *p == '\0'))
-	return is_escalpha (first_char);
+	return is_asciialpha (first_char);
     }
   while (c == '.');
   return FALSE;
@@ -1460,14 +1460,14 @@
 
 /**
  * g_filename_from_uri:
- * @uri: a uri describing a filename (escaped, encoded in UTF-8).
+ * @uri: a uri describing a filename (escaped, encoded in ASCII).
  * @hostname: Location to store hostname for the URI, or %NULL.
  *            If there is no hostname in the URI, %NULL will be
  *            stored in this location.
  * @error: location to store the error occuring, or %NULL to ignore
  *         errors. Any of the errors in #GConvertError may occur.
  * 
- * Converts an escaped UTF-8 encoded URI to a local filename in the
+ * Converts an escaped ASCII-encoded URI to a local filename in the
  * encoding used for filenames. 
  * 
  * Return value: a newly-allocated string holding the resulting
@@ -1587,10 +1587,10 @@
 	}
     }
 #endif
-  
-  result = g_filename_from_utf8 (filename + offs, -1, NULL, NULL, error);
+
+  result = g_strdup (filename + offs);
   g_free (filename);
-  
+
   return result;
 }
 
@@ -1602,7 +1602,7 @@
  * @error: location to store the error occuring, or %NULL to ignore
  *         errors. Any of the errors in #GConvertError may occur.
  * 
- * Converts an absolute filename to an escaped UTF-8 encoded URI.
+ * Converts an absolute filename to an escaped ASCII-encoded URI.
  * 
  * Return value: a newly-allocated string holding the resulting
  *               URI, or %NULL on an error.
@@ -1613,7 +1613,6 @@
 		     GError     **error)
 {
   char *escaped_uri;
-  char *utf8_filename;
 
   g_return_val_if_fail (filename != NULL, NULL);
 
@@ -1634,20 +1633,13 @@
       return NULL;
     }
   
-  utf8_filename = g_filename_to_utf8 (filename, -1, NULL, NULL, error);
-  if (utf8_filename == NULL)
-    return NULL;
-  
 #ifdef G_OS_WIN32
   /* Don't use localhost unnecessarily */
   if (hostname && g_ascii_strcasecmp (hostname, "localhost") == 0)
     hostname = NULL;
 #endif
 
-  escaped_uri = g_escape_file_uri (hostname,
-				   utf8_filename);
-  g_free (utf8_filename);
-  
+  escaped_uri = g_escape_file_uri (hostname, filename);
+
   return escaped_uri;
 }
-
