First pass inittab parser written

-Erik
This commit is contained in:
Erik Andersen 1999-12-30 09:25:17 +00:00
parent 1266a13e1f
commit 9c88cac5cb
2 changed files with 150 additions and 0 deletions

75
init.c
View File

@ -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

View File

@ -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