diff --git a/Userland/Libraries/LibCore/System.cpp b/Userland/Libraries/LibCore/System.cpp index fb8d366eaee..232c9d6eb34 100644 --- a/Userland/Libraries/LibCore/System.cpp +++ b/Userland/Libraries/LibCore/System.cpp @@ -1848,4 +1848,25 @@ ErrorOr allocate(size_t count, size_t size) return Bytes { data, size * count }; } +ErrorOr get_resource_limits(int resource) +{ + rlimit limits; + + if (::getrlimit(resource, &limits) != 0) + return Error::from_errno(errno); + + return limits; +} + +ErrorOr set_resource_limits(int resource, rlim_t limit) +{ + auto limits = TRY(get_resource_limits(resource)); + limits.rlim_cur = limit; + + if (::setrlimit(resource, &limits) != 0) + return Error::from_errno(errno); + + return {}; +} + } diff --git a/Userland/Libraries/LibCore/System.h b/Userland/Libraries/LibCore/System.h index 24f1f072237..e51de8f8a6e 100644 --- a/Userland/Libraries/LibCore/System.h +++ b/Userland/Libraries/LibCore/System.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -289,4 +290,7 @@ ErrorOr current_executable_path(); ErrorOr allocate(size_t count, size_t size); +ErrorOr get_resource_limits(int resource); +ErrorOr set_resource_limits(int resource, rlim_t limit); + }