init: Add support for ${x.y:-default} expansion
commit 00ede7d262
(init: do
expand_props before calling the builtins) broke logpersist
Bug: 28120456
Bug: 22654233
Change-Id: Ib4d8231665b26ac083b02243177493fab41c8978
This commit is contained in:
parent
b67fed557f
commit
4b56162a33
1 changed files with 13 additions and 3 deletions
|
@ -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,9 +542,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 a new issue