package syscall
import (
+ "internal/goarch"
"unsafe"
)
r1, _, e := Syscall6(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0, 0, 0, 0)
return int32(r1), e
}
+
+func Open(path *byte, mode int, perm uint32) (fd int, errno uintptr) {
+ // Use SYS_OPENAT to match the syscall package.
+ dfd := AT_FDCWD
+ r1, _, e := Syscall6(SYS_OPENAT, uintptr(dfd), uintptr(unsafe.Pointer(path)), uintptr(mode|O_LARGEFILE), uintptr(perm), 0, 0)
+ return int(r1), e
+}
+
+func Close(fd int) (errno uintptr) {
+ _, _, e := Syscall6(SYS_CLOSE, uintptr(fd), 0, 0, 0, 0, 0)
+ return e
+}
+
+func Read(fd int, p []byte) (n int, errno uintptr) {
+ var p0 unsafe.Pointer
+ if len(p) > 0 {
+ p0 = unsafe.Pointer(&p[0])
+ } else {
+ p0 = unsafe.Pointer(&_zero)
+ }
+ r1, _, e := Syscall6(SYS_READ, uintptr(fd), uintptr(p0), uintptr(len(p)), 0, 0, 0)
+ return int(r1), e
+}
+
+func Pread(fd int, p []byte, offset int64) (n int, errno uintptr) {
+ var p0 unsafe.Pointer
+ if len(p) > 0 {
+ p0 = unsafe.Pointer(&p[0])
+ } else {
+ p0 = unsafe.Pointer(&_zero)
+ }
+ var r1, e uintptr
+ switch goarch.GOARCH {
+ case "386":
+ r1, _, e = Syscall6(SYS_PREAD64, uintptr(fd), uintptr(p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
+ case "arm", "mipsle":
+ r1, _, e = Syscall6(SYS_PREAD64, uintptr(fd), uintptr(p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
+ case "mips":
+ r1, _, e = Syscall6(SYS_PREAD64, uintptr(fd), uintptr(p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset))
+ default:
+ r1, _, e = Syscall6(SYS_PREAD64, uintptr(fd), uintptr(p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ }
+ return int(r1), e
+}