parses: " "
(v []byte)
| 854 | // parses: |
| 855 | // "<size_u32> <big-blobref> <big-offset>" |
| 856 | func 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 | |
| 888 | func parseMetaRowSizeOnly(v []byte) (size uint32, err error) { |
| 889 | sp := bytes.IndexByte(v, ' ') |