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  }