mirror of
https://github.com/spf13/viper
synced 2025-05-06 20:27:17 +00:00
Merge d1e96a5653
into e133904c4f
This commit is contained in:
commit
f49646ab83
1 changed files with 43 additions and 0 deletions
43
util.go
43
util.go
|
@ -184,3 +184,46 @@ func parseSizeInBytes(sizeStr string) uint {
|
||||||
|
|
||||||
return safeMul(uint(size), multiplier)
|
return safeMul(uint(size), multiplier)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func safeMul(a, b uint) uint {
|
||||||
|
c := a * b
|
||||||
|
if a > 1 && b > 1 && c/b != a {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseSizeInBytes converts strings like 1GB or 12 mb into an unsigned integer number of bytes
|
||||||
|
func parseSizeInBytes(sizeStr string) uint {
|
||||||
|
sizeStr = strings.TrimSpace(sizeStr)
|
||||||
|
lastChar := len(sizeStr) - 1
|
||||||
|
multiplier := uint(1)
|
||||||
|
|
||||||
|
if lastChar > 0 {
|
||||||
|
if sizeStr[lastChar] == 'b' || sizeStr[lastChar] == 'B' {
|
||||||
|
if lastChar > 1 {
|
||||||
|
switch unicode.ToLower(rune(sizeStr[lastChar-1])) {
|
||||||
|
case 'k':
|
||||||
|
multiplier = 1 << 10
|
||||||
|
sizeStr = strings.TrimSpace(sizeStr[:lastChar-1])
|
||||||
|
case 'm':
|
||||||
|
multiplier = 1 << 20
|
||||||
|
sizeStr = strings.TrimSpace(sizeStr[:lastChar-1])
|
||||||
|
case 'g':
|
||||||
|
multiplier = 1 << 30
|
||||||
|
sizeStr = strings.TrimSpace(sizeStr[:lastChar-1])
|
||||||
|
default:
|
||||||
|
multiplier = 1
|
||||||
|
sizeStr = strings.TrimSpace(sizeStr[:lastChar])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
size := cast.ToInt(sizeStr)
|
||||||
|
if size < 0 {
|
||||||
|
size = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return safeMul(uint(size), multiplier)
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue