# HG changeset patch # User Thinker K.F. Li # Date 1309346829 -28800 # Node ID 9504ad530dbf723b7332ad4cf0503d82e9a254d0 # Parent fa44a8acba6af3336ab91d89d3bccd2c3ba034a2 Add DEXFile.make_checksum() diff -r fa44a8acba6a -r 9504ad530dbf paraspace/dexfile.py --- a/paraspace/dexfile.py Tue Jun 28 14:42:46 2011 +0800 +++ b/paraspace/dexfile.py Wed Jun 29 19:27:09 2011 +0800 @@ -1635,6 +1635,16 @@ for map_item in self.maps.items.items] children = map_items return children + + def make_checksum(self): + from paraspace.tools import adler32 + raw = self.to_str() + sz = self.header.fileSize + nosum = _DEX_header.magic.sizeof(self.header.magic) + \ + _DEX_header.checksum.sizeof(self.header.checksum) + checksum = adler32(0, raw, nosum, sz - nosum) + self.header.checksum = checksum + pass pass diff -r fa44a8acba6a -r 9504ad530dbf paraspace/tests/dexfile_test.py --- a/paraspace/tests/dexfile_test.py Tue Jun 28 14:42:46 2011 +0800 +++ b/paraspace/tests/dexfile_test.py Wed Jun 29 19:27:09 2011 +0800 @@ -357,3 +357,21 @@ assert dex_raw == file_raw pass + +def header_checksum_test(): + from paraspace.dex_deptracker import collect_all_dep_decls + + _install_dexfile_4_deptracker() + + all_dep_decls = collect_all_dep_decls() + + srcdir = os.path.dirname(__file__) + srcroot = os.path.join(srcdir, '..', '..') + testdatapath = os.path.join(srcroot, 'data', 'testdata1.dex') + dex = dexfile.DEXFile.open(testdatapath) + + saved_checksum = dex.header.checksum + dex.make_checksum() + # assert dex.header.checksum == saved_checksum + assert dex.header.checksum == 0xc5efe529 + pass