github.com/Cloud-Foundations/Dominator@v0.3.4/lib/wsyscall/wrappers_darwin.go (about)

     1  package wsyscall
     2  
     3  import (
     4  	"os"
     5  	"syscall"
     6  )
     7  
     8  const (
     9  	S_IFBLK  = syscall.S_IFBLK
    10  	S_IFCHR  = syscall.S_IFCHR
    11  	S_IFDIR  = syscall.S_IFDIR
    12  	S_IFIFO  = syscall.S_IFIFO
    13  	S_IFLNK  = syscall.S_IFLNK
    14  	S_IFMT   = syscall.S_IFMT
    15  	S_IFREG  = syscall.S_IFREG
    16  	S_IFSOCK = syscall.S_IFSOCK
    17  	S_IREAD  = syscall.S_IREAD
    18  	S_IRGRP  = syscall.S_IRGRP
    19  	S_IROTH  = syscall.S_IROTH
    20  	S_IRUSR  = syscall.S_IRUSR
    21  	S_IRWXG  = syscall.S_IRWXG
    22  	S_IRWXO  = syscall.S_IRWXO
    23  	S_IRWXU  = syscall.S_IRWXU
    24  	S_ISGID  = syscall.S_ISGID
    25  	S_ISUID  = syscall.S_ISUID
    26  	S_ISVTX  = syscall.S_ISVTX
    27  	S_IWGRP  = syscall.S_IWGRP
    28  	S_IWOTH  = syscall.S_IWOTH
    29  	S_IWRITE = syscall.S_IWRITE
    30  	S_IWUSR  = syscall.S_IWUSR
    31  	S_IXGRP  = syscall.S_IXGRP
    32  	S_IXOTH  = syscall.S_IXOTH
    33  	S_IXUSR  = syscall.S_IXUSR
    34  )
    35  
    36  func convertStat(dest *Stat_t, source *syscall.Stat_t) {
    37  	dest.Dev = uint64(source.Dev)
    38  	dest.Ino = source.Ino
    39  	dest.Nlink = uint64(source.Nlink)
    40  	dest.Mode = uint32(source.Mode)
    41  	dest.Uid = source.Uid
    42  	dest.Gid = source.Gid
    43  	dest.Rdev = uint64(source.Rdev)
    44  	dest.Size = source.Size
    45  	dest.Blksize = int64(source.Blksize)
    46  	dest.Blocks = source.Blocks
    47  	dest.Atim = source.Atimespec
    48  	dest.Mtim = source.Mtimespec
    49  	dest.Ctim = source.Ctimespec
    50  }
    51  
    52  func dup(oldfd int) (int, error) {
    53  	return syscall.Dup(oldfd)
    54  }
    55  
    56  func dup2(oldfd int, newfd int) error {
    57  	return syscall.Dup2(oldfd, newfd)
    58  }
    59  
    60  func dup3(oldfd int, newfd int, flags int) error {
    61  	if flags == 0 {
    62  		return syscall.Dup2(oldfd, newfd)
    63  	}
    64  	return syscall.ENOTSUP
    65  }
    66  
    67  func getFileDescriptorLimit() (uint64, uint64, error) {
    68  	var rlim syscall.Rlimit
    69  	if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rlim); err != nil {
    70  		return 0, 0, err
    71  	}
    72  	return rlim.Cur, rlim.Max, nil
    73  }
    74  
    75  func getrusage(who int, rusage *Rusage) error {
    76  	switch who {
    77  	case RUSAGE_CHILDREN:
    78  		who = syscall.RUSAGE_CHILDREN
    79  	case RUSAGE_SELF:
    80  		who = syscall.RUSAGE_SELF
    81  	default:
    82  		return syscall.ENOTSUP
    83  	}
    84  	var syscallRusage syscall.Rusage
    85  	if err := syscall.Getrusage(who, &syscallRusage); err != nil {
    86  		return err
    87  	}
    88  	rusage.Utime.Sec = int64(syscallRusage.Utime.Sec)
    89  	rusage.Utime.Usec = int64(syscallRusage.Utime.Usec)
    90  	rusage.Stime.Sec = int64(syscallRusage.Stime.Sec)
    91  	rusage.Stime.Usec = int64(syscallRusage.Stime.Usec)
    92  	rusage.Maxrss = int64(syscallRusage.Maxrss) >> 10
    93  	rusage.Ixrss = int64(syscallRusage.Ixrss) >> 10
    94  	rusage.Idrss = int64(syscallRusage.Idrss) >> 10
    95  	rusage.Minflt = int64(syscallRusage.Minflt)
    96  	rusage.Majflt = int64(syscallRusage.Majflt)
    97  	rusage.Nswap = int64(syscallRusage.Nswap)
    98  	rusage.Inblock = int64(syscallRusage.Inblock)
    99  	rusage.Oublock = int64(syscallRusage.Oublock)
   100  	rusage.Msgsnd = int64(syscallRusage.Msgsnd)
   101  	rusage.Msgrcv = int64(syscallRusage.Msgrcv)
   102  	rusage.Nsignals = int64(syscallRusage.Nsignals)
   103  	rusage.Nvcsw = int64(syscallRusage.Nvcsw)
   104  	rusage.Nivcsw = int64(syscallRusage.Nivcsw)
   105  	return nil
   106  }
   107  
   108  func fallocate(fd int, mode uint32, off int64, len int64) error {
   109  	return syscall.ENOTSUP
   110  }
   111  
   112  func ioctl(fd int, request, argp uintptr) error {
   113  	_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), request,
   114  		argp)
   115  	if errno != 0 {
   116  		return os.NewSyscallError("ioctl", errno)
   117  	}
   118  	return nil
   119  }
   120  
   121  func lstat(path string, statbuf *Stat_t) error {
   122  	var rawStatbuf syscall.Stat_t
   123  	if err := syscall.Lstat(path, &rawStatbuf); err != nil {
   124  		return err
   125  	}
   126  	convertStat(statbuf, &rawStatbuf)
   127  	return nil
   128  }
   129  
   130  func mount(source string, target string, fstype string, flags uintptr,
   131  	data string) error {
   132  	return syscall.ENOTSUP
   133  }
   134  
   135  func reboot() error {
   136  	return syscall.ENOTSUP
   137  }
   138  
   139  func setAllGid(gid int) error {
   140  	return syscall.Setregid(gid, gid)
   141  }
   142  
   143  func setAllUid(uid int) error {
   144  	return syscall.Setreuid(uid, uid)
   145  }
   146  
   147  func setMyPriority(priority int) error {
   148  	return syscall.Setpriority(syscall.PRIO_PROCESS, 0, priority)
   149  }
   150  
   151  func setNetNamespace(namespaceFd int) error {
   152  	return syscall.ENOTSUP
   153  }
   154  
   155  func stat(path string, statbuf *Stat_t) error {
   156  	var rawStatbuf syscall.Stat_t
   157  	if err := syscall.Stat(path, &rawStatbuf); err != nil {
   158  		return err
   159  	}
   160  	convertStat(statbuf, &rawStatbuf)
   161  	return nil
   162  }
   163  
   164  func sync() error {
   165  	return syscall.Sync()
   166  }
   167  
   168  func unshareNetNamespace() (int, int, error) {
   169  	return -1, -1, syscall.ENOTSUP
   170  }
   171  
   172  func unshareMountNamespace() error {
   173  	return syscall.ENOTSUP
   174  }