def get_files(data): files = {} fstruct = GreedyRange( Struct( "dsize" / Int32ul, "nsize" / Int32ul, "name" / Bytes(256), "fdata" / Bytes(this.dsize), ) ) fdata = fstruct.parse(data) for file in fdata: if file["nsize"] > 1 and ord(file["name"][1]) == 0: filename = CString("utf16").parse(file["name"]) else: filename = CString("ascii").parse(file["name"]) filename = filename.encode("ascii", "ignore") files[filename] = file["fdata"] return files