Move all files into ports/ subdirectory in preparation for merge with glibc
[jlayton/glibc.git] / ports / sysdeps / unix / sysv / linux / mips / mips64 / n32 / posix_fallocate64.c
1 /* Copyright (C) 2007, 2008 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library.  If not, see
16    <http://www.gnu.org/licenses/>.  */
17
18 #include <fcntl.h>
19 #include <kernel-features.h>
20 #include <sysdep.h>
21
22 extern int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len);
23 #define __posix_fallocate64_l64 static internal_fallocate64
24 #include <sysdeps/posix/posix_fallocate64.c>
25 #undef __posix_fallocate64_l64
26
27 #if !defined __ASSUME_FALLOCATE && defined __NR_fallocate
28 /* Defined in posix_fallocate.c.  */
29 extern int __have_fallocate attribute_hidden;
30 #endif
31
32
33 /* Reserve storage for the data of the file associated with FD.  */
34 int
35 __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len)
36 {
37 #ifdef __NR_fallocate
38 # ifndef __ASSUME_FALLOCATE
39   if (__builtin_expect (__have_fallocate >= 0, 1))
40 # endif
41     {
42       INTERNAL_SYSCALL_DECL (err);
43       int res = INTERNAL_SYSCALL (fallocate, err, 4, fd, 0, offset, len);
44
45       if (! INTERNAL_SYSCALL_ERROR_P (res, err))
46         return 0;
47
48 # ifndef __ASSUME_FALLOCATE
49       if (__builtin_expect (INTERNAL_SYSCALL_ERRNO (res, err) == ENOSYS, 0))
50         __have_fallocate = -1;
51       else
52 # endif
53         if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP)
54           return INTERNAL_SYSCALL_ERRNO (res, err);
55     }
56 #endif
57
58   return internal_fallocate64 (fd, offset, len);
59 }