0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2025-01-16 09:36:54 +01:00

ircd::conf: Use stringops replace; minor reorg/rename.

This commit is contained in:
Jason Volk 2021-12-19 14:25:44 -08:00
parent cb8362ba51
commit c74cfd8088

View file

@ -343,8 +343,9 @@ const
namespace ircd::conf namespace ircd::conf
{ {
static void call_env(item<void> &) noexcept; static string_view make_env_name(const mutable_buffer &, const item<void> &);
static void call_init(item<void> &) noexcept; static void set_from_env(item<void> &) noexcept;
static void set_from_closure(item<void> &) noexcept;
} }
void void
@ -353,16 +354,16 @@ ircd::conf::item<void>::call_init()
// The conf item's default value specified by the constructor is its // The conf item's default value specified by the constructor is its
// current value at this point; now we make callbacks to allow that value // current value at this point; now we make callbacks to allow that value
// to be replaced with a better one (i.e reading a saved value from DB). // to be replaced with a better one (i.e reading a saved value from DB).
conf::call_init(*this); conf::set_from_closure(*this);
// Environmental variables now get the final say; this allows any // Environmental variables now get the final say; this allows any
// misconfiguration to be overridden by env vars. The variable name is // misconfiguration to be overridden by env vars. The variable name is
// the conf item name with any '.' replaced to '_', case is preserved. // the conf item name with any '.' replaced to '_', case is preserved.
conf::call_env(*this); conf::set_from_env(*this);
} }
void void
ircd::conf::call_init(item<void> &item) ircd::conf::set_from_closure(item<void> &item)
noexcept try noexcept try
{ {
on_init(item); on_init(item);
@ -378,20 +379,18 @@ catch(const std::exception &e)
} }
void void
ircd::conf::call_env(item<void> &item) ircd::conf::set_from_env(item<void> &item)
noexcept try noexcept try
{ {
assert(size(item.name) <= conf::NAME_MAX_LEN); thread_local char buf[conf::NAME_MAX_LEN];
thread_local char key[conf::NAME_MAX_LEN]; const string_view key
const string_view name
{ {
key, make_env_name(buf, item)
std::replace_copy(begin(item.name), end(item.name), key, '.', '_')
}; };
const string_view val const string_view val
{ {
util::getenv(name) util::getenv(key)
}; };
if(!empty(val)) if(!empty(val))
@ -407,6 +406,14 @@ catch(const std::exception &e)
}; };
} }
ircd::string_view
ircd::conf::make_env_name(const mutable_buffer &buf,
const item<void> &item)
{
assert(size(item.name) <= conf::NAME_MAX_LEN);
return replace(buf, item.name, '.', '_');
}
// //
// Non-inline template specialization definitions // Non-inline template specialization definitions
// //