First pass inittab parser written
authorErik Andersen <andersen@codepoet.org>
Thu, 30 Dec 1999 09:25:17 +0000 (09:25 -0000)
committerErik Andersen <andersen@codepoet.org>
Thu, 30 Dec 1999 09:25:17 +0000 (09:25 -0000)
 -Erik

init.c
init/init.c

diff --git a/init.c b/init.c
index 561b5fd527186feddd823c743badb27c3b56cd4a..b71c9f74e60aeb4bb54bddca775bb608a6fdaf00 100644 (file)
--- a/init.c
+++ b/init.c
 #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
index 561b5fd527186feddd823c743badb27c3b56cd4a..b71c9f74e60aeb4bb54bddca775bb608a6fdaf00 100644 (file)
 #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