]>
Commit | Line | Data |
---|---|---|
f7a9f785 | 1 | /* Copyright (C) 2010-2016 Free Software Foundation, Inc. |
5bd6dc5c 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/>. */ | |
5bd6dc5c UD |
17 | |
18 | #include <errno.h> | |
19 | #include <sys/resource.h> | |
20 | #include <sys/types.h> | |
21 | #include <sysdep.h> | |
22 | #include <kernel-features.h> | |
23 | ||
24 | /* Put the soft and hard limits for RESOURCE in *RLIMITS. | |
25 | Returns 0 if successful, -1 if not (and sets errno). */ | |
26 | int | |
1a2325c0 | 27 | __getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits) |
5bd6dc5c UD |
28 | { |
29 | #ifdef __ASSUME_PRLIMIT64 | |
e5dee2c8 | 30 | return INLINE_SYSCALL (prlimit64, 4, 0, resource, NULL, rlimits); |
5bd6dc5c UD |
31 | #else |
32 | # ifdef __NR_prlimit64 | |
e5dee2c8 L |
33 | int res = INLINE_SYSCALL (prlimit64, 4, 0, resource, NULL, rlimits); |
34 | if (res == 0 || errno != ENOSYS) | |
5bd6dc5c UD |
35 | return res; |
36 | # endif | |
37 | struct rlimit rlimits32; | |
38 | ||
39 | if (__getrlimit (resource, &rlimits32) < 0) | |
40 | return -1; | |
41 | ||
42 | if (rlimits32.rlim_cur == RLIM_INFINITY) | |
43 | rlimits->rlim_cur = RLIM64_INFINITY; | |
44 | else | |
45 | rlimits->rlim_cur = rlimits32.rlim_cur; | |
46 | if (rlimits32.rlim_max == RLIM_INFINITY) | |
47 | rlimits->rlim_max = RLIM64_INFINITY; | |
48 | else | |
49 | rlimits->rlim_max = rlimits32.rlim_max; | |
50 | ||
51 | return 0; | |
52 | #endif | |
53 | } | |
1a2325c0 JM |
54 | libc_hidden_def (__getrlimit64) |
55 | #ifndef getrlimit64 | |
56 | weak_alias (__getrlimit64, getrlimit64) | |
57 | libc_hidden_weak (getrlimit64) | |
58 | #endif |