Magellan Linux

Annotation of /trunk/xarchiver/patches/xarchiver-0.5.2-fix-7zip.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1581 - (hide annotations) (download)
Mon Nov 28 20:22:05 2011 UTC (12 years, 6 months ago) by niro
File size: 2293 byte(s)
-adding xarchiver patches
1 niro 1581 diff -Nur xarchiver-0.5.2.orig/src/7zip.c xarchiver-0.5.2/src/7zip.c
2     --- xarchiver-0.5.2.orig/src/7zip.c 2008-10-25 00:41:17.000000000 +1300
3     +++ xarchiver-0.5.2/src/7zip.c 2010-12-15 11:24:26.000000000 +1300
4     @@ -64,15 +64,14 @@
5     XEntry *entry;
6     gchar *filename;
7     gpointer item[5];
8     - gint linesize = 0,n = 0,a = 0;
9     - gboolean dir = FALSE;
10     + gint linesize = 0,a = 0;
11    
12     if (last_line)
13     return;
14    
15     if (jump_header == FALSE)
16     {
17     - if (line[0] == '-')
18     + if ((line[0] == '-') && (line[3] != NULL))
19     {
20     jump_header = TRUE;
21     return;
22     @@ -93,71 +92,42 @@
23     item[4] = line;
24    
25     /* Time */
26     - for(n=13; n < linesize; ++n)
27     - if(line[n] == ' ')
28     - break;
29     - line[n] = '\0';
30     + line[19] = '\0';
31     item[3] = line + 11;
32     - a = ++n;
33    
34     /* Permissions */
35     - for(; n < linesize; n++)
36     - if(line[n] == ' ')
37     - break;
38     - line[n] = '\0';
39     - if ((line+a)[0] == 'D')
40     - dir = TRUE;
41     - item[2] = line + a;
42     + line[25] = '\0';
43     + item[2] = line + 20;
44    
45     /* Size */
46     - for(++n; n < linesize; ++n)
47     - if(line[n] >= '0' && line[n] <= '9')
48     + for(a=26; a < linesize; ++a)
49     + if(line[a] >= '0' && line[a] <= '9')
50     break;
51     - a = n;
52    
53     - for(; n < linesize; ++n)
54     - if(line[n] == ' ')
55     - break;
56     -
57     - line[n] = '\0';
58     + line[38] = '\0';
59     item[0] = line + a;
60     archive->dummy_size += g_ascii_strtoull(item[0],NULL,0);
61    
62     /* Compressed */
63     - for(++n; n < linesize; ++n)
64     - if(line[n] >= '0' && line[n] <= '9')
65     - break;
66     - a = n;
67     -
68     - for(; n < linesize; ++n)
69     - if(line[n] == ' ')
70     - break;
71     -
72     - line[n] = '\0';
73     -
74     - if (line[50] != ' ')
75     + /* Is this item solid? */
76     + if (line[50] == ' ')
77     {
78     - n+=2;
79     - item[1] = line + a;
80     line[linesize-1] = '\0';
81     - filename = g_strdup(line + n);
82     + filename = g_strdup(line + 53);
83     }
84     - /* Is this a solid archive? */
85     +
86     else
87     {
88     - item[1] = "0";
89     - line[n-1] = '\0';
90     + for(a=39; a < linesize; ++a)
91     + if(line[a] >= '0' && line[a] <= '9')
92     + break;
93     +
94     + line[51] = '\0';
95     + item[1] = line + a;
96     + line[linesize-1] = '\0';
97     filename = g_strdup(line + 53);
98     }
99    
100     - /* Work around for 7za which doesn't
101     - * output / with directories */
102     - if (dir)
103     - {
104     - gchar *filename_with_slash = g_strconcat (filename,"/",NULL);
105     - g_free (filename);
106     - filename = filename_with_slash;
107     - }
108     entry = xa_set_archive_entries_for_each_row (archive,filename,item);
109     g_free(filename);
110     }