diff --git a/headers/posix/sys/resource.h b/headers/posix/sys/resource.h index d9d9e75093..05dbba4770 100644 --- a/headers/posix/sys/resource.h +++ b/headers/posix/sys/resource.h @@ -25,6 +25,10 @@ struct rlimit { #define RLIMIT_NOFILE 4 /* number of open files */ #define RLIMIT_STACK 5 /* stack size */ #define RLIMIT_AS 6 /* address space size */ +/* Haiku-specifics */ +#define RLIMIT_NOVMON 7 /* number of open vnode monitors */ + +#define RLIM_NLIMITS 8 /* number of resource limits */ #define RLIM_INFINITY (0xffffffffUL) #define RLIM_SAVED_MAX RLIM_INFINITY diff --git a/src/system/libroot/os/arch/x86/compatibility.c b/src/system/libroot/os/arch/x86/compatibility.c index 766ce1dde8..99bf544a52 100644 --- a/src/system/libroot/os/arch/x86/compatibility.c +++ b/src/system/libroot/os/arch/x86/compatibility.c @@ -10,7 +10,9 @@ #include +#include #include +#include int _kset_mon_limit_(int num); @@ -23,14 +25,26 @@ int _kset_cpu_state_(int cpuNum, int state); int _kset_mon_limit_(int num) { - return B_ERROR; + struct rlimit rl; + if (num < 1) + return EINVAL; + rl.rlim_cur = num; + if (setrlimit(RLIMIT_NOVMON, &rl) < 0) + return errno; + return B_OK; } int _kset_fd_limit_(int num) { - return B_ERROR; + struct rlimit rl; + if (num < 1) + return EINVAL; + rl.rlim_cur = num; + if (setrlimit(RLIMIT_NOFILE, &rl) < 0) + return errno; + return B_OK; }