func ParseRange()

in oss/utils.go [352:381]


func ParseRange(s string) (r *HTTPRange, err error) {
	const preamble = "bytes="
	if !strings.HasPrefix(s, preamble) {
		return nil, errors.New("range: header invalid: doesn't start with " + preamble)
	}
	s = s[len(preamble):]
	if strings.ContainsRune(s, ',') {
		return nil, errors.New("range: header invalid: contains multiple ranges which isn't supported")
	}
	dash := strings.IndexRune(s, '-')
	if dash < 0 {
		return nil, errors.New("range: header invalid: contains no '-'")
	}
	start, end := strings.TrimSpace(s[:dash]), strings.TrimSpace(s[dash+1:])
	o := HTTPRange{Offset: 0, Count: 0}
	if start != "" {
		o.Offset, err = strconv.ParseInt(start, 10, 64)
		if err != nil || o.Offset < 0 {
			return nil, errors.New("range: header invalid: bad start")
		}
	}
	if end != "" {
		e, err := strconv.ParseInt(end, 10, 64)
		if err != nil || e < 0 {
			return nil, errors.New("range: header invalid: bad end")
		}
		o.Count = e - o.Offset + 1
	}
	return &o, nil
}