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