OSDN Git Service

Replace FSF snail mail address with URLs
[uclinux-h8/uClibc.git] / libc / sysdeps / linux / common / ppoll.c
1 /* Copyright (C) 2006 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@redhat.com>, 2006.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
18
19 #include <sys/syscall.h>
20
21 #if defined __NR_ppoll && defined __UCLIBC_LINUX_SPECIFIC__ && defined __USE_GNU
22
23 #define __need_NULL
24 #include <stddef.h>
25 #include <signal.h>
26 #include <sys/poll.h>
27 #include <cancel.h>
28
29 static int
30 __NC(ppoll)(struct pollfd *fds, nfds_t nfds, const struct timespec *timeout,
31             const sigset_t *sigmask)
32 {
33         /* The Linux kernel can in some situations update the timeout value.
34            We do not want that so use a local variable.  */
35         struct timespec tval;
36         if (timeout != NULL) {
37                 tval = *timeout;
38                 timeout = &tval;
39         }
40         return INLINE_SYSCALL(ppoll, 5, fds, nfds, timeout, sigmask, __SYSCALL_SIGSET_T_SIZE);
41 }
42
43 CANCELLABLE_SYSCALL(int, ppoll, (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout,
44                                  const sigset_t *sigmask),
45                     (fds, nfds, timeout, sigmask))
46
47 #endif