blob: 065e23f33c42b9c8330ef6e79f8a8a2d078cd268 (
about) (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package flatex
import (
"io"
"codeberg.org/lindenii/furgit/internal/bufpool"
)
func DecompressSized(src []byte, sizeHint int) (bufpool.Buffer, int, error) {
d := sliceInflaterPool.Get().(*sliceInflater)
defer sliceInflaterPool.Put(d)
if err := d.reset(src); err != nil {
return bufpool.Buffer{}, 0, err
}
out := bufpool.Borrow(sizeHint)
out.Resize(0)
for {
if len(d.toRead) > 0 {
out.Append(d.toRead)
d.toRead = nil
continue
}
if d.err != nil {
if d.err == io.EOF {
return out, d.pos, nil
}
out.Release()
return bufpool.Buffer{}, 0, d.err
}
d.step(d)
if d.err != nil && len(d.toRead) == 0 {
d.toRead = d.window.readFlush()
}
}
}
|