src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/mods/unix/rlim_t_int64.go (about)

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