buffer_putvall.c (588B)
1 /* ISC license. */ 2 3 #include <sys/uio.h> 4 #include <errno.h> 5 #include <skalibs/siovec.h> 6 #include <skalibs/buffer.h> 7 8 int buffer_putvall (buffer *b, struct iovec const *v, unsigned int n, size_t *written) 9 { 10 size_t len = siovec_len(v, n) ; 11 size_t w = n ; 12 struct iovec vv[n ? n : 1] ; 13 if (*written > len) return (errno = EINVAL, 0) ; 14 while (w--) vv[w] = v[w] ; 15 w = *written ; 16 for (;;) 17 { 18 siovec_seek(vv, n, w) ; 19 w = buffer_putvnoflush(b, vv, n) ; 20 *written += w ; 21 if (*written >= len) return 1 ; 22 buffer_flush(b) ; 23 if (buffer_isfull(b)) return 0 ; 24 } 25 }