ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/system/procd/patches/0001-add-prod_init-script.patch b/package/system/procd/patches/0001-add-prod_init-script.patch
new file mode 100644
index 0000000..90d9247
--- /dev/null
+++ b/package/system/procd/patches/0001-add-prod_init-script.patch
@@ -0,0 +1,66 @@
+--- a/inittab.c
++++ b/inittab.c
+@@ -44,6 +44,7 @@
+
+ struct init_action;
+ char *console = NULL;
++int production_mode = 0;
+
+ struct init_handler {
+ const char *name;
+@@ -313,9 +314,24 @@ void procd_inittab(void)
+ #define LINE_LEN 128
+ FILE *fp = fopen(tab, "r");
+ struct init_action *a;
+- regex_t pat_inittab;
+- regmatch_t matches[5];
+- char *line;
++ regex_t pat_inittab, pat_cmdline;
++ regmatch_t matches[5], cmd_matches[2];
++ char *line, cmdline[1024];
++ int r, fd = open("/proc/cmdline", O_RDONLY);
++
++ if (fd < 0) {
++ ERROR("Failed to open /proc/cmdline\n");
++ return;
++ }
++
++ r = read(fd, cmdline, sizeof(cmdline) - 1);
++ cmdline[r] = '\0';
++ close(fd);
++ regcomp(&pat_cmdline, "PROD=([0-2])", REG_EXTENDED);
++ if (!regexec(&pat_cmdline, cmdline, 1, cmd_matches, 0)) {
++ cmdline[cmd_matches[0].rm_eo] = '\0';
++ production_mode = atoi(&cmdline[cmd_matches[0].rm_eo - 1]);
++ }
+
+ if (!fp) {
+ ERROR("Failed to open %s: %m\n", tab);
+--- a/rcS.c
++++ b/rcS.c
+@@ -34,6 +34,7 @@
+ #include "rcS.h"
+
+ static struct runqueue q, r;
++extern int production_mode;
+
+ struct initd {
+ struct ustream_fd fd;
+@@ -172,7 +173,17 @@ static int _rc(struct runqueue *q, char
+ }
+
+ for (j = 0; j < gl.gl_pathc; j++)
++ {
++ if (strstr(gl.gl_pathv[j], "prod_init")) {
++ if (production_mode) {
++ add_initd(q, gl.gl_pathv[j], param);
++ break;
++ } else {
++ continue;
++ }
++ }
+ add_initd(q, gl.gl_pathv[j], param);
++ }
+
+ globfree(&gl);
+