Skip to content

Commit

Permalink
LibCore: Add convenience templates for System::{unveil,pledge}
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
sin-ack authored and awesomekling committed Jul 12, 2022
1 parent a4c251f commit 828060e
Showing 1 changed file with 23 additions and 0 deletions.
23 changes: 23 additions & 0 deletions Userland/Libraries/LibCore/System.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 828060e

Please sign in to comment.