xref: /aosp_15_r20/external/musl/src/misc/getrlimit.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
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 Worker int 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