Merge "extract-kernel: Fix indexing"

am: 7ca2c1539f

Change-Id: I2e5b85b177f7c941ebb0d4fada4be266d6a2ddae
This commit is contained in:
Yifan Hong 2019-09-17 10:12:24 -07:00 committed by android-build-merger
commit 710d6b1773
1 changed files with 20 additions and 14 deletions

View File

@ -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