MCPcopy Create free account
hub / github.com/babel/minify / gzip_main

Function gzip_main

scripts/pyflate.py:496–703  ·  view source on GitHub ↗
(field)

Source from the content-addressed store, hash-verified

494 return c + string + colors.reset
495# Sixteen bits of magic have been removed by the time we start decoding
496def 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

Callers 1

_mainFunction · 0.85

Calls 15

readbitsMethod · 0.95
BitfieldClass · 0.85
HuffmanTableClass · 0.85
code_length_ordersFunction · 0.85
OrderedHuffmanTableClass · 0.85
extra_length_bitsFunction · 0.85
length_baseFunction · 0.85
distance_baseFunction · 0.85
extra_distance_bitsFunction · 0.85
sizeToColorFunction · 0.85
dropbytesMethod · 0.80
tellMethod · 0.80

Tested by

no test coverage detected