#include #include "kinit.h" /* * Routines that hunt for a specific argument. Please note that * they actually search the array backwards. That is because on the * kernel command lines, it's legal to override an earlier argument * with a later argument. */ /* * Was this boolean argument passed? If so return the index in the * argv array for it. For conflicting boolean options, use the * one with the higher index. The only case when the return value * can be equal, is when they're both zero; so equality can be used * as the default option choice. * * In other words, if two options "a" and "b" are opposites, and "a" * is the default, this can be coded as: * * if (get_flag(argc,argv,"a") >= get_flag(argc,argv,"b")) * do_a_stuff(); * else * do_b_stuff(); */ int get_flag(int argc, char *argv[], const char *name) { int i; for (i = argc-1; i > 0; i--) { if (!strcmp(argv[i], name)) return i; } return 0; } /* * Was this textual parameter (foo=option) passed? * * This returns the latest instance of such an option in the argv array. */ char *get_arg(int argc, char *argv[], const char *name) { int len = strlen(name); char *ret = NULL; int i; for (i = argc-1; i > 0; i--) { if (argv[i] && strncmp(argv[i], name, len) == 0 && (argv[i][len] != '\0')) { ret = argv[i] + len; break; } } return ret; }