diff options
| author | Fred Quintana <fredq@google.com> | 2009-10-06 14:50:01 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2009-10-06 14:50:01 -0700 |
| commit | c0b1c0ac80bdd080dd3b3dfe0a580eae388e27b5 (patch) | |
| tree | 7d5918e5a374c66c3127109b200ad6b40aea0994 /init | |
| parent | f184b94ad32c50ccf5bb1792a963551b5841e772 (diff) | |
| parent | 4d0b21f4ac5908f695c9c0759c3a34511d8fd97b (diff) | |
| download | system_core-c0b1c0ac80bdd080dd3b3dfe0a580eae388e27b5.tar.gz system_core-c0b1c0ac80bdd080dd3b3dfe0a580eae388e27b5.tar.bz2 system_core-c0b1c0ac80bdd080dd3b3dfe0a580eae388e27b5.zip | |
Merge branch 'eclair-plus-aosp' of ssh://android-git.corp.google.com:29418/platform/system/core into eclair-mr2-plus-aosp
Diffstat (limited to 'init')
| -rw-r--r-- | init/builtins.c | 16 | ||||
| -rw-r--r-- | init/devices.c | 3 | ||||
| -rwxr-xr-x[-rw-r--r--] | init/init.c | 7 | ||||
| -rw-r--r-- | init/init.h | 1 | ||||
| -rw-r--r-- | init/keywords.h | 4 | ||||
| -rw-r--r-- | init/parser.c | 2 | ||||
| -rw-r--r-- | init/readme.txt | 6 |
7 files changed, 33 insertions, 6 deletions
diff --git a/init/builtins.c b/init/builtins.c index 5a1b2637..b4af700b 100644 --- a/init/builtins.c +++ b/init/builtins.c @@ -131,6 +131,18 @@ static void service_start_if_not_disabled(struct service *svc) } } +int do_chdir(int nargs, char **args) +{ + chdir(args[1]); + return 0; +} + +int do_chroot(int nargs, char **args) +{ + chroot(args[1]); + return 0; +} + int do_class_start(int nargs, char **args) { /* Starting a class does not start services @@ -206,7 +218,7 @@ int do_insmod(int nargs, char **args) int do_import(int nargs, char **args) { - return -1; + return parse_config_file(args[1]); } int do_mkdir(int nargs, char **args) @@ -400,6 +412,8 @@ int do_restart(int nargs, char **args) int do_trigger(int nargs, char **args) { + action_for_each_trigger(args[1], action_add_queue_tail); + drain_action_queue(); return 0; } diff --git a/init/devices.c b/init/devices.c index c2c9353c..8f2f4efd 100644 --- a/init/devices.c +++ b/init/devices.c @@ -125,6 +125,7 @@ static struct perms_ devperms[] = { { "/dev/pmem_camera", 0660, AID_SYSTEM, AID_CAMERA, 1 }, { "/dev/oncrpc/", 0660, AID_ROOT, AID_SYSTEM, 1 }, { "/dev/adsp/", 0660, AID_SYSTEM, AID_AUDIO, 1 }, + { "/dev/snd/", 0660, AID_SYSTEM, AID_AUDIO, 1 }, { "/dev/mt9t013", 0660, AID_SYSTEM, AID_SYSTEM, 0 }, { "/dev/msm_camera/", 0660, AID_SYSTEM, AID_SYSTEM, 1 }, { "/dev/akm8976_daemon",0640, AID_COMPASS, AID_SYSTEM, 0 }, @@ -312,7 +313,7 @@ static void make_device(const char *path, int block, int major, int minor) chown(path, uid, gid); } -#ifdef LOG_UEVENTS +#if LOG_UEVENTS static inline suseconds_t get_usecs(void) { diff --git a/init/init.c b/init/init.c index 8c2a0582..f76eb36b 100644..100755 --- a/init/init.c +++ b/init/init.c @@ -65,8 +65,6 @@ static struct input_keychord *keychords = 0; static int keychords_count = 0; static int keychords_length = 0; -static void drain_action_queue(void); - static void notify_service_state(const char *name, const char *state) { char pname[PROP_NAME_MAX]; @@ -391,12 +389,13 @@ static int wait_for_one_process(int block) } } + svc->flags |= SVC_RESTARTING; + /* Execute all onrestart commands for this service. */ list_for_each(node, &svc->onrestart.commands) { cmd = node_to_item(node, struct command, clist); cmd->func(cmd->nargs, cmd->args); } - svc->flags |= SVC_RESTARTING; notify_service_state(svc->name, "restarting"); return 0; } @@ -667,7 +666,7 @@ static void get_hardware_name(void) } } -static void drain_action_queue(void) +void drain_action_queue(void) { struct listnode *node; struct command *cmd; diff --git a/init/init.h b/init/init.h index f306b7bc..60c30555 100644 --- a/init/init.h +++ b/init/init.h @@ -165,6 +165,7 @@ void service_stop(struct service *svc); void service_start(struct service *svc, const char *dynamic_args); void property_changed(const char *name, const char *value); +void drain_action_queue(void); struct action *action_remove_queue_head(void); void action_add_queue_tail(struct action *act); void action_for_each_trigger(const char *trigger, diff --git a/init/keywords.h b/init/keywords.h index 641426ca..308118ef 100644 --- a/init/keywords.h +++ b/init/keywords.h @@ -1,5 +1,7 @@ #ifndef KEYWORD +int do_chroot(int nargs, char **args); +int do_chdir(int nargs, char **args); int do_class_start(int nargs, char **args); int do_class_stop(int nargs, char **args); int do_domainname(int nargs, char **args); @@ -32,6 +34,8 @@ enum { K_UNKNOWN, #endif KEYWORD(capability, OPTION, 0, 0) + KEYWORD(chdir, COMMAND, 1, do_chdir) + KEYWORD(chroot, COMMAND, 1, do_chroot) KEYWORD(class, OPTION, 0, 0) KEYWORD(class_start, COMMAND, 1, do_class_start) KEYWORD(class_stop, COMMAND, 1, do_class_stop) diff --git a/init/parser.c b/init/parser.c index affc80c9..54622cce 100644 --- a/init/parser.c +++ b/init/parser.c @@ -129,6 +129,8 @@ int lookup_keyword(const char *s) case 'c': if (!strcmp(s, "opy")) return K_copy; if (!strcmp(s, "apability")) return K_capability; + if (!strcmp(s, "hdir")) return K_chdir; + if (!strcmp(s, "hroot")) return K_chroot; if (!strcmp(s, "lass")) return K_class; if (!strcmp(s, "lass_start")) return K_class_start; if (!strcmp(s, "lass_stop")) return K_class_stop; diff --git a/init/readme.txt b/init/readme.txt index 665090ba..a185790a 100644 --- a/init/readme.txt +++ b/init/readme.txt @@ -145,12 +145,18 @@ import <filename> hostname <name> Set the host name. +chdir <directory> + Change working directory. + chmod <octal-mode> <path> Change file access permissions. chown <owner> <group> <path> Change file owner and group. +chroot <directory> + Change process root directory. + class_start <serviceclass> Start all services of the specified class if they are not already running. |
