|
@@ -9,36 +9,45 @@
|
|
|
#include <sys/syscall.h>
|
|
|
#include <sys/resource.h>
|
|
|
#include <bits/wordsize.h>
|
|
|
+#include <stddef.h> // needed for NULL to be defined
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(__NR_usetrlimit)
|
|
|
-
|
|
|
|
|
|
# define __NR___syscall_usetrlimit __NR_usetrlimit
|
|
|
static __always_inline
|
|
|
_syscall2(int, __syscall_usetrlimit, enum __rlimit_resource, resource,
|
|
|
const struct rlimit *, rlim)
|
|
|
-int setrlimit(__rlimit_resource_t resource, struct rlimit *rlimits)
|
|
|
+int setrlimit(__rlimit_resource_t resource, const struct rlimit *rlimits)
|
|
|
{
|
|
|
return __syscall_usetrlimit(resource, rlimits);
|
|
|
}
|
|
|
|
|
|
-#elif !defined(__UCLIBC_HANDLE_OLDER_RLIMIT__)
|
|
|
+#else
|
|
|
+
|
|
|
+# if !defined(__UCLIBC_HANDLE_OLDER_RLIMIT__)
|
|
|
|
|
|
+# if defined(__NR_prlimit64)
|
|
|
+int setrlimit(__rlimit_resource_t resource, const struct rlimit *rlimits)
|
|
|
+{
|
|
|
+ return INLINE_SYSCALL (prlimit64, 4, 0, resource, rlimits, NULL);
|
|
|
+}
|
|
|
+# else
|
|
|
|
|
|
_syscall2(int, setrlimit, __rlimit_resource_t, resource,
|
|
|
const struct rlimit *, rlim)
|
|
|
+# endif
|
|
|
|
|
|
-#else
|
|
|
+# else
|
|
|
|
|
|
-# define __need_NULL
|
|
|
-# include <stddef.h>
|
|
|
-# include <errno.h>
|
|
|
-# include <sys/param.h>
|
|
|
+# define __need_NULL
|
|
|
+# include <stddef.h>
|
|
|
+# include <errno.h>
|
|
|
+# include <sys/param.h>
|
|
|
|
|
|
|
|
|
-# define __NR___syscall_setrlimit __NR_setrlimit
|
|
|
+# define __NR___syscall_setrlimit __NR_setrlimit
|
|
|
static __always_inline
|
|
|
_syscall2(int, __syscall_setrlimit, int, resource, const struct rlimit *, rlim)
|
|
|
|
|
@@ -57,8 +66,13 @@ int setrlimit(__rlimit_resource_t resource, const struct rlimit *rlimits)
|
|
|
RLIM_INFINITY >> 1);
|
|
|
rlimits_small.rlim_max = MIN((unsigned long int) rlimits->rlim_max,
|
|
|
RLIM_INFINITY >> 1);
|
|
|
+# if defined(__NR_prlimit64)
|
|
|
+ return INLINE_SYSCALL (prlimit64, 4, 0, resource, &rlimits_small, NULL);
|
|
|
+# else
|
|
|
return __syscall_setrlimit(resource, &rlimits_small);
|
|
|
+# endif
|
|
|
}
|
|
|
+# endif
|
|
|
#endif
|
|
|
libc_hidden_def(setrlimit)
|
|
|
|