[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Allow inversion of boolean cmdline parameters with 'no-' prefix.
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxx # Date 1183986836 -3600 # Node ID 646ec1f2b41f717646d6d9f6bfd4e7ea11c9fb74 # Parent ecb89c6ce615d1dab0036b36c0fdb5a3e1b3faf7 Allow inversion of boolean cmdline parameters with 'no-' prefix. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> --- xen/common/kernel.c | 19 ++++++++++++++----- xen/include/xen/init.h | 6 +++++- 2 files changed, 19 insertions(+), 6 deletions(-) diff -r ecb89c6ce615 -r 646ec1f2b41f xen/common/kernel.c --- a/xen/common/kernel.c Mon Jul 09 14:06:22 2007 +0100 +++ b/xen/common/kernel.c Mon Jul 09 14:13:56 2007 +0100 @@ -26,10 +26,11 @@ int tainted; void cmdline_parse(char *cmdline) { - char opt[100], *optval, *q; + char opt[100], *optval, *optkey, *q; const char *p = cmdline; struct kernel_param *param; - + int invbool; + if ( p == NULL ) return; @@ -48,7 +49,7 @@ void cmdline_parse(char *cmdline) break; /* Grab the next whitespace-delimited option. */ - q = opt; + q = optkey = opt; while ( (*p != ' ') && (*p != '\0') ) { if ( (q-opt) < (sizeof(opt)-1) ) /* avoid overflow */ @@ -64,9 +65,14 @@ void cmdline_parse(char *cmdline) else optval = q; /* default option value is empty string */ + /* Boolean parameters can be inverted with 'no-' prefix. */ + invbool = !strncmp("no-", optkey, 3); + if ( invbool ) + optkey += 3; + for ( param = &__setup_start; param <= &__setup_end; param++ ) { - if ( strcmp(param->name, opt ) != 0 ) + if ( strcmp(param->name, optkey) ) continue; switch ( param->type ) @@ -79,7 +85,10 @@ void cmdline_parse(char *cmdline) simple_strtol(optval, (const char **)&optval, 0); break; case OPT_BOOL: - *(int *)param->var = 1; + *(int *)param->var = !invbool; + break; + case OPT_INVBOOL: + *(int *)param->var = invbool; break; case OPT_CUSTOM: ((void (*)(const char *))param->var)(optval); diff -r ecb89c6ce615 -r 646ec1f2b41f xen/include/xen/init.h --- a/xen/include/xen/init.h Mon Jul 09 14:06:22 2007 +0100 +++ b/xen/include/xen/init.h Mon Jul 09 14:13:56 2007 +0100 @@ -78,7 +78,7 @@ extern initcall_t __initcall_start, __in */ struct kernel_param { const char *name; - enum { OPT_STR, OPT_UINT, OPT_BOOL, OPT_CUSTOM } type; + enum { OPT_STR, OPT_UINT, OPT_BOOL, OPT_INVBOOL, OPT_CUSTOM } type; void *var; unsigned int len; }; @@ -93,6 +93,10 @@ extern struct kernel_param __setup_start static char __setup_str_##_var[] __initdata = _name; \ static struct kernel_param __setup_##_var __attribute_used__ \ __initsetup = { __setup_str_##_var, OPT_BOOL, &_var, sizeof(_var) } +#define invboolean_param(_name, _var) \ + static char __setup_str_##_var[] __initdata = _name; \ + static struct kernel_param __setup_##_var __attribute_used__ \ + __initsetup = { __setup_str_##_var, OPT_INVBOOL, &_var, sizeof(_var) } #define integer_param(_name, _var) \ static char __setup_str_##_var[] __initdata = _name; \ static struct kernel_param __setup_##_var __attribute_used__ \ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |