From ae0bcade2ae104331974563c92fe62cf6ed7c975 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Wed, 28 Dec 2016 03:13:31 +0100 Subject: add wrappers for preadv/pwritev --- include/sys/uio.h | 26 ++++++++++++++++++++++++++ libc/sysdeps/linux/common/preadv.c | 26 ++++++++++++++++++++++++++ libc/sysdeps/linux/common/pwritev.c | 26 ++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 libc/sysdeps/linux/common/preadv.c create mode 100644 libc/sysdeps/linux/common/pwritev.c diff --git a/include/sys/uio.h b/include/sys/uio.h index efc681e7b..78341ed40 100644 --- a/include/sys/uio.h +++ b/include/sys/uio.h @@ -48,6 +48,32 @@ extern ssize_t readv (int __fd, const struct iovec *__iovec, int __count); __THROW. */ extern ssize_t writev (int __fd, const struct iovec *__iovec, int __count); +#ifdef __USE_MISC +/* Read data from file descriptor FD at the given position OFFSET + without change the file pointer, and put the result in the buffers + described by IOVEC, which is a vector of COUNT 'struct iovec's. + The buffers are filled in the order specified. Operates just like + 'pread' (see ) except that data are put in IOVEC instead + of a contiguous buffer. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t preadv (int __fd, const struct iovec *__iovec, int __count, + __off_t __offset) __wur; + +/* Write data pointed by the buffers described by IOVEC, which is a + vector of COUNT 'struct iovec's, to file descriptor FD at the given + position OFFSET without change the file pointer. The data is + written in the order specified. Operates just like 'pwrite' (see + ) except that the data are taken from IOVEC instead of a + contiguous buffer. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t pwritev (int __fd, const struct iovec *__iovec, int __count, + __off_t __offset) __wur; +#endif /* Use misc. */ + __END_DECLS #endif /* sys/uio.h */ diff --git a/libc/sysdeps/linux/common/preadv.c b/libc/sysdeps/linux/common/preadv.c new file mode 100644 index 000000000..20adc6d6d --- /dev/null +++ b/libc/sysdeps/linux/common/preadv.c @@ -0,0 +1,26 @@ +/* Copyright (C) 2009-2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include + +ssize_t +preadv (int fd, const struct iovec *vector, int count, off_t offset) +{ + return INLINE_SYSCALL (preadv, 4, fd, vector, count, offset); +} diff --git a/libc/sysdeps/linux/common/pwritev.c b/libc/sysdeps/linux/common/pwritev.c new file mode 100644 index 000000000..cbc58f95d --- /dev/null +++ b/libc/sysdeps/linux/common/pwritev.c @@ -0,0 +1,26 @@ +/* Copyright (C) 2009-2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include + +ssize_t +pwritev (int fd, const struct iovec *vector, int count, off_t offset) +{ + return INLINE_SYSCALL (pwritev, 4, fd, vector, count, offset); +} -- cgit v1.2.3