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