func crcAppend(w WriteAheadLogger, entries [][]byte) (uint64, uint64, error) { crc := make([]uint32, 0, len(entries)) for _, d := range entries { crc = append(crc, crc32.ChecksumIEEE(d)) } return w.AppendBytes(entries, crc) }
func (c *crc32Field) check(curOffset int, buf []byte) error { crc := crc32.ChecksumIEEE(buf[c.startOffset+4 : curOffset]) if crc != binary.BigEndian.Uint32(buf[c.startOffset:]) { return PacketDecodingError{"CRC didn't match"} } return nil }
func (s *Superblock) findByName(name InodeName, r io.ReaderAt) (int64, error) { addr, ok := s.inodeAddr[name] if ok { return addr, nil } hash := crc32.ChecksumIEEE(name[:]) idx := int(hash) % len(s.IndirectAddr) for tryTime := 0; tryTime < 8; tryTime++ { offset, err := s.findAtBlock(name, r, s.IndirectAddr[idx]) if err == nil { return offset, nil } if logex.Equal(err, io.EOF) { idx++ continue } return 0, logex.Trace(err) } return 0, ErrNotFound.Trace() }
func (c *crc32Field) run(curOffset int, buf []byte) error { crc := crc32.ChecksumIEEE(buf[c.startOffset+4 : curOffset]) binary.BigEndian.PutUint32(buf[c.startOffset:], crc) return nil }
// readHeader reads the GZIP header according to section 2.3.1. // This method does not set z.err. func (z *Reader) readHeader() (hdr Header, err error) { if _, err = io.ReadFull(z.r, z.buf[:10]); err != nil { // RFC 1952, section 2.2, says the following: // A gzip file consists of a series of "members" (compressed data sets). // // Other than this, the specification does not clarify whether a // "series" is defined as "one or more" or "zero or more". To err on the // side of caution, Go interprets this to mean "zero or more". // Thus, it is okay to return io.EOF here. return hdr, err } if z.buf[0] != gzipID1 || z.buf[1] != gzipID2 || z.buf[2] != gzipDeflate { return hdr, ErrHeader } flg := z.buf[3] hdr.ModTime = time.Unix(int64(le.Uint32(z.buf[4:8])), 0) // z.buf[8] is XFL and is currently ignored. hdr.OS = z.buf[9] z.digest = crc32.ChecksumIEEE(z.buf[:10]) if flg&flagExtra != 0 { if _, err = io.ReadFull(z.r, z.buf[:2]); err != nil { return hdr, noEOF(err) } z.digest = crc32.Update(z.digest, crc32.IEEETable, z.buf[:2]) data := make([]byte, le.Uint16(z.buf[:2])) if _, err = io.ReadFull(z.r, data); err != nil { return hdr, noEOF(err) } z.digest = crc32.Update(z.digest, crc32.IEEETable, data) hdr.Extra = data } var s string if flg&flagName != 0 { if s, err = z.readString(); err != nil { return hdr, err } hdr.Name = s } if flg&flagComment != 0 { if s, err = z.readString(); err != nil { return hdr, err } hdr.Comment = s } if flg&flagHdrCrc != 0 { if _, err = io.ReadFull(z.r, z.buf[:2]); err != nil { return hdr, noEOF(err) } digest := le.Uint16(z.buf[:2]) if digest != uint16(z.digest) { return hdr, ErrHeader } } z.digest = 0 if z.decompressor == nil { z.decompressor = flate.NewReader(z.r) } else { z.decompressor.(flate.Resetter).Reset(z.r, nil) } return hdr, nil }