diff options
Diffstat (limited to 'libgcompat/uio.c')
-rw-r--r-- | libgcompat/uio.c | 32 |
1 files changed, 32 insertions, 0 deletions
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); +} |