Serenity Operating System
at master 60 lines 1.6 kB view raw
1/* 2 * Copyright (c) 2020, the SerenityOS developers. 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/Trie.h> 10#include <Kernel/KString.h> 11 12namespace Kernel { 13 14enum UnveilAccess { 15 Read = 1, 16 Write = 2, 17 Execute = 4, 18 CreateOrRemove = 8, 19 Browse = 16, 20 21 None = 0, 22}; 23 24struct UnveilNode; 25 26struct UnveilMetadata { 27 NonnullOwnPtr<KString> full_path; 28 UnveilAccess permissions { None }; 29 bool explicitly_unveiled { false }; 30 31 UnveilMetadata(UnveilMetadata const&) = delete; 32 UnveilMetadata(UnveilMetadata&&) = default; 33 34 // Note: Intentionally not explicit. 35 UnveilMetadata(NonnullOwnPtr<KString>&& full_path, UnveilAccess permissions = None, bool explicitly_unveiled = false) 36 : full_path(move(full_path)) 37 , permissions(permissions) 38 , explicitly_unveiled(explicitly_unveiled) 39 { 40 } 41 42 ErrorOr<UnveilMetadata> copy() const 43 { 44 return UnveilMetadata { 45 TRY(full_path->try_clone()), 46 permissions, 47 explicitly_unveiled, 48 }; 49 } 50}; 51 52struct UnveilNode final : public Trie<NonnullOwnPtr<KString>, UnveilMetadata, Traits<NonnullOwnPtr<KString>>, UnveilNode> { 53 using Trie<NonnullOwnPtr<KString>, UnveilMetadata, Traits<NonnullOwnPtr<KString>>, UnveilNode>::Trie; 54 55 bool was_explicitly_unveiled() const { return this->metadata_value().explicitly_unveiled; } 56 UnveilAccess permissions() const { return this->metadata_value().permissions; } 57 StringView path() const { return this->metadata_value().full_path->view(); } 58}; 59 60}