(field)
| 494 | return c + string + colors.reset |
| 495 | # Sixteen bits of magic have been removed by the time we start decoding |
| 496 | def gzip_main(field): |
| 497 | b = Bitfield(field) |
| 498 | method = b.readbits(8) |
| 499 | if method != 8: |
| 500 | raise "Unknown (not type eight DEFLATE) compression method" |
| 501 | |
| 502 | # Use flags, drop modification time, extra flags and OS creator type. |
| 503 | flags = b.readbits(8) |
| 504 | #print 'flags', hex(flags) |
| 505 | mtime = b.readbits(32) |
| 506 | #print 'mtime', hex(mtime) |
| 507 | extra_flags = b.readbits(8) |
| 508 | #print 'extra_flags', hex(extra_flags) |
| 509 | os_type = b.readbits(8) |
| 510 | #print 'os_type', hex(os_type) |
| 511 | |
| 512 | if flags & 0x04: # structured GZ_FEXTRA miscellaneous data |
| 513 | xlen = b.readbits(16) |
| 514 | b.dropbytes(xlen) |
| 515 | while flags & 0x08: # original GZ_FNAME filename |
| 516 | if not b.readbits(8): |
| 517 | break |
| 518 | while flags & 0x10: # human readable GZ_FCOMMENT |
| 519 | if not b.readbits(8): |
| 520 | break |
| 521 | if flags & 0x02: # header-only GZ_FHCRC checksum |
| 522 | b.readbits(16) |
| 523 | |
| 524 | #print "gzip header skip", b.tell() |
| 525 | out = [] |
| 526 | outgroups = [] |
| 527 | |
| 528 | sizehisto = defaultdict(int) |
| 529 | sizehistodata = defaultdict(int) |
| 530 | |
| 531 | #print 'header 0 count 0 bits', b.tellbits() |
| 532 | |
| 533 | while True: |
| 534 | header_start = b.tell() |
| 535 | bheader_start = b.tellbits() |
| 536 | #print 'new block at', b.tell() |
| 537 | lastbit = b.readbits(1) |
| 538 | #print "last bit", hex(lastbit) |
| 539 | blocktype = b.readbits(2) |
| 540 | #print "deflate-blocktype", blocktype, 'beginning at', header_start |
| 541 | |
| 542 | #print 'raw block data at', b.tell() |
| 543 | if blocktype == 0: |
| 544 | b.align() |
| 545 | length = b.readbits(16) |
| 546 | if length & b.readbits(16): |
| 547 | raise "stored block lengths do not match each other" |
| 548 | #print "stored block of length", length |
| 549 | #print 'raw data at', b.tell(), 'bits', b.tellbits() - bheader_start |
| 550 | #print 'header 0 count 0 bits', b.tellbits() - bheader_start |
| 551 | for i in range(length): |
| 552 | out.append(chr(b.readbits(8))) |
| 553 | #print 'linear', b.tell()[0], 'count', length, 'bits', b.tellbits() - bheader_start |
no test coverage detected