github.com/afumu/libc@v0.0.6/musl/src/linux/prlimit.c (about) 1 #define _GNU_SOURCE 2 #include <sys/resource.h> 3 #include "syscall.h" 4 5 #define FIX(x) do{ if ((x)>=SYSCALL_RLIM_INFINITY) (x)=RLIM_INFINITY; }while(0) 6 7 int prlimit(pid_t pid, int resource, const struct rlimit *new_limit, struct rlimit *old_limit) 8 { 9 struct rlimit tmp; 10 int r; 11 if (new_limit && SYSCALL_RLIM_INFINITY != RLIM_INFINITY) { 12 tmp = *new_limit; 13 FIX(tmp.rlim_cur); 14 FIX(tmp.rlim_max); 15 new_limit = &tmp; 16 } 17 r = syscall(SYS_prlimit64, pid, resource, new_limit, old_limit); 18 if (!r && old_limit && SYSCALL_RLIM_INFINITY != RLIM_INFINITY) { 19 FIX(old_limit->rlim_cur); 20 FIX(old_limit->rlim_max); 21 } 22 return r; 23 } 24 25 #undef prlimit64 26 weak_alias(prlimit, prlimit64);