/* * This is a simple kernel command line parsing function: it parses * the command line, and fills in the arguments/environment to init * as appropriate. Any cmd-line option is taken to be an environment * variable if it contains the character '='. * * This routine also checks for options meant for the kernel. * These options are not given to init - they are for internal kernel use only. */ static void __init parse_options(char *line) { char *next; int args, envs; if (!*line) return; args = 0; envs = 1; /* TERM is set to 'linux' by default */ next = line; while ((line = next) != NULL) { if ((next = strchr(line,' ')) != NULL) *next++ = 0; /* * check for kernel options first.. */ if (!strcmp(line,"ro")) { root_mountflags |= MS_RDONLY; continue; } if (!strcmp(line,"rw")) { root_mountflags &= ~MS_RDONLY; continue; } if (!strcmp(line,"debug")) { console_loglevel = 10; continue; } if (!strncmp(line,"init=",5)) { line += 5; execute_command = line; /* In case LILO is going to boot us with default command line, * it prepends "auto" before the whole cmdline which makes * the shell think it should execute a script with such name. * So we ignore all arguments entered _before_ init=... [MJ] */ args = 0; continue; } if (checksetup(line)) continue; /* * Then check if it's an environment variable or * an option. */ if (strchr(line,'=')) { if (envs >= MAX_INIT_ENVS) break; envp_init[++envs] = line; } else { if (args >= MAX_INIT_ARGS) break; argv_init[++args] = line; } } argv_init[args+1] = NULL; envp_init[envs+1] = NULL; }
/* * This is a simple kernel command line parsing function: it parses * the command line, and fills in the arguments/environment to init * as appropriate. Any cmd-line option is taken to be an environment * variable if it contains the character '='. * * This routine also checks for options meant for the kernel. * These options are not given to init - they are for internal kernel use only. */ static void __init parse_options(char *line) { char *next,*quote; int args, envs; if (!*line) return; args = 0; envs = 1; /* TERM is set to 'linux' by default */ next = line; while ((line = next) != NULL) { quote = strchr(line,'"'); next = strchr(line, ' '); while (next != NULL && quote != NULL && quote < next) { /* we found a left quote before the next blank * now we have to find the matching right quote */ next = strchr(quote+1, '"'); if (next != NULL) { quote = strchr(next+1, '"'); next = strchr(next+1, ' '); } } if (next != NULL) *next++ = 0; if (!strncmp(line,"init=",5)) { line += 5; execute_command = line; /* In case LILO is going to boot us with default command line, * it prepends "auto" before the whole cmdline which makes * the shell think it should execute a script with such name. * So we ignore all arguments entered _before_ init=... [MJ] */ args = 0; continue; } if (checksetup(line)) continue; /* * Then check if it's an environment variable or * an option. */ if (strchr(line,'=')) { if (envs >= MAX_INIT_ENVS) break; envp_init[++envs] = line; } else { if (args >= MAX_INIT_ARGS) break; if (*line) argv_init[++args] = line; } } argv_init[args+1] = NULL; envp_init[envs+1] = NULL; }
/* * This is a simple kernel command line parsing function: it parses * the command line, and fills in the arguments/environment to init * as appropriate. Any cmd-line option is taken to be an environment * variable if it contains the character '='. * * * This routine also checks for options meant for the kernel. * These options are not given to init - they are for internal kernel use only. */ static void parse_options(char *line) { char *next; int args, envs; if (!*line) return; args = 0; envs = 1; /* TERM is set to 'linux' by default */ next = line; #ifdef CONFIG_OSFMACH3 if (single_user) { if (args < MAX_INIT_ARGS) argv_init[++args] = "single"; } #endif /* CONFIG_OSFMACH3 */ while ((line = next) != NULL) { if ((next = strchr(line,' ')) != NULL) *next++ = 0; /* * check for kernel options first.. */ if (!strncmp(line,"root=",5)) { parse_root_dev(line+5); continue; } #ifdef CONFIG_ROOT_NFS if (!strncmp(line, "nfsroot=", 8)) { int n; line += 8; ROOT_DEV = MKDEV(UNNAMED_MAJOR, 255); if (line[0] == '/' || line[0] == ',' || (line[0] >= '0' && line[0] <= '9')) { strncpy(nfs_root_name, line, sizeof(nfs_root_name)); nfs_root_name[sizeof(nfs_root_name)-1] = '\0'; continue; } n = strlen(line) + strlen(NFS_ROOT); if (n >= sizeof(nfs_root_name)) line[sizeof(nfs_root_name) - strlen(NFS_ROOT) - 1] = '\0'; sprintf(nfs_root_name, NFS_ROOT, line); continue; } if (!strncmp(line, "nfsaddrs=", 9)) { line += 9; strncpy(nfs_root_addrs, line, sizeof(nfs_root_addrs)); nfs_root_addrs[sizeof(nfs_root_addrs)-1] = '\0'; continue; } #endif if (!strcmp(line,"ro")) { root_mountflags |= MS_RDONLY; continue; } if (!strcmp(line,"rw")) { root_mountflags &= ~MS_RDONLY; continue; } if (!strcmp(line,"debug")) { console_loglevel = 10; continue; } if (!strncmp(line,"init=",5)) { line += 5; execute_command = line; continue; } if (checksetup(line)) continue; #ifdef CONFIG_OSFMACH3 if (!strcmp(line, "mach_console")) { extern int osfmach3_use_mach_console; osfmach3_use_mach_console = 1; continue; } #ifdef CONFIG_PMAC_CONSOLE if (!strcmp(line, "regular_vc_colors")) { extern int regular_vc_colors; regular_vc_colors = 1; continue; } #endif /* CONFIG_PMAC_CONSOLE */ #endif /* CONFIG_OSFMACH3 */ /* * Then check if it's an environment variable or * an option. */ if (strchr(line,'=')) { if (envs >= MAX_INIT_ENVS) break; envp_init[++envs] = line; } else { if (args >= MAX_INIT_ARGS) break; argv_init[++args] = line; } } argv_init[args+1] = NULL; envp_init[envs+1] = NULL; }