| OLD | NEW |
| 1 #define _GNU_SOURCE | 1 #define _GNU_SOURCE |
| 2 #include <sys/resource.h> | 2 #include <sys/resource.h> |
| 3 #include "syscall.h" | 3 #include "syscall.h" |
| 4 #include "libc.h" | 4 #include "libc.h" |
| 5 | 5 |
| 6 #define FIX(x) do{ if ((x)>=SYSCALL_RLIM_INFINITY) (x)=RLIM_INFINITY; }while(0) | 6 #define FIX(x) \ |
| 7 do { \ |
| 8 if ((x) >= SYSCALL_RLIM_INFINITY) \ |
| 9 (x) = RLIM_INFINITY; \ |
| 10 } while (0) |
| 7 | 11 |
| 8 int prlimit(pid_t pid, int resource, const struct rlimit *new_limit, struct rlim
it *old_limit) | 12 int prlimit(pid_t pid, |
| 9 { | 13 int resource, |
| 10 » struct rlimit tmp; | 14 const struct rlimit* new_limit, |
| 11 » int r; | 15 struct rlimit* old_limit) { |
| 12 » if (new_limit && SYSCALL_RLIM_INFINITY != RLIM_INFINITY) { | 16 struct rlimit tmp; |
| 13 » » tmp = *new_limit; | 17 int r; |
| 14 » » FIX(tmp.rlim_cur); | 18 if (new_limit && SYSCALL_RLIM_INFINITY != RLIM_INFINITY) { |
| 15 » » FIX(tmp.rlim_max); | 19 tmp = *new_limit; |
| 16 » » new_limit = &tmp; | 20 FIX(tmp.rlim_cur); |
| 17 » } | 21 FIX(tmp.rlim_max); |
| 18 » r = syscall(SYS_prlimit64, pid, resource, new_limit, old_limit); | 22 new_limit = &tmp; |
| 19 » if (!r && old_limit && SYSCALL_RLIM_INFINITY != RLIM_INFINITY) { | 23 } |
| 20 » » FIX(old_limit->rlim_cur); | 24 r = syscall(SYS_prlimit64, pid, resource, new_limit, old_limit); |
| 21 » » FIX(old_limit->rlim_max); | 25 if (!r && old_limit && SYSCALL_RLIM_INFINITY != RLIM_INFINITY) { |
| 22 » } | 26 FIX(old_limit->rlim_cur); |
| 23 » return r; | 27 FIX(old_limit->rlim_max); |
| 28 } |
| 29 return r; |
| 24 } | 30 } |
| 25 | 31 |
| 26 #undef prlimit64 | 32 #undef prlimit64 |
| 27 LFS64(prlimit); | 33 LFS64(prlimit); |
| OLD | NEW |