Merge "init: expand_props for onrestart commands."
This commit is contained in:
commit
8a502000d1
3 changed files with 25 additions and 9 deletions
|
|
@ -585,6 +585,19 @@ std::string build_triggers_string(struct action *cur_action) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool expand_command_arguments(int nargs, char** args, std::vector<std::string>* expanded_args) {
|
||||||
|
std::vector<std::string>& strs = *expanded_args;
|
||||||
|
strs.resize(nargs);
|
||||||
|
strs[0] = args[0];
|
||||||
|
for (int i = 1; i < nargs; ++i) {
|
||||||
|
if (expand_props(args[i], &strs[i]) == -1) {
|
||||||
|
ERROR("%s: cannot expand '%s'\n", args[0], args[i]);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void execute_one_command() {
|
void execute_one_command() {
|
||||||
Timer t;
|
Timer t;
|
||||||
|
|
||||||
|
|
@ -606,14 +619,9 @@ void execute_one_command() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int result = 0;
|
int result = 0;
|
||||||
std::vector<std::string> arg_strs(cur_command->nargs);
|
std::vector<std::string> arg_strs;
|
||||||
arg_strs[0] = cur_command->args[0];
|
if (!expand_command_arguments(cur_command->nargs, cur_command->args, &arg_strs)) {
|
||||||
for (int i = 1; i < cur_command->nargs; ++i) {
|
result = -EINVAL;
|
||||||
if (expand_props(cur_command->args[i], &arg_strs[i]) == -1) {
|
|
||||||
ERROR("%s: cannot expand '%s'\n", cur_command->args[0], cur_command->args[i]);
|
|
||||||
result = -EINVAL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
std::vector<char*> args;
|
std::vector<char*> args;
|
||||||
|
|
|
||||||
|
|
@ -161,5 +161,6 @@ int selinux_reload_policy(void);
|
||||||
void zap_stdio(void);
|
void zap_stdio(void);
|
||||||
|
|
||||||
void register_epoll_handler(int fd, void (*fn)());
|
void register_epoll_handler(int fd, void (*fn)());
|
||||||
|
bool expand_command_arguments(int nargs, char** args, std::vector<std::string>* expanded_args);
|
||||||
|
|
||||||
#endif /* _INIT_INIT_H */
|
#endif /* _INIT_INIT_H */
|
||||||
|
|
|
||||||
|
|
@ -136,7 +136,14 @@ static bool wait_for_one_process() {
|
||||||
struct listnode* node;
|
struct listnode* node;
|
||||||
list_for_each(node, &svc->onrestart.commands) {
|
list_for_each(node, &svc->onrestart.commands) {
|
||||||
command* cmd = node_to_item(node, struct command, clist);
|
command* cmd = node_to_item(node, struct command, clist);
|
||||||
cmd->func(cmd->nargs, cmd->args);
|
std::vector<std::string> arg_strs;
|
||||||
|
if (expand_command_arguments(cmd->nargs, cmd->args, &arg_strs)) {
|
||||||
|
std::vector<char*> args;
|
||||||
|
for (auto& s : arg_strs) {
|
||||||
|
args.push_back(&s[0]);
|
||||||
|
}
|
||||||
|
cmd->func(args.size(), &args[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
svc->NotifyStateChange("restarting");
|
svc->NotifyStateChange("restarting");
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue