diff options
| author | 2026-06-06 21:56:05 +0000 | |
|---|---|---|
| committer | 2026-06-06 21:56:05 +0000 | |
| commit | a8244104a29c536de87b9048b299e94fd771b0e4 (patch) | |
| tree | d5bf1bb7f3342dff7a1addf83884686afbd0bc5a /object/header/parse.go | |
| parent | config: Use sentinel errors (diff) | |
object/header: Use sentinel errors
Diffstat (limited to 'object/header/parse.go')
| -rw-r--r-- | object/header/parse.go | 11 |
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 |
