// RUN: %clangxx -O0 %s -o %t && %run %t // REQUIRES: glibc #include #include #include #include #if !defined(__GLIBC_PREREQ) #define __GLIBC_PREREQ(a, b) 0 #endif #if !__GLIBC_PREREQ(2, 26) #define preadv2(a, b, c, d, e) preadv(a, b, c, d) #endif int main(void) { int fd = open("/proc/self/stat", O_RDONLY); char bufa[7]; char bufb[7]; struct iovec vec[2]; vec[0].iov_base = bufa + 4; vec[0].iov_len = 1; vec[1].iov_base = bufb; vec[1].iov_len = sizeof(bufb); ssize_t rd = preadv2(fd, vec, 2, 0, 0); assert(rd > 0); vec[0].iov_base = bufa; rd = preadv2(fd, vec, 2, 0, 0); assert(rd > 0); rd = preadv2(fd, vec, 5, -25, 0); assert(rd < 0); close(fd); return 0; }