skalibs

Mirror/fork of https://skarnet.org/software/skalibs/
git clone https://ccx.te2000.cz/git/skalibs
Log | Files | Refs | README | LICENSE

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 }