summaryrefslogtreecommitdiff
path: root/init/builtins.cpp
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2017-02-02 04:45:35 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2017-02-02 04:45:36 +0000
commitd25e4c581907abebfc380310fae07bc48e945974 (patch)
tree1951fe8b9703023b112ea7e62a6df23ec5c0eaf5 /init/builtins.cpp
parent0f0caf95c98a3ca46ab5a47bc933d51dd7d4fb14 (diff)
parent132ac31b4738094e62cc1744e75f3756a035302c (diff)
Merge "init: add wait_for_prop builtin command"
Diffstat (limited to 'init/builtins.cpp')
-rw-r--r--init/builtins.cpp24
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;