32
32
33
33
import seqbox
34
34
35
- PROGRAM_VER = "0.8.2b "
35
+ PROGRAM_VER = "0.8.3b "
36
36
37
37
38
38
def banner ():
@@ -56,6 +56,8 @@ def get_cmdline():
56
56
help = "test container integrity" )
57
57
parser .add_argument ("-i" , "--info" , action = "store_true" , default = False ,
58
58
help = "show informations/metadata" )
59
+ parser .add_argument ("-c" , "--continue" , action = "store_true" , default = False ,
60
+ help = "continue on errors" , dest = "cont" )
59
61
parser .add_argument ("-o" , "--overwrite" , action = "store_true" , default = False ,
60
62
help = "overwrite existing file" )
61
63
res = parser .parse_args ()
@@ -110,7 +112,7 @@ def main():
110
112
hashcheck = False
111
113
112
114
buffer = fin .read (sbx .blocksize )
113
- if not sbx .decode (buffer ):
115
+ if not sbx .decode (buffer ) and cmdline . cont == False :
114
116
errexit (errlev = 1 , mess = "invalid block at offset 0x0" )
115
117
if sbx .blocknum > 1 :
116
118
errexit (errlev = 1 , mess = "blocks missing or out of order at offset 0x0" )
@@ -178,18 +180,27 @@ def main():
178
180
lastblocknum = 0
179
181
180
182
filesize = 0
183
+ blockmiss = 0
181
184
updatetime = time ()
182
185
while True :
183
186
buffer = fin .read (sbx .blocksize )
184
187
if len (buffer ) < sbx .blocksize :
185
188
break
186
189
if not sbx .decode (buffer ):
187
- errexit (errlev = 1 , mess = "invalid block at offset %s" %
188
- (hex (fin .tell ()- sbx .blocksize )))
190
+ if cmdline .cont :
191
+ blockmiss += 1
192
+ lastblocknum += 1
193
+ else :
194
+ errexit (errlev = 1 , mess = "invalid block at offset %s" %
195
+ (hex (fin .tell ()- sbx .blocksize )))
189
196
else :
190
197
if sbx .blocknum > lastblocknum + 1 :
191
- errexit (errlev = 1 , mess = "block %i out of order or missing"
192
- % (lastblocknum + 1 ))
198
+ if cmdline .cont :
199
+ blockmiss += 1
200
+ lastblocknum += 1
201
+ else :
202
+ errexit (errlev = 1 , mess = "block %i out of order or missing"
203
+ % (lastblocknum + 1 ))
193
204
lastblocknum += 1
194
205
if trimfilesize :
195
206
filesize += sbx .datasize
@@ -211,6 +222,9 @@ def main():
211
222
fout .close ()
212
223
213
224
print ("SBX decoding complete" )
225
+ if blockmiss :
226
+ errexit (1 , "missing blocks: %i" % blockmiss )
227
+
214
228
if hashcheck :
215
229
if hashtype == 0x12 :
216
230
print ("SHA256" , d .hexdigest ())
0 commit comments