ssize_t __libc_preadv (int fd, const struct iovec *vector, int count, off_t offset) { if (SINGLE_THREAD_P) return do_preadv (fd, vector, count, offset); int oldtype = LIBC_CANCEL_ASYNC (); ssize_t result = do_preadv (fd, vector, count, offset); LIBC_CANCEL_RESET (oldtype); return result; }
SYSCALL_DEFINE5(preadv, unsigned long, fd, const struct iovec __user *, vec, unsigned long, vlen, unsigned long, pos_l, unsigned long, pos_h) { loff_t pos = pos_from_hilo(pos_h, pos_l); return do_preadv(fd, vec, vlen, pos, 0); }
SYSCALL_DEFINE6(preadv2, unsigned long, fd, const struct iovec __user *, vec, unsigned long, vlen, unsigned long, pos_l, unsigned long, pos_h, int, flags) { loff_t pos = pos_from_hilo(pos_h, pos_l); if (pos == -1) return do_readv(fd, vec, vlen, flags); return do_preadv(fd, vec, vlen, pos, flags); }
static int do_pread( int fd, off64_t offset, ssize_t count, ssize_t buffer_size) { if (!vectors) return pread64(fd, buffer, min(count, buffer_size), offset); return do_preadv(fd, offset, count, buffer_size); }