mirror of
https://github.com/transmission/transmission.git
synced 2026-02-14 23:19:34 +00:00
refactor: remove tr_pathbuf::popdir() (#8221)
This commit is contained in:
@@ -141,7 +141,7 @@ std::optional<tr_sys_file_t> tr_open_files::get(
|
||||
tr_torrent_id_t tor_id,
|
||||
tr_file_index_t file_num,
|
||||
bool writable,
|
||||
std::string_view filename_in,
|
||||
std::string_view const filename,
|
||||
Preallocation allocation,
|
||||
uint64_t file_size)
|
||||
{
|
||||
@@ -158,13 +158,10 @@ std::optional<tr_sys_file_t> tr_open_files::get(
|
||||
}
|
||||
|
||||
// create subfolders, if any
|
||||
auto const filename = tr_pathbuf{ filename_in };
|
||||
auto error = tr_error{};
|
||||
if (writable)
|
||||
{
|
||||
auto dir = tr_pathbuf{ filename.sv() };
|
||||
dir.popdir();
|
||||
if (!tr_sys_dir_create(dir, TR_SYS_DIR_CREATE_PARENTS, 0777, &error))
|
||||
if (auto const dir = tr_sys_path_dirname(filename); !tr_sys_dir_create(dir, TR_SYS_DIR_CREATE_PARENTS, 0777, &error))
|
||||
{
|
||||
tr_logAddError(
|
||||
fmt::format(
|
||||
|
||||
@@ -1799,9 +1799,7 @@ void tr_torrent::create_empty_files() const
|
||||
filename.assign(base, '/', subpath);
|
||||
|
||||
// create subfolders, if any
|
||||
auto dir = tr_pathbuf{ filename.sv() };
|
||||
dir.popdir();
|
||||
tr_sys_dir_create(dir, TR_SYS_DIR_CREATE_PARENTS, 0777);
|
||||
tr_sys_dir_create(tr_sys_path_dirname(filename), TR_SYS_DIR_CREATE_PARENTS, 0777);
|
||||
|
||||
// create the file
|
||||
if (auto const fd = tr_sys_file_open(filename, TR_SYS_FILE_WRITE | TR_SYS_FILE_CREATE | TR_SYS_FILE_SEQUENTIAL, 0666);
|
||||
|
||||
@@ -263,28 +263,6 @@ public:
|
||||
return c_str();
|
||||
}
|
||||
|
||||
bool popdir() noexcept
|
||||
{
|
||||
// NOLINTNEXTLINE(readability-redundant-declaration): P.S. This looks like some dark magic
|
||||
std::string_view tr_sys_path_dirname(std::string_view path);
|
||||
auto const parent = tr_sys_path_dirname(sv());
|
||||
auto const changed = parent != sv();
|
||||
|
||||
if (changed)
|
||||
{
|
||||
if (std::data(parent) == std::data(*this))
|
||||
{
|
||||
resize(std::size(parent));
|
||||
}
|
||||
else
|
||||
{
|
||||
assign(parent);
|
||||
}
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
private:
|
||||
/**
|
||||
* Ensure that the buffer's string is zero-terminated, e.g. for
|
||||
|
||||
@@ -588,9 +588,7 @@ bool tr_file_move(std::string_view oldpath, std::string_view newpath, bool allow
|
||||
}
|
||||
|
||||
// ensure the target directory exists
|
||||
auto newdir = tr_pathbuf{ newpath };
|
||||
newdir.popdir();
|
||||
if (!tr_sys_dir_create(newdir, TR_SYS_DIR_CREATE_PARENTS, 0777, error))
|
||||
if (!tr_sys_dir_create(tr_sys_path_dirname(newpath), TR_SYS_DIR_CREATE_PARENTS, 0777, error))
|
||||
{
|
||||
error->prefix_message("Unable to create directory for new file: ");
|
||||
return false;
|
||||
|
||||
@@ -845,10 +845,6 @@ TEST_F(FileTest, pathDirname)
|
||||
{
|
||||
EXPECT_EQ(expected, tr_sys_path_dirname(input))
|
||||
<< "input[" << input << "] expected [" << expected << "] actual [" << tr_sys_path_dirname(input) << "]\n";
|
||||
|
||||
auto path = tr_pathbuf{ input };
|
||||
path.popdir();
|
||||
EXPECT_EQ(expected, path) << "input[" << input << "] expected [" << expected << "] actual [" << path << "]\n";
|
||||
}
|
||||
|
||||
/* TODO: is_same(dirname(x) + '/' + basename(x), x) */
|
||||
|
||||
@@ -178,13 +178,14 @@ protected:
|
||||
|
||||
for (tr_file_index_t i = 0, n = files.file_count(); i < n; ++i)
|
||||
{
|
||||
auto walk = tr_pathbuf{ parent, '/', files.path(i) };
|
||||
createFileWithContents(walk, std::data(Content), std::size(Content));
|
||||
paths.emplace(walk);
|
||||
auto const filename = tr_pathbuf{ parent, '/', files.path(i) };
|
||||
createFileWithContents(filename, std::data(Content), std::size(Content));
|
||||
paths.emplace(filename);
|
||||
|
||||
auto walk = filename.sv();
|
||||
while (!tr_sys_path_is_same(parent, walk))
|
||||
{
|
||||
walk.popdir();
|
||||
walk = tr_sys_path_dirname(walk);
|
||||
paths.emplace(walk);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,9 +212,7 @@ protected:
|
||||
{
|
||||
auto const tmperr = errno;
|
||||
|
||||
auto dir = tr_pathbuf{ path };
|
||||
dir.popdir();
|
||||
if (auto const info = tr_sys_path_get_info(path); !info)
|
||||
if (auto const dir = tr_sys_path_dirname(path); !tr_sys_path_exists(dir))
|
||||
{
|
||||
auto error = tr_error{};
|
||||
tr_sys_dir_create(dir, TR_SYS_DIR_CREATE_PARENTS, 0700, &error);
|
||||
@@ -433,9 +431,7 @@ protected:
|
||||
auto const suffix = std::string_view{ partial ? ".part" : "" };
|
||||
auto const filename = tr_pathbuf{ base, '/', subpath, suffix };
|
||||
|
||||
auto dirname = tr_pathbuf{ filename.sv() };
|
||||
dirname.popdir();
|
||||
tr_sys_dir_create(dirname, TR_SYS_DIR_CREATE_PARENTS, 0700);
|
||||
tr_sys_dir_create(tr_sys_path_dirname(filename), TR_SYS_DIR_CREATE_PARENTS, 0700);
|
||||
|
||||
auto fd = tr_sys_file_open(filename, TR_SYS_FILE_WRITE | TR_SYS_FILE_CREATE | TR_SYS_FILE_TRUNCATE, 0600);
|
||||
auto const file_size = metainfo->file_size(i);
|
||||
|
||||
Reference in New Issue
Block a user