func verifyVersion(version string) error { if len(version) == 0 { return errutil.NewNotAPointerError(errors.New("Missing version")) } for _, v := range v1Aliases { if v == version { return nil } } return errors.New("Invalid version: " + version) }
func decodeKVData(data []byte) (kvps map[string]string, exts map[string]string, err error) { kvps = make(map[string]string) if !matcherRE.Match(data) { err = errutil.NewNotAPointerError(err) return } scanner := bufio.NewScanner(bytes.NewBuffer(data)) line := 0 numKeys := len(pointerKeys) for scanner.Scan() { text := scanner.Text() if len(text) == 0 { continue } parts := strings.SplitN(text, " ", 2) if len(parts) < 2 { err = fmt.Errorf("Error reading line %d: %s", line, text) return } key := parts[0] value := parts[1] if numKeys <= line { err = fmt.Errorf("Extra line: %s", text) return } if expected := pointerKeys[line]; key != expected { if !extRE.Match([]byte(key)) { err = errutil.NewBadPointerKeyError(expected, key) return } if exts == nil { exts = make(map[string]string) } exts[key] = value continue } line += 1 kvps[key] = value } err = scanner.Err() return }
func DecodePointerFromFile(file string) (*Pointer, error) { // Check size before reading stat, err := os.Stat(file) if err != nil { return nil, err } if stat.Size() > blobSizeCutoff { return nil, errutil.NewNotAPointerError(nil) } f, err := os.OpenFile(file, os.O_RDONLY, 0644) if err != nil { return nil, err } defer f.Close() return DecodePointer(f) }