9 "github.com/klauspost/compress/zstd"
12 func mustReadFull(r io.Reader, buf []byte) {
13 if _, err := io.ReadFull(r, buf); err != nil {
18 func reader(src io.Reader, sink chan Ent) {
19 comp, err := zstd.NewReader(src)
23 br := bufio.NewReaderSize(comp, 1<<17)
25 num := make([]byte, 8)
29 var depth, depthPrev uint8
31 _, err = io.ReadFull(br, num[:2])
38 nameLen = binary.BigEndian.Uint16(num[:2])
39 nameRaw := make([]byte, nameLen)
40 mustReadFull(br, nameRaw)
41 name := string(nameRaw)
42 mustReadFull(br, num[:1])
45 ent := Ent{mtime: int64(binary.BigEndian.Uint64(num))}
47 ent.size = int64(binary.BigEndian.Uint64(num))
48 if depth > depthPrev {
49 cols = append(cols, namePrev[:len(namePrev)-1])
50 } else if depth < depthPrev {
51 cols = cols[:len(cols)-int(depthPrev-depth)]
53 ent.name = append([]string{}, append(cols, name)...)