Browse Source

fix(poll): make interface more odinary

We take `fds` as a normal slice and get the length from it instead of
bothering with a second parameter.
Rickard Andersson 2 years ago
parent
commit
37469dc9c2
2 changed files with 8 additions and 10 deletions
  1. 7 9
      core/os/os_linux.odin
  2. 1 1
      core/sys/unix/syscalls_linux.odin

+ 7 - 9
core/os/os_linux.odin

@@ -433,13 +433,11 @@ AT_REMOVEDIR        :: uintptr(0x200)
 AT_SYMLINK_NOFOLLOW :: uintptr(0x100)
 
 pollfd :: struct {
-  fd:      c.int,
-  events:  c.short,
-  revents: c.short,
+	fd:      c.int,
+	events:  c.short,
+	revents: c.short,
 }
 
-nfds_t :: distinct c.uint
-
 sigset_t :: distinct u64
 
 foreign libc {
@@ -1098,16 +1096,16 @@ fcntl :: proc(fd: int, cmd: int, arg: int) -> (int, Errno) {
 	return result, ERROR_NONE
 }
 
-poll :: proc(fds: [^]pollfd, nfds: nfds_t, timeout: int) -> (int, Errno) {
-	result := unix.sys_poll(fds, uint(nfds), timeout)
+poll :: proc(fds: []pollfd, timeout: int) -> (int, Errno) {
+	result := unix.sys_poll(raw_data(fds), uint(len(fds)), timeout)
 	if result < 0 {
 		return 0, _get_errno(result)
 	}
 	return result, ERROR_NONE
 }
 
-ppoll :: proc(fds: [^]pollfd, nfds: nfds_t, timeout: ^unix.timespec, sigmask: ^sigset_t) -> (int, Errno) {
-	result := unix.sys_ppoll(fds, uint(nfds), timeout, sigmask, size_of(sigset_t))
+ppoll :: proc(fds: []pollfd, timeout: ^unix.timespec, sigmask: ^sigset_t) -> (int, Errno) {
+	result := unix.sys_ppoll(raw_data(fds), uint(len(fds)), timeout, sigmask, size_of(sigset_t))
 	if result < 0 {
 		return 0, _get_errno(result)
 	}

+ 1 - 1
core/sys/unix/syscalls_linux.odin

@@ -2088,7 +2088,7 @@ sys_poll :: proc "contextless" (fds: rawptr, nfds: uint, timeout: int) -> int {
 }
 
 sys_ppoll :: proc "contextless" (fds: rawptr, nfds: uint, timeout: rawptr, sigmask: rawptr, sigsetsize: uint) -> int {
-  return int(intrinsics.syscall(SYS_ppoll, uintptr(fds), uintptr(nfds), uintptr(timeout), uintptr(sigmask), uintptr(sigsetsize)))
+	return int(intrinsics.syscall(SYS_ppoll, uintptr(fds), uintptr(nfds), uintptr(timeout), uintptr(sigmask), uintptr(sigsetsize)))
 }
 
 get_errno :: proc "contextless" (res: int) -> i32 {