diff options
Diffstat (limited to 'init/builtins.cpp')
-rw-r--r-- | init/builtins.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/init/builtins.cpp b/init/builtins.cpp index 1186e9db9..965a81fbe 100644 --- a/init/builtins.cpp +++ b/init/builtins.cpp @@ -1003,6 +1003,29 @@ static int do_wait(const std::vector<std::string>& args) { return -1; } +static int do_wait_for_prop(const std::vector<std::string>& args) { + const char* name = args[1].c_str(); + const char* value = args[2].c_str(); + size_t value_len = strlen(value); + + if (!is_legal_property_name(name)) { + LOG(ERROR) << "do_wait_for_prop(\"" << name << "\", \"" << value + << "\") failed: bad name"; + return -1; + } + if (value_len >= PROP_VALUE_MAX) { + LOG(ERROR) << "do_wait_for_prop(\"" << name << "\", \"" << value + << "\") failed: value too long"; + return -1; + } + if (!wait_property(name, value)) { + LOG(ERROR) << "do_wait_for_prop(\"" << name << "\", \"" << value + << "\") failed: init already in waiting"; + return -1; + } + return 0; +} + /* * Callback to make a directory from the ext4 code */ @@ -1074,6 +1097,7 @@ BuiltinFunctionMap::Map& BuiltinFunctionMap::map() const { {"verity_load_state", {0, 0, do_verity_load_state}}, {"verity_update_state", {0, 0, do_verity_update_state}}, {"wait", {1, 2, do_wait}}, + {"wait_for_prop", {2, 2, do_wait_for_prop}}, {"write", {2, 2, do_write}}, }; return builtin_functions; |