|
|
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 |
}
|