Index: libnautilus-private/nautilus-directory-async.c
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-directory-async.c,v
retrieving revision 1.208
diff -a -u -r1.208 nautilus-directory-async.c
--- libnautilus-private/nautilus-directory-async.c	8 Mar 2004 18:55:28 -0000	1.208
+++ libnautilus-private/nautilus-directory-async.c	14 May 2004 20:03:24 -0000
@@ -2038,9 +2038,11 @@
 	char *dot_hidden_uri;
 	GnomeVFSURI *dot_hidden_vfs_uri;
 	GnomeVFSResult result;
-	int i, file_size;
-	char *file_contents;
+	int i, file_size, data_size;
+	char *file_contents, *data;
 
+	data = NULL;
+	data_size = 0;
 
 	/* FIXME: We only support .hidden on file: uri's for the moment.
 	 * Need to figure out if we should do this async or sync to extend
@@ -2050,34 +2052,51 @@
 		return;
 	}
 	
+	dot_hidden_uri = g_strconcat ("file://", g_get_home_dir (), "/.hidden-all", NULL);
+	result = eel_read_entire_file (dot_hidden_uri, &file_size, &file_contents);	
+	g_free (dot_hidden_uri);
+	
+	if (result == GNOME_VFS_OK) {
+		data = g_malloc (file_size);
+		memcpy (data, file_contents, file_size);
+		data_size += file_size;
+		g_free (file_contents);
+	}
+	
 	/* FIXME: what we really need is a uri_append_file_name call
 	 * that works on strings, so we can avoid the VFS parsing step.
 	 */
 	dot_hidden_vfs_uri = gnome_vfs_uri_append_file_name (directory->details->vfs_uri, ".hidden");
 	dot_hidden_uri = gnome_vfs_uri_to_string (dot_hidden_vfs_uri, GNOME_VFS_URI_HIDE_NONE);
-	gnome_vfs_uri_unref (dot_hidden_vfs_uri);
 	
 	result = eel_read_entire_file (dot_hidden_uri, &file_size, &file_contents);	
 	g_free (dot_hidden_uri);
 
-	if (result != GNOME_VFS_OK) {
+	if (result == GNOME_VFS_OK) {
+		data = g_realloc (data, data_size + file_size);
+		memcpy (data + data_size, file_contents, file_size);
+		data_size += file_size;
+		g_free (file_contents);
+	}
+	
+	if (!data) {
 		return;
 	}
 
 	/* Now parse the data */
 	i = 0;
-	while (i < file_size) {
+	while (i < data_size) {
 		int start;
 
 		start = i;
-		while (i < file_size && file_contents[i] != '\n') {
+		while (i < data_size && data[i] != '\n') {
 			i++;
 		}
 
 		if (i > start) {
 			char *tmp, *tmp2;
 		
-			tmp = g_strndup (file_contents + start, i - start);
+			tmp = g_strndup (data + start, i - start);
 			tmp2 = gnome_vfs_escape_string (tmp);
 			g_free (tmp);
 			
@@ -2089,7 +2108,7 @@
 		
 	}
 
-	g_free (file_contents);
+	g_free (data);
 }
 
 /* Start monitoring the file list if it isn't already. */
