func()

in flexzlib/reader.go [128:160]


func (z *Reader) Reset(r io.Reader, dict []byte) error {
	z.SwapReader(r)
	_, err := io.ReadFull(z.r, z.scratch[0:2])
	if err != nil {
		return err
	}
	h := uint(z.scratch[0])<<8 | uint(z.scratch[1])
	if (z.scratch[0]&0x0f != zlibDeflate) || (h%31 != 0) {
		return ErrHeader
	}
	haveDict := z.scratch[1]&0x20 != 0
	if haveDict {
		_, err = io.ReadFull(z.r, z.scratch[0:4])
		if err != nil {
			return err
		}
		checksum := uint32(z.scratch[0])<<24 | uint32(z.scratch[1])<<16 | uint32(z.scratch[2])<<8 | uint32(z.scratch[3])
		if checksum != adler32.Checksum(dict) {
			return ErrDictionary
		}
	}
	if z.decompressor == nil {
		if haveDict {
			z.decompressor = flexflate.NewReaderDict(z.r, dict)
		} else {
			z.decompressor = flexflate.NewReader(z.r)
		}
	} else {
		z.decompressor.(flexflate.Resetter).Reset(z.r, dict)
	}
	z.digest = adler32.New()
	return nil
}