1/* 2 * Berkeley style UIO structures - Alan Cox 1994. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 7 * 2 of the License, or (at your option) any later version. 8 */ 9#ifndef __LINUX_UIO_H 10#define __LINUX_UIO_H 11 12#include <uapi/linux/uio.h> 13 14 15struct kvec { 16 void *iov_base; /* and that should *never* hold a userland pointer */ 17 size_t iov_len; 18}; 19 20/* 21 * Total number of bytes covered by an iovec. 22 * 23 * NOTE that it is not safe to use this function until all the iovec's 24 * segment lengths have been validated. Because the individual lengths can 25 * overflow a size_t when added together. 26 */ 27static inline size_t iov_length(const struct iovec *iov, unsigned long nr_segs) 28{ 29 unsigned long seg; 30 size_t ret = 0; 31 32 for (seg = 0; seg < nr_segs; seg++) 33 ret += iov[seg].iov_len; 34 return ret; 35} 36 37unsigned long iov_shorten(struct iovec *iov, unsigned long nr_segs, size_t to); 38#endif 39