mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-10 04:50:31 -04:00
refactor: move implementation details to internal namespace
This commit is contained in:
parent
c953131690
commit
4e0c48edfd
@ -611,11 +611,11 @@ list(APPEND LIBDWARFS_COMMON_SRC
|
|||||||
src/dwarfs/error.cpp
|
src/dwarfs/error.cpp
|
||||||
src/dwarfs/file_access_generic.cpp
|
src/dwarfs/file_access_generic.cpp
|
||||||
src/dwarfs/file_stat.cpp
|
src/dwarfs/file_stat.cpp
|
||||||
src/dwarfs/file_type.cpp
|
|
||||||
src/dwarfs/filesystem_writer.cpp
|
src/dwarfs/filesystem_writer.cpp
|
||||||
src/dwarfs/fstypes.cpp
|
src/dwarfs/fstypes.cpp
|
||||||
src/dwarfs/history.cpp
|
src/dwarfs/history.cpp
|
||||||
src/dwarfs/internal/features.cpp
|
src/dwarfs/internal/features.cpp
|
||||||
|
src/dwarfs/internal/file_status_conv.cpp
|
||||||
src/dwarfs/internal/string_table.cpp
|
src/dwarfs/internal/string_table.cpp
|
||||||
src/dwarfs/internal/wcwidth.c
|
src/dwarfs/internal/wcwidth.c
|
||||||
src/dwarfs/internal/worker_group.cpp
|
src/dwarfs/internal/worker_group.cpp
|
||||||
@ -937,6 +937,7 @@ if(WITH_TESTS)
|
|||||||
tool_main_test
|
tool_main_test
|
||||||
tools_test
|
tools_test
|
||||||
utils_test
|
utils_test
|
||||||
|
file_utils_test
|
||||||
worker_group_test
|
worker_group_test
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <filesystem>
|
|
||||||
|
|
||||||
namespace dwarfs {
|
namespace dwarfs {
|
||||||
|
|
||||||
@ -44,7 +43,4 @@ struct posix_file_type {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
std::filesystem::file_status file_mode_to_status(uint16_t mode);
|
|
||||||
uint16_t file_status_to_mode(std::filesystem::file_status status);
|
|
||||||
|
|
||||||
} // namespace dwarfs
|
} // namespace dwarfs
|
||||||
|
32
include/dwarfs/internal/file_status_conv.h
Normal file
32
include/dwarfs/internal/file_status_conv.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/* vim:set ts=2 sw=2 sts=2 et: */
|
||||||
|
/**
|
||||||
|
* \author Marcus Holland-Moritz (github@mhxnet.de)
|
||||||
|
* \copyright Copyright (c) Marcus Holland-Moritz
|
||||||
|
*
|
||||||
|
* This file is part of dwarfs.
|
||||||
|
*
|
||||||
|
* dwarfs is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* dwarfs is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with dwarfs. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
|
namespace dwarfs::internal {
|
||||||
|
|
||||||
|
std::filesystem::file_status file_mode_to_status(uint16_t mode);
|
||||||
|
uint16_t file_status_to_mode(std::filesystem::file_status status);
|
||||||
|
|
||||||
|
} // namespace dwarfs::internal
|
@ -44,6 +44,8 @@
|
|||||||
#include <dwarfs/mmap.h>
|
#include <dwarfs/mmap.h>
|
||||||
#include <dwarfs/util.h>
|
#include <dwarfs/util.h>
|
||||||
|
|
||||||
|
#include <dwarfs/internal/file_status_conv.h>
|
||||||
|
|
||||||
namespace dwarfs {
|
namespace dwarfs {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@ -126,7 +128,7 @@ file_stat::file_stat(fs::path const& path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
valid_fields_ = file_stat::mode_valid;
|
valid_fields_ = file_stat::mode_valid;
|
||||||
mode_ = file_status_to_mode(status);
|
mode_ = internal::file_status_to_mode(status);
|
||||||
blksize_ = 0;
|
blksize_ = 0;
|
||||||
blocks_ = 0;
|
blocks_ = 0;
|
||||||
|
|
||||||
@ -273,7 +275,7 @@ void file_stat::ensure_valid(valid_fields_type fields) const {
|
|||||||
|
|
||||||
std::filesystem::file_status file_stat::status() const {
|
std::filesystem::file_status file_stat::status() const {
|
||||||
ensure_valid(mode_valid);
|
ensure_valid(mode_valid);
|
||||||
return file_mode_to_status(mode_);
|
return internal::file_mode_to_status(mode_);
|
||||||
};
|
};
|
||||||
|
|
||||||
posix_file_type::value file_stat::type() const {
|
posix_file_type::value file_stat::type() const {
|
||||||
|
@ -23,7 +23,9 @@
|
|||||||
|
|
||||||
#include <dwarfs/file_type.h>
|
#include <dwarfs/file_type.h>
|
||||||
|
|
||||||
namespace dwarfs {
|
#include <dwarfs/internal/file_status_conv.h>
|
||||||
|
|
||||||
|
namespace dwarfs::internal {
|
||||||
|
|
||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
|
|
||||||
@ -98,4 +100,4 @@ uint16_t file_status_to_mode(std::filesystem::file_status status) {
|
|||||||
static_cast<uint16_t>(status.permissions());
|
static_cast<uint16_t>(status.permissions());
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace dwarfs
|
} // namespace dwarfs::internal
|
81
test/file_utils_test.cpp
Normal file
81
test/file_utils_test.cpp
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
/* vim:set ts=2 sw=2 sts=2 et: */
|
||||||
|
/**
|
||||||
|
* \author Marcus Holland-Moritz (github@mhxnet.de)
|
||||||
|
* \copyright Copyright (c) Marcus Holland-Moritz
|
||||||
|
*
|
||||||
|
* This file is part of dwarfs.
|
||||||
|
*
|
||||||
|
* dwarfs is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* dwarfs is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with dwarfs. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <gmock/gmock.h>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include <dwarfs/internal/file_status_conv.h>
|
||||||
|
|
||||||
|
using namespace dwarfs::internal;
|
||||||
|
namespace fs = std::filesystem;
|
||||||
|
|
||||||
|
TEST(file_utils, file_status_conversion) {
|
||||||
|
using fs::file_type;
|
||||||
|
using fs::perms;
|
||||||
|
|
||||||
|
EXPECT_THAT(
|
||||||
|
[] { return file_mode_to_status(0); },
|
||||||
|
testing::ThrowsMessage<std::runtime_error>("invalid file mode: 0x0000"));
|
||||||
|
|
||||||
|
auto status = file_mode_to_status(0140755);
|
||||||
|
EXPECT_EQ(status.type(), file_type::socket);
|
||||||
|
EXPECT_EQ(status.permissions(), perms::owner_all | perms::group_read |
|
||||||
|
perms::group_exec | perms::others_read |
|
||||||
|
perms::others_exec);
|
||||||
|
EXPECT_EQ(file_status_to_mode(status), 0140755);
|
||||||
|
|
||||||
|
status = file_mode_to_status(0120644);
|
||||||
|
EXPECT_EQ(status.type(), file_type::symlink);
|
||||||
|
EXPECT_EQ(status.permissions(), perms::owner_read | perms::owner_write |
|
||||||
|
perms::group_read | perms::others_read);
|
||||||
|
EXPECT_EQ(file_status_to_mode(status), 0120644);
|
||||||
|
|
||||||
|
status = file_mode_to_status(0104400);
|
||||||
|
EXPECT_EQ(status.type(), file_type::regular);
|
||||||
|
EXPECT_EQ(status.permissions(), perms::set_uid | perms::owner_read);
|
||||||
|
EXPECT_EQ(file_status_to_mode(status), 0104400);
|
||||||
|
|
||||||
|
status = file_mode_to_status(0060004);
|
||||||
|
EXPECT_EQ(status.type(), file_type::block);
|
||||||
|
EXPECT_EQ(status.permissions(), perms::others_read);
|
||||||
|
EXPECT_EQ(file_status_to_mode(status), 0060004);
|
||||||
|
|
||||||
|
status = file_mode_to_status(0042010);
|
||||||
|
EXPECT_EQ(status.type(), file_type::directory);
|
||||||
|
EXPECT_EQ(status.permissions(), perms::set_gid | perms::group_exec);
|
||||||
|
EXPECT_EQ(file_status_to_mode(status), 0042010);
|
||||||
|
|
||||||
|
status = file_mode_to_status(0021007);
|
||||||
|
EXPECT_EQ(status.type(), file_type::character);
|
||||||
|
EXPECT_EQ(status.permissions(), perms::sticky_bit | perms::others_all);
|
||||||
|
EXPECT_EQ(file_status_to_mode(status), 0021007);
|
||||||
|
|
||||||
|
status = file_mode_to_status(0017777);
|
||||||
|
EXPECT_EQ(status.type(), file_type::fifo);
|
||||||
|
EXPECT_EQ(status.permissions(),
|
||||||
|
perms::sticky_bit | perms::set_uid | perms::set_gid | perms::all);
|
||||||
|
EXPECT_EQ(file_status_to_mode(status), 0017777);
|
||||||
|
|
||||||
|
status.type(file_type::none);
|
||||||
|
EXPECT_THAT([&] { file_status_to_mode(status); },
|
||||||
|
testing::ThrowsMessage<std::runtime_error>(
|
||||||
|
testing::HasSubstr("invalid file type: ")));
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user