func (d *Decoder) doReadEntryNameV4() (string, error) { l, err := binary.ReadVariableWidthInt(d.r) if err != nil { return "", err } var base string if d.lastEntry != nil { base = d.lastEntry.Name[:len(d.lastEntry.Name)-int(l)] } name, err := binary.ReadUntil(d.r, '\x00') if err != nil { return "", err } return base + string(name), nil }
// NextObjectHeader returns the ObjectHeader for the next object in the reader func (s *Scanner) NextObjectHeader() (*ObjectHeader, error) { if err := s.doPending(); err != nil { return nil, err } s.crc.Reset() h := &ObjectHeader{} s.pendingObject = h var err error h.Offset, err = s.r.Seek(0, io.SeekCurrent) if err != nil { return nil, err } h.Type, h.Length, err = s.readObjectTypeAndLength() if err != nil { return nil, err } switch h.Type { case plumbing.OFSDeltaObject: no, err := binary.ReadVariableWidthInt(s.r) if err != nil { return nil, err } h.OffsetReference = h.Offset - no case plumbing.REFDeltaObject: var err error h.Reference, err = binary.ReadHash(s.r) if err != nil { return nil, err } } return h, nil }