diff --git a/lib/util/iov_buf.c b/lib/util/iov_buf.c index a9224164068..0c184669721 100644 --- a/lib/util/iov_buf.c +++ b/lib/util/iov_buf.c @@ -22,76 +22,6 @@ #include "iov_buf.h" #include -ssize_t iov_buflen(const struct iovec *iov, int iovcnt) -{ - return iov_buf(iov, iovcnt, NULL, 0); -} - -ssize_t iov_buf(const struct iovec *iov, int iovcnt, - uint8_t *buf, size_t buflen) -{ - size_t needed = 0; - uint8_t *p = buf; - int i; - - for (i=0; i 0) { - memcpy(p, iov[i].iov_base, thislen); - p += thislen; - } - } - - return needed; -} - -bool iov_advance(struct iovec **iov, int *iovcnt, size_t n) -{ - struct iovec *v = *iov; - int cnt = *iovcnt; - - while (n > 0) { - if (cnt == 0) { - return false; - } - if (n < v->iov_len) { - v->iov_base = (char *)v->iov_base + n; - v->iov_len -= n; - break; - } - n -= v->iov_len; - v += 1; - cnt -= 1; - } - - /* - * Skip 0-length iovec's - * - * There might be empty buffers at the end of iov. Next time we do a - * readv/writev based on this iov would give 0 transferred bytes, also - * known as EPIPE. So we need to be careful discarding them. - */ - - while ((cnt > 0) && (v->iov_len == 0)) { - v += 1; - cnt -= 1; - } - - *iov = v; - *iovcnt = cnt; - return true; -} - uint8_t *iov_concat(TALLOC_CTX *mem_ctx, const struct iovec *iov, int count) { ssize_t buflen; diff --git a/lib/util/iov_buf.h b/lib/util/iov_buf.h index 07e08e1650b..cb330dea07a 100644 --- a/lib/util/iov_buf.h +++ b/lib/util/iov_buf.h @@ -24,10 +24,79 @@ #include #include "system/filesys.h" -ssize_t iov_buflen(const struct iovec *iov, int iovlen); +static inline ssize_t iov_buf(const struct iovec *iov, int iovcnt, - uint8_t *buf, size_t buflen); -bool iov_advance(struct iovec **iov, int *iovcnt, size_t n); + uint8_t *buf, size_t buflen) +{ + size_t needed = 0; + uint8_t *p = buf; + int i; + + for (i=0; i 0) { + memcpy(p, iov[i].iov_base, thislen); + p += thislen; + } + } + + return needed; +} + +static inline +ssize_t iov_buflen(const struct iovec *iov, int iovcnt) +{ + return iov_buf(iov, iovcnt, NULL, 0); +} + +static inline +bool iov_advance(struct iovec **iov, int *iovcnt, size_t n) +{ + struct iovec *v = *iov; + int cnt = *iovcnt; + + while (n > 0) { + if (cnt == 0) { + return false; + } + if (n < v->iov_len) { + v->iov_base = (char *)v->iov_base + n; + v->iov_len -= n; + break; + } + n -= v->iov_len; + v += 1; + cnt -= 1; + } + + /* + * Skip 0-length iovec's + * + * There might be empty buffers at the end of iov. Next time we do a + * readv/writev based on this iov would give 0 transferred bytes, also + * known as EPIPE. So we need to be careful discarding them. + */ + + while ((cnt > 0) && (v->iov_len == 0)) { + v += 1; + cnt -= 1; + } + + *iov = v; + *iovcnt = cnt; + return true; +} + uint8_t *iov_concat(TALLOC_CTX *mem_ctx, const struct iovec *iov, int count); #endif