Module: xenomai-3
Branch: master
Commit: 270c0868520c18cf727d8c83cc2302d6cfd1eefc
URL:    
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=270c0868520c18cf727d8c83cc2302d6cfd1eefc

Author: Philippe Gerum <r...@xenomai.org>
Date:   Tue Feb 10 15:42:42 2015 +0100

trank/rtdm: finalize compat wrappers

---

 include/trank/rtdm/rtdm.h |   76 +++++++++++++++++++++++++++++++++++----------
 1 file changed, 59 insertions(+), 17 deletions(-)

diff --git a/include/trank/rtdm/rtdm.h b/include/trank/rtdm/rtdm.h
index eaf18e9..5fa36b2 100644
--- a/include/trank/rtdm/rtdm.h
+++ b/include/trank/rtdm/rtdm.h
@@ -22,9 +22,34 @@
 
 #ifndef RTDM_NO_DEFAULT_USER_API
 
+#define rt_dev_call(__call, __args...) \
+({                                     \
+       int __ret;                      \
+       __ret = __RT(__call(__args));   \
+       __ret < 0 ? -errno : __ret;     \
+})
+
+#define rt_dev_open(__args...)         rt_dev_call(open, __args)
+#define rt_dev_ioctl(__args...)                rt_dev_call(ioctl, __args)
+
+static inline int rt_dev_socket(int domain, int type, int protocol)
+{
+       return rt_dev_call(socket, domain, type, protocol);
+}
+
+static inline ssize_t rt_dev_recvmsg(int fd, struct msghdr *msg, int flags)
+{
+       return rt_dev_call(recvmsg, fd, msg, flags);
+}
+
 static inline ssize_t rt_dev_recv(int fd, void *buf, size_t len, int flags)
 {
-       return __RT(recvfrom(fd, buf, len, flags, NULL, NULL));
+       return rt_dev_call(recvfrom, fd, buf, len, flags, NULL, NULL);
+}
+
+static inline ssize_t rt_dev_sendmsg(int fd, const struct msghdr *msg, int 
flags)
+{
+       return rt_dev_call(sendmsg, fd, msg, flags);
 }
 
 static inline ssize_t rt_dev_sendto(int fd, const void *buf, size_t len,
@@ -44,31 +69,33 @@ static inline ssize_t rt_dev_sendto(int fd, const void 
*buf, size_t len,
        msg.msg_control = NULL;
        msg.msg_controllen = 0;
 
-       return __RT(sendmsg(fd, &msg, flags));
+       return rt_dev_call(sendmsg, fd, &msg, flags);
 }
 
 static inline ssize_t rt_dev_send(int fd, const void *buf, size_t len,
                                  int flags)
 {
-       return __RT(sendto(fd, buf, len, flags, NULL, 0));
+       return rt_dev_call(sendto, fd, buf, len, flags, NULL, 0);
 }
 
 static inline int rt_dev_getsockopt(int fd, int level, int optname,
                                    void *optval, socklen_t *optlen)
 {
-       struct _rtdm_getsockopt_args args =
-               { level, optname, optval, optlen };
+       struct _rtdm_getsockopt_args args = {
+               level, optname, optval, optlen
+       };
 
-       return __RT(ioctl(fd, _RTIOC_GETSOCKOPT, &args));
+       return rt_dev_call(ioctl, fd, _RTIOC_GETSOCKOPT, &args);
 }
 
 static inline int rt_dev_setsockopt(int fd, int level, int optname,
                                    const void *optval, socklen_t optlen)
 {
-       struct _rtdm_setsockopt_args args =
-               { level, optname, (void *)optval, optlen };
+       struct _rtdm_setsockopt_args args = {
+               level, optname, (void *)optval, optlen
+       };
 
-       return __RT(ioctl(fd, _RTIOC_SETSOCKOPT, &args));
+       return rt_dev_call(ioctl, fd, _RTIOC_SETSOCKOPT, &args);
 }
 
 static inline int rt_dev_bind(int fd, const struct sockaddr *my_addr,
@@ -76,7 +103,7 @@ static inline int rt_dev_bind(int fd, const struct sockaddr 
*my_addr,
 {
        struct _rtdm_setsockaddr_args args = { my_addr, addrlen };
 
-       return __RT(ioctl(fd, _RTIOC_BIND, &args));
+       return rt_dev_call(ioctl, fd, _RTIOC_BIND, &args);
 }
 
 static inline int rt_dev_connect(int fd, const struct sockaddr *serv_addr,
@@ -84,12 +111,12 @@ static inline int rt_dev_connect(int fd, const struct 
sockaddr *serv_addr,
 {
        struct _rtdm_setsockaddr_args args = { serv_addr, addrlen };
 
-       return __RT(ioctl(fd, _RTIOC_CONNECT, &args));
+       return rt_dev_call(ioctl, fd, _RTIOC_CONNECT, &args);
 }
 
 static inline int rt_dev_listen(int fd, int backlog)
 {
-       return __RT(ioctl(fd, _RTIOC_LISTEN, backlog));
+       return rt_dev_call(ioctl, fd, _RTIOC_LISTEN, backlog);
 }
 
 static inline int rt_dev_accept(int fd, struct sockaddr *addr,
@@ -97,7 +124,7 @@ static inline int rt_dev_accept(int fd, struct sockaddr 
*addr,
 {
        struct _rtdm_getsockaddr_args args = { addr, addrlen };
 
-       return __RT(ioctl(fd, _RTIOC_ACCEPT, &args));
+       return rt_dev_call(ioctl, fd, _RTIOC_ACCEPT, &args);
 }
 
 static inline int rt_dev_getsockname(int fd, struct sockaddr *name,
@@ -105,7 +132,7 @@ static inline int rt_dev_getsockname(int fd, struct 
sockaddr *name,
 {
        struct _rtdm_getsockaddr_args args = { name, namelen };
 
-       return __RT(ioctl(fd, _RTIOC_GETSOCKNAME, &args));
+       return rt_dev_call(ioctl, fd, _RTIOC_GETSOCKNAME, &args);
 }
 
 static inline int rt_dev_getpeername(int fd, struct sockaddr *name,
@@ -113,14 +140,29 @@ static inline int rt_dev_getpeername(int fd, struct 
sockaddr *name,
 {
        struct _rtdm_getsockaddr_args args = { name, namelen };
 
-       return __RT(ioctl(fd, _RTIOC_GETPEERNAME, &args));
+       return rt_dev_call(ioctl, fd, _RTIOC_GETPEERNAME, &args);
 }
 
 static inline int rt_dev_shutdown(int fd, int how)
 {
-       return __RT(ioctl(fd, _RTIOC_SHUTDOWN, how));
+       return rt_dev_call(ioctl, fd, _RTIOC_SHUTDOWN, how);
+}
+
+static inline int rt_dev_close(int fd)
+{
+       return rt_dev_call(close, fd);
+}
+
+static inline ssize_t rt_dev_write(int fd, const void *buf, size_t len)
+{
+       return rt_dev_call(write, fd, buf, len);
+}
+
+static inline ssize_t rt_dev_read(int fd, void *buf, size_t len)
+{
+       return rt_dev_call(read, fd, buf, len);
 }
 
-#endif /* RTDM_NO_DEFAULT_USER_API */
+#endif /* !RTDM_NO_DEFAULT_USER_API */
 
 #endif /* _XENOMAI_TRANK_RTDM_RTDM_H */


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git

Reply via email to