diff options
Diffstat (limited to 'libre/xarchiver-libre/xarchiver-0.5.2-fix_7z_support.patch')
-rw-r--r-- | libre/xarchiver-libre/xarchiver-0.5.2-fix_7z_support.patch | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/libre/xarchiver-libre/xarchiver-0.5.2-fix_7z_support.patch b/libre/xarchiver-libre/xarchiver-0.5.2-fix_7z_support.patch new file mode 100644 index 000000000..ad5b51b59 --- /dev/null +++ b/libre/xarchiver-libre/xarchiver-0.5.2-fix_7z_support.patch @@ -0,0 +1,111 @@ +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); + } + |