aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
authorFred Quintana <fredq@google.com>2009-10-06 14:50:01 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2009-10-06 14:50:01 -0700
commitc0b1c0ac80bdd080dd3b3dfe0a580eae388e27b5 (patch)
tree7d5918e5a374c66c3127109b200ad6b40aea0994 /init
parentf184b94ad32c50ccf5bb1792a963551b5841e772 (diff)
parent4d0b21f4ac5908f695c9c0759c3a34511d8fd97b (diff)
downloadsystem_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.c16
-rw-r--r--init/devices.c3
-rwxr-xr-x[-rw-r--r--]init/init.c7
-rw-r--r--init/init.h1
-rw-r--r--init/keywords.h4
-rw-r--r--init/parser.c2
-rw-r--r--init/readme.txt6
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.