mirror of
https://sourceware.org/git/glibc.git
synced 2025-12-24 17:51:17 +03:00
Consolidate pwrite/pwrite64 implementations
This patch consolidates all the pwrite/pwrite64 implementation for Linux
in only one (sysdeps/unix/sysv/linux/pwrite{64}.c). It also removes the
syscall from the auto-generation using assembly macros.
For pwrite{64} offset argument placement the new SYSCALL_LL{64} macro
is used. For pwrite ports that do not define __NR_pwrite will use
__NR_pwrite64 and for pwrite64 ports that dot define __NR_pwrite64 will
use __NR_pwrite for the syscall.
Checked on x86_64, x32, i386, aarch64, and ppc64le.
* sysdeps/unix/sysv/linux/arm/pwrite.c: Remove file.
* sysdeps/unix/sysv/linux/arm/pwrite64.c: Likewise.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite.c: Likewise.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite64.c: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/pwrite64.c: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list (prite): Remove
syscalls generation.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
[__NR_pwrite64] (__NR_write): Remove define.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h
[__NR_pwrite64] (__NR_write): Remove define.
* sysdeps/unix/sysv/linux/pwrite.c [__NR_pwrite64] (__NR_pwrite):
Remove define.
(__libc_pwrite): Use SYSCALL_LL macro on offset argument.
* sysdeps/unix/sysv/linux/pwrite64.c [__NR_pwrite64] (__NR_pwrite):
Remove define.
(__libc_pwrite64): Use SYSCALL_LL64 macro on offset argument.
* sysdeps/unix/sysv/linux/sh/pwrite.c: Rewrite using default
Linux implementation as base.
* sysdeps/unix/sysv/linux/sh/pwrite64.c: Likewise.
* sysdeps/unix/sysv/linux/mips/pwrite.c: Likewise.
* sysdeps/unix/sysv/linux/mips/pwrite64.c: Likewise.
This commit is contained in:
committed by
Adhemerval Zanella
parent
77a4fbd536
commit
071af4769f
@@ -16,33 +16,22 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <endian.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <sysdep-cancel.h>
|
||||
#include <sys/syscall.h>
|
||||
|
||||
#ifdef __NR_pwrite64 /* Newer kernels renamed but it's the same. */
|
||||
# ifdef __NR_pwrite
|
||||
# error "__NR_pwrite and __NR_pwrite64 both defined???"
|
||||
#if __WORDSIZE != 64 || defined (__ASSUME_OFF_DIFF_OFF64)
|
||||
|
||||
# ifndef __NR_pwrite
|
||||
# define __NR_pwrite __NR_pwrite64
|
||||
# endif
|
||||
# define __NR_pwrite __NR_pwrite64
|
||||
#endif
|
||||
|
||||
|
||||
ssize_t
|
||||
__libc_pwrite (int fd, const void *buf, size_t count, off_t offset)
|
||||
{
|
||||
ssize_t result;
|
||||
|
||||
assert (sizeof (offset) == 4);
|
||||
result = SYSCALL_CANCEL (pwrite, fd, buf, count,
|
||||
__LONG_LONG_PAIR (offset >> 31, offset));
|
||||
|
||||
return result;
|
||||
return SYSCALL_CANCEL (pwrite, fd, buf, count,
|
||||
__ALIGNMENT_ARG SYSCALL_LL (offset));
|
||||
}
|
||||
|
||||
strong_alias (__libc_pwrite, __pwrite)
|
||||
weak_alias (__libc_pwrite, pwrite)
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user