This one just adds the boiler-plate code to the user-space posix skin
for supporting select.
---
include/posix/sys/select.h | 23 +++++++++++++++++++++++
src/skins/posix/Makefile.am | 1 +
src/skins/posix/posix.wrappers | 1 +
src/skins/posix/select.c | 26 ++++++++++++++++++++++++++
src/skins/posix/wrappers.c | 9 +++++++++
5 files changed, 60 insertions(+)
--- include/posix/sys/select.h (revision 0)
+++ include/posix/sys/select.h (revision 0)
@@ -0,0 +1,23 @@
+#ifndef _XENO_POSIX_SELECT_H
+#define _XENO_POSIX_SELECT_H
+
+#if !(defined(__KERNEL__) || defined(__XENO_SIM__))
+
+#include_next <sys/select.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int __real_select (int __nfds, fd_set *__restrict __readfds,
+ fd_set *__restrict __writefds,
+ fd_set *__restrict __exceptfds,
+ struct timeval *__restrict __timeout);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !(__KERNEL__ || __XENO_SIM__) */
+
+#endif /* _XENO_POSIX_SELECT_H */
--- src/skins/posix/wrappers.c (revision 3441)
+++ src/skins/posix/wrappers.c (working copy)
@@ -30,6 +30,7 @@
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
+#include <sys/select.h>
/* sched */
int __real_pthread_setschedparam(pthread_t thread,
@@ -235,3 +236,11 @@ int __real_munmap(void *addr, size_t len
{
return munmap(addr, len);
}
+
+int __real_select (int __nfds, fd_set *__restrict __readfds,
+ fd_set *__restrict __writefds,
+ fd_set *__restrict __exceptfds,
+ struct timeval *__restrict __timeout)
+{
+ return select(__nfds, __readfds, __writefds, __exceptfds, __timeout);
+}
--- src/skins/posix/select.c (revision 0)
+++ src/skins/posix/select.c (revision 0)
@@ -0,0 +1,26 @@
+#include <errno.h>
+#include <posix/syscall.h>
+#include <sys/select.h>
+
+extern int __pse51_muxid;
+
+int __wrap_select (int __nfds, fd_set *__restrict __readfds,
+ fd_set *__restrict __writefds,
+ fd_set *__restrict __exceptfds,
+ struct timeval *__restrict __timeout)
+{
+ int err;
+
+ err = XENOMAI_SKINCALL5(__pse51_muxid, __pse51_select, __nfds,
+ __readfds, __writefds, __exceptfds, __timeout);
+
+ if (err == -EBADF || err == -EPERM)
+ return __real_select(__nfds, __readfds,
+ __writefds, __exceptfds, __timeout);
+
+ if (err > 0)
+ return err;
+
+ errno = -err;
+ return -1;
+}
--- src/skins/posix/posix.wrappers (revision 3441)
+++ src/skins/posix/posix.wrappers (working copy)
@@ -87,3 +87,4 @@
--wrap shm_unlink
--wrap mmap
--wrap munmap
+--wrap select
--- src/skins/posix/Makefile.am (revision 3441)
+++ src/skins/posix/Makefile.am (working copy)
@@ -15,6 +15,7 @@ libpthread_rt_la_SOURCES = \
mutex.c \
shm.c \
interrupt.c \
+ select.c \
rtdm.c \
wrappers.c
--
Gilles Chanteperdrix.
_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core