brintos

brintos / llvm-project-archived public Read only

0
0
Text · 745 B · 11760d3 Raw
37 lines · cpp
1// RUN: %clangxx -O0 %s -o %t && %run %t2 3// REQUIRES: glibc4 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) 012#endif13 14#if !__GLIBC_PREREQ(2, 26)15#define preadv2(a, b, c, d, e) preadv(a, b, c, d) 16#endif17 18int 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