Commit 607525c0 authored by Tobias Klauser's avatar Tobias Klauser Committed by Tobias Klauser

unix: add Poll function on Dragonfly

Tested with TestPoll extracted from syscall_linux_test.go. Once Poll is
supported on all OSes this test can be moved to syscall_unix_test.go.

Change-Id: I03f4396be2e190770abb219c1c5324ca55bcfa27
Reviewed-on: https://go-review.googlesource.com/73430
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
parent 92ac112a
...@@ -125,6 +125,15 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { ...@@ -125,6 +125,15 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
return return
} }
//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
func Poll(fds []PollFd, timeout int) (n int, err error) {
if len(fds) == 0 {
return poll(nil, 0, timeout)
}
return poll(&fds[0], len(fds), timeout)
}
/* /*
* Exposed directly * Exposed directly
*/ */
...@@ -257,7 +266,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { ...@@ -257,7 +266,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
// Searchfs // Searchfs
// Delete // Delete
// Copyfile // Copyfile
// Poll
// Watchevent // Watchevent
// Waitevent // Waitevent
// Modwatch // Modwatch
...@@ -403,7 +411,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { ...@@ -403,7 +411,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
// Pread_nocancel // Pread_nocancel
// Pwrite_nocancel // Pwrite_nocancel
// Waitid_nocancel // Waitid_nocancel
// Poll_nocancel
// Msgsnd_nocancel // Msgsnd_nocancel
// Msgrcv_nocancel // Msgrcv_nocancel
// Sem_wait_nocancel // Sem_wait_nocancel
......
...@@ -17,6 +17,7 @@ package unix ...@@ -17,6 +17,7 @@ package unix
#define KERNEL #define KERNEL
#include <dirent.h> #include <dirent.h>
#include <fcntl.h> #include <fcntl.h>
#include <poll.h>
#include <signal.h> #include <signal.h>
#include <termios.h> #include <termios.h>
#include <stdio.h> #include <stdio.h>
...@@ -247,3 +248,20 @@ const ( ...@@ -247,3 +248,20 @@ const (
AT_FDCWD = C.AT_FDCWD AT_FDCWD = C.AT_FDCWD
AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
) )
// poll
type PollFd C.struct_pollfd
const (
POLLERR = C.POLLERR
POLLHUP = C.POLLHUP
POLLIN = C.POLLIN
POLLNVAL = C.POLLNVAL
POLLOUT = C.POLLOUT
POLLPRI = C.POLLPRI
POLLRDBAND = C.POLLRDBAND
POLLRDNORM = C.POLLRDNORM
POLLWRBAND = C.POLLWRBAND
POLLWRNORM = C.POLLWRNORM
)
...@@ -412,6 +412,17 @@ func extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) { ...@@ -412,6 +412,17 @@ func extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Access(path string, mode uint32) (err error) { func Access(path string, mode uint32) (err error) {
var _p0 *byte var _p0 *byte
_p0, err = BytePtrFromString(path) _p0, err = BytePtrFromString(path)
......
...@@ -446,3 +446,22 @@ const ( ...@@ -446,3 +446,22 @@ const (
AT_FDCWD = 0xfffafdcd AT_FDCWD = 0xfffafdcd
AT_SYMLINK_NOFOLLOW = 0x1 AT_SYMLINK_NOFOLLOW = 0x1
) )
type PollFd struct {
Fd int32
Events int16
Revents int16
}
const (
POLLERR = 0x8
POLLHUP = 0x10
POLLIN = 0x1
POLLNVAL = 0x20
POLLOUT = 0x4
POLLPRI = 0x2
POLLRDBAND = 0x80
POLLRDNORM = 0x40
POLLWRBAND = 0x100
POLLWRNORM = 0x4
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment