Module: xenomai-head Branch: master Commit: 3d453b310fbba5e69ddcb98b2da7062dfe904270 URL: http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=3d453b310fbba5e69ddcb98b2da7062dfe904270
Author: Philippe Gerum <r...@xenomai.org> Date: Wed Sep 9 17:36:17 2009 +0200 rtipc: introduce rtipc_get_iov_flatlen() --- ksrc/drivers/ipc/iddp.c | 18 ++---------------- ksrc/drivers/ipc/internal.h | 2 ++ ksrc/drivers/ipc/rtipc.c | 16 ++++++++++++++++ ksrc/drivers/ipc/xddp.c | 18 ++---------------- 4 files changed, 22 insertions(+), 32 deletions(-) diff --git a/ksrc/drivers/ipc/iddp.c b/ksrc/drivers/ipc/iddp.c index 2c18703..e1f0d46 100644 --- a/ksrc/drivers/ipc/iddp.c +++ b/ksrc/drivers/ipc/iddp.c @@ -261,14 +261,7 @@ static ssize_t __iddp_recvmsg(struct rtipc_private *priv, if (!test_bit(_IDDP_BOUND, &sk->status)) return -EAGAIN; - /* Compute available iovec space to maxlen. */ - for (maxlen = 0, nvec = 0; nvec < iovlen; nvec++) { - ssize_t l = iov[nvec].iov_len; - if (l < 0 || maxlen + l < maxlen) /* SuS wants this. */ - return -EINVAL; - maxlen += l; - } - + maxlen = rtipc_get_iov_flatlen(iov, iovlen); if (maxlen == 0) return 0; @@ -396,14 +389,7 @@ static ssize_t __iddp_sendmsg(struct rtipc_private *priv, ssize_t len, rdlen, vlen; struct xnbufd bufd; - /* Compute the required buffer space. */ - for (len = 0, nvec = 0; nvec < iovlen; nvec++) { - ssize_t l = iov[nvec].iov_len; - if (l < 0 || len + l < len) /* SuS wants this. */ - return -EINVAL; - len += l; - } - + len = rtipc_get_iov_flatlen(iov, iovlen); if (len == 0) return 0; diff --git a/ksrc/drivers/ipc/internal.h b/ksrc/drivers/ipc/internal.h index 1cbb581..b12b3c9 100644 --- a/ksrc/drivers/ipc/internal.h +++ b/ksrc/drivers/ipc/internal.h @@ -90,6 +90,8 @@ int rtipc_get_sockaddr(rtdm_user_info_t *user_info, int rtipc_put_sockaddr(rtdm_user_info_t *user_info, void *arg, const struct sockaddr_ipc *saddr); +ssize_t rtipc_get_iov_flatlen(struct iovec *iov, int iovlen); + extern struct rtipc_protocol xddp_proto_driver; extern struct rtipc_protocol iddp_proto_driver; diff --git a/ksrc/drivers/ipc/rtipc.c b/ksrc/drivers/ipc/rtipc.c index 6874f3d..0ab66f4 100644 --- a/ksrc/drivers/ipc/rtipc.c +++ b/ksrc/drivers/ipc/rtipc.c @@ -119,6 +119,22 @@ int rtipc_put_sockaddr(rtdm_user_info_t *user_info, void *arg, return 0; } +ssize_t rtipc_get_iov_flatlen(struct iovec *iov, int iovlen) +{ + ssize_t len; + int nvec; + + /* Return the flattened vector length. */ + for (len = 0, nvec = 0; nvec < iovlen; nvec++) { + ssize_t l = iov[nvec].iov_len; + if (l < 0 || len + l < len) /* SuS wants this. */ + return -EINVAL; + len += l; + } + + return len; +} + 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 76e95a9..d2c7a68 100644 --- a/ksrc/drivers/ipc/xddp.c +++ b/ksrc/drivers/ipc/xddp.c @@ -299,14 +299,7 @@ static ssize_t __xddp_recvmsg(struct rtipc_private *priv, if (!test_bit(_XDDP_BOUND, &sk->status)) return -EAGAIN; - /* Compute available iovec space to maxlen. */ - for (maxlen = 0, nvec = 0; nvec < iovlen; nvec++) { - ssize_t l = iov[nvec].iov_len; - if (l < 0 || maxlen + l < maxlen) /* SuS wants this. */ - return -EINVAL; - maxlen += l; - } - + maxlen = rtipc_get_iov_flatlen(iov, iovlen); if (maxlen == 0) return 0; @@ -495,14 +488,7 @@ static ssize_t __xddp_sendmsg(struct rtipc_private *priv, int nvec, to, from; struct xnbufd bufd; - /* Compute the required buffer space. */ - for (len = 0, nvec = 0; nvec < iovlen; nvec++) { - ssize_t l = iov[nvec].iov_len; - if (l < 0 || len + l < len) /* SuS wants this. */ - return -EINVAL; - len += l; - } - + len = rtipc_get_iov_flatlen(iov, iovlen); if (len == 0) return 0; _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git