user_darwin.mx raw
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 "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 }
122