1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
#include <string.h>
#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;
}
|