summaryrefslogtreecommitdiff
path: root/libre/xarchiver-libre/xarchiver-0.5.2-rpm2cpio.patch
blob: d962a44af77da96a678031d36b154b208cb90b0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
diff -up ./src/rpm.c.rpm2cpio ./src/rpm.c
--- ./src/rpm.c.rpm2cpio	2008-10-24 13:43:04.000000000 +0200
+++ ./src/rpm.c	2011-03-27 03:14:20.225742237 +0200
@@ -23,11 +23,8 @@ extern gboolean batch_mode;
 
 void xa_open_rpm (XArchive *archive)
 {
-	unsigned char bytes[8];
 	unsigned short int i;
-    int dl,il,sigsize,offset,response;
-    gchar *ibs,*executable;
-    gchar *gzip_tmp = NULL;
+    int response;
 	GSList *list = NULL;
 	FILE *stream;
 	gboolean result;
@@ -56,66 +53,14 @@ void xa_open_rpm (XArchive *archive)
 		archive->column_types[i] = types[i];
 
 	xa_create_liststore (archive,names);
-    if (fseek ( stream, 104 , SEEK_CUR ) )
-    {
-        fclose (stream);
-        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));
-        return;
-    }
-    if ( fread ( bytes, 1, 8, stream ) == 0 )
-	{
-		fclose ( stream );
-		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));
-		return;
-    }
-    il = 256 * ( 256 * ( 256 * bytes[0] + bytes[1]) + bytes[2] ) + bytes[3];
-    dl = 256 * ( 256 * ( 256 * bytes[4] + bytes[5]) + bytes[6] ) + bytes[7];
-    sigsize = 8 + 16 * il + dl;
-    offset = 104 + sigsize + ( 8 - ( sigsize % 8 ) ) % 8 + 8;
-    if (fseek ( stream, offset  , SEEK_SET ) )
-    {
-        fclose (stream);
-        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));
-        return;
-    }
-    if ( fread ( bytes, 1, 8, stream ) == 0 )
-	{
-		fclose ( stream );
-		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));
-		return;
-    }
-    il = 256 * ( 256 * ( 256 * bytes[0] + bytes[1]) + bytes[2] ) + bytes[3];
-    dl = 256 * ( 256 * ( 256 * bytes[4] + bytes[5]) + bytes[6] ) + bytes[7];
-	sigsize = 8 + 16 * il + dl;
-	offset = offset + sigsize;
-	fclose (stream);
 
 	/* Create a unique temp dir in /tmp */
 	result = xa_create_temp_directory (archive);
 	if (!result)
 		return;
 
-	gzip_tmp = g_strconcat (archive->tmp,"/file.gz_bz",NULL);
-	ibs = g_strdup_printf ( "%u" , offset );
-
 	/* Now I run dd to have the bzip2 / gzip compressed cpio archive in /tmp */
-	gchar *command = g_strconcat ( "dd if=",archive->escaped_path," ibs=",ibs," skip=1 of=",gzip_tmp,NULL);
-	g_free (ibs);
-	list = g_slist_append(list,command);
-	batch_mode = TRUE;
-	result = xa_run_command (archive,list);
-	if (result == FALSE)
-	{	
-		g_free (gzip_tmp);
-		return;
-	}
-	if (xa_detect_archive_type (gzip_tmp) == XARCHIVETYPE_GZIP)
-		executable = "gzip -dc ";
-	else
-		executable = "bzip2 -dc ";
-
-	command = g_strconcat("sh -c \"",executable,gzip_tmp," > ",archive->tmp,"/file.cpio\"",NULL);
-	g_free(gzip_tmp);
+	gchar *command = g_strconcat ( "sh -c \"rpm2cpio ",archive->escaped_path," > ",archive->tmp, "/file.cpio\"",NULL);
 	list = NULL;
 	list = g_slist_append(list,command);
 	result = xa_run_command (archive,list);