Skip to content
Snippets Groups Projects
Commit 4ab75484 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "init: Add support for ${x.y:-default} expansion"

parents b67fed55 4b56162a
Branches
Tags
No related merge requests found
......@@ -489,6 +489,7 @@ bool expand_props(const std::string& src, std::string* dst) {
* - will accept $$ as a literal $.
* - no nested property expansion, i.e. ${foo.${bar}} is not supported,
* bad things will happen
* - ${x.y:-default} will return default value if property empty.
*/
while (*src_ptr) {
const char* c;
......@@ -511,6 +512,7 @@ bool expand_props(const std::string& src, std::string* dst) {
}
std::string prop_name;
std::string def_val;
if (*c == '{') {
c++;
const char* end = strchr(c, '}');
......@@ -521,6 +523,11 @@ bool expand_props(const std::string& src, std::string* dst) {
}
prop_name = std::string(c, end);
c = end + 1;
size_t def = prop_name.find(":-");
if (def < prop_name.size()) {
def_val = prop_name.substr(def + 2);
prop_name = prop_name.substr(0, def);
}
} else {
prop_name = c;
ERROR("using deprecated syntax for specifying property '%s', use ${name} instead\n",
......@@ -535,10 +542,13 @@ bool expand_props(const std::string& src, std::string* dst) {
std::string prop_val = property_get(prop_name.c_str());
if (prop_val.empty()) {
if (def_val.empty()) {
ERROR("property '%s' doesn't exist while expanding '%s'\n",
prop_name.c_str(), src.c_str());
return false;
}
prop_val = def_val;
}
dst->append(prop_val);
src_ptr = c;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment