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

Reply via email to