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 15 struct 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 */ 27 static 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 37 unsigned long iov_shorten(struct iovec *iov, unsigned long nr_segs, size_t to); 38 #endif 39