]>
Commit | Line | Data |
---|---|---|
04277e02 | 1 | /* Copyright (C) 2003-2019 Free Software Foundation, Inc. |
137ffcdc UD |
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 | |
59ba27a6 PE |
15 | License along with the GNU C Library; if not, see |
16 | <http://www.gnu.org/licenses/>. */ | |
137ffcdc UD |
17 | |
18 | #include <errno.h> | |
19 | #include <fcntl.h> | |
96b7fe42 | 20 | #include <shlib-compat.h> |
137ffcdc UD |
21 | |
22 | int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise); | |
397286ea | 23 | libc_hidden_proto (__posix_fadvise64_l64) |
96b7fe42 AZ |
24 | |
25 | /* Both arm and powerpc implements fadvise64_64 with last 'advise' argument | |
26 | just after 'fd' to avoid the requirement of implementing 7-arg syscalls. | |
27 | ARM also defines __NR_fadvise64_64 as __NR_arm_fadvise64_64. | |
28 | ||
96b7fe42 AZ |
29 | s390 implements fadvice64_64 using a specific struct with arguments |
30 | packed inside. This is the only implementation handled in arch-specific | |
31 | code. */ | |
32 | ||
96b7fe42 AZ |
33 | #ifndef __NR_fadvise64_64 |
34 | # define __NR_fadvise64_64 __NR_fadvise64 | |
35 | #endif | |
137ffcdc UD |
36 | |
37 | /* Advice the system about the expected behaviour of the application with | |
38 | respect to the file associated with FD. */ | |
39 | ||
40 | int | |
41 | __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) | |
42 | { | |
137ffcdc | 43 | INTERNAL_SYSCALL_DECL (err); |
96b7fe42 AZ |
44 | #ifdef __ASSUME_FADVISE64_64_6ARG |
45 | int ret = INTERNAL_SYSCALL_CALL (fadvise64_64, err, fd, advise, | |
46 | SYSCALL_LL64 (offset), SYSCALL_LL64 (len)); | |
47 | #else | |
48 | int ret = INTERNAL_SYSCALL_CALL (fadvise64_64, err, fd, | |
49 | __ALIGNMENT_ARG SYSCALL_LL64 (offset), | |
50 | SYSCALL_LL64 (len), advise); | |
51 | #endif | |
137ffcdc UD |
52 | if (!INTERNAL_SYSCALL_ERROR_P (ret, err)) |
53 | return 0; | |
0e1d9911 | 54 | return INTERNAL_SYSCALL_ERRNO (ret, err); |
137ffcdc UD |
55 | } |
56 | ||
96b7fe42 AZ |
57 | /* The type of the len argument was changed from size_t to off_t in |
58 | POSIX.1-2003 TC1. */ | |
59 | #ifndef __OFF_T_MATCHES_OFF64_T | |
60 | # if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) | |
61 | int __posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise); | |
137ffcdc UD |
62 | |
63 | int | |
d3a4a571 | 64 | attribute_compat_text_section |
137ffcdc UD |
65 | __posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise) |
66 | { | |
67 | return __posix_fadvise64_l64 (fd, offset, len, advise); | |
68 | } | |
69 | ||
70 | versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3); | |
71 | compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2); | |
96b7fe42 AZ |
72 | # else |
73 | weak_alias (__posix_fadvise64_l64, posix_fadvise64); | |
74 | # endif | |
137ffcdc | 75 | #else |
96b7fe42 AZ |
76 | weak_alias (__posix_fadvise64_l64, posix_fadvise64); |
77 | strong_alias (__posix_fadvise64_l64, posix_fadvise); | |
137ffcdc | 78 | #endif |
397286ea | 79 | libc_hidden_def (__posix_fadvise64_l64) |