Annotation of /trunk/xarchiver/patches/xarchiver-0.5.2-rpm2cpio-support.patch
Parent Directory | Revision Log
Revision 1581 -
(hide annotations)
(download)
Mon Nov 28 20:22:05 2011 UTC (12 years, 10 months ago) by niro
File size: 3211 byte(s)
Mon Nov 28 20:22:05 2011 UTC (12 years, 10 months ago) by niro
File size: 3211 byte(s)
-adding xarchiver patches
1 | niro | 1581 | diff -up ./src/rpm.c.rpm2cpio ./src/rpm.c |
2 | --- ./src/rpm.c.rpm2cpio 2008-10-24 13:43:04.000000000 +0200 | ||
3 | +++ ./src/rpm.c 2011-03-27 03:14:20.225742237 +0200 | ||
4 | @@ -23,11 +23,8 @@ extern gboolean batch_mode; | ||
5 | |||
6 | void xa_open_rpm (XArchive *archive) | ||
7 | { | ||
8 | - unsigned char bytes[8]; | ||
9 | unsigned short int i; | ||
10 | - int dl,il,sigsize,offset,response; | ||
11 | - gchar *ibs,*executable; | ||
12 | - gchar *gzip_tmp = NULL; | ||
13 | + int response; | ||
14 | GSList *list = NULL; | ||
15 | FILE *stream; | ||
16 | gboolean result; | ||
17 | @@ -56,66 +53,14 @@ void xa_open_rpm (XArchive *archive) | ||
18 | archive->column_types[i] = types[i]; | ||
19 | |||
20 | xa_create_liststore (archive,names); | ||
21 | - if (fseek ( stream, 104 , SEEK_CUR ) ) | ||
22 | - { | ||
23 | - fclose (stream); | ||
24 | - response = xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't fseek to position 104:"),g_strerror(errno)); | ||
25 | - return; | ||
26 | - } | ||
27 | - if ( fread ( bytes, 1, 8, stream ) == 0 ) | ||
28 | - { | ||
29 | - fclose ( stream ); | ||
30 | - response = xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't read data from file:"),g_strerror(errno)); | ||
31 | - return; | ||
32 | - } | ||
33 | - il = 256 * ( 256 * ( 256 * bytes[0] + bytes[1]) + bytes[2] ) + bytes[3]; | ||
34 | - dl = 256 * ( 256 * ( 256 * bytes[4] + bytes[5]) + bytes[6] ) + bytes[7]; | ||
35 | - sigsize = 8 + 16 * il + dl; | ||
36 | - offset = 104 + sigsize + ( 8 - ( sigsize % 8 ) ) % 8 + 8; | ||
37 | - if (fseek ( stream, offset , SEEK_SET ) ) | ||
38 | - { | ||
39 | - fclose (stream); | ||
40 | - response = xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't fseek in file:"),g_strerror(errno)); | ||
41 | - return; | ||
42 | - } | ||
43 | - if ( fread ( bytes, 1, 8, stream ) == 0 ) | ||
44 | - { | ||
45 | - fclose ( stream ); | ||
46 | - response = xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't read data from file:"),g_strerror(errno)); | ||
47 | - return; | ||
48 | - } | ||
49 | - il = 256 * ( 256 * ( 256 * bytes[0] + bytes[1]) + bytes[2] ) + bytes[3]; | ||
50 | - dl = 256 * ( 256 * ( 256 * bytes[4] + bytes[5]) + bytes[6] ) + bytes[7]; | ||
51 | - sigsize = 8 + 16 * il + dl; | ||
52 | - offset = offset + sigsize; | ||
53 | - fclose (stream); | ||
54 | |||
55 | /* Create a unique temp dir in /tmp */ | ||
56 | result = xa_create_temp_directory (archive); | ||
57 | if (!result) | ||
58 | return; | ||
59 | |||
60 | - gzip_tmp = g_strconcat (archive->tmp,"/file.gz_bz",NULL); | ||
61 | - ibs = g_strdup_printf ( "%u" , offset ); | ||
62 | - | ||
63 | /* Now I run dd to have the bzip2 / gzip compressed cpio archive in /tmp */ | ||
64 | - gchar *command = g_strconcat ( "dd if=",archive->escaped_path," ibs=",ibs," skip=1 of=",gzip_tmp,NULL); | ||
65 | - g_free (ibs); | ||
66 | - list = g_slist_append(list,command); | ||
67 | - batch_mode = TRUE; | ||
68 | - result = xa_run_command (archive,list); | ||
69 | - if (result == FALSE) | ||
70 | - { | ||
71 | - g_free (gzip_tmp); | ||
72 | - return; | ||
73 | - } | ||
74 | - if (xa_detect_archive_type (gzip_tmp) == XARCHIVETYPE_GZIP) | ||
75 | - executable = "gzip -dc "; | ||
76 | - else | ||
77 | - executable = "bzip2 -dc "; | ||
78 | - | ||
79 | - command = g_strconcat("sh -c \"",executable,gzip_tmp," > ",archive->tmp,"/file.cpio\"",NULL); | ||
80 | - g_free(gzip_tmp); | ||
81 | + gchar *command = g_strconcat ( "sh -c \"rpm2cpio ",archive->escaped_path," > ",archive->tmp, "/file.cpio\"",NULL); | ||
82 | list = NULL; | ||
83 | list = g_slist_append(list,command); | ||
84 | result = xa_run_command (archive,list); |