diff options
-rw-r--r-- | include/sys/uio.h | 9 | ||||
-rw-r--r-- | src/unistd/preadv.c | 13 | ||||
-rw-r--r-- | src/unistd/pwritev.c | 13 |
3 files changed, 35 insertions, 0 deletions
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 <sys/uio.h> +#include <unistd.h> +#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 <sys/uio.h> +#include <unistd.h> +#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); |