Loading tools/extract_kernel.py +20 −14 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading
tools/extract_kernel.py +20 −14 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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