From ea544bfe808ef74c6d1727312069c12dd1c5c150 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Sun, 9 Sep 2012 16:29:33 -0400 Subject: add preadv/pwritev syscall wrappers --- include/sys/uio.h | 9 +++++++++ src/unistd/preadv.c | 13 +++++++++++++ src/unistd/pwritev.c | 13 +++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 src/unistd/preadv.c create mode 100644 src/unistd/pwritev.c diff --git a/include/sys/uio.h b/include/sys/uio.h index 624ff422..60c5c2fe 100644 --- a/include/sys/uio.h +++ b/include/sys/uio.h @@ -11,6 +11,10 @@ extern "C" { #define __NEED_ssize_t #define __NEED_struct_iovec +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define __NEED_off_t +#endif + #ifdef _GNU_SOURCE #define __NEED_pid_t #endif @@ -20,6 +24,11 @@ extern "C" { ssize_t readv (int, const struct iovec *, int); ssize_t writev (int, const struct iovec *, int); +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +ssize_t preadv (int, const struct iovec *, int, off_t); +ssize_t pwritev (int, const struct iovec *, int, off_t); +#endif + #ifdef _GNU_SOURCE ssize_t process_vm_writev(pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long); ssize_t process_vm_readv(pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long); diff --git a/src/unistd/preadv.c b/src/unistd/preadv.c new file mode 100644 index 00000000..371e46f8 --- /dev/null +++ b/src/unistd/preadv.c @@ -0,0 +1,13 @@ +#define _GNU_SOURCE +#include +#include +#include "syscall.h" +#include "libc.h" + +ssize_t preadv(int fd, const struct iovec *iov, int count, off_t ofs) +{ + return syscall_cp(SYS_preadv, fd, iov, count, + (long)(ofs), (long)(ofs>>32)); +} + +LFS64(preadv); diff --git a/src/unistd/pwritev.c b/src/unistd/pwritev.c new file mode 100644 index 00000000..1df268d5 --- /dev/null +++ b/src/unistd/pwritev.c @@ -0,0 +1,13 @@ +#define _GNU_SOURCE +#include +#include +#include "syscall.h" +#include "libc.h" + +ssize_t pwritev(int fd, const struct iovec *iov, int count, off_t ofs) +{ + return syscall_cp(SYS_pwritev, fd, iov, count, + (long)(ofs), (long)(ofs>>32)); +} + +LFS64(pwritev); -- cgit v1.2.1