2 * Unix SMB/CIFS implementation.
3 * Samba system utilities
4 * Copyright (C) Volker Lendecke 2014
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 #include "system/filesys.h"
24 ssize_t
iov_buflen(const struct iovec
*iov
, int iovcnt
)
26 return iov_buf(iov
, iovcnt
, NULL
, 0);
29 ssize_t
iov_buf(const struct iovec
*iov
, int iovcnt
,
30 uint8_t *buf
, size_t buflen
)
36 for (i
=0; i
<iovcnt
; i
++) {
37 size_t thislen
= iov
[i
].iov_len
;
40 tmp
= needed
+ thislen
;
48 if (needed
<= buflen
) {
49 memcpy(p
, iov
[i
].iov_base
, thislen
);
57 bool iov_advance(struct iovec
**iov
, int *iovcnt
, size_t n
)
59 struct iovec
*v
= *iov
;
67 v
->iov_base
= (char *)v
->iov_base
+ n
;
77 * Skip 0-length iovec's
79 * There might be empty buffers at the end of iov. Next time we do a
80 * readv/writev based on this iov would give 0 transferred bytes, also
81 * known as EPIPE. So we need to be careful discarding them.
84 while ((cnt
> 0) && (v
->iov_len
== 0)) {