Loading init/init.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -288,6 +288,16 @@ void service_start(struct service *svc, const char *dynamic_args) freecon(scon); scon = NULL; if (svc->writepid_files_) { std::string pid_str = android::base::StringPrintf("%d", pid); for (auto& file : *svc->writepid_files_) { if (!android::base::WriteStringToFile(pid_str, file)) { ERROR("couldn't write %s to %s: %s\n", pid_str.c_str(), file.c_str(), strerror(errno)); } } } if (svc->ioprio_class != IoSchedClass_NONE) { if (android_set_ioprio(getpid(), svc->ioprio_class, svc->ioprio_pri)) { ERROR("Failed to set pid %d ioprio = %d,%d: %s\n", Loading init/init.h +5 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,9 @@ #include <sys/types.h> #include <string> #include <vector> #include <cutils/list.h> #include <cutils/iosched_policy.h> Loading Loading @@ -116,6 +119,8 @@ struct service { struct action onrestart; /* Actions to execute on restart. */ std::vector<std::string>* writepid_files_; /* keycodes for triggering this service via /dev/keychord */ int *keycodes; int nkeycodes; Loading init/init_parser.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -206,6 +206,7 @@ static int lookup_keyword(const char *s) break; case 'w': if (!strcmp(s, "rite")) return K_write; if (!strcmp(s, "ritepid")) return K_writepid; if (!strcmp(s, "ait")) return K_wait; break; } Loading Loading @@ -924,6 +925,16 @@ static void parse_line_service(struct parse_state *state, int nargs, char **args svc->seclabel = args[1]; } break; case K_writepid: if (nargs < 2) { parse_error(state, "writepid option requires at least one filename\n"); break; } svc->writepid_files_ = new std::vector<std::string>; for (int i = 1; i < nargs; ++i) { svc->writepid_files_->push_back(args[i]); } break; default: parse_error(state, "invalid option '%s'\n", args[0]); Loading init/keywords.h +13 −12 Original line number Diff line number Diff line Loading @@ -43,11 +43,15 @@ int do_wait(int nargs, char **args); enum { K_UNKNOWN, #endif KEYWORD(bootchart_init, COMMAND, 0, do_bootchart_init) KEYWORD(chmod, COMMAND, 2, do_chmod) KEYWORD(chown, COMMAND, 2, do_chown) KEYWORD(class, OPTION, 0, 0) KEYWORD(class_reset, COMMAND, 1, do_class_reset) KEYWORD(class_start, COMMAND, 1, do_class_start) KEYWORD(class_stop, COMMAND, 1, do_class_stop) KEYWORD(class_reset, COMMAND, 1, do_class_reset) KEYWORD(console, OPTION, 0, 0) KEYWORD(copy, COMMAND, 2, do_copy) KEYWORD(critical, OPTION, 0, 0) KEYWORD(disabled, OPTION, 0, 0) KEYWORD(domainname, COMMAND, 1, do_domainname) Loading @@ -57,16 +61,20 @@ enum { KEYWORD(group, OPTION, 0, 0) KEYWORD(hostname, COMMAND, 1, do_hostname) KEYWORD(ifup, COMMAND, 1, do_ifup) KEYWORD(import, SECTION, 1, 0) KEYWORD(insmod, COMMAND, 1, do_insmod) KEYWORD(installkey, COMMAND, 1, do_installkey) KEYWORD(import, SECTION, 1, 0) KEYWORD(ioprio, OPTION, 0, 0) KEYWORD(keycodes, OPTION, 0, 0) KEYWORD(load_all_props, COMMAND, 0, do_load_all_props) KEYWORD(load_persist_props, COMMAND, 0, do_load_persist_props) KEYWORD(loglevel, COMMAND, 1, do_loglevel) KEYWORD(mkdir, COMMAND, 1, do_mkdir) KEYWORD(mount_all, COMMAND, 1, do_mount_all) KEYWORD(mount, COMMAND, 3, do_mount) KEYWORD(on, SECTION, 0, 0) KEYWORD(oneshot, OPTION, 0, 0) KEYWORD(onrestart, OPTION, 0, 0) KEYWORD(on, SECTION, 0, 0) KEYWORD(powerctl, COMMAND, 1, do_powerctl) KEYWORD(restart, COMMAND, 1, do_restart) KEYWORD(restorecon, COMMAND, 1, do_restorecon) Loading @@ -82,22 +90,15 @@ enum { KEYWORD(start, COMMAND, 1, do_start) KEYWORD(stop, COMMAND, 1, do_stop) KEYWORD(swapon_all, COMMAND, 1, do_swapon_all) KEYWORD(trigger, COMMAND, 1, do_trigger) KEYWORD(symlink, COMMAND, 1, do_symlink) KEYWORD(sysclktz, COMMAND, 1, do_sysclktz) KEYWORD(trigger, COMMAND, 1, do_trigger) KEYWORD(user, OPTION, 0, 0) KEYWORD(verity_load_state, COMMAND, 0, do_verity_load_state) KEYWORD(verity_update_state, COMMAND, 0, do_verity_update_state) KEYWORD(wait, COMMAND, 1, do_wait) KEYWORD(write, COMMAND, 2, do_write) KEYWORD(copy, COMMAND, 2, do_copy) KEYWORD(chown, COMMAND, 2, do_chown) KEYWORD(chmod, COMMAND, 2, do_chmod) KEYWORD(loglevel, COMMAND, 1, do_loglevel) KEYWORD(load_persist_props, COMMAND, 0, do_load_persist_props) KEYWORD(load_all_props, COMMAND, 0, do_load_all_props) KEYWORD(ioprio, OPTION, 0, 0) KEYWORD(bootchart_init, COMMAND, 0, do_bootchart_init) KEYWORD(writepid, OPTION, 0, 0) #ifdef __MAKE_KEYWORD_ENUM__ KEYWORD_COUNT, }; Loading init/readme.txt +32 −28 Original line number Diff line number Diff line Loading @@ -110,6 +110,10 @@ class <name> onrestart Execute a Command (see below) when service restarts. writepid <file...> Write the child's pid to the given files when it forks. Meant for cgroup/cpuset usage. Triggers -------- Loading Loading
init/init.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -288,6 +288,16 @@ void service_start(struct service *svc, const char *dynamic_args) freecon(scon); scon = NULL; if (svc->writepid_files_) { std::string pid_str = android::base::StringPrintf("%d", pid); for (auto& file : *svc->writepid_files_) { if (!android::base::WriteStringToFile(pid_str, file)) { ERROR("couldn't write %s to %s: %s\n", pid_str.c_str(), file.c_str(), strerror(errno)); } } } if (svc->ioprio_class != IoSchedClass_NONE) { if (android_set_ioprio(getpid(), svc->ioprio_class, svc->ioprio_pri)) { ERROR("Failed to set pid %d ioprio = %d,%d: %s\n", Loading
init/init.h +5 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,9 @@ #include <sys/types.h> #include <string> #include <vector> #include <cutils/list.h> #include <cutils/iosched_policy.h> Loading Loading @@ -116,6 +119,8 @@ struct service { struct action onrestart; /* Actions to execute on restart. */ std::vector<std::string>* writepid_files_; /* keycodes for triggering this service via /dev/keychord */ int *keycodes; int nkeycodes; Loading
init/init_parser.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -206,6 +206,7 @@ static int lookup_keyword(const char *s) break; case 'w': if (!strcmp(s, "rite")) return K_write; if (!strcmp(s, "ritepid")) return K_writepid; if (!strcmp(s, "ait")) return K_wait; break; } Loading Loading @@ -924,6 +925,16 @@ static void parse_line_service(struct parse_state *state, int nargs, char **args svc->seclabel = args[1]; } break; case K_writepid: if (nargs < 2) { parse_error(state, "writepid option requires at least one filename\n"); break; } svc->writepid_files_ = new std::vector<std::string>; for (int i = 1; i < nargs; ++i) { svc->writepid_files_->push_back(args[i]); } break; default: parse_error(state, "invalid option '%s'\n", args[0]); Loading
init/keywords.h +13 −12 Original line number Diff line number Diff line Loading @@ -43,11 +43,15 @@ int do_wait(int nargs, char **args); enum { K_UNKNOWN, #endif KEYWORD(bootchart_init, COMMAND, 0, do_bootchart_init) KEYWORD(chmod, COMMAND, 2, do_chmod) KEYWORD(chown, COMMAND, 2, do_chown) KEYWORD(class, OPTION, 0, 0) KEYWORD(class_reset, COMMAND, 1, do_class_reset) KEYWORD(class_start, COMMAND, 1, do_class_start) KEYWORD(class_stop, COMMAND, 1, do_class_stop) KEYWORD(class_reset, COMMAND, 1, do_class_reset) KEYWORD(console, OPTION, 0, 0) KEYWORD(copy, COMMAND, 2, do_copy) KEYWORD(critical, OPTION, 0, 0) KEYWORD(disabled, OPTION, 0, 0) KEYWORD(domainname, COMMAND, 1, do_domainname) Loading @@ -57,16 +61,20 @@ enum { KEYWORD(group, OPTION, 0, 0) KEYWORD(hostname, COMMAND, 1, do_hostname) KEYWORD(ifup, COMMAND, 1, do_ifup) KEYWORD(import, SECTION, 1, 0) KEYWORD(insmod, COMMAND, 1, do_insmod) KEYWORD(installkey, COMMAND, 1, do_installkey) KEYWORD(import, SECTION, 1, 0) KEYWORD(ioprio, OPTION, 0, 0) KEYWORD(keycodes, OPTION, 0, 0) KEYWORD(load_all_props, COMMAND, 0, do_load_all_props) KEYWORD(load_persist_props, COMMAND, 0, do_load_persist_props) KEYWORD(loglevel, COMMAND, 1, do_loglevel) KEYWORD(mkdir, COMMAND, 1, do_mkdir) KEYWORD(mount_all, COMMAND, 1, do_mount_all) KEYWORD(mount, COMMAND, 3, do_mount) KEYWORD(on, SECTION, 0, 0) KEYWORD(oneshot, OPTION, 0, 0) KEYWORD(onrestart, OPTION, 0, 0) KEYWORD(on, SECTION, 0, 0) KEYWORD(powerctl, COMMAND, 1, do_powerctl) KEYWORD(restart, COMMAND, 1, do_restart) KEYWORD(restorecon, COMMAND, 1, do_restorecon) Loading @@ -82,22 +90,15 @@ enum { KEYWORD(start, COMMAND, 1, do_start) KEYWORD(stop, COMMAND, 1, do_stop) KEYWORD(swapon_all, COMMAND, 1, do_swapon_all) KEYWORD(trigger, COMMAND, 1, do_trigger) KEYWORD(symlink, COMMAND, 1, do_symlink) KEYWORD(sysclktz, COMMAND, 1, do_sysclktz) KEYWORD(trigger, COMMAND, 1, do_trigger) KEYWORD(user, OPTION, 0, 0) KEYWORD(verity_load_state, COMMAND, 0, do_verity_load_state) KEYWORD(verity_update_state, COMMAND, 0, do_verity_update_state) KEYWORD(wait, COMMAND, 1, do_wait) KEYWORD(write, COMMAND, 2, do_write) KEYWORD(copy, COMMAND, 2, do_copy) KEYWORD(chown, COMMAND, 2, do_chown) KEYWORD(chmod, COMMAND, 2, do_chmod) KEYWORD(loglevel, COMMAND, 1, do_loglevel) KEYWORD(load_persist_props, COMMAND, 0, do_load_persist_props) KEYWORD(load_all_props, COMMAND, 0, do_load_all_props) KEYWORD(ioprio, OPTION, 0, 0) KEYWORD(bootchart_init, COMMAND, 0, do_bootchart_init) KEYWORD(writepid, OPTION, 0, 0) #ifdef __MAKE_KEYWORD_ENUM__ KEYWORD_COUNT, }; Loading
init/readme.txt +32 −28 Original line number Diff line number Diff line Loading @@ -110,6 +110,10 @@ class <name> onrestart Execute a Command (see below) when service restarts. writepid <file...> Write the child's pid to the given files when it forks. Meant for cgroup/cpuset usage. Triggers -------- Loading