3493982
diff -Nur xarchiver-0.5.2.orig/src/7zip.c xarchiver-0.5.2/src/7zip.c
3493982
--- xarchiver-0.5.2.orig/src/7zip.c	2008-10-25 00:41:17.000000000 +1300
3493982
+++ xarchiver-0.5.2/src/7zip.c	2010-12-15 11:24:26.000000000 +1300
3493982
@@ -64,15 +64,14 @@
3493982
 	XEntry *entry;
3493982
 	gchar *filename;
3493982
 	gpointer item[5];
3493982
-	gint linesize = 0,n = 0,a = 0;
3493982
-	gboolean dir = FALSE;
3493982
+	gint linesize = 0,a = 0;
3493982
 
3493982
 	if (last_line)
3493982
 		return;
3493982
 
3493982
 	if (jump_header == FALSE)
3493982
 	{
3493982
-		if (line[0] == '-')
3493982
+		if ((line[0] == '-') && (line[3] != NULL)) 
3493982
 		{
3493982
 			jump_header = TRUE;
3493982
 			return;
3493982
@@ -93,71 +92,42 @@
3493982
 	item[4] = line;
3493982
 
3493982
 	/* Time */
3493982
-	for(n=13; n < linesize; ++n)
3493982
-		if(line[n] == ' ')
3493982
-			break;
3493982
-	line[n] = '\0';
3493982
+	line[19] = '\0';
3493982
 	item[3] = line + 11;
3493982
-	a = ++n;
3493982
 	
3493982
 	/* Permissions */
3493982
-	for(; n < linesize; n++)
3493982
-		if(line[n] == ' ')
3493982
-			break;
3493982
-	line[n] = '\0';
3493982
-	if ((line+a)[0] == 'D')
3493982
-		dir = TRUE;
3493982
-	item[2] = line + a;
3493982
+	line[25] = '\0';
3493982
+	item[2] = line + 20;
3493982
 	
3493982
 	/* Size */
3493982
-	for(++n; n < linesize; ++n)
3493982
-		if(line[n] >= '0' && line[n] <= '9')
3493982
+	for(a=26; a < linesize; ++a)
3493982
+		if(line[a] >= '0' && line[a] <= '9')
3493982
 			break;
3493982
-	a = n;
3493982
 
3493982
-	for(; n < linesize; ++n)
3493982
-		if(line[n] == ' ')
3493982
-			break;
3493982
-
3493982
-	line[n] = '\0';
3493982
+	line[38] = '\0';
3493982
 	item[0] = line + a;
3493982
 	archive->dummy_size += g_ascii_strtoull(item[0],NULL,0);
3493982
 
3493982
 	/* Compressed */
3493982
-	for(++n; n < linesize; ++n)
3493982
-		if(line[n] >= '0' && line[n] <= '9')
3493982
-			break;
3493982
-	a = n;
3493982
-
3493982
-	for(; n < linesize; ++n)
3493982
-		if(line[n] == ' ')
3493982
-			break;
3493982
-
3493982
-	line[n] = '\0';
3493982
-
3493982
-	if (line[50] != ' ')
3493982
+	/* Is this item solid? */
3493982
+	if (line[50] == ' ')
3493982
 	{
3493982
-		n+=2;
3493982
-		item[1] = line + a;
3493982
 		line[linesize-1] = '\0';
3493982
-		filename = g_strdup(line + n);
3493982
+		filename = g_strdup(line + 53);
3493982
 	}
3493982
-	/* Is this a solid archive? */
3493982
+
3493982
 	else
3493982
 	{
3493982
-		item[1] = "0";
3493982
-		line[n-1] = '\0';
3493982
+		for(a=39; a < linesize; ++a)
3493982
+			if(line[a] >= '0' && line[a] <= '9')
3493982
+				break;
3493982
+
3493982
+		line[51] = '\0';
3493982
+		item[1] = line + a;
3493982
+		line[linesize-1] = '\0';
3493982
 		filename = g_strdup(line + 53);
3493982
 	}
3493982
 
3493982
-	/* Work around for 7za which doesn't
3493982
-	* output / with directories */
3493982
-	if (dir)
3493982
-	{
3493982
-		gchar *filename_with_slash = g_strconcat (filename,"/",NULL);
3493982
-		g_free (filename);
3493982
-		filename = filename_with_slash;
3493982
-	}
3493982
 	entry = xa_set_archive_entries_for_each_row (archive,filename,item);
3493982
 	g_free(filename);
3493982
 }