mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	This patch consolidates all the posix_fallocate{64} implementation for Linux
in only one (sysdeps/unix/sysv/linux/posix_fallocate{64}.c).  It also removes
the syscall from the auto-generation using assembly macros.
The macro SYSCALL_LL{64} is used to handle the offset argument along with
the new INTERNAL_SYSCALL_CALL macro to define correct argument count for
internal INTERNAL_SYSCALL call.
Tested on x86_64, i686, x32, aarch64, ppc64le, and armhf.
	* io/Makefile (tests): Add tst-posix_fallocate and
	tst-posix_fallocate64.
	* io/tst-posix_fallocate-common.c: New file.
	* io/tst-posix_fallocate.c: Likewise.
	* io/tst-posix_fallocate64.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c: Remove
	file.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c:
	Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate64.c:
	Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c: Likewise.
	* sysdeps/unix/sysv/linux/posix_fallocate.c (posix_fallocate): Use
	SYSCALL_LL to pass both offset and len arguments.
	* sysdeps/unix/sysv/linux/posix_fallocate64.c (posix_fallocate64):
	Likewise.
	* sysdeps/unix/sysv/linux/x86_64/syscalls.list (pwrite64): Add
	__libc_pwrite64 alias used by posix_fallocate64.
		
	
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Copyright (C) 2007-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
 | |
|    <http://www.gnu.org/licenses/>.  */
 | |
| 
 | |
| #include <fcntl.h>
 | |
| #include <sysdep.h>
 | |
| 
 | |
| extern int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len);
 | |
| #define __posix_fallocate64_l64 static internal_fallocate64
 | |
| #include <sysdeps/posix/posix_fallocate64.c>
 | |
| #undef __posix_fallocate64_l64
 | |
| 
 | |
| /* Reserve storage for the data of the file associated with FD.  */
 | |
| int
 | |
| __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len)
 | |
| {
 | |
|   INTERNAL_SYSCALL_DECL (err);
 | |
| #ifdef INTERNAL_SYSCALL_TYPES
 | |
|   int res = INTERNAL_SYSCALL_TYPES (fallocate, err, 4, int, fd,
 | |
|                                     int, 0, off_t, offset,
 | |
|                                     off_t, len);
 | |
| #else
 | |
|   int res = INTERNAL_SYSCALL_CALL (fallocate, err, fd, 0,
 | |
| 				   SYSCALL_LL64 (offset), SYSCALL_LL64 (len));
 | |
| #endif
 | |
|   if (! INTERNAL_SYSCALL_ERROR_P (res, err))
 | |
|     return 0;
 | |
|   if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP)
 | |
|     return INTERNAL_SYSCALL_ERRNO (res, err);
 | |
|   return internal_fallocate64 (fd, offset, len);
 | |
| }
 |