X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=disassembler%2Fbrcm80211fwconv;h=092c043cfac4e3f06bc985dc282f6eac9df93b0f;hb=28703f82744ed3eb122ae33474e9c53f4fe528d3;hp=fe5f220fc5c3db2f3b5f2dcd51756da678189931;hpb=d8c8568c8d68c087d23b33dc6bfb9238214ecc00;p=b43-tools.git diff --git a/disassembler/brcm80211fwconv b/disassembler/brcm80211fwconv index fe5f220..092c043 100755 --- a/disassembler/brcm80211fwconv +++ b/disassembler/brcm80211fwconv @@ -56,7 +56,7 @@ def indexToName(index): except KeyError: return "Unknown" -def parseHeader(hdr_data): +def parseHeader(hdr_data, sortByOffset): sections = [] for i in range(0, len(hdr_data), 3 * 4): offset = ord(hdr_data[i + 0]) | (ord(hdr_data[i + 1]) << 8) |\ @@ -67,7 +67,10 @@ def parseHeader(hdr_data): (ord(hdr_data[i + 10]) << 16) | (ord(hdr_data[i + 11]) << 24) sections.append( (offset, length, index) ) - sections.sort(key = lambda x: x[2]) # Sort by index + if sortByOffset: + sections.sort(key = lambda x: x[0]) # Sort by offset + else: + sections.sort(key = lambda x: x[2]) # Sort by index return sections def generateHeaderData(sections): @@ -95,7 +98,7 @@ def getSectionByIndex(sections, searchIndex): return section return None -def parseHeaderFile(hdr_filepath): +def parseHeaderFile(hdr_filepath, sortByOffset=False): try: hdr_data = file(hdr_filepath, "rb").read() except (IOError), e: @@ -104,7 +107,7 @@ def parseHeaderFile(hdr_filepath): if len(hdr_data) % (3 * 4) != 0: print "Invalid header file format" return None - return parseHeader(hdr_data) + return parseHeader(hdr_data, sortByOffset) def dumpInfo(hdr_filepath): sections = parseHeaderFile(hdr_filepath) @@ -142,7 +145,7 @@ def extractSection(hdr_filepath, bin_filepath, extractIndex, outfilePath): return 0 def mergeSection(hdr_filepath, bin_filepath, mergeIndex, mergefilePath): - sections = parseHeaderFile(hdr_filepath) + sections = parseHeaderFile(hdr_filepath, sortByOffset=True) if not sections: return 1 try: @@ -158,9 +161,14 @@ def mergeSection(hdr_filepath, bin_filepath, mergeIndex, mergefilePath): newBin = [] newSections = [] newOffset = 0 + foundIt = False for section in sections: (offset, length, index) = section if index == mergeIndex: + if foundIt: + print "Confused. Multiple sections with index %d?" % index + return 1 + foundIt = True # We overwrite this section newBin.append(merge_data) newSections.append( (newOffset, len(merge_data), index) ) @@ -173,6 +181,9 @@ def mergeSection(hdr_filepath, bin_filepath, mergeIndex, mergefilePath): return 1 newSections.append( (newOffset, length, index) ) newOffset += length + if not foundIt: + print "Did not find section with index %d" % mergeIndex + return 1 newBin = "".join(newBin) newHdr = generateHeaderData(newSections) try: