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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Thu, 29 Mar 2012 12:44:26 +0200
Subject: [PATCH] opkg.py, arfile.py: report which file has wrong format and
use the same test
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
arfile.py | 16 +++++++++-------
opkg.py | 11 ++---------
2 files changed, 11 insertions(+), 16 deletions(-)
diff --git a/arfile.py b/arfile.py
index 8291a2d..7a695c6 100644
--- a/arfile.py
+++ b/arfile.py
@@ -40,13 +40,13 @@ class FileSection:
class ArFile:
- def __init__(self, f):
+ def __init__(self, f, fn):
self.f = f
self.directory = {}
self.directoryRead = False
signature = self.f.readline()
- assert signature == "!<arch>\n"
+ assert signature == "!<arch>\n" or signature == b"!<arch>\n", "Old ipk format (non-deb) is unsupported, file: %s, magic: %s, expected %s" % (fn, signature, "!<arch>")
self.directoryOffset = self.f.tell()
def open(self, fname):
@@ -100,9 +100,10 @@ class ArFile:
if __name__ == "__main__":
if None:
- f = open(sys.argv[1], "rb")
+ fn = sys.argv[1]
+ f = open(fn, "rb")
- ar = ArFile(f)
+ ar = ArFile(f, fn)
tarStream = ar.open("data.tar.gz")
print "--------"
tarStream = ar.open("data.tar.gz")
@@ -120,10 +121,11 @@ if __name__ == "__main__":
for f in os.listdir(dir):
if not f.endswith(".opk") and not f.endswith(".ipk"): continue
- print "=== %s ===" % f
- f = open(dir + "/" + f, "rb")
+ print("=== %s ===" % f)
+ fn = "%s/%s" % (dir, f)
+ f = open(fn, "rb")
- ar = ArFile(f)
+ ar = ArFile(f, fn)
tarStream = ar.open("control.tar.gz")
tarf = tarfile.open("control.tar.gz", "r", tarStream)
#tarf.list()
diff --git a/opkg.py b/opkg.py
index 56e774d..31b847c 100644
--- a/opkg.py
+++ b/opkg.py
@@ -138,7 +138,6 @@ class Package:
#self.size = None
self.installed_size = None
self.filename = None
- self.isdeb = 0
self.file_ext_opk = "ipk"
self.homepage = None
self.oe = None
@@ -150,18 +149,12 @@ class Package:
if fn:
# see if it is deb format
f = open(fn, "rb")
- magic = f.read(4)
- f.seek(0, 0)
- if (magic == "!<ar"):
- self.isdeb = 1
-
self.filename = os.path.basename(fn)
- assert self.isdeb == 1, "Old ipk format (non-deb) is unsupported"
## sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,))
- ar = arfile.ArFile(f)
+ ar = arfile.ArFile(f, fn)
tarStream = ar.open("control.tar.gz")
tarf = tarfile.open("control.tar.gz", "r", tarStream)
@@ -330,7 +323,7 @@ class Package:
if not self.fn:
return []
f = open(self.fn, "rb")
- ar = arfile.ArFile(f)
+ ar = arfile.ArFile(f, self.fn)
tarStream = ar.open("data.tar.gz")
tarf = tarfile.open("data.tar.gz", "r", tarStream)
self.file_list = tarf.getnames()
|