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);
+