summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHung-ying Tyan <tyanh@google.com>2016-01-21 04:12:23 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2016-01-21 04:12:23 +0000
commite7f9779886f76bac5388718715b053f9e16af1c9 (patch)
treea6e2ff2da40bfbd2681c83dd2b2e0fe1f7e89f4b
parentc937afebd9309da04103beb23c0b47121e1ac947 (diff)
parentdc738eaf1547c250979bb9f1ffb64b0836a5e7f3 (diff)
downloadcore-e7f9779886f76bac5388718715b053f9e16af1c9.tar.gz
core-e7f9779886f76bac5388718715b053f9e16af1c9.tar.bz2
core-e7f9779886f76bac5388718715b053f9e16af1c9.zip
Merge "Allow paths of .rc files to be specified at mount_all"
-rw-r--r--init/builtins.cpp37
-rw-r--r--init/readme.txt11
2 files changed, 33 insertions, 15 deletions
diff --git a/init/builtins.cpp b/init/builtins.cpp
index d2291bb50..35f1a9e04 100644
--- a/init/builtins.cpp
+++ b/init/builtins.cpp
@@ -418,20 +418,32 @@ static int wipe_data_via_recovery() {
while (1) { pause(); } // never reached
}
-static void import_late() {
- static const std::vector<std::string> init_directories = {
- "/system/etc/init",
- "/vendor/etc/init",
- "/odm/etc/init"
- };
-
+/* Imports .rc files from the specified paths. Default ones are applied if none is given.
+ *
+ * start_index: index of the first path in the args list
+ */
+static void import_late(const std::vector<std::string>& args, size_t start_index) {
Parser& parser = Parser::GetInstance();
- for (const auto& dir : init_directories) {
- parser.ParseConfig(dir.c_str());
+ if (args.size() <= start_index) {
+ // Use the default set if no path is given
+ static const std::vector<std::string> init_directories = {
+ "/system/etc/init",
+ "/vendor/etc/init",
+ "/odm/etc/init"
+ };
+
+ for (const auto& dir : init_directories) {
+ parser.ParseConfig(dir);
+ }
+ } else {
+ for (size_t i = start_index; i < args.size(); ++i) {
+ parser.ParseConfig(args[i]);
+ }
}
}
-/*
+/* mount_all <fstab> [ <path> ]*
+ *
* This function might request a reboot, in which case it will
* not return.
*/
@@ -478,7 +490,8 @@ static int do_mount_all(const std::vector<std::string>& args) {
return -1;
}
- import_late();
+ /* Paths of .rc files are specified at the 2nd argument and beyond */
+ import_late(args, 2);
if (ret == FS_MGR_MNTALL_DEV_NEEDS_ENCRYPTION) {
property_set("vold.decrypt", "trigger_encryption");
@@ -900,7 +913,7 @@ BuiltinFunctionMap::Map& BuiltinFunctionMap::map() const {
{"load_system_props", {0, 0, do_load_system_props}},
{"loglevel", {1, 1, do_loglevel}},
{"mkdir", {1, 4, do_mkdir}},
- {"mount_all", {1, 1, do_mount_all}},
+ {"mount_all", {1, kMax, do_mount_all}},
{"mount", {3, kMax, do_mount}},
{"powerctl", {1, 1, do_powerctl}},
{"restart", {1, 1, do_restart}},
diff --git a/init/readme.txt b/init/readme.txt
index bacd6bdf2..5a1cf440c 100644
--- a/init/readme.txt
+++ b/init/readme.txt
@@ -49,6 +49,8 @@ The intention of these directories is as follows
actions or daemons needed for motion sensor or other peripheral
functionality.
+One may specify paths in the mount_all command line to have it import
+.rc files at the specified paths instead of the default ones described above.
Actions
-------
@@ -263,8 +265,10 @@ mkdir <path> [mode] [owner] [group]
owned by the root user and root group. If provided, the mode, owner and group
will be updated if the directory exists already.
-mount_all <fstab>
- Calls fs_mgr_mount_all on the given fs_mgr-format fstab.
+mount_all <fstab> [ <path> ]*
+ Calls fs_mgr_mount_all on the given fs_mgr-format fstab and imports .rc files
+ at the specified paths (e.g., on the partitions just mounted). Refer to the
+ section of "Init .rc Files" for detail.
mount <type> <device> <dir> [ <flag> ]* [<options>]
Attempt to mount the named device at the directory <dir>
@@ -358,7 +362,8 @@ import <path>
There are only two times where the init executable imports .rc files,
1) When it imports /init.rc during initial boot
- 2) When it imports /{system,vendor,odm}/etc/init/ during mount_all
+ 2) When it imports /{system,vendor,odm}/etc/init/ or .rc files at specified
+ paths during mount_all
Properties