import binascii
-def CRC32(buf):
- return binascii.crc32(buf).to_bytes(4, byteorder='big')
-
-def LENGTH(buf):
- return len(buf).to_bytes(4, byteorder='big')
-
-def insert_crc(i_filename, o_filename=None):
- f = open(i_filename, 'rb+')
- fdata = f.read()
- fcrc = CRC32(fdata)
- flength = LENGTH(fdata)
- f.close()
-
- # Write the CRC32 in big endian at the end of the file
+def insert_crc(i_filename, fbi_mode=False, o_filename=None):
if o_filename is None:
- f = open(i_filename, 'wb')
- f.write(fdata)
- f.write(fcrc)
- f.close()
+ o_filename = i_filename
+
+ with open(i_filename, 'rb') as f:
+ fdata = f.read()
+ fcrc = binascii.crc32(fdata).to_bytes(4, byteorder="big")
+ flength = len(fdata).to_bytes(4, byteorder="big")
- # Write a new file prepended with the size and CRC
- else:
- f = open(o_filename, 'wb')
- f.write(flength)
- f.write(fcrc)
- f.write(fdata)
- f.close()
+ with open(o_filename, 'wb') as f:
+ if fbi_mode:
+ f.write(flength)
+ f.write(fcrc)
+ f.write(fdata)
+ else:
+ f.write(fdata)
+ f.write(fcrc)