diff options
author | Eric Andersen | 2000-05-31 20:04:38 +0000 |
---|---|---|
committer | Eric Andersen | 2000-05-31 20:04:38 +0000 |
commit | b5966368d78dfe3354371ad6f467671e4626e685 (patch) | |
tree | fd824b05197f0b0fd154712febd429f404222684 /init | |
parent | deb0331eb64d6bf9c92c0e5633eb84c49bf2b411 (diff) | |
download | busybox-b5966368d78dfe3354371ad6f467671e4626e685.zip busybox-b5966368d78dfe3354371ad6f467671e4626e685.tar.gz |
Minor doc fix. Added several bugs to the todo list. Fixed the way init
scans /etc/inittab entries so that commands can contain ":"s.
-Erik
Diffstat (limited to 'init')
-rw-r--r-- | init/init.c | 59 |
1 files changed, 32 insertions, 27 deletions
diff --git a/init/init.c b/init/init.c index 38e9131..0e12610 100644 --- a/init/init.c +++ b/init/init.c @@ -745,7 +745,7 @@ void parse_inittab(void) #ifdef BB_FEATURE_USE_INITTAB FILE *file; char buf[256], lineAsRead[256], tmpConsole[256]; - char *p, *q, *r, *s; + char *id, *runlev, *action, *process, *eol; const struct initActionType *a = actions; int foundIt; @@ -772,64 +772,69 @@ void parse_inittab(void) while (fgets(buf, 255, file) != NULL) { foundIt = FALSE; - for (p = buf; *p == ' ' || *p == '\t'; p++); - if (*p == '#' || *p == '\n') + /* Skip leading spaces */ + for (id = buf; *id == ' ' || *id == '\t'; id++); + + /* Skip the line if it's a comment */ + if (*id == '#' || *id == '\n') continue; /* Trim the trailing \n */ - q = strrchr(p, '\n'); - if (q != NULL) - *q = '\0'; + eol = strrchr(id, '\n'); + if (eol != NULL) + *eol = '\0'; /* Keep a copy around for posterity's sake (and error msgs) */ strcpy(lineAsRead, buf); - /* Grab the ID field */ - s = p; - p = strchr(p, ':'); - if (p != NULL || *(p + 1) != '\0') { - *p = '\0'; - ++p; + /* Separate the ID field from the runlevels */ + runlev = strchr(id, ':'); + if (runlev == NULL || *(runlev + 1) == '\0') { + message(LOG | CONSOLE, "Bad inittab entry: %s\n", lineAsRead); + continue; + } else { + *runlev = '\0'; + ++runlev; } - /* Now peel off the process field from the end - * of the string */ - q = strrchr(p, ':'); - if (q == NULL || *(q + 1) == '\0') { + /* Separate the runlevels from the action */ + action = strchr(runlev, ':'); + if (action == NULL || *(action + 1) == '\0') { message(LOG | CONSOLE, "Bad inittab entry: %s\n", lineAsRead); continue; } else { - *q = '\0'; - ++q; + *action = '\0'; + ++action; } - /* Now peel off the action field */ - r = strrchr(p, ':'); - if (r == NULL || *(r + 1) == '\0') { + /* Separate the action from the process */ + process = strchr(action, ':'); + if (process == NULL || *(process + 1) == '\0') { message(LOG | CONSOLE, "Bad inittab entry: %s\n", lineAsRead); continue; } else { - ++r; + *process = '\0'; + ++process; } /* Ok, now process it */ a = actions; while (a->name != 0) { - if (strcmp(a->name, r) == 0) { - if (*s != '\0') { + if (strcmp(a->name, action) == 0) { + if (*id != '\0') { struct stat statBuf; strcpy(tmpConsole, "/dev/"); - strncat(tmpConsole, s, 200); + strncat(tmpConsole, id, 200); if (stat(tmpConsole, &statBuf) != 0) { message(LOG | CONSOLE, "device '%s' does not exist. Did you read the directions?\n", tmpConsole); break; } - s = tmpConsole; + id = tmpConsole; } - new_initAction(a->action, q, s); + new_initAction(a->action, process, id); foundIt = TRUE; } a++; |