diff options
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | libgcompat/uio.c | 32 |
2 files changed, 33 insertions, 0 deletions
@@ -34,6 +34,7 @@ LIBGCOMPAT_SRC = \ libgcompat/syslog.c \ libgcompat/time.c \ libgcompat/ucontext.c \ + libgcompat/uio.c \ libgcompat/unistd.c \ libgcompat/utmp.c \ libgcompat/version.c \ diff --git a/libgcompat/uio.c b/libgcompat/uio.c new file mode 100644 index 0000000..797cb3a --- /dev/null +++ b/libgcompat/uio.c @@ -0,0 +1,32 @@ +#include <sys/syscall.h> +#include <sys/uio.h> /* iovec, pwritev, preadv */ +#include <errno.h> /* errno */ +#include <unistd.h> /* syscall */ + +ssize_t pwritev64v2(int fd, const struct iovec *iov, int count, off_t ofs, int flags) +{ + if (flags != 0) { + errno = ENOTSUP; + return -1; + } + + if (ofs == -1) { + return writev(fd, iov, count); + } + + return syscall(__NR_pwritev2, fd, iov, count, ofs); +} + +ssize_t preadv64v2(int fd, const struct iovec *iov, int count, off_t ofs, int flags) +{ + if (flags != 0) { + errno = ENOTSUP; + return -1; + } + + if (ofs == -1) { + return readv(fd, iov, count); + } + + return syscall(__NR_preadv2, fd, iov, count, ofs); +} |