aboutsummaryrefslogtreecommitdiffstats
path: root/extras/mini-os/lib
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-03-18 11:26:43 +0000
committerKeir Fraser <keir.fraser@citrix.com>2008-03-18 11:26:43 +0000
commitb1c30105ce1e648b15bbb3b95bdcd152e8b5d1c0 (patch)
treec69dd0cbdf1595e471ffc34c32da260d7026f5ff /extras/mini-os/lib
parent1add612bf58d6c49a4fe8d93190dea514d6dc7d8 (diff)
downloadxen-b1c30105ce1e648b15bbb3b95bdcd152e8b5d1c0.tar.gz
xen-b1c30105ce1e648b15bbb3b95bdcd152e8b5d1c0.tar.bz2
xen-b1c30105ce1e648b15bbb3b95bdcd152e8b5d1c0.zip
stubdom: Add support for select() call with NULL arguments.
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'extras/mini-os/lib')
-rw-r--r--extras/mini-os/lib/sys.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/extras/mini-os/lib/sys.c b/extras/mini-os/lib/sys.c
index 3e325b10a1..ffc8bf9ff3 100644
--- a/extras/mini-os/lib/sys.c
+++ b/extras/mini-os/lib/sys.c
@@ -837,9 +837,19 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
add_waiter(w4, xenbus_watch_queue);
add_waiter(w5, kbdfront_queue);
- myread = *readfds;
- mywrite = *writefds;
- myexcept = *exceptfds;
+ if (readfds)
+ myread = *readfds;
+ else
+ FD_ZERO(&myread);
+ if (writefds)
+ mywrite = *writefds;
+ else
+ FD_ZERO(&mywrite);
+ if (exceptfds)
+ myexcept = *exceptfds;
+ else
+ FD_ZERO(&myexcept);
+
DEBUG("polling ");
dump_set(nfds, &myread, &mywrite, &myexcept, timeout);
DEBUG("\n");
@@ -878,9 +888,19 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
thread->wakeup_time = stop;
schedule();
- myread = *readfds;
- mywrite = *writefds;
- myexcept = *exceptfds;
+ if (readfds)
+ myread = *readfds;
+ else
+ FD_ZERO(&myread);
+ if (writefds)
+ mywrite = *writefds;
+ else
+ FD_ZERO(&mywrite);
+ if (exceptfds)
+ myexcept = *exceptfds;
+ else
+ FD_ZERO(&myexcept);
+
n = select_poll(nfds, &myread, &mywrite, &myexcept);
if (n) {