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