Source File
gunzip.go
Belonging Package
compress/gzip
package gzip
import (
)
const (
gzipID1 = 0x1f
gzipID2 = 0x8b
gzipDeflate = 8
flagText = 1 << 0
flagHdrCrc = 1 << 1
flagExtra = 1 << 2
flagName = 1 << 3
flagComment = 1 << 4
)
func ( *Reader) ( io.Reader) error {
* = Reader{
decompressor: .decompressor,
multistream: true,
}
if , := .(flate.Reader); {
.r =
} else {
.r = bufio.NewReader()
}
.Header, .err = .readHeader()
return .err
}
func ( *Reader) ( bool) {
.multistream =
}
.OS = .buf[9]
.digest = crc32.ChecksumIEEE(.buf[:10])
if &flagExtra != 0 {
if _, = io.ReadFull(.r, .buf[:2]); != nil {
return , noEOF()
}
.digest = crc32.Update(.digest, crc32.IEEETable, .buf[:2])
:= make([]byte, le.Uint16(.buf[:2]))
if _, = io.ReadFull(.r, ); != nil {
return , noEOF()
}
.digest = crc32.Update(.digest, crc32.IEEETable, )
.Extra =
}
var string
if &flagName != 0 {
if , = .readString(); != nil {
return ,
}
.Name =
}
if &flagComment != 0 {
if , = .readString(); != nil {
return ,
}
.Comment =
}
if &flagHdrCrc != 0 {
if _, = io.ReadFull(.r, .buf[:2]); != nil {
return , noEOF()
}
:= le.Uint16(.buf[:2])
if != uint16(.digest) {
return , ErrHeader
}
}
.digest = 0
if .decompressor == nil {
.decompressor = flate.NewReader(.r)
} else {
.decompressor.(flate.Resetter).Reset(.r, nil)
}
return , nil
}
return , .err
}
if !.multistream {
return , io.EOF
}
.err = nil // Remove io.EOF
if _, .err = .readHeader(); .err != nil {
return , .err
}
if > 0 {
return , nil
}
return .()
}
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |