0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-12-27 07:54:05 +01:00

ircd::conf: Add environ() to interface; minor cleanup/reorg.

This commit is contained in:
Jason Volk 2022-07-11 12:48:23 -07:00
parent 3992af9388
commit 6ce5ab5b1d
2 changed files with 54 additions and 17 deletions

View file

@ -61,7 +61,8 @@ namespace ircd::conf
extern std::map<string_view, item<> *> items; extern std::map<string_view, item<> *> items;
extern callbacks<void (item<> &)> on_init; extern callbacks<void (item<> &)> on_init;
bool exists(const string_view &key); bool exists(const string_view &key) noexcept;
bool environ(const string_view &key) noexcept;
bool persists(const string_view &key); bool persists(const string_view &key);
string_view get(const mutable_buffer &out, const string_view &key); string_view get(const mutable_buffer &out, const string_view &key);
std::string get(const string_view &key); std::string get(const string_view &key);

View file

@ -8,13 +8,22 @@
// copyright notice and this permission notice is present in all copies. The // copyright notice and this permission notice is present in all copies. The
// full license for this software is available in the LICENSE file. // full license for this software is available in the LICENSE file.
namespace ircd::conf
{
static string_view make_env_name(const mutable_buffer &, const string_view &) noexcept;
static string_view make_env_name(const mutable_buffer &, const item<void> &) noexcept;
static string_view make_env_name(const mutable_buffer &, const item<void> &, const string_view &);
static void prepend_from_env(item<void> &) noexcept;
static void append_from_env(item<void> &) noexcept;
static void set_from_env(item<void> &) noexcept;
static void set_from_closure(item<void> &) noexcept;
}
decltype(ircd::conf::items) decltype(ircd::conf::items)
ircd::conf::items ircd::conf::items;
{};
decltype(ircd::conf::on_init) decltype(ircd::conf::on_init)
ircd::conf::on_init ircd::conf::on_init;
{};
decltype(ircd::defaults) decltype(ircd::defaults)
ircd::defaults ircd::defaults
@ -192,8 +201,36 @@ catch(const std::out_of_range &e)
}; };
} }
bool
ircd::conf::environ(const string_view &key)
noexcept try
{
char buf[conf::NAME_MAX_LEN];
const auto env_key
{
make_env_name(buf, key)
};
const auto val
{
util::getenv(env_key)
};
return bool(val);
}
catch(const std::exception &e)
{
log::error
{
"%s", e.what()
};
return false;
}
bool bool
ircd::conf::exists(const string_view &key) ircd::conf::exists(const string_view &key)
noexcept
{ {
return items.count(key); return items.count(key);
} }
@ -341,16 +378,6 @@ const
return {}; return {};
} }
namespace ircd::conf
{
static string_view make_env_name(const mutable_buffer &, const item<void> &, const string_view &);
static string_view make_env_name(const mutable_buffer &, const item<void> &);
static void prepend_from_env(item<void> &) noexcept;
static void append_from_env(item<void> &) noexcept;
static void set_from_env(item<void> &) noexcept;
static void set_from_closure(item<void> &) noexcept;
}
void void
ircd::conf::item<void>::call_init() ircd::conf::item<void>::call_init()
{ {
@ -516,9 +543,18 @@ ircd::conf::make_env_name(const mutable_buffer &buf,
ircd::string_view ircd::string_view
ircd::conf::make_env_name(const mutable_buffer &buf, ircd::conf::make_env_name(const mutable_buffer &buf,
const item<void> &item) const item<void> &item)
noexcept
{ {
assert(size(item.name) <= conf::NAME_MAX_LEN); return make_env_name(buf, item.name);
return replace(buf, item.name, '.', '_'); }
ircd::string_view
ircd::conf::make_env_name(const mutable_buffer &buf,
const string_view &name)
noexcept
{
assert(size(name) <= conf::NAME_MAX_LEN);
return replace(buf, name, '.', '_');
} }
// //