fix(config): Allow empty string as ref fallback (#1831)
This commit is contained in:
parent
43556b5d92
commit
f0c65e6cf0
@ -268,17 +268,23 @@ class config {
|
|||||||
T dereference_env(string var) const {
|
T dereference_env(string var) const {
|
||||||
size_t pos;
|
size_t pos;
|
||||||
string env_default;
|
string env_default;
|
||||||
|
/*
|
||||||
|
* This is needed because with only the string we cannot distinguish
|
||||||
|
* between an empty string as default and not default
|
||||||
|
*/
|
||||||
|
bool has_default = false;
|
||||||
|
|
||||||
if ((pos = var.find(':')) != string::npos) {
|
if ((pos = var.find(':')) != string::npos) {
|
||||||
env_default = var.substr(pos + 1);
|
env_default = var.substr(pos + 1);
|
||||||
|
has_default = true;
|
||||||
var.erase(pos);
|
var.erase(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (env_util::has(var.c_str())) {
|
if (env_util::has(var)) {
|
||||||
string env_value{env_util::get(var.c_str())};
|
string env_value{env_util::get(var)};
|
||||||
m_log.info("Environment var reference ${%s} found (value=%s)", var, env_value);
|
m_log.info("Environment var reference ${%s} found (value=%s)", var, env_value);
|
||||||
return convert<T>(move(env_value));
|
return convert<T>(move(env_value));
|
||||||
} else if (!env_default.empty()) {
|
} else if (has_default) {
|
||||||
m_log.info("Environment var ${%s} is undefined, using defined fallback value \"%s\"", var, env_default);
|
m_log.info("Environment var ${%s} is undefined, using defined fallback value \"%s\"", var, env_default);
|
||||||
return convert<T>(move(env_default));
|
return convert<T>(move(env_default));
|
||||||
} else {
|
} else {
|
||||||
@ -306,8 +312,10 @@ class config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
string fallback;
|
string fallback;
|
||||||
|
bool has_fallback = false;
|
||||||
if ((pos = var.find(':')) != string::npos) {
|
if ((pos = var.find(':')) != string::npos) {
|
||||||
fallback = var.substr(pos + 1);
|
fallback = var.substr(pos + 1);
|
||||||
|
has_fallback = true;
|
||||||
var.erase(pos);
|
var.erase(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -316,7 +324,7 @@ class config {
|
|||||||
m_log.info("Found matching X resource \"%s\" (value=%s)", var, value);
|
m_log.info("Found matching X resource \"%s\" (value=%s)", var, value);
|
||||||
return convert<T>(move(value));
|
return convert<T>(move(value));
|
||||||
} catch (const xresource_error& err) {
|
} catch (const xresource_error& err) {
|
||||||
if (!fallback.empty()) {
|
if (has_fallback) {
|
||||||
m_log.warn("%s, using defined fallback value \"%s\"", err.what(), fallback);
|
m_log.warn("%s, using defined fallback value \"%s\"", err.what(), fallback);
|
||||||
return convert<T>(move(fallback));
|
return convert<T>(move(fallback));
|
||||||
}
|
}
|
||||||
@ -334,8 +342,10 @@ class config {
|
|||||||
T dereference_file(string var) const {
|
T dereference_file(string var) const {
|
||||||
size_t pos;
|
size_t pos;
|
||||||
string fallback;
|
string fallback;
|
||||||
|
bool has_fallback = false;
|
||||||
if ((pos = var.find(':')) != string::npos) {
|
if ((pos = var.find(':')) != string::npos) {
|
||||||
fallback = var.substr(pos + 1);
|
fallback = var.substr(pos + 1);
|
||||||
|
has_fallback = true;
|
||||||
var.erase(pos);
|
var.erase(pos);
|
||||||
}
|
}
|
||||||
var = file_util::expand(var);
|
var = file_util::expand(var);
|
||||||
@ -343,7 +353,7 @@ class config {
|
|||||||
if (file_util::exists(var)) {
|
if (file_util::exists(var)) {
|
||||||
m_log.info("File reference \"%s\" found", var);
|
m_log.info("File reference \"%s\" found", var);
|
||||||
return convert<T>(string_util::trim(file_util::contents(var), '\n'));
|
return convert<T>(string_util::trim(file_util::contents(var), '\n'));
|
||||||
} else if (!fallback.empty()) {
|
} else if (has_fallback) {
|
||||||
m_log.warn("File reference \"%s\" not found, using defined fallback value \"%s\"", var, fallback);
|
m_log.warn("File reference \"%s\" not found, using defined fallback value \"%s\"", var, fallback);
|
||||||
return convert<T>(move(fallback));
|
return convert<T>(move(fallback));
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user