+ except (IOError), e:
+ print "Failed to write output file: %s" % e.strerror
+ return 1
+ return 0
+
+def mergeSection(hdr_filepath, bin_filepath, mergeIndex, mergefilePath):
+ sections = parseHeaderFile(hdr_filepath)
+ if not sections:
+ return 1
+ try:
+ bin_data = file(bin_filepath, "rb").read()
+ except (IOError), e:
+ print "Failed to read bin file: %s" % e.strerror
+ return 1
+ try:
+ merge_data = file(mergefilePath, "rb").read()
+ except (IOError), e:
+ print "Failed to open merge output file: %s" % e.strerror
+ return 1
+ newBin = []
+ newSections = []
+ newOffset = 0
+ for section in sections:
+ (offset, length, index) = section
+ if index == mergeIndex:
+ # We overwrite this section
+ newBin.append(merge_data)
+ newSections.append( (newOffset, len(merge_data), index) )
+ newOffset += len(merge_data)
+ else:
+ try:
+ newBin.append(bin_data[offset : offset + length])
+ except IndexError:
+ print "Failed to read input data"
+ return 1
+ newSections.append( (newOffset, length, index) )
+ newOffset += length
+ newBin = "".join(newBin)
+ newHdr = generateHeaderData(newSections)
+ try:
+ file(bin_filepath, "wb").write(newBin)
+ file(hdr_filepath, "wb").write(newHdr)
+ except (IOError), e:
+ print "Failed to write bin or header file: %s" % e.strerror
+ return 1