#!/usr/bin/env python import sys import os import time import zlib import struct from collections import namedtuple CFHEADER_s = struct.Struct("<4sLLLLLBBHHHHH") CFHEADER = namedtuple("CFHEADER", "sig res0 size res1 firstfile res2 " "verminor vermajor folders files flags setid icabinet") CFHEADER_sig = "MSCF" CFFOLDER_s = struct.Struct("> 1)) def checksum(data): data_full_words = data[:len(data) & ~3] data_last_word = data[len(data_full_words):] data_last_word = "".join(reversed(data_last_word)) data_last_word += "\0" * (3 & -len(data)) # pad to multiple of 4 bytes data = data_full_words + data_last_word toret = 0 for offset in xrange(0, len(data), 4): toret ^= struct.unpack_from(" 0: cabname = args.pop(0) filename = args.pop(0) with open(filename, "rb") as f: filedata = f.read() files.append((cabname, filedata, os.stat(filename).st_mtime)) cabdata = build_cab(files) with open(outfile, "wb") as f: f.write(cabdata) if __name__ == '__main__': main()