MCPcopy
hub / github.com/klauspost/compress / Reset

Method Reset

zlib/reader.go:134–187  ·  view source on GitHub ↗
(r io.Reader, dict []byte)

Source from the content-addressed store, hash-verified

132}
133
134func (z *reader) Reset(r io.Reader, dict []byte) error {
135 *z = reader{decompressor: z.decompressor, digest: z.digest}
136 if fr, ok := r.(flate.Reader); ok {
137 z.r = fr
138 } else {
139 z.r = bufio.NewReader(r)
140 }
141
142 // Read the header (RFC 1950 section 2.2.).
143 _, z.err = io.ReadFull(z.r, z.scratch[0:2])
144 if z.err != nil {
145 if z.err == io.EOF {
146 z.err = io.ErrUnexpectedEOF
147 }
148 return z.err
149 }
150 h := binary.BigEndian.Uint16(z.scratch[:2])
151 if (z.scratch[0]&0x0f != zlibDeflate) || (z.scratch[0]>>4 > zlibMaxWindow) || (h%31 != 0) {
152 z.err = ErrHeader
153 return z.err
154 }
155 haveDict := z.scratch[1]&0x20 != 0
156 if haveDict {
157 _, z.err = io.ReadFull(z.r, z.scratch[0:4])
158 if z.err != nil {
159 if z.err == io.EOF {
160 z.err = io.ErrUnexpectedEOF
161 }
162 return z.err
163 }
164 checksum := binary.BigEndian.Uint32(z.scratch[:4])
165 if checksum != adler32.Checksum(dict) {
166 z.err = ErrDictionary
167 return z.err
168 }
169 }
170
171 if z.decompressor == nil {
172 if haveDict {
173 z.decompressor = flate.NewReaderDict(z.r, dict)
174 } else {
175 z.decompressor = flate.NewReader(z.r)
176 }
177 } else {
178 z.decompressor.(flate.Resetter).Reset(z.r, dict)
179 }
180
181 if z.digest != nil {
182 z.digest.Reset()
183 } else {
184 z.digest = adler32.New()
185 }
186 return nil
187}

Callers

nothing calls this directly

Calls 4

NewReaderDictFunction · 0.92
NewReaderFunction · 0.92
ResetMethod · 0.65
Uint32Method · 0.45

Tested by

no test coverage detected