github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/mods/unix/rlim_t_int64.go (about) 1 //go:build freebsd 2 // +build freebsd 3 4 package unix 5 6 import ( 7 "math" 8 "math/big" 9 "strconv" 10 ) 11 12 type rlimT = int64 13 14 var rlimTValid = "number between 0 and " + strconv.FormatInt(math.MaxInt64, 10) 15 16 const maxInt = int64(^uint(0) >> 1) 17 18 func convertRlimT(x int64) interface{} { 19 if x <= maxInt { 20 return int(x) 21 } 22 return big.NewInt(int64(x)) 23 24 } 25 26 func parseRlimT(val interface{}) (int64, bool) { 27 switch val := val.(type) { 28 case int: 29 return int64(val), true 30 case *big.Int: 31 if val.IsInt64() { 32 return val.Int64(), true 33 } 34 case string: 35 num, err := strconv.ParseInt(val, 0, 64) 36 if err == nil { 37 return num, true 38 } 39 } 40 return 0, false 41 }