forked from openkylin/platform_build
Merge "extract-kernel: Fix indexing"
am: 7ca2c1539f
Change-Id: I2e5b85b177f7c941ebb0d4fada4be266d6a2ddae
This commit is contained in:
commit
710d6b1773
|
@ -100,19 +100,25 @@ def dump_configs(input_bytes):
|
||||||
return o
|
return o
|
||||||
|
|
||||||
|
|
||||||
def try_decompress(cmd, search_bytes, input_bytes):
|
def try_decompress_bytes(cmd, input_bytes):
|
||||||
idx = input_bytes.find(search_bytes)
|
|
||||||
if idx < 0:
|
|
||||||
return None
|
|
||||||
|
|
||||||
idx = 0
|
|
||||||
sp = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
|
sp = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE)
|
stderr=subprocess.PIPE)
|
||||||
o, _ = sp.communicate(input=input_bytes[idx:])
|
o, _ = sp.communicate(input=input_bytes)
|
||||||
# ignore errors
|
# ignore errors
|
||||||
return o
|
return o
|
||||||
|
|
||||||
|
|
||||||
|
def try_decompress(cmd, search_bytes, input_bytes):
|
||||||
|
idx = 0
|
||||||
|
while True:
|
||||||
|
idx = input_bytes.find(search_bytes, idx)
|
||||||
|
if idx < 0:
|
||||||
|
raise StopIteration()
|
||||||
|
|
||||||
|
yield try_decompress_bytes(cmd, input_bytes[idx:])
|
||||||
|
idx += 1
|
||||||
|
|
||||||
|
|
||||||
def decompress_dump(func, input_bytes):
|
def decompress_dump(func, input_bytes):
|
||||||
"""
|
"""
|
||||||
Run func(input_bytes) first; and if that fails (returns value evaluates to
|
Run func(input_bytes) first; and if that fails (returns value evaluates to
|
||||||
|
@ -122,15 +128,15 @@ def decompress_dump(func, input_bytes):
|
||||||
if o:
|
if o:
|
||||||
return o
|
return o
|
||||||
for cmd, search_bytes in COMPRESSION_ALGO:
|
for cmd, search_bytes in COMPRESSION_ALGO:
|
||||||
decompressed = try_decompress(cmd, search_bytes, input_bytes)
|
for decompressed in try_decompress(cmd, search_bytes, input_bytes):
|
||||||
if decompressed:
|
if decompressed:
|
||||||
o = func(decompressed)
|
o = decompress_dump(func, decompressed)
|
||||||
if o:
|
if o:
|
||||||
return o
|
return o
|
||||||
# Force decompress the whole file even if header doesn't match
|
# Force decompress the whole file even if header doesn't match
|
||||||
decompressed = try_decompress(cmd, b"", input_bytes)
|
decompressed = try_decompress_bytes(cmd, input_bytes)
|
||||||
if decompressed:
|
if decompressed:
|
||||||
o = func(decompressed)
|
o = decompress_dump(func, decompressed)
|
||||||
if o:
|
if o:
|
||||||
return o
|
return o
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue