ref: 8e320c9ca634e6b2431f9442b7d5191864735ae4
dir: /internal/flatex/decompress.go/
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()
}
}
}