MCPcopy
hub / github.com/perkeep/perkeep / parseMetaRow

Function parseMetaRow

pkg/blobserver/blobpacked/blobpacked.go:856–886  ·  view source on GitHub ↗

parses: " "

(v []byte)

Source from the content-addressed store, hash-verified

854// parses:
855// "<size_u32> <big-blobref> <big-offset>"
856func parseMetaRow(v []byte) (m meta, err error) {
857 row := v
858 sp := bytes.IndexByte(v, ' ')
859 if sp < 1 || sp == len(v)-1 {
860 return meta{}, fmt.Errorf("invalid metarow %q", v)
861 }
862 m.exists = true
863 size, err := strutil.ParseUintBytes(v[:sp], 10, 32)
864 if err != nil {
865 return meta{}, fmt.Errorf("invalid metarow size %q", v)
866 }
867 m.size = uint32(size)
868 v = v[sp+1:]
869
870 // remains: "<big-blobref> <big-offset>"
871 if bytes.Count(v, singleSpace) != 1 {
872 return meta{}, fmt.Errorf("invalid metarow %q: wrong number of spaces", row)
873 }
874 sp = bytes.IndexByte(v, ' ')
875 largeRef, ok := blob.ParseBytes(v[:sp])
876 if !ok {
877 return meta{}, fmt.Errorf("invalid metarow %q: bad blobref %q", row, v[:sp])
878 }
879 m.largeRef = largeRef
880 off, err := strutil.ParseUintBytes(v[sp+1:], 10, 32)
881 if err != nil {
882 return meta{}, fmt.Errorf("invalid metarow %q: bad offset: %v", row, err)
883 }
884 m.largeOff = uint32(off)
885 return m, nil
886}
887
888func parseMetaRowSizeOnly(v []byte) (size uint32, err error) {
889 sp := bytes.IndexByte(v, ' ')

Callers 4

TestParseMetaRowFunction · 0.85
TestReindexFunction · 0.85
testPackFunction · 0.85
getMetaRowMethod · 0.85

Calls 1

ParseBytesFunction · 0.92

Tested by 3

TestParseMetaRowFunction · 0.68
TestReindexFunction · 0.68
testPackFunction · 0.68