9 func mustReadFull(r io.Reader, buf []byte) {
10 if _, err := io.ReadFull(r, buf); err != nil {
15 func reader(r io.Reader, sink chan Ent) {
17 num := make([]byte, 8)
21 var depth, depthPrev uint8
23 _, err = io.ReadFull(r, num[:2])
30 nameLen = binary.BigEndian.Uint16(num[:2])
31 nameRaw := make([]byte, nameLen)
32 mustReadFull(r, nameRaw)
33 name := string(nameRaw)
34 mustReadFull(r, num[:1])
37 ent := Ent{mtime: int64(binary.BigEndian.Uint64(num))}
39 ent.size = int64(binary.BigEndian.Uint64(num))
40 if depth > depthPrev {
41 cols = append(cols, namePrev[:len(namePrev)-1])
42 } else if depth < depthPrev {
43 cols = cols[:len(cols)-int(depthPrev-depth)]
45 ent.name = append([]string{}, append(cols, name)...)