MCPcopy
hub / github.com/klauspost/compress / Convert

Method Convert

zstd/snappy.go:82–282  ·  view source on GitHub ↗

Convert the Snappy stream supplied in 'in' and write the zStandard stream to 'w'. If any error is detected on the Snappy stream it is returned. The number of bytes written is returned.

(in io.Reader, w io.Writer)

Source from the content-addressed store, hash-verified

80// If any error is detected on the Snappy stream it is returned.
81// The number of bytes written is returned.
82func (r *SnappyConverter) Convert(in io.Reader, w io.Writer) (int64, error) {
83 initPredefined()
84 r.err = nil
85 r.r = in
86 if r.block == nil {
87 r.block = &blockEnc{}
88 r.block.init()
89 }
90 r.block.initNewEncode()
91 if len(r.buf) != snappyMaxEncodedLenOfMaxBlockSize+snappyChecksumSize {
92 r.buf = make([]byte, snappyMaxEncodedLenOfMaxBlockSize+snappyChecksumSize)
93 }
94 r.block.litEnc.Reuse = huff0.ReusePolicyNone
95 var written int64
96 var readHeader bool
97 {
98 header := frameHeader{WindowSize: snappyMaxBlockSize}.appendTo(r.buf[:0])
99
100 var n int
101 n, r.err = w.Write(header)
102 if r.err != nil {
103 return written, r.err
104 }
105 written += int64(n)
106 }
107
108 for {
109 if !r.readFull(r.buf[:4], true) {
110 // Add empty last block
111 r.block.reset(nil)
112 r.block.last = true
113 err := r.block.encodeLits(r.block.literals, false)
114 if err != nil {
115 return written, err
116 }
117 n, err := w.Write(r.block.output)
118 if err != nil {
119 return written, err
120 }
121 written += int64(n)
122
123 return written, r.err
124 }
125 chunkType := r.buf[0]
126 if !readHeader {
127 if chunkType != chunkTypeStreamIdentifier {
128 println("chunkType != chunkTypeStreamIdentifier", chunkType)
129 r.err = ErrSnappyCorrupt
130 return written, r.err
131 }
132 readHeader = true
133 }
134 chunkLen := int(r.buf[1]) | int(r.buf[2])<<8 | int(r.buf[3])<<16
135 if chunkLen > len(r.buf) {
136 println("chunkLen > len(r.buf)", chunkType)
137 r.err = ErrSnappyUnsupported
138 return written, r.err
139 }

Callers 7

TestSnappy_ConvertSimpleFunction · 0.95
TestSnappy_ConvertXMLFunction · 0.95
TestSnappy_ConvertEnwik9Function · 0.95
BenchmarkSnappy_Enwik9Function · 0.95

Calls 15

readFullMethod · 0.95
initPredefinedFunction · 0.85
printlnFunction · 0.85
snappyDecodedLenFunction · 0.85
decodeSnappyFunction · 0.85
printfFunction · 0.85
snappyCRCFunction · 0.85
initNewEncodeMethod · 0.80
encodeLitsMethod · 0.80
pushOffsetsMethod · 0.80
popOffsetsMethod · 0.80
WriteMethod · 0.65

Tested by 7

TestSnappy_ConvertSimpleFunction · 0.76
TestSnappy_ConvertXMLFunction · 0.76
TestSnappy_ConvertEnwik9Function · 0.76
BenchmarkSnappy_Enwik9Function · 0.76