123456789101112131415161718192021222324252627 |
- #include <sys/resource.h>
- #include <errno.h>
- #include "syscall.h"
- #include "libc.h"
- #define FIX(x) do{ if ((x)>=SYSCALL_RLIM_INFINITY) (x)=RLIM_INFINITY; }while(0)
- int getrlimit(int resource, struct rlimit *rlim)
- {
- unsigned long k_rlim[2];
- int ret = syscall(SYS_prlimit64, 0, resource, 0, rlim);
- if (!ret) {
- FIX(rlim->rlim_cur);
- FIX(rlim->rlim_max);
- }
- if (!ret || errno != ENOSYS)
- return ret;
- if (syscall(SYS_getrlimit, resource, k_rlim) < 0)
- return -1;
- rlim->rlim_cur = k_rlim[0] == -1UL ? RLIM_INFINITY : k_rlim[0];
- rlim->rlim_max = k_rlim[1] == -1UL ? RLIM_INFINITY : k_rlim[1];
- FIX(rlim->rlim_cur);
- FIX(rlim->rlim_max);
- return 0;
- }
- LFS64(getrlimit);
|