blob: d05acdaa490514f22b12870f0a24cf18b80e0b50 [file] [log] [blame]
// Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package unix
import (
"internal/abi"
"syscall"
"unsafe"
)
//go:cgo_import_dynamic libc_getgrouplist getgrouplist "/usr/lib/libSystem.B.dylib"
func libc_getgrouplist_trampoline()
func Getgrouplist(name *byte, gid uint32, gids *uint32, n *int32) error {
_, _, errno := syscall_syscall6(abi.FuncPCABI0(libc_getgrouplist_trampoline),
uintptr(unsafe.Pointer(name)), uintptr(gid), uintptr(unsafe.Pointer(gids)),
uintptr(unsafe.Pointer(n)), 0, 0)
if errno != 0 {
return errno
}
return nil
}
const (
SC_GETGR_R_SIZE_MAX = 0x46
SC_GETPW_R_SIZE_MAX = 0x47
)
type Passwd struct {
Name *byte
Passwd *byte
Uid uint32 // uid_t
Gid uint32 // gid_t
Change int64 // time_t
Class *byte
Gecos *byte
Dir *byte
Shell *byte
Expire int64 // time_t
}
type Group struct {
Name *byte
Passwd *byte
Gid uint32 // gid_t
Mem **byte
}
//go:cgo_import_dynamic libc_getpwnam_r getpwnam_r "/usr/lib/libSystem.B.dylib"
func libc_getpwnam_r_trampoline()
func Getpwnam(name *byte, pwd *Passwd, buf *byte, size uintptr, result **Passwd) syscall.Errno {
// Note: Returns an errno as its actual result, not in global errno.
errno, _, _ := syscall_syscall6(abi.FuncPCABI0(libc_getpwnam_r_trampoline),
uintptr(unsafe.Pointer(name)),
uintptr(unsafe.Pointer(pwd)),
uintptr(unsafe.Pointer(buf)),
size,
uintptr(unsafe.Pointer(result)),
0)
return syscall.Errno(errno)
}
//go:cgo_import_dynamic libc_getpwuid_r getpwuid_r "/usr/lib/libSystem.B.dylib"
func libc_getpwuid_r_trampoline()
func Getpwuid(uid uint32, pwd *Passwd, buf *byte, size uintptr, result **Passwd) syscall.Errno {
// Note: Returns an errno as its actual result, not in global errno.
errno, _, _ := syscall_syscall6(abi.FuncPCABI0(libc_getpwuid_r_trampoline),
uintptr(uid),
uintptr(unsafe.Pointer(pwd)),
uintptr(unsafe.Pointer(buf)),
size,
uintptr(unsafe.Pointer(result)),
0)
return syscall.Errno(errno)
}
//go:cgo_import_dynamic libc_getgrnam_r getgrnam_r "/usr/lib/libSystem.B.dylib"
func libc_getgrnam_r_trampoline()
func Getgrnam(name *byte, grp *Group, buf *byte, size uintptr, result **Group) syscall.Errno {
// Note: Returns an errno as its actual result, not in global errno.
errno, _, _ := syscall_syscall6(abi.FuncPCABI0(libc_getgrnam_r_trampoline),
uintptr(unsafe.Pointer(name)),
uintptr(unsafe.Pointer(grp)),
uintptr(unsafe.Pointer(buf)),
size,
uintptr(unsafe.Pointer(result)),
0)
return syscall.Errno(errno)
}
//go:cgo_import_dynamic libc_getgrgid_r getgrgid_r "/usr/lib/libSystem.B.dylib"
func libc_getgrgid_r_trampoline()
func Getgrgid(gid uint32, grp *Group, buf *byte, size uintptr, result **Group) syscall.Errno {
// Note: Returns an errno as its actual result, not in global errno.
errno, _, _ := syscall_syscall6(abi.FuncPCABI0(libc_getgrgid_r_trampoline),
uintptr(gid),
uintptr(unsafe.Pointer(grp)),
uintptr(unsafe.Pointer(buf)),
size,
uintptr(unsafe.Pointer(result)),
0)
return syscall.Errno(errno)
}
//go:cgo_import_dynamic libc_sysconf sysconf "/usr/lib/libSystem.B.dylib"
func libc_sysconf_trampoline()
func Sysconf(key int32) int64 {
val, _, errno := syscall_syscall6X(abi.FuncPCABI0(libc_sysconf_trampoline),
uintptr(key), 0, 0, 0, 0, 0)
if errno != 0 {
return -1
}
return int64(val)
}