Browse Source

add preadv/pwritev syscall wrappers

Rich Felker 12 years ago
parent
commit
ea544bfe80
3 changed files with 35 additions and 0 deletions
  1. 9 0
      include/sys/uio.h
  2. 13 0
      src/unistd/preadv.c
  3. 13 0
      src/unistd/pwritev.c

+ 9 - 0
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);

+ 13 - 0
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);

+ 13 - 0
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);