summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Andersen1999-12-30 09:25:17 +0000
committerErik Andersen1999-12-30 09:25:17 +0000
commit9c88cac5cbfb2ff70f800ee5bb3289e925aaa65f (patch)
tree995ccacfa08c819278c8b7448f8167376adabcf3
parent1266a13e1f687d34052ae7e2469048d035633e58 (diff)
downloadbusybox-9c88cac5cbfb2ff70f800ee5bb3289e925aaa65f.zip
busybox-9c88cac5cbfb2ff70f800ee5bb3289e925aaa65f.tar.gz
First pass inittab parser written
-Erik
-rw-r--r--init.c75
-rw-r--r--init/init.c75
2 files changed, 150 insertions, 0 deletions
diff --git a/init.c b/init.c
index 561b5fd..b71c9f7 100644
--- a/init.c
+++ b/init.c
@@ -62,10 +62,13 @@
#define SERIAL_CON1 "/dev/ttyS1" /* Serial console */
#define GETTY "/sbin/getty" /* Default location of getty */
#define SHELL "/bin/sh" /* Default shell */
+#define INITTAB "/etc/inittab" /* inittab file location */
#ifndef BB_INIT_SCRIPT
#define BB_INIT_SCRIPT "/etc/init.d/rcS" /* Initscript. */
#endif
+#if 1
+
#define LOG 0x1
#define CONSOLE 0x2
static char *console = _PATH_CONSOLE;
@@ -609,3 +612,75 @@ extern int init_main(int argc, char **argv)
sleep(1);
}
}
+
+#else
+
+
+void parse_inittab(void)
+{
+ FILE* file;
+ char buf[256];
+ char action[256]="";
+ char process[256]="";
+ char *p, *q;
+
+
+ if ((file = fopen(INITTAB, "r")) < 0) {
+ /* No inittab file -- set up some default behavior */
+
+ /* FIXME */
+ return;
+ }
+
+ while ( fgets(buf, 255, file) != NULL) {
+ for(p = buf; *p == ' ' || *p == '\t'; p++);
+ if (*p == '#' || *p == '\n') continue;
+
+ /* Trim the trailing \n */
+ q = strrchr( p, '\n');
+ if (q != NULL)
+ *q='\0';
+
+ /* Skip past the ID field and the runlevel
+ * field (both are ignored) */
+ p = strchr( p, ':');
+
+ /* Now peal off the process field from the end
+ * of the string */
+ q = strrchr( p, ':');
+ if ( q == NULL || q+1 == NULL)
+ goto choke;
+ *q='\0';
+ strcpy( process, ++q);
+ fprintf(stderr, "process=%s\n", process);
+
+
+ /* Now peal off the action field */
+ q = strrchr( p, ':');
+ if ( q == NULL || q+1 == NULL)
+ goto choke;
+ strcpy( action, ++q);
+ fprintf(stderr, "action=%s\n", action);
+
+
+ /* Ok, now do the right thing */
+
+ }
+ return;
+
+choke:
+ //message(CONSOLE, "Bad entry:");
+ fprintf(stderr, "Bad inittab entry: %s", buf);
+ while (1) sleep(1);
+
+}
+
+
+extern int init_main(int argc, char **argv)
+{
+ parse_inittab();
+ exit( TRUE);
+}
+
+
+#endif
diff --git a/init/init.c b/init/init.c
index 561b5fd..b71c9f7 100644
--- a/init/init.c
+++ b/init/init.c
@@ -62,10 +62,13 @@
#define SERIAL_CON1 "/dev/ttyS1" /* Serial console */
#define GETTY "/sbin/getty" /* Default location of getty */
#define SHELL "/bin/sh" /* Default shell */
+#define INITTAB "/etc/inittab" /* inittab file location */
#ifndef BB_INIT_SCRIPT
#define BB_INIT_SCRIPT "/etc/init.d/rcS" /* Initscript. */
#endif
+#if 1
+
#define LOG 0x1
#define CONSOLE 0x2
static char *console = _PATH_CONSOLE;
@@ -609,3 +612,75 @@ extern int init_main(int argc, char **argv)
sleep(1);
}
}
+
+#else
+
+
+void parse_inittab(void)
+{
+ FILE* file;
+ char buf[256];
+ char action[256]="";
+ char process[256]="";
+ char *p, *q;
+
+
+ if ((file = fopen(INITTAB, "r")) < 0) {
+ /* No inittab file -- set up some default behavior */
+
+ /* FIXME */
+ return;
+ }
+
+ while ( fgets(buf, 255, file) != NULL) {
+ for(p = buf; *p == ' ' || *p == '\t'; p++);
+ if (*p == '#' || *p == '\n') continue;
+
+ /* Trim the trailing \n */
+ q = strrchr( p, '\n');
+ if (q != NULL)
+ *q='\0';
+
+ /* Skip past the ID field and the runlevel
+ * field (both are ignored) */
+ p = strchr( p, ':');
+
+ /* Now peal off the process field from the end
+ * of the string */
+ q = strrchr( p, ':');
+ if ( q == NULL || q+1 == NULL)
+ goto choke;
+ *q='\0';
+ strcpy( process, ++q);
+ fprintf(stderr, "process=%s\n", process);
+
+
+ /* Now peal off the action field */
+ q = strrchr( p, ':');
+ if ( q == NULL || q+1 == NULL)
+ goto choke;
+ strcpy( action, ++q);
+ fprintf(stderr, "action=%s\n", action);
+
+
+ /* Ok, now do the right thing */
+
+ }
+ return;
+
+choke:
+ //message(CONSOLE, "Bad entry:");
+ fprintf(stderr, "Bad inittab entry: %s", buf);
+ while (1) sleep(1);
+
+}
+
+
+extern int init_main(int argc, char **argv)
+{
+ parse_inittab();
+ exit( TRUE);
+}
+
+
+#endif