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

Author: Philippe Gerum <r...@xenomai.org>
Date:   Tue Sep  8 15:35:24 2009 +0200

rtipc: move code to get/put sockaddr_ipc structs to generic section

---

 ksrc/drivers/ipc/iddp.c     |   62 +++----------------------------------------
 ksrc/drivers/ipc/internal.h |   18 ++++++++----
 ksrc/drivers/ipc/rtipc.c    |   54 +++++++++++++++++++++++++++++++++++++
 ksrc/drivers/ipc/xddp.c     |   62 +++----------------------------------------
 4 files changed, 74 insertions(+), 122 deletions(-)

diff --git a/ksrc/drivers/ipc/iddp.c b/ksrc/drivers/ipc/iddp.c
index b37872e..273f428 100644
--- a/ksrc/drivers/ipc/iddp.c
+++ b/ksrc/drivers/ipc/iddp.c
@@ -662,60 +662,6 @@ set_assoc:
        return 0;
 }
 
-static int __iddp_getuser_address(rtdm_user_info_t *user_info,
-                                 void *arg, struct sockaddr_ipc **sockaddrp)
-{
-       struct _rtdm_setsockaddr_args setaddr;
-
-       if (rtipc_get_arg(user_info,
-                         &setaddr, arg, sizeof(setaddr)))
-               return -EFAULT;
-
-       if (setaddr.addrlen > 0) {
-               if (setaddr.addrlen != sizeof(**sockaddrp))
-                       return -EINVAL;
-
-               if (rtipc_get_arg(user_info, *sockaddrp,
-                                 setaddr.addr, sizeof(**sockaddrp)))
-                       return -EFAULT;
-       } else {
-               if (setaddr.addr)
-                       return -EINVAL;
-               *sockaddrp = NULL;
-       }
-
-       return 0;
-}
-
-static int __iddp_putuser_address(rtdm_user_info_t *user_info, void *arg,
-                                 const struct sockaddr_ipc *saddr)
-{
-       struct _rtdm_getsockaddr_args getaddr;
-       socklen_t len;
-
-       if (rtipc_get_arg(user_info,
-                         &getaddr, arg, sizeof(getaddr)))
-               return -EFAULT;
-
-       if (rtipc_get_arg(user_info,
-                         &len, getaddr.addrlen, sizeof(len)))
-               return -EFAULT;
-
-       if (len < sizeof(*saddr))
-               return -EINVAL;
-
-       if (rtipc_put_arg(user_info,
-                         getaddr.addr, saddr, sizeof(*saddr)))
-               return -EFAULT;
-
-       len = sizeof(*saddr);
-       if (rtipc_put_arg(user_info,
-                         getaddr.addrlen, &len, sizeof(len)))
-               return -EFAULT;
-
-       return 0;
-}
-
 static int __iddp_setsockopt(struct iddp_socket *sk,
                             rtdm_user_info_t *user_info,
                             void *arg)
@@ -901,7 +847,7 @@ static int __iddp_ioctl(struct iddp_socket *sk,
        switch (request) {
        
        case _RTIOC_CONNECT:
-               ret = __iddp_getuser_address(user_info, arg, &saddrp);
+               ret = rtipc_get_sockaddr(user_info, arg, &saddrp);
                if (ret)
                  return ret;
                ret = __iddp_connect_socket(sk, saddrp);
@@ -911,11 +857,11 @@ static int __iddp_ioctl(struct iddp_socket *sk,
                return -ENOSYS; /* Downgrade to NRT */
 
        case _RTIOC_GETSOCKNAME:
-               ret = __iddp_putuser_address(user_info, arg, &sk->name);
+               ret = rtipc_put_sockaddr(user_info, arg, &sk->name);
                break;
 
        case _RTIOC_GETPEERNAME:
-               ret = __iddp_putuser_address(user_info, arg, &sk->peer);
+               ret = rtipc_put_sockaddr(user_info, arg, &sk->peer);
                break;
 
        case _RTIOC_SETSOCKOPT:
@@ -954,7 +900,7 @@ static int iddp_ioctl(struct rtipc_private *priv,
                return __iddp_ioctl(sk, user_info, request, arg);
 
        saddrp = &saddr;
-       ret = __iddp_getuser_address(user_info, arg, &saddrp);
+       ret = rtipc_get_sockaddr(user_info, arg, &saddrp);
        if (ret)
                return ret;
        if (saddrp == NULL)
diff --git a/ksrc/drivers/ipc/internal.h b/ksrc/drivers/ipc/internal.h
index a30f5b9..1cbb581 100644
--- a/ksrc/drivers/ipc/internal.h
+++ b/ksrc/drivers/ipc/internal.h
@@ -78,16 +78,22 @@ static inline void rtipc_ns_to_timeval(struct timeval *tv, 
nanosecs_rel_t ns)
        tv->tv_usec = nsecs / 1000;
 }
 
-extern struct rtipc_protocol xddp_proto_driver;
-
-extern struct rtipc_protocol iddp_proto_driver;
-
-extern struct xnptree rtipc_ptree;
-
 int rtipc_get_arg(rtdm_user_info_t *user_info,
                  void *dst, const void *src, size_t len);
 
 int rtipc_put_arg(rtdm_user_info_t *user_info,
                  void *dst, const void *src, size_t len);
 
+int rtipc_get_sockaddr(rtdm_user_info_t *user_info,
+                      const void *arg, struct sockaddr_ipc **saddrp);
+
+int rtipc_put_sockaddr(rtdm_user_info_t *user_info, void *arg,
+                      const struct sockaddr_ipc *saddr);
+
+extern struct rtipc_protocol xddp_proto_driver;
+
+extern struct rtipc_protocol iddp_proto_driver;
+
+extern struct xnptree rtipc_ptree;
+
 #endif /* !_RTIPC_INTERNAL_H */
diff --git a/ksrc/drivers/ipc/rtipc.c b/ksrc/drivers/ipc/rtipc.c
index ea1d6ea..6874f3d 100644
--- a/ksrc/drivers/ipc/rtipc.c
+++ b/ksrc/drivers/ipc/rtipc.c
@@ -65,6 +65,60 @@ int rtipc_put_arg(rtdm_user_info_t *user_info,
        return 0;
 }
 
+int rtipc_get_sockaddr(rtdm_user_info_t *user_info,
+                      const void *arg, struct sockaddr_ipc **saddrp)
+{
+       struct _rtdm_setsockaddr_args setaddr;
+
+       if (rtipc_get_arg(user_info,
+                         &setaddr, arg, sizeof(setaddr)))
+               return -EFAULT;
+
+       if (setaddr.addrlen > 0) {
+               if (setaddr.addrlen != sizeof(**saddrp))
+                       return -EINVAL;
+
+               if (rtipc_get_arg(user_info, *saddrp,
+                                 setaddr.addr, sizeof(**saddrp)))
+                       return -EFAULT;
+       } else {
+               if (setaddr.addr)
+                       return -EINVAL;
+               *saddrp = NULL;
+       }
+
+       return 0;
+}
+
+int rtipc_put_sockaddr(rtdm_user_info_t *user_info, void *arg,
+                      const struct sockaddr_ipc *saddr)
+{
+       struct _rtdm_getsockaddr_args getaddr;
+       socklen_t len;
+
+       if (rtipc_get_arg(user_info,
+                         &getaddr, arg, sizeof(getaddr)))
+               return -EFAULT;
+
+       if (rtipc_get_arg(user_info,
+                         &len, getaddr.addrlen, sizeof(len)))
+               return -EFAULT;
+
+       if (len < sizeof(*saddr))
+               return -EINVAL;
+
+       if (rtipc_put_arg(user_info,
+                         getaddr.addr, saddr, sizeof(*saddr)))
+               return -EFAULT;
+
+       len = sizeof(*saddr);
+       if (rtipc_put_arg(user_info,
+                         getaddr.addrlen, &len, sizeof(len)))
+               return -EFAULT;
+
+       return 0;
+}
+
 static int rtipc_socket(struct rtdm_dev_context *context,
                        rtdm_user_info_t *user_info, int protocol)
 {
diff --git a/ksrc/drivers/ipc/xddp.c b/ksrc/drivers/ipc/xddp.c
index 26170e0..b7d378f 100644
--- a/ksrc/drivers/ipc/xddp.c
+++ b/ksrc/drivers/ipc/xddp.c
@@ -838,60 +838,6 @@ set_assoc:
        return 0;
 }
 
-static int __xddp_getuser_address(rtdm_user_info_t *user_info,
-                                 void *arg, struct sockaddr_ipc **sockaddrp)
-{
-       struct _rtdm_setsockaddr_args setaddr;
-
-       if (rtipc_get_arg(user_info,
-                         &setaddr, arg, sizeof(setaddr)))
-               return -EFAULT;
-
-       if (setaddr.addrlen > 0) {
-               if (setaddr.addrlen != sizeof(**sockaddrp))
-                       return -EINVAL;
-
-               if (rtipc_get_arg(user_info, *sockaddrp,
-                                 setaddr.addr, sizeof(**sockaddrp)))
-                       return -EFAULT;
-       } else {
-               if (setaddr.addr)
-                       return -EINVAL;
-               *sockaddrp = NULL;
-       }
-
-       return 0;
-}
-
-static int __xddp_putuser_address(rtdm_user_info_t *user_info, void *arg,
-                                 const struct sockaddr_ipc *sockaddr)
-{
-       struct _rtdm_getsockaddr_args getaddr;
-       socklen_t len;
-
-       if (rtipc_get_arg(user_info,
-                         &getaddr, arg, sizeof(getaddr)))
-               return -EFAULT;
-
-       if (rtipc_get_arg(user_info,
-                         &len, getaddr.addrlen, sizeof(len)))
-               return -EFAULT;
-
-       if (len < sizeof(*sockaddr))
-               return -EINVAL;
-
-       if (rtipc_put_arg(user_info,
-                         getaddr.addr, sockaddr, sizeof(*sockaddr)))
-               return -EFAULT;
-
-       len = sizeof(*sockaddr);
-       if (rtipc_put_arg(user_info,
-                         getaddr.addrlen, &len, sizeof(len)))
-               return -EFAULT;
-
-       return 0;
-}
-
 static int __xddp_setsockopt(struct xddp_socket *sk,
                             rtdm_user_info_t *user_info,
                             void *arg)
@@ -1075,17 +1021,17 @@ static int __xddp_ioctl(struct xddp_socket *sk,
        
        case _RTIOC_CONNECT:
                saddrp = &saddr;
-               ret = __xddp_getuser_address(user_info, arg, &saddrp);
+               ret = rtipc_get_sockaddr(user_info, arg, &saddrp);
                if (ret == 0)
                        ret = __xddp_connect_socket(sk, saddrp);
                break;
 
        case _RTIOC_GETSOCKNAME:
-               ret = __xddp_putuser_address(user_info, arg, &sk->name);
+               ret = rtipc_put_sockaddr(user_info, arg, &sk->name);
                break;
 
        case _RTIOC_GETPEERNAME:
-               ret = __xddp_putuser_address(user_info, arg, &sk->peer);
+               ret = rtipc_put_sockaddr(user_info, arg, &sk->peer);
                break;
 
        case _RTIOC_SETSOCKOPT:
@@ -1127,7 +1073,7 @@ static int xddp_ioctl(struct rtipc_private *priv,
                return __xddp_ioctl(sk, user_info, request, arg);
 
        saddrp = &saddr;
-       ret = __xddp_getuser_address(user_info, arg, &saddrp);
+       ret = rtipc_get_sockaddr(user_info, arg, &saddrp);
        if (ret)
                return ret;
        if (saddrp == NULL)


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to