mirror of
https://github.com/matrix-construct/construct
synced 2024-11-29 10:12:39 +01:00
ircd::fs: Reorg path interface related.
This commit is contained in:
parent
f3cc3d945d
commit
2886924bf0
9 changed files with 165 additions and 133 deletions
|
@ -17,7 +17,7 @@ namespace ircd::fs
|
|||
|
||||
size_t size(const fd &);
|
||||
size_t block_size(const fd &);
|
||||
ulong filesystem(const fd &);
|
||||
ulong fstype(const fd &);
|
||||
ulong device(const fd &);
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
#pragma once
|
||||
#define HAVE_IRCD_FS_H
|
||||
|
||||
// Forward declarations for boost because it is not included here.
|
||||
namespace boost::filesystem {}
|
||||
|
||||
/// Local filesystem interface.
|
||||
///
|
||||
/// IRCd has wrapped operations for the local filesystem to maintain a
|
||||
|
@ -28,6 +31,11 @@ namespace ircd::fs
|
|||
{
|
||||
struct init;
|
||||
struct error; // custom exception; still inherits from ircd::error
|
||||
|
||||
// Forward interface to boost::filesystem. We do not include boost
|
||||
// from here; it is used internally only. Some exposed interfaces
|
||||
// may make forward-declared references to boost symbols.
|
||||
namespace filesystem = boost::filesystem;
|
||||
}
|
||||
|
||||
#include "error.h"
|
||||
|
|
|
@ -11,6 +11,12 @@
|
|||
#pragma once
|
||||
#define HAVE_IRCD_FS_PATH_H
|
||||
|
||||
// Forward declarations for boost because it is not included here.
|
||||
namespace boost::filesystem
|
||||
{
|
||||
struct path;
|
||||
}
|
||||
|
||||
namespace ircd::fs
|
||||
{
|
||||
enum base :uint;
|
||||
|
@ -19,15 +25,22 @@ namespace ircd::fs
|
|||
extern const size_t NAME_MAX_LEN;
|
||||
extern const size_t PATH_MAX_LEN;
|
||||
|
||||
const basepath &get(const base &) noexcept;
|
||||
string_view make_path(const base &) noexcept;
|
||||
std::string make_path(const base &, const string_view &);
|
||||
std::string make_path(const vector_view<const string_view> &);
|
||||
std::string make_path(const vector_view<const std::string> &);
|
||||
filesystem::path _path(std::string);
|
||||
filesystem::path _path(const string_view &);
|
||||
filesystem::path _path(const vector_view<const string_view> &);
|
||||
filesystem::path _path(const vector_view<const std::string> &);
|
||||
|
||||
string_view path(const base &) noexcept;
|
||||
std::string path(const base &, const string_view &);
|
||||
std::string path(const vector_view<const string_view> &);
|
||||
std::string path(const vector_view<const std::string> &);
|
||||
std::string path(const filesystem::path &);
|
||||
|
||||
size_t name_max_len(const string_view &path);
|
||||
size_t path_max_len(const string_view &path);
|
||||
|
||||
long pathconf(const string_view &path, const int &arg);
|
||||
|
||||
string_view cwd(const mutable_buffer &buf);
|
||||
std::string cwd();
|
||||
}
|
||||
|
@ -38,6 +51,8 @@ struct ircd::fs::basepath
|
|||
{
|
||||
string_view name;
|
||||
string_view path;
|
||||
|
||||
static const basepath &get(const base &) noexcept;
|
||||
};
|
||||
|
||||
/// Index of default paths. Must be aligned with the internal array in fs.cc.
|
||||
|
|
16
ircd/db.cc
16
ircd/db.cc
|
@ -180,7 +180,7 @@ try
|
|||
{
|
||||
const auto dbdir
|
||||
{
|
||||
fs::make_path(fs::DB)
|
||||
fs::path(fs::DB)
|
||||
};
|
||||
|
||||
if(fs::mkdir(dbdir))
|
||||
|
@ -224,7 +224,7 @@ try
|
|||
{
|
||||
log, "Direct-IO is not supported in the database directory `%s'"
|
||||
"; Concurrent database queries will not be possible.",
|
||||
fs::get(fs::DB)
|
||||
fs::basepath::get(fs::DB)
|
||||
};
|
||||
}
|
||||
catch(const std::exception &e)
|
||||
|
@ -246,7 +246,7 @@ ircd::db::direct_io_test_file_path()
|
|||
"SUPPORTS_DIRECT_IO"_sv
|
||||
};
|
||||
|
||||
return fs::make_path(fs::DB, test_file_name);
|
||||
return fs::path(fs::DB, test_file_name);
|
||||
}
|
||||
|
||||
decltype(ircd::db::compressions)
|
||||
|
@ -3265,10 +3265,10 @@ ircd::db::database::sst::dump::dump(db::column column,
|
|||
{
|
||||
const string_view path_parts[]
|
||||
{
|
||||
fs::make_path(fs::DB), db::name(d), db::name(c)
|
||||
fs::path(fs::DB), db::name(d), db::name(c)
|
||||
};
|
||||
|
||||
path = fs::make_path(path_parts);
|
||||
path = fs::path(path_parts);
|
||||
}
|
||||
|
||||
rocksdb::Options opts(d.d->GetOptions(c));
|
||||
|
@ -7245,7 +7245,7 @@ ircd::db::available()
|
|||
{
|
||||
const auto &prefix
|
||||
{
|
||||
fs::make_path(fs::DB)
|
||||
fs::path(fs::DB)
|
||||
};
|
||||
|
||||
const auto dirs
|
||||
|
@ -7309,7 +7309,7 @@ ircd::db::path(const string_view &name,
|
|||
{
|
||||
const auto &prefix
|
||||
{
|
||||
fs::make_path(fs::DB)
|
||||
fs::path(fs::DB)
|
||||
};
|
||||
|
||||
const string_view parts[]
|
||||
|
@ -7317,7 +7317,7 @@ ircd::db::path(const string_view &name,
|
|||
prefix, name, lex_cast(checkpoint)
|
||||
};
|
||||
|
||||
return fs::make_path(parts);
|
||||
return fs::path(parts);
|
||||
}
|
||||
|
||||
std::pair<ircd::string_view, uint64_t>
|
||||
|
|
229
ircd/fs.cc
229
ircd/fs.cc
|
@ -18,13 +18,8 @@
|
|||
#include "fs_aio.h"
|
||||
#endif
|
||||
|
||||
namespace filesystem = boost::filesystem;
|
||||
|
||||
namespace ircd::fs
|
||||
{
|
||||
static filesystem::path path(std::string);
|
||||
static filesystem::path path(const string_view &);
|
||||
static filesystem::path path(const vector_view<const string_view> &);
|
||||
static uint posix_flags(const std::ios::openmode &mode);
|
||||
static const char *path_str(const string_view &);
|
||||
static void debug_paths();
|
||||
|
@ -80,7 +75,7 @@ bool
|
|||
ircd::fs::mkdir(const string_view &path)
|
||||
try
|
||||
{
|
||||
return filesystem::create_directories(fs::path(path));
|
||||
return filesystem::create_directories(_path(path));
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
|
@ -91,7 +86,7 @@ bool
|
|||
ircd::fs::remove(const string_view &path)
|
||||
try
|
||||
{
|
||||
return filesystem::remove(fs::path(path));
|
||||
return filesystem::remove(_path(path));
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
|
@ -103,7 +98,7 @@ ircd::fs::remove(std::nothrow_t,
|
|||
const string_view &path)
|
||||
{
|
||||
boost::system::error_code ec;
|
||||
return filesystem::remove(fs::path(path), ec);
|
||||
return filesystem::remove(_path(path), ec);
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -111,7 +106,7 @@ ircd::fs::rename(const string_view &old,
|
|||
const string_view &new_)
|
||||
try
|
||||
{
|
||||
filesystem::rename(path(old), path(new_));
|
||||
filesystem::rename(_path(old), _path(new_));
|
||||
return true;
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
|
@ -125,7 +120,7 @@ ircd::fs::rename(std::nothrow_t,
|
|||
const string_view &new_)
|
||||
{
|
||||
boost::system::error_code ec;
|
||||
filesystem::rename(path(old), path(new_), ec);
|
||||
filesystem::rename(_path(old), _path(new_), ec);
|
||||
return !ec;
|
||||
}
|
||||
|
||||
|
@ -136,7 +131,7 @@ try
|
|||
const filesystem::recursive_directory_iterator end;
|
||||
filesystem::recursive_directory_iterator it
|
||||
{
|
||||
fs::path(path)
|
||||
_path(path)
|
||||
};
|
||||
|
||||
std::vector<std::string> ret;
|
||||
|
@ -160,7 +155,7 @@ try
|
|||
static const filesystem::directory_iterator end;
|
||||
filesystem::directory_iterator it
|
||||
{
|
||||
fs::path(path)
|
||||
_path(path)
|
||||
};
|
||||
|
||||
std::vector<std::string> ret;
|
||||
|
@ -181,7 +176,7 @@ size_t
|
|||
ircd::fs::size(const string_view &path)
|
||||
try
|
||||
{
|
||||
return filesystem::file_size(fs::path(path));
|
||||
return filesystem::file_size(_path(path));
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
|
@ -192,7 +187,7 @@ bool
|
|||
ircd::fs::is_reg(const string_view &path)
|
||||
try
|
||||
{
|
||||
return filesystem::is_regular_file(fs::path(path));
|
||||
return filesystem::is_regular_file(_path(path));
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
|
@ -203,7 +198,7 @@ bool
|
|||
ircd::fs::is_dir(const string_view &path)
|
||||
try
|
||||
{
|
||||
return filesystem::is_directory(fs::path(path));
|
||||
return filesystem::is_directory(_path(path));
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
|
@ -214,7 +209,7 @@ bool
|
|||
ircd::fs::exists(const string_view &path)
|
||||
try
|
||||
{
|
||||
return filesystem::exists(fs::path(path));
|
||||
return filesystem::exists(_path(path));
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
|
@ -1015,7 +1010,7 @@ ircd::fs::device(const fd &fd)
|
|||
|
||||
#ifdef HAVE_SYS_STATFS_H
|
||||
ulong
|
||||
ircd::fs::filesystem(const fd &fd)
|
||||
ircd::fs::fstype(const fd &fd)
|
||||
{
|
||||
struct statfs f{0};
|
||||
syscall(::fstatfs, fd, &f);
|
||||
|
@ -1023,7 +1018,7 @@ ircd::fs::filesystem(const fd &fd)
|
|||
}
|
||||
#else
|
||||
ulong
|
||||
ircd::fs::filesystem(const fd &fd)
|
||||
ircd::fs::fstype(const fd &fd)
|
||||
{
|
||||
static_assert
|
||||
(
|
||||
|
@ -1337,25 +1332,6 @@ ircd::fs::bytes(const const_iovec_view &iov)
|
|||
// fs/path.h
|
||||
//
|
||||
|
||||
namespace ircd::fs
|
||||
{
|
||||
extern const std::array<basepath, num_of<base>()> basepaths;
|
||||
|
||||
static long pathconf(const string_view &path, const int &arg);
|
||||
}
|
||||
|
||||
decltype(ircd::fs::basepaths)
|
||||
ircd::fs::basepaths
|
||||
{{
|
||||
{ "installation prefix", RB_PREFIX },
|
||||
{ "binary directory", RB_BIN_DIR },
|
||||
{ "configuration directory", RB_CONF_DIR },
|
||||
{ "data directory", RB_DATA_DIR },
|
||||
{ "database directory", RB_DB_DIR },
|
||||
{ "log directory", RB_LOG_DIR },
|
||||
{ "module directory", RB_MODULE_DIR },
|
||||
}};
|
||||
|
||||
std::string
|
||||
ircd::fs::cwd()
|
||||
try
|
||||
|
@ -1431,60 +1407,130 @@ ircd::fs::pathconf(const string_view &path,
|
|||
return syscall(::pathconf, path_str(path), arg);
|
||||
}
|
||||
|
||||
std::string
|
||||
ircd::fs::make_path(const vector_view<const std::string> &list)
|
||||
try
|
||||
{
|
||||
filesystem::path ret;
|
||||
for(const auto &s : list)
|
||||
ret /= path(s);
|
||||
//
|
||||
// fs::path()
|
||||
//
|
||||
|
||||
return ret.string();
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
std::string
|
||||
ircd::fs::path(const filesystem::path &path)
|
||||
{
|
||||
throw error{e};
|
||||
return path.string();
|
||||
}
|
||||
|
||||
std::string
|
||||
ircd::fs::make_path(const vector_view<const string_view> &list)
|
||||
try
|
||||
ircd::fs::path(const vector_view<const std::string> &list)
|
||||
{
|
||||
filesystem::path ret;
|
||||
for(const auto &s : list)
|
||||
ret /= path(s);
|
||||
|
||||
return ret.string();
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
throw error{e};
|
||||
return _path(list).string();
|
||||
}
|
||||
|
||||
std::string
|
||||
ircd::fs::make_path(const base &base,
|
||||
ircd::fs::path(const vector_view<const string_view> &list)
|
||||
{
|
||||
return _path(list).string();
|
||||
}
|
||||
|
||||
std::string
|
||||
ircd::fs::path(const base &base,
|
||||
const string_view &rest)
|
||||
try
|
||||
{
|
||||
filesystem::path ret;
|
||||
ret /= make_path(base);
|
||||
ret /= path(rest);
|
||||
return ret.string();
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
const auto p
|
||||
{
|
||||
throw error{e};
|
||||
_path(std::initializer_list<const string_view>
|
||||
{
|
||||
path(base),
|
||||
rest,
|
||||
})
|
||||
};
|
||||
|
||||
return p.string();
|
||||
}
|
||||
|
||||
ircd::string_view
|
||||
ircd::fs::make_path(const base &base)
|
||||
ircd::fs::path(const base &base)
|
||||
noexcept
|
||||
{
|
||||
return get(base).path;
|
||||
return basepath::get(base).path;
|
||||
}
|
||||
|
||||
//
|
||||
// fs::_path()
|
||||
//
|
||||
|
||||
boost::filesystem::path
|
||||
ircd::fs::_path(const vector_view<const std::string> &list)
|
||||
try
|
||||
{
|
||||
filesystem::path ret;
|
||||
for(const auto &s : list)
|
||||
ret /= s;
|
||||
|
||||
return ret.string();
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
throw error{e};
|
||||
}
|
||||
|
||||
boost::filesystem::path
|
||||
ircd::fs::_path(const vector_view<const string_view> &list)
|
||||
try
|
||||
{
|
||||
filesystem::path ret;
|
||||
for(const auto &s : list)
|
||||
ret /= _path(s);
|
||||
|
||||
return ret.string();
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
throw error{e};
|
||||
}
|
||||
|
||||
boost::filesystem::path
|
||||
ircd::fs::_path(const string_view &s)
|
||||
try
|
||||
{
|
||||
return _path(std::string{s});
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
throw error{e};
|
||||
}
|
||||
|
||||
boost::filesystem::path
|
||||
ircd::fs::_path(std::string s)
|
||||
try
|
||||
{
|
||||
return filesystem::path{std::move(s)};
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
throw error{e};
|
||||
}
|
||||
|
||||
//
|
||||
// fs::basepath
|
||||
//
|
||||
|
||||
namespace ircd::fs
|
||||
{
|
||||
extern const std::array<basepath, num_of<base>()> basepaths;
|
||||
}
|
||||
|
||||
decltype(ircd::fs::basepaths)
|
||||
ircd::fs::basepaths
|
||||
{{
|
||||
{ "installation prefix", RB_PREFIX },
|
||||
{ "binary directory", RB_BIN_DIR },
|
||||
{ "configuration directory", RB_CONF_DIR },
|
||||
{ "data directory", RB_DATA_DIR },
|
||||
{ "database directory", RB_DB_DIR },
|
||||
{ "log directory", RB_LOG_DIR },
|
||||
{ "module directory", RB_MODULE_DIR },
|
||||
}};
|
||||
|
||||
const ircd::fs::basepath &
|
||||
ircd::fs::get(const base &base)
|
||||
ircd::fs::basepath::get(const base &base)
|
||||
noexcept
|
||||
{
|
||||
return basepaths.at(base);
|
||||
|
@ -1563,8 +1609,8 @@ ircd::fs::debug_paths()
|
|||
log::debug
|
||||
{
|
||||
"Working %s is `%s'",
|
||||
get(base).name,
|
||||
get(base).path,
|
||||
basepath::get(base).name,
|
||||
basepath::get(base).path,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
@ -1598,40 +1644,3 @@ ircd::fs::posix_flags(const std::ios::openmode &mode)
|
|||
ret |= ret & O_RDWR && ret & (O_TRUNC | O_APPEND)? O_CREAT : 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
filesystem::path
|
||||
ircd::fs::path(const vector_view<const string_view> &list)
|
||||
try
|
||||
{
|
||||
filesystem::path ret;
|
||||
for(const auto &s : list)
|
||||
ret /= path(s);
|
||||
|
||||
return ret.string();
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
throw error{e};
|
||||
}
|
||||
|
||||
filesystem::path
|
||||
ircd::fs::path(const string_view &s)
|
||||
try
|
||||
{
|
||||
return path(std::string{s});
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
throw error{e};
|
||||
}
|
||||
|
||||
filesystem::path
|
||||
ircd::fs::path(std::string s)
|
||||
try
|
||||
{
|
||||
return filesystem::path(std::move(s));
|
||||
}
|
||||
catch(const filesystem::filesystem_error &e)
|
||||
{
|
||||
throw error{e};
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ ircd::log::mkdir()
|
|||
{
|
||||
const auto &dir
|
||||
{
|
||||
fs::make_path(fs::LOG)
|
||||
fs::path(fs::LOG)
|
||||
};
|
||||
|
||||
if(fs::exists(dir))
|
||||
|
@ -140,7 +140,7 @@ catch(const std::exception &e)
|
|||
std::string
|
||||
ircd::log::file_path(const level &lev)
|
||||
{
|
||||
return fs::make_path(fs::LOG, reflect(lev));
|
||||
return fs::path(fs::LOG, reflect(lev));
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -881,7 +881,7 @@ namespace ircd::mods
|
|||
decltype(ircd::mods::modroot)
|
||||
ircd::mods::modroot
|
||||
{
|
||||
fs::make_path(fs::MODULES)
|
||||
fs::path(fs::MODULES)
|
||||
};
|
||||
|
||||
decltype(ircd::mods::paths)
|
||||
|
|
|
@ -3390,7 +3390,7 @@ console_cmd__db__list(opt &out, const string_view &line)
|
|||
{
|
||||
const auto name
|
||||
{
|
||||
replace(lstrip(lstrip(path, fs::make_path(fs::DB)), '/'), "/", ":")
|
||||
replace(lstrip(lstrip(path, fs::path(fs::DB)), '/'), "/", ":")
|
||||
};
|
||||
|
||||
const auto &d
|
||||
|
|
|
@ -77,17 +77,17 @@ init_my_tls_crt()
|
|||
|
||||
const std::string private_key_file
|
||||
{
|
||||
fs::make_path(private_key_path_parts)
|
||||
fs::path(private_key_path_parts)
|
||||
};
|
||||
|
||||
const std::string public_key_file
|
||||
{
|
||||
fs::make_path(public_key_path_parts)
|
||||
fs::path(public_key_path_parts)
|
||||
};
|
||||
|
||||
const std::string cert_file
|
||||
{
|
||||
fs::make_path(certificate_path_parts)
|
||||
fs::path(certificate_path_parts)
|
||||
};
|
||||
|
||||
if(!fs::exists(private_key_file))
|
||||
|
@ -104,7 +104,7 @@ init_my_tls_crt()
|
|||
/*
|
||||
const std::string dhparam_file
|
||||
{
|
||||
fs::make_path(dhparam_path_parts)
|
||||
fs::path(dhparam_path_parts)
|
||||
};
|
||||
|
||||
if(!fs::exists(dhparam_file))
|
||||
|
@ -242,7 +242,7 @@ init_my_ed25519()
|
|||
|
||||
const std::string sk_file
|
||||
{
|
||||
fs::make_path(path_parts)
|
||||
fs::path(path_parts)
|
||||
};
|
||||
|
||||
if(fs::exists(sk_file))
|
||||
|
|
Loading…
Reference in a new issue