summaryrefslogtreecommitdiff
path: root/Userland/Libraries
diff options
context:
space:
mode:
authorsin-ack <sin-ack@users.noreply.github.com>2022-07-11 20:49:07 +0000
committerAndreas Kling <kling@serenityos.org>2022-07-12 23:11:35 +0200
commit828060e6317989eca62cc812a45e602ec1f0ed7a (patch)
tree5174d9031666ab09606cdae2eadf738135a6d518 /Userland/Libraries
parenta4c251f858879df1af82aecce44fbc83611b8094 (diff)
downloadserenity-828060e6317989eca62cc812a45e602ec1f0ed7a.zip
LibCore: Add convenience templates for System::{unveil,pledge}
These convenience templates allow the following to be written as before: TRY(Core::System::pledge("promises...")); TRY(Core::System::pledge("promises...", "execpromises...")); TRY(Core::System::unveil("path", "permissions")); TRY(Core::System::unveil(nullptr, nullptr)); Other uses must now append sv to any literal string passed to pledge and unveil.
Diffstat (limited to 'Userland/Libraries')
-rw-r--r--Userland/Libraries/LibCore/System.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/Userland/Libraries/LibCore/System.h b/Userland/Libraries/LibCore/System.h
index d9ca3f6402..a3b4072899 100644
--- a/Userland/Libraries/LibCore/System.h
+++ b/Userland/Libraries/LibCore/System.h
@@ -55,6 +55,29 @@ inline ErrorOr<void> unveil(StringView, StringView)
inline ErrorOr<void> pledge(StringView, StringView = {}) { return {}; }
#endif
+template<size_t N>
+ALWAYS_INLINE ErrorOr<void> pledge(char const (&promises)[N])
+{
+ return pledge(StringView { promises, N - 1 });
+}
+
+template<size_t NPromises, size_t NExecPromises>
+ALWAYS_INLINE ErrorOr<void> pledge(char const (&promises)[NPromises], char const (&execpromises)[NExecPromises])
+{
+ return pledge(StringView { promises, NPromises - 1 }, StringView { execpromises, NExecPromises - 1 });
+}
+
+template<size_t NPath, size_t NPermissions>
+ALWAYS_INLINE ErrorOr<void> unveil(char const (&path)[NPath], char const (&permissions)[NPermissions])
+{
+ return unveil(StringView { path, NPath - 1 }, StringView { permissions, NPermissions - 1 });
+}
+
+ALWAYS_INLINE ErrorOr<void> unveil(std::nullptr_t, std::nullptr_t)
+{
+ return unveil(StringView {}, StringView {});
+}
+
#ifndef AK_OS_BSD_GENERIC
ErrorOr<Optional<struct spwd>> getspent();
ErrorOr<Optional<struct spwd>> getspnam(StringView name);