mirror of
git://git.musl-libc.org/musl
synced 2025-03-06 20:48:29 +01:00
only use getrlimit/setrlimit syscalls if they exist
riscv32 and future architectures only provide prlimit64.
This commit is contained in:
parent
8910efd0e4
commit
41149ea8c7
2 changed files with 11 additions and 1 deletions
|
@ -6,12 +6,13 @@
|
|||
|
||||
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);
|
||||
}
|
||||
#ifdef SYS_getrlimit
|
||||
unsigned long k_rlim[2];
|
||||
if (!ret || errno != ENOSYS)
|
||||
return ret;
|
||||
if (syscall(SYS_getrlimit, resource, k_rlim) < 0)
|
||||
|
@ -21,6 +22,9 @@ int getrlimit(int resource, struct rlimit *rlim)
|
|||
FIX(rlim->rlim_cur);
|
||||
FIX(rlim->rlim_max);
|
||||
return 0;
|
||||
#else
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
weak_alias(getrlimit, getrlimit64);
|
||||
|
|
|
@ -12,12 +12,14 @@ struct ctx {
|
|||
int err;
|
||||
};
|
||||
|
||||
#ifdef SYS_setrlimit
|
||||
static void do_setrlimit(void *p)
|
||||
{
|
||||
struct ctx *c = p;
|
||||
if (c->err>0) return;
|
||||
c->err = -__syscall(SYS_setrlimit, c->res, c->lim);
|
||||
}
|
||||
#endif
|
||||
|
||||
int setrlimit(int resource, const struct rlimit *rlim)
|
||||
{
|
||||
|
@ -29,6 +31,7 @@ int setrlimit(int resource, const struct rlimit *rlim)
|
|||
rlim = &tmp;
|
||||
}
|
||||
int ret = __syscall(SYS_prlimit64, 0, resource, rlim, 0);
|
||||
#ifdef SYS_setrlimit
|
||||
if (ret != -ENOSYS) return __syscall_ret(ret);
|
||||
|
||||
struct ctx c = {
|
||||
|
@ -42,6 +45,9 @@ int setrlimit(int resource, const struct rlimit *rlim)
|
|||
return -1;
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return __syscall_ret(ret);
|
||||
#endif
|
||||
}
|
||||
|
||||
weak_alias(setrlimit, setrlimit64);
|
||||
|
|
Loading…
Add table
Reference in a new issue