github.com/bir3/gocompiler@v0.9.2202/src/internal/syscall/unix/user_darwin.go (about) 1 // Copyright 2022 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package unix 6 7 import ( 8 "github.com/bir3/gocompiler/src/internal/abi" 9 "syscall" 10 "unsafe" 11 ) 12 13 //go:cgo_import_dynamic libc_getgrouplist getgrouplist "/usr/lib/libSystem.B.dylib" 14 func libc_getgrouplist_trampoline() 15 16 func Getgrouplist(name *byte, gid uint32, gids *uint32, n *int32) error { 17 _, _, errno := syscall_syscall6(abi.FuncPCABI0(libc_getgrouplist_trampoline), 18 uintptr(unsafe.Pointer(name)), uintptr(gid), uintptr(unsafe.Pointer(gids)), 19 uintptr(unsafe.Pointer(n)), 0, 0) 20 if errno != 0 { 21 return errno 22 } 23 return nil 24 } 25 26 const ( 27 SC_GETGR_R_SIZE_MAX = 0x46 28 SC_GETPW_R_SIZE_MAX = 0x47 29 ) 30 31 type Passwd struct { 32 Name *byte 33 Passwd *byte 34 Uid uint32 // uid_t 35 Gid uint32 // gid_t 36 Change int64 // time_t 37 Class *byte 38 Gecos *byte 39 Dir *byte 40 Shell *byte 41 Expire int64 // time_t 42 } 43 44 type Group struct { 45 Name *byte 46 Passwd *byte 47 Gid uint32 // gid_t 48 Mem **byte 49 } 50 51 //go:cgo_import_dynamic libc_getpwnam_r getpwnam_r "/usr/lib/libSystem.B.dylib" 52 func libc_getpwnam_r_trampoline() 53 54 func Getpwnam(name *byte, pwd *Passwd, buf *byte, size uintptr, result **Passwd) syscall.Errno { 55 // Note: Returns an errno as its actual result, not in global errno. 56 errno, _, _ := syscall_syscall6(abi.FuncPCABI0(libc_getpwnam_r_trampoline), 57 uintptr(unsafe.Pointer(name)), 58 uintptr(unsafe.Pointer(pwd)), 59 uintptr(unsafe.Pointer(buf)), 60 size, 61 uintptr(unsafe.Pointer(result)), 62 0) 63 return syscall.Errno(errno) 64 } 65 66 //go:cgo_import_dynamic libc_getpwuid_r getpwuid_r "/usr/lib/libSystem.B.dylib" 67 func libc_getpwuid_r_trampoline() 68 69 func Getpwuid(uid uint32, pwd *Passwd, buf *byte, size uintptr, result **Passwd) syscall.Errno { 70 // Note: Returns an errno as its actual result, not in global errno. 71 errno, _, _ := syscall_syscall6(abi.FuncPCABI0(libc_getpwuid_r_trampoline), 72 uintptr(uid), 73 uintptr(unsafe.Pointer(pwd)), 74 uintptr(unsafe.Pointer(buf)), 75 size, 76 uintptr(unsafe.Pointer(result)), 77 0) 78 return syscall.Errno(errno) 79 } 80 81 //go:cgo_import_dynamic libc_getgrnam_r getgrnam_r "/usr/lib/libSystem.B.dylib" 82 func libc_getgrnam_r_trampoline() 83 84 func Getgrnam(name *byte, grp *Group, buf *byte, size uintptr, result **Group) syscall.Errno { 85 // Note: Returns an errno as its actual result, not in global errno. 86 errno, _, _ := syscall_syscall6(abi.FuncPCABI0(libc_getgrnam_r_trampoline), 87 uintptr(unsafe.Pointer(name)), 88 uintptr(unsafe.Pointer(grp)), 89 uintptr(unsafe.Pointer(buf)), 90 size, 91 uintptr(unsafe.Pointer(result)), 92 0) 93 return syscall.Errno(errno) 94 } 95 96 //go:cgo_import_dynamic libc_getgrgid_r getgrgid_r "/usr/lib/libSystem.B.dylib" 97 func libc_getgrgid_r_trampoline() 98 99 func Getgrgid(gid uint32, grp *Group, buf *byte, size uintptr, result **Group) syscall.Errno { 100 // Note: Returns an errno as its actual result, not in global errno. 101 errno, _, _ := syscall_syscall6(abi.FuncPCABI0(libc_getgrgid_r_trampoline), 102 uintptr(gid), 103 uintptr(unsafe.Pointer(grp)), 104 uintptr(unsafe.Pointer(buf)), 105 size, 106 uintptr(unsafe.Pointer(result)), 107 0) 108 return syscall.Errno(errno) 109 } 110 111 //go:cgo_import_dynamic libc_sysconf sysconf "/usr/lib/libSystem.B.dylib" 112 func libc_sysconf_trampoline() 113 114 func Sysconf(key int32) int64 { 115 val, _, errno := syscall_syscall6X(abi.FuncPCABI0(libc_sysconf_trampoline), 116 uintptr(key), 0, 0, 0, 0, 0) 117 if errno != 0 { 118 return -1 119 } 120 return int64(val) 121 }