9 "github.com/klauspost/compress/zstd"
12 func mustWrite(w io.Writer, buf []byte) {
13 if _, err := w.Write(buf); err != nil {
18 func writer(dst io.Writer, sink chan Ent) {
19 comp, err := zstd.NewWriter(dst)
23 bw := bufio.NewWriterSize(comp, 1<<17)
24 num := make([]byte, 8)
26 for ent := range sink {
27 name = ent.name[len(ent.name)-1]
28 if len(ent.name) >= 1<<16 {
31 binary.BigEndian.PutUint16(num[:2], uint16(len(name)))
32 mustWrite(bw, num[:2])
33 mustWrite(bw, []byte(name))
34 if len(ent.name) >= 1<<8 {
37 mustWrite(bw, []byte{byte(len(ent.name) - 1)})
38 binary.BigEndian.PutUint64(num, uint64(ent.mtime))
40 binary.BigEndian.PutUint64(num, uint64(ent.size))
43 if err = bw.Flush(); err != nil {
46 if err = comp.Close(); err != nil {