diff options
| -rw-r--r-- | kapi/kapi/filesystem/file_type.hpp | 5 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/devfs/filesystem.cpp | 3 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/devfs/filesystem.hpp | 3 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/devfs/filesystem.tests.cpp | 4 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/ext2/filesystem.cpp | 23 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/ext2/filesystem.hpp | 6 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/ext2/filesystem.tests.cpp | 21 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/filesystem.hpp | 5 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/rootfs/filesystem.cpp | 3 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/rootfs/filesystem.hpp | 3 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/rootfs/filesystem.tests.cpp | 6 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/vfs.cpp | 11 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/vfs.hpp | 3 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/vfs_types.hpp | 17 | ||||
| -rw-r--r-- | kernel/kernel/test_support/filesystem/filesystem.cpp | 4 | ||||
| -rw-r--r-- | kernel/kernel/test_support/filesystem/filesystem.hpp | 3 |
16 files changed, 44 insertions, 76 deletions
diff --git a/kapi/kapi/filesystem/file_type.hpp b/kapi/kapi/filesystem/file_type.hpp index b44016c5..6b1124bf 100644 --- a/kapi/kapi/filesystem/file_type.hpp +++ b/kapi/kapi/filesystem/file_type.hpp @@ -44,6 +44,11 @@ namespace kapi::filesystem return static_cast<file_type>(mode & file_type_mask) == file_type::regular; } + [[nodiscard]] constexpr auto is_device(file_type type) noexcept -> bool + { + return type == file_type::block_device || type == file_type::character_device; + } + //! @} } // namespace kapi::filesystem diff --git a/kernel/kernel/filesystem/devfs/filesystem.cpp b/kernel/kernel/filesystem/devfs/filesystem.cpp index cdc3bd1c..f6512999 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.cpp +++ b/kernel/kernel/filesystem/devfs/filesystem.cpp @@ -7,7 +7,6 @@ #include <kernel/filesystem/filesystem.hpp> #include <kernel/filesystem/inode.hpp> #include <kernel/filesystem/type.hpp> -#include <kernel/filesystem/vfs_types.hpp> #include <kapi/filesystem.hpp> @@ -87,7 +86,7 @@ namespace kernel::filesystem::devfs } auto filesystem::create_inode(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view, - vfs_types::inode_type, std::optional<kapi::filesystem::device_number>) + kapi::filesystem::file_type, std::optional<kapi::filesystem::device_number>) -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> { return kstd::failure(vfs_errc::read_only_file_system); diff --git a/kernel/kernel/filesystem/devfs/filesystem.hpp b/kernel/kernel/filesystem/devfs/filesystem.hpp index 50a87de9..2b0221d0 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.hpp +++ b/kernel/kernel/filesystem/devfs/filesystem.hpp @@ -5,7 +5,6 @@ #include <kernel/filesystem/device_number_registry.hpp> #include <kernel/filesystem/filesystem.hpp> #include <kernel/filesystem/inode.hpp> -#include <kernel/filesystem/vfs_types.hpp> #include <kapi/filesystem.hpp> @@ -39,7 +38,7 @@ namespace kernel::filesystem::devfs //! @copydoc kernel::filesystem::filesystem::create_inode //! @return Always returns an error, as creating new inodes is not supported in devfs. [[nodiscard]] auto create_inode(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name, - vfs_types::inode_type inode_type, + kapi::filesystem::file_type type, std::optional<kapi::filesystem::device_number> raw_device = std::nullopt) -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override; diff --git a/kernel/kernel/filesystem/devfs/filesystem.tests.cpp b/kernel/kernel/filesystem/devfs/filesystem.tests.cpp index 28da5275..b5a07a22 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.tests.cpp +++ b/kernel/kernel/filesystem/devfs/filesystem.tests.cpp @@ -1,7 +1,6 @@ #include <kernel/filesystem/devfs/filesystem.hpp> #include <kernel/filesystem/filesystem.hpp> -#include <kernel/filesystem/vfs_types.hpp> #include <kernel/test_support/devices/block_device.hpp> #include <kernel/test_support/devices/driver.hpp> #include <kernel/test_support/filesystem/storage_boot_module_fixture.hpp> @@ -68,8 +67,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture, THEN("create_inode always returns an error") { - auto result = - fs->create_inode(fs->root_inode(), "new_device", kernel::filesystem::vfs_types::inode_type::regular); + auto result = fs->create_inode(fs->root_inode(), "new_device", kapi::filesystem::file_type::regular); REQUIRE(!result); } } diff --git a/kernel/kernel/filesystem/ext2/filesystem.cpp b/kernel/kernel/filesystem/ext2/filesystem.cpp index 7a1153e4..52737632 100644 --- a/kernel/kernel/filesystem/ext2/filesystem.cpp +++ b/kernel/kernel/filesystem/ext2/filesystem.cpp @@ -9,7 +9,6 @@ #include <kernel/filesystem/filesystem.hpp> #include <kernel/filesystem/inode.hpp> #include <kernel/filesystem/type.hpp> -#include <kernel/filesystem/vfs_types.hpp> #include <kapi/filesystem.hpp> #include <kapi/system.hpp> @@ -172,7 +171,7 @@ namespace kernel::filesystem::ext2 } auto filesystem::create_inode(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name, - vfs_types::inode_type inode_type, + kapi::filesystem::file_type type, std::optional<kapi::filesystem::device_number> raw_device) -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> { @@ -186,8 +185,7 @@ namespace kernel::filesystem::ext2 return kstd::failure(vfs_errc::not_a_directory); } - auto is_device = inode_type == vfs_types::inode_type::block_device || // - inode_type == vfs_types::inode_type::character_device; + auto is_device = kapi::filesystem::is_device(type); if (is_device && !raw_device) { @@ -211,7 +209,7 @@ namespace kernel::filesystem::ext2 inode_data new_inode_data{}; uint16_t const full_access_mode = 0x01FF; // TODO use correct access rights - new_inode_data.mode = map_vfs_inode_type_into_inode_mode(inode_type, full_access_mode); + new_inode_data.mode = map_vfs_inode_type_into_inode_mode(type, full_access_mode); new_inode_data.size = 0; new_inode_data.dir_acl = 0; new_inode_data.links_count = 1; @@ -744,20 +742,19 @@ namespace kernel::filesystem::ext2 } } - auto filesystem::map_vfs_inode_type_into_inode_mode(kernel::filesystem::vfs_types::inode_type vfs_type, uint16_t mode) - -> uint16_t + auto filesystem::map_vfs_inode_type_into_inode_mode(kapi::filesystem::file_type type, uint16_t mode) -> uint16_t { - switch (vfs_type) + switch (type) { - case kernel::filesystem::vfs_types::inode_type::directory: + case kapi::filesystem::file_type::directory: return mode | constants::mode_directory; - case kernel::filesystem::vfs_types::inode_type::regular: + case kapi::filesystem::file_type::regular: return mode | constants::mode_regular; - case kernel::filesystem::vfs_types::inode_type::block_device: + case kapi::filesystem::file_type::block_device: return mode | constants::mode_block_device; - case kernel::filesystem::vfs_types::inode_type::character_device: + case kapi::filesystem::file_type::character_device: return mode | constants::mode_character_device; - case kernel::filesystem::vfs_types::inode_type::symbolic_link: + case kapi::filesystem::file_type::symbolic_link: // return mode | constants::mode_symbolic_link; // TODO implement default: kapi::system::panic("[EXT2] Not implemented."); diff --git a/kernel/kernel/filesystem/ext2/filesystem.hpp b/kernel/kernel/filesystem/ext2/filesystem.hpp index 6a066f25..7d5490b4 100644 --- a/kernel/kernel/filesystem/ext2/filesystem.hpp +++ b/kernel/kernel/filesystem/ext2/filesystem.hpp @@ -6,7 +6,6 @@ #include <kernel/filesystem/ext2/superblock.hpp> #include <kernel/filesystem/filesystem.hpp> #include <kernel/filesystem/inode.hpp> -#include <kernel/filesystem/vfs_types.hpp> #include <kapi/filesystem.hpp> @@ -58,7 +57,7 @@ namespace kernel::filesystem::ext2 -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override; [[nodiscard]] auto create_inode(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name, - vfs_types::inode_type inode_type, + kapi::filesystem::file_type type, std::optional<kapi::filesystem::device_number> raw_device = std::nullopt) -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override; @@ -164,8 +163,7 @@ namespace kernel::filesystem::ext2 [[nodiscard]] auto write_superblock() const -> kstd::result<void>; auto map_inode_mode_to_file_type(uint16_t mode) -> uint8_t; - auto map_vfs_inode_type_into_inode_mode(kernel::filesystem::vfs_types::inode_type vfs_type, uint16_t mode) - -> uint16_t; + auto map_vfs_inode_type_into_inode_mode(kapi::filesystem::file_type type, uint16_t mode) -> uint16_t; superblock m_superblock{}; kstd::vector<block_group_descriptor> m_block_group_descriptors; diff --git a/kernel/kernel/filesystem/ext2/filesystem.tests.cpp b/kernel/kernel/filesystem/ext2/filesystem.tests.cpp index f6ade274..51ba2f30 100644 --- a/kernel/kernel/filesystem/ext2/filesystem.tests.cpp +++ b/kernel/kernel/filesystem/ext2/filesystem.tests.cpp @@ -7,12 +7,13 @@ #include <kernel/filesystem/ext2/inode.hpp> #include <kernel/filesystem/ext2/superblock.hpp> #include <kernel/filesystem/filesystem.hpp> -#include <kernel/filesystem/vfs_types.hpp> #include <kernel/test_support/cpu.hpp> #include <kernel/test_support/devices/block_device.hpp> #include <kernel/test_support/filesystem/ext2.hpp> #include <kernel/test_support/filesystem/storage_boot_module_fixture.hpp> +#include <kapi/filesystem.hpp> + #include <kstd/memory.hpp> #include <kstd/units.hpp> #include <kstd/vector.hpp> @@ -104,7 +105,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture, auto lookup_result = fs.lookup(fs.root_inode(), "blub"); REQUIRE(!lookup_result); - auto new_inode = fs.create_inode(fs.root_inode(), "blub", kernel::filesystem::vfs_types::inode_type::regular); + auto new_inode = fs.create_inode(fs.root_inode(), "blub", kapi::filesystem::file_type::regular); REQUIRE(new_inode); REQUIRE(new_inode.value()->is_regular()); @@ -117,8 +118,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture, auto lookup_result = fs.lookup(fs.root_inode(), "blub"); REQUIRE(!lookup_result); - auto new_directory = - fs.create_inode(fs.root_inode(), "blub", kernel::filesystem::vfs_types::inode_type::directory); + auto new_directory = fs.create_inode(fs.root_inode(), "blub", kapi::filesystem::file_type::directory); REQUIRE(new_directory); REQUIRE(new_directory.value()->is_directory()); @@ -128,12 +128,10 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture, THEN("a directory and a file within can be created") { - auto new_directory = - fs.create_inode(fs.root_inode(), "blub", kernel::filesystem::vfs_types::inode_type::directory); + auto new_directory = fs.create_inode(fs.root_inode(), "blub", kapi::filesystem::file_type::directory); REQUIRE(new_directory); - auto new_file = - fs.create_inode(new_directory.value(), "blub_file", kernel::filesystem::vfs_types::inode_type::regular); + auto new_file = fs.create_inode(new_directory.value(), "blub_file", kapi::filesystem::file_type::regular); REQUIRE(new_file); auto lookup_result = fs.lookup(new_directory.value(), "blub_file"); @@ -143,7 +141,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture, THEN("a file can be created and written to") { - auto new_inode = fs.create_inode(fs.root_inode(), "blub", kernel::filesystem::vfs_types::inode_type::regular); + auto new_inode = fs.create_inode(fs.root_inode(), "blub", kapi::filesystem::file_type::regular); REQUIRE(new_inode); auto buffer = @@ -162,9 +160,8 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture, THEN("a symbolic link is not implemented yet") { - REQUIRE_THROWS_AS( - fs.create_inode(fs.root_inode(), "blub", kernel::filesystem::vfs_types::inode_type::symbolic_link), - kernel::tests::cpu::halt); + REQUIRE_THROWS_AS(fs.create_inode(fs.root_inode(), "blub", kapi::filesystem::file_type::symbolic_link), + kernel::tests::cpu::halt); } } } diff --git a/kernel/kernel/filesystem/filesystem.hpp b/kernel/kernel/filesystem/filesystem.hpp index 668fd06e..1a66c11c 100644 --- a/kernel/kernel/filesystem/filesystem.hpp +++ b/kernel/kernel/filesystem/filesystem.hpp @@ -2,7 +2,6 @@ #define TEACHOS_KERNEL_FILESYSTEM_FILESYSTEM_HPP #include <kernel/filesystem/inode.hpp> -#include <kernel/filesystem/vfs_types.hpp> #include <kapi/filesystem.hpp> @@ -58,11 +57,11 @@ namespace kernel::filesystem //! //! @param parent The parent inode. //! @param name The name of the inode to create. - //! @param inode_type The type of inode to be created. + //! @param type The file type of inode to be created. //! @param raw_device The device number the new inode should represent, if any. //! @return A pointer to the created inode on success, an error otherwise. [[nodiscard]] virtual auto create_inode(kstd::shared_ptr<inode> const & parent, std::string_view name, - vfs_types::inode_type inode_type, + kapi::filesystem::file_type type, std::optional<kapi::filesystem::device_number> raw_device = std::nullopt) -> kstd::result<kstd::shared_ptr<inode>> = 0; diff --git a/kernel/kernel/filesystem/rootfs/filesystem.cpp b/kernel/kernel/filesystem/rootfs/filesystem.cpp index ed221c19..56940394 100644 --- a/kernel/kernel/filesystem/rootfs/filesystem.cpp +++ b/kernel/kernel/filesystem/rootfs/filesystem.cpp @@ -5,7 +5,6 @@ #include <kernel/filesystem/inode.hpp> #include <kernel/filesystem/rootfs/inode.hpp> #include <kernel/filesystem/type.hpp> -#include <kernel/filesystem/vfs_types.hpp> #include <kapi/filesystem.hpp> @@ -52,7 +51,7 @@ namespace kernel::filesystem::rootfs } auto filesystem::create_inode(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view, - vfs_types::inode_type, std::optional<kapi::filesystem::device_number>) + kapi::filesystem::file_type, std::optional<kapi::filesystem::device_number>) -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> { return kstd::failure(vfs_errc::read_only_file_system); diff --git a/kernel/kernel/filesystem/rootfs/filesystem.hpp b/kernel/kernel/filesystem/rootfs/filesystem.hpp index 75fce634..2a861747 100644 --- a/kernel/kernel/filesystem/rootfs/filesystem.hpp +++ b/kernel/kernel/filesystem/rootfs/filesystem.hpp @@ -3,7 +3,6 @@ #include <kernel/filesystem/filesystem.hpp> #include <kernel/filesystem/inode.hpp> -#include <kernel/filesystem/vfs_types.hpp> #include <kapi/filesystem.hpp> @@ -36,7 +35,7 @@ namespace kernel::filesystem::rootfs //! @copydoc kernel::filesystem::filesystem::create_inode. //! @return Always returns an error, as creating new inodes is not supported in rootfs. [[nodiscard]] auto create_inode(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name, - vfs_types::inode_type inode_type, + kapi::filesystem::file_type type, std::optional<kapi::filesystem::device_number> raw_device = std::nullopt) -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override; }; diff --git a/kernel/kernel/filesystem/rootfs/filesystem.tests.cpp b/kernel/kernel/filesystem/rootfs/filesystem.tests.cpp index 95fa57db..ba1aab0e 100644 --- a/kernel/kernel/filesystem/rootfs/filesystem.tests.cpp +++ b/kernel/kernel/filesystem/rootfs/filesystem.tests.cpp @@ -1,7 +1,8 @@ #include <kernel/filesystem/rootfs/filesystem.hpp> #include <kernel/filesystem/filesystem.hpp> -#include <kernel/filesystem/vfs_types.hpp> + +#include <kapi/filesystem.hpp> #include <kstd/memory.hpp> #include <kstd/print.hpp> @@ -38,8 +39,7 @@ SCENARIO("Rootfs filesystem mount and lookup", "[filesystem][rootfs][filesystem] THEN("create_inode always returns an error") { - auto result = - fs.create_inode(fs.root_inode(), "new_device", kernel::filesystem::vfs_types::inode_type::directory); + auto result = fs.create_inode(fs.root_inode(), "new_device", kapi::filesystem::file_type::directory); REQUIRE(!result); } } diff --git a/kernel/kernel/filesystem/vfs.cpp b/kernel/kernel/filesystem/vfs.cpp index 835cbfd6..5b3d2ebe 100644 --- a/kernel/kernel/filesystem/vfs.cpp +++ b/kernel/kernel/filesystem/vfs.cpp @@ -13,7 +13,6 @@ #include <kernel/filesystem/mount_table.hpp> #include <kernel/filesystem/path.hpp> #include <kernel/filesystem/rootfs/filesystem.hpp> -#include <kernel/filesystem/vfs_types.hpp> #include <kapi/filesystem.hpp> #include <kapi/system.hpp> @@ -207,12 +206,12 @@ namespace kernel::filesystem auto vfs::mkdir(std::string_view path) -> kstd::result<void> { - return create_inode(path, vfs_types::inode_type::directory); + return create_inode(path, kapi::filesystem::file_type::directory); } auto vfs::create(std::string_view path) -> kstd::result<void> { - return create_inode(path, vfs_types::inode_type::regular); + return create_inode(path, kapi::filesystem::file_type::regular); } auto vfs::status(std::string_view path) const -> kstd::result<kapi::filesystem::file_status> @@ -231,17 +230,17 @@ namespace kernel::filesystem { if (kapi::filesystem::is_block_device(mode)) { - return create_inode(path, vfs_types::inode_type::block_device, device); + return create_inode(path, kapi::filesystem::file_type::block_device, device); } else if (kapi::filesystem::is_character_device(mode)) { - return create_inode(path, vfs_types::inode_type::character_device, device); + return create_inode(path, kapi::filesystem::file_type::character_device, device); } return kstd::failure(vfs_errc::invalid_argument); } - auto vfs::create_inode(std::string_view path, vfs_types::inode_type type, + auto vfs::create_inode(std::string_view path, kapi::filesystem::file_type type, std::optional<kapi::filesystem::device_number> raw_device) -> kstd::result<void> { if (!path::is_valid_path(path)) diff --git a/kernel/kernel/filesystem/vfs.hpp b/kernel/kernel/filesystem/vfs.hpp index f4f5b477..5837f76c 100644 --- a/kernel/kernel/filesystem/vfs.hpp +++ b/kernel/kernel/filesystem/vfs.hpp @@ -7,7 +7,6 @@ #include <kernel/filesystem/inode.hpp> #include <kernel/filesystem/mount.hpp> #include <kernel/filesystem/mount_table.hpp> -#include <kernel/filesystem/vfs_types.hpp> #include <kapi/filesystem.hpp> @@ -118,7 +117,7 @@ namespace kernel::filesystem auto graft_persistent_device_fs(kstd::shared_ptr<devfs::filesystem> const & device_fs) -> void; - auto create_inode(std::string_view path, vfs_types::inode_type type, + auto create_inode(std::string_view path, kapi::filesystem::file_type type, std::optional<kapi::filesystem::device_number> raw_device = std::nullopt) -> kstd::result<void>; mount_table m_mount_table{}; diff --git a/kernel/kernel/filesystem/vfs_types.hpp b/kernel/kernel/filesystem/vfs_types.hpp deleted file mode 100644 index b68e3e33..00000000 --- a/kernel/kernel/filesystem/vfs_types.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef TEACHOS_KERNEL_FILESYSTEM_VFS_TYPES_HPP -#define TEACHOS_KERNEL_FILESYSTEM_VFS_TYPES_HPP - -#include <cstddef> - -namespace kernel::filesystem::vfs_types -{ - enum class inode_type : size_t - { - directory = 0, - regular = 1, - symbolic_link = 2, - block_device = 3, - character_device = 4, - }; -} // namespace kernel::filesystem::vfs_types -#endif
\ No newline at end of file diff --git a/kernel/kernel/test_support/filesystem/filesystem.cpp b/kernel/kernel/test_support/filesystem/filesystem.cpp index 3acedd5f..cd08f961 100644 --- a/kernel/kernel/test_support/filesystem/filesystem.cpp +++ b/kernel/kernel/test_support/filesystem/filesystem.cpp @@ -1,7 +1,6 @@ #include <kernel/test_support/filesystem/filesystem.hpp> #include <kernel/filesystem/inode.hpp> -#include <kernel/filesystem/vfs_types.hpp> #include <kernel/test_support/filesystem/inode.hpp> #include <kapi/filesystem.hpp> @@ -22,8 +21,7 @@ namespace kernel::tests::filesystem } auto filesystem::create_inode(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view, - kernel::filesystem::vfs_types::inode_type, - std::optional<kapi::filesystem::device_number>) + kapi::filesystem::file_type, std::optional<kapi::filesystem::device_number>) -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> { return kstd::make_shared<inode>(); diff --git a/kernel/kernel/test_support/filesystem/filesystem.hpp b/kernel/kernel/test_support/filesystem/filesystem.hpp index 2b61aea3..7aa14a9f 100644 --- a/kernel/kernel/test_support/filesystem/filesystem.hpp +++ b/kernel/kernel/test_support/filesystem/filesystem.hpp @@ -3,7 +3,6 @@ #include <kernel/filesystem/filesystem.hpp> #include <kernel/filesystem/inode.hpp> -#include <kernel/filesystem/vfs_types.hpp> #include <kapi/filesystem.hpp> @@ -24,7 +23,7 @@ namespace kernel::tests::filesystem -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override; [[nodiscard]] auto create_inode(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name, - kernel::filesystem::vfs_types::inode_type inode_type, + kapi::filesystem::file_type type, std::optional<kapi::filesystem::device_number> = std::nullopt) -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override; }; |
