aboutsummaryrefslogtreecommitdiff
path: root/object/header/parse.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-06-06 21:56:05 +0000
committerGravatar Runxi Yu2026-06-06 21:56:05 +0000
commita8244104a29c536de87b9048b299e94fd771b0e4 (patch)
treed5bf1bb7f3342dff7a1addf83884686afbd0bc5a /object/header/parse.go
parentconfig: Use sentinel errors (diff)
object/header: Use sentinel errors
Diffstat (limited to 'object/header/parse.go')
-rw-r--r--object/header/parse.go11
1 files changed, 6 insertions, 5 deletions
diff --git a/object/header/parse.go b/object/header/parse.go
index cdefe74e..0958c0dd 100644
--- a/object/header/parse.go
+++ b/object/header/parse.go
@@ -3,6 +3,7 @@ package header
import (
"bytes"
"errors"
+ "fmt"
"strconv"
"lindenii.org/go/furgit/object/typ"
@@ -14,29 +15,29 @@ var ErrInvalidHeader = errors.New("object/header: invalid header")
func Parse(data []byte) (ty typ.Type, size uint64, consumed int, err error) {
space := bytes.IndexByte(data, ' ')
if space <= 0 {
- return 0, 0, 0, ErrInvalidHeader
+ return 0, 0, 0, fmt.Errorf("%w: missing ' ' type/size separator", ErrInvalidHeader)
}
nulRel := bytes.IndexByte(data[space+1:], 0)
if nulRel < 0 {
- return 0, 0, 0, ErrInvalidHeader
+ return 0, 0, 0, fmt.Errorf("%w: missing NUL terminator", ErrInvalidHeader)
}
nul := space + 1 + nulRel
ty, err = typ.Parse(string(data[:space]))
if err != nil {
- return 0, 0, 0, ErrInvalidHeader
+ return 0, 0, 0, fmt.Errorf("%w: type %q: %w", ErrInvalidHeader, data[:space], err)
}
sizeBytes := data[space+1 : nul]
if len(sizeBytes) == 0 {
- return 0, 0, 0, ErrInvalidHeader
+ return 0, 0, 0, fmt.Errorf("%w: empty size field", ErrInvalidHeader)
}
size, err = strconv.ParseUint(string(sizeBytes), 10, 64)
if err != nil {
- return 0, 0, 0, ErrInvalidHeader
+ return 0, 0, 0, fmt.Errorf("%w: size %q: %w", ErrInvalidHeader, sizeBytes, err)
}
return ty, size, nul + 1, nil