diff -Naur gnome-vfs-2.17.2.orig/libgnomevfs/gnome-vfs-private-utils.c gnome-vfs-2.17.2/libgnomevfs/gnome-vfs-private-utils.c
--- gnome-vfs-2.17.2.orig/libgnomevfs/gnome-vfs-private-utils.c	2005-06-08 09:19:54.000000000 +0200
+++ gnome-vfs-2.17.2/libgnomevfs/gnome-vfs-private-utils.c	2006-12-25 19:53:15.000000000 +0100
@@ -1015,6 +1015,31 @@
 }
 
 
+char * _gnome_vfs_uri_escape_vfat_characters (const char *path) {
+	char *retval;
+	const char *in_ptr;
+	char *out_ptr;
+
+	retval = (char *)malloc(strlen(path));
+	in_ptr = path;
+	out_ptr = retval;
+
+	for (; in_ptr < (path + strlen(path)); in_ptr++, out_ptr++) {
+		char w = *in_ptr;
+		if ((w < 0x0020)
+		|| (w == '*') || (w == '?') || (w == '<') || (w == '>')
+		|| (w == '|') || (w == '"') || (w == ':') || (w == '/')
+		|| (w == '\\')) {
+			*out_ptr = '_';
+		} else {
+			*out_ptr = *in_ptr;
+		}
+	}
+	*out_ptr = '\0';
+	return retval;
+}
+
+
 #ifdef G_OS_WIN32
 void
 _gnome_vfs_map_winsock_error_to_errno (void)
diff -Naur gnome-vfs-2.17.2.orig/libgnomevfs/gnome-vfs-private-utils.h gnome-vfs-2.17.2/libgnomevfs/gnome-vfs-private-utils.h
--- gnome-vfs-2.17.2.orig/libgnomevfs/gnome-vfs-private-utils.h	2006-04-20 14:18:53.000000000 +0200
+++ gnome-vfs-2.17.2/libgnomevfs/gnome-vfs-private-utils.h	2006-12-25 19:00:34.000000000 +0100
@@ -106,6 +106,10 @@
 gboolean       _gnome_vfs_pipe_set_blocking               (int        pipe_fd,
 							   gboolean   blocking);
 
+
+char * _gnome_vfs_uri_escape_vfat_characters (const char *path);
+
+
 #ifdef G_OS_WIN32
 void	       _gnome_vfs_map_winsock_error_to_errno	  (void);
 const char    *_gnome_vfs_winsock_strerror		  (int		 error);
