1 // RUN: %clangxx -O0 %s -o %t 2 3 // REQUIRES: glibc 4 5 #include <assert.h> 6 #include <fcntl.h> 7 #include <sys/uio.h> 8 #include <unistd.h> 9 10 #if !defined(__GLIBC_PREREQ) 11 #define __GLIBC_PREREQ(a, b) 0 12 #endif 13 14 #if !__GLIBC_PREREQ(2, 26) 15 #define preadv2(a, b, c, d, e) preadv(a, b, c, d) 16 #endif 17 18 int main(void) { 19 int fd = open("/proc/self/stat", O_RDONLY); 20 char bufa[7]; 21 char bufb[7]; 22 struct iovec vec[2]; 23 vec[0].iov_base = bufa + 4; 24 vec[0].iov_len = 1; 25 vec[1].iov_base = bufb; 26 vec[1].iov_len = sizeof(bufb); 27 ssize_t rd = preadv2(fd, vec, 2, 0, 0); 28 assert(rd > 0); 29 vec[0].iov_base = bufa; 30 rd = preadv2(fd, vec, 2, 0, 0); 31 assert(rd > 0); 32 rd = preadv2(fd, vec, 5, -25, 0); 33 assert(rd < 0); 34 close(fd); 35 return 0; 36 } 37