rlim_t_int64.go 630 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. //go:build freebsd
  2. package unix
  3. import (
  4. "math"
  5. "math/big"
  6. "strconv"
  7. )
  8. type rlimT = int64
  9. var rlimTValid = "number between 0 and " + strconv.FormatInt(math.MaxInt64, 10)
  10. const maxInt = int64(^uint(0) >> 1)
  11. func convertRlimT(x int64) interface{} {
  12. if x <= maxInt {
  13. return int(x)
  14. }
  15. return big.NewInt(int64(x))
  16. }
  17. func parseRlimT(val interface{}) (int64, bool) {
  18. switch val := val.(type) {
  19. case int:
  20. return int64(val), true
  21. case *big.Int:
  22. if val.IsInt64() {
  23. return val.Int64(), true
  24. }
  25. case string:
  26. num, err := strconv.ParseInt(val, 0, 64)
  27. if err == nil {
  28. return num, true
  29. }
  30. }
  31. return 0, false
  32. }