aboutsummaryrefslogtreecommitdiff
path: root/internal/zlibx
diff options
context:
space:
mode:
authorGravatar Runxi Yu2025-11-23 08:00:00 +0800
committerGravatar Runxi Yu2025-11-23 08:00:00 +0800
commit7eaa8614c897a97d241335982f4c04f1f27b0715 (patch)
treeab39c63adecab22464b3fa50be7073647bb817d4 /internal/zlibx
parentobj: Add ReadObjectTypeRaw (diff)
bufpool: Return bytes.Buffer, rather than a pointer to it
It's silly to allocate a bytes.Buffer struct, however small it is, every time Borrow is called, since the entire purpose is to reduce allocations.
Diffstat (limited to 'internal/zlibx')
-rw-r--r--internal/zlibx/decompress.go18
1 files changed, 9 insertions, 9 deletions
diff --git a/internal/zlibx/decompress.go b/internal/zlibx/decompress.go
index df4a34be..9d4e5268 100644
--- a/internal/zlibx/decompress.go
+++ b/internal/zlibx/decompress.go
@@ -9,45 +9,45 @@ import (
"git.sr.ht/~runxiyu/furgit/internal/flatex"
)
-func Decompress(src []byte) (*bufpool.Buffer, error) {
+func Decompress(src []byte) (bufpool.Buffer, error) {
return DecompressSized(src, 0)
}
-func DecompressSized(src []byte, sizeHint int) (*bufpool.Buffer, error) {
+func DecompressSized(src []byte, sizeHint int) (bufpool.Buffer, error) {
if len(src) < 6 {
- return nil, io.ErrUnexpectedEOF
+ return bufpool.Buffer{}, io.ErrUnexpectedEOF
}
cmf := src[0]
flg := src[1]
if (cmf&0x0f != zlibDeflate) || (cmf>>4 > zlibMaxWindow) || (binary.BigEndian.Uint16(src[:2])%31 != 0) {
- return nil, ErrHeader
+ return bufpool.Buffer{}, ErrHeader
}
offset := 2
if flg&0x20 != 0 {
- return nil, ErrHeader
+ return bufpool.Buffer{}, ErrHeader
}
if len(src[offset:]) < 4 {
- return nil, io.ErrUnexpectedEOF
+ return bufpool.Buffer{}, io.ErrUnexpectedEOF
}
deflateData := src[offset:]
out, consumed, err := flatex.DecompressSized(deflateData, sizeHint)
if err != nil {
- return nil, err
+ return bufpool.Buffer{}, err
}
checksumPos := offset + consumed
if checksumPos+4 > len(src) {
out.Release()
- return nil, io.ErrUnexpectedEOF
+ return bufpool.Buffer{}, io.ErrUnexpectedEOF
}
expected := binary.BigEndian.Uint32(src[checksumPos : checksumPos+4])
if expected != adler32.Checksum(out.Bytes()) {
out.Release()
- return nil, ErrChecksum
+ return bufpool.Buffer{}, ErrChecksum
}
return out, nil
}