| OLD | NEW |
| 1 #include <sys/resource.h> | 1 #include <sys/resource.h> |
| 2 #include <errno.h> | 2 #include <errno.h> |
| 3 #include "syscall.h" | 3 #include "syscall.h" |
| 4 #include "libc.h" | 4 #include "libc.h" |
| 5 | 5 |
| 6 #define FIX(x) \ | 6 #define FIX(x) \ |
| 7 do { \ | 7 do { \ |
| 8 if ((x) >= SYSCALL_RLIM_INFINITY) \ | 8 if ((x) >= SYSCALL_RLIM_INFINITY) \ |
| 9 (x) = RLIM_INFINITY; \ | 9 (x) = RLIM_INFINITY; \ |
| 10 } while (0) | 10 } while (0) |
| 11 | 11 |
| 12 int getrlimit(int resource, struct rlimit* rlim) { | 12 int getrlimit(int resource, struct rlimit* rlim) { |
| 13 unsigned long k_rlim[2]; | 13 unsigned long k_rlim[2]; |
| 14 int ret = syscall(SYS_prlimit64, 0, resource, 0, rlim); | 14 int ret = syscall(SYS_prlimit64, 0, resource, 0, rlim); |
| 15 if (!ret) { | 15 if (!ret) { |
| 16 FIX(rlim->rlim_cur); | 16 FIX(rlim->rlim_cur); |
| 17 FIX(rlim->rlim_max); | 17 FIX(rlim->rlim_max); |
| 18 } | 18 } |
| 19 if (!ret || errno != ENOSYS) | 19 if (!ret || errno != ENOSYS) |
| 20 return ret; | 20 return ret; |
| 21 if (syscall(SYS_getrlimit, resource, k_rlim) < 0) | 21 if (syscall(SYS_getrlimit, resource, k_rlim) < 0) |
| 22 return -1; | 22 return -1; |
| 23 rlim->rlim_cur = k_rlim[0] == -1UL ? RLIM_INFINITY : k_rlim[0]; | 23 rlim->rlim_cur = k_rlim[0] == -1UL ? RLIM_INFINITY : k_rlim[0]; |
| 24 rlim->rlim_max = k_rlim[1] == -1UL ? RLIM_INFINITY : k_rlim[1]; | 24 rlim->rlim_max = k_rlim[1] == -1UL ? RLIM_INFINITY : k_rlim[1]; |
| 25 FIX(rlim->rlim_cur); | 25 FIX(rlim->rlim_cur); |
| 26 FIX(rlim->rlim_max); | 26 FIX(rlim->rlim_max); |
| 27 return 0; | 27 return 0; |
| 28 } | 28 } |
| 29 | |
| 30 LFS64(getrlimit); | |
| OLD | NEW |