in internal/configutil/size.go [63:105]
func ParseSize(s string) (Size, error) {
orig := s
var mul Size = 1
if strings.HasPrefix(s, "-") {
mul = -1
s = s[1:]
}
sep := -1
for i, c := range s {
if sep == -1 {
if c < '0' || c > '9' {
sep = i
break
}
}
}
if sep == -1 {
return 0, fmt.Errorf("missing unit in size %s (allowed units: B, KB, MB, GB)", orig)
}
n, err := strconv.ParseInt(s[:sep], 10, 32)
if err != nil {
return 0, fmt.Errorf("invalid size %s", orig)
}
switch strings.ToLower(s[sep:]) {
case "gb":
mul = GByte
case "mb":
mul = MByte
case "kb":
mul = KByte
case "b":
default:
for _, c := range s[sep:] {
if unicode.IsSpace(c) {
return 0, fmt.Errorf("invalid character %q in size %s", c, orig)
}
}
return 0, fmt.Errorf("invalid unit in size %s (allowed units: B, KB, MB, GB)", orig)
}
return mul * Size(n), nil
}