init: Add support for ${x.y:-default} expansion
commit 00ede7d262
(init: do
expand_props before calling the builtins) broke logpersist
Bug: 28120456
Bug: 22654233
Bug: 28788401
Change-Id: Ib4d8231665b26ac083b02243177493fab41c8978
This commit is contained in:
parent
b79e076e5e
commit
109d7d23c5
|
@ -504,6 +504,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;
|
||||
|
@ -526,6 +527,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, '}');
|
||||
|
@ -536,6 +538,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",
|
||||
|
@ -550,9 +557,12 @@ bool expand_props(const std::string& src, std::string* dst) {
|
|||
|
||||
std::string prop_val = property_get(prop_name.c_str());
|
||||
if (prop_val.empty()) {
|
||||
ERROR("property '%s' doesn't exist while expanding '%s'\n",
|
||||
prop_name.c_str(), src.c_str());
|
||||
return false;
|
||||
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);
|
||||
|
|
Loading…
Reference in New Issue