param: allow whitespace as kernel parameter separator
Some boot mechanisms require that kernel parameters are stored in a separate file which is loaded to memory without further processing (e.g. the "Load from FTP" method on s390). When such a file contains newline characters, the kernel parameter preceding the newline might not be correctly parsed (due to the newline being stuck to the end of the actual parameter value) which can lead to boot failures. This patch improves kernel command line usability in such a situation by allowing generic whitespace characters as separators between kernel parameters. Signed-off-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
554bdfe5ac
commit
26d052bfce
1 changed files with 4 additions and 3 deletions
|
@ -23,6 +23,7 @@
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <linux/ctype.h>
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
#define DEBUGP printk
|
#define DEBUGP printk
|
||||||
|
@ -87,7 +88,7 @@ static char *next_arg(char *args, char **param, char **val)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; args[i]; i++) {
|
for (i = 0; args[i]; i++) {
|
||||||
if (args[i] == ' ' && !in_quote)
|
if (isspace(args[i]) && !in_quote)
|
||||||
break;
|
break;
|
||||||
if (equals == 0) {
|
if (equals == 0) {
|
||||||
if (args[i] == '=')
|
if (args[i] == '=')
|
||||||
|
@ -121,7 +122,7 @@ static char *next_arg(char *args, char **param, char **val)
|
||||||
next = args + i;
|
next = args + i;
|
||||||
|
|
||||||
/* Chew up trailing spaces. */
|
/* Chew up trailing spaces. */
|
||||||
while (*next == ' ')
|
while (isspace(*next))
|
||||||
next++;
|
next++;
|
||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
@ -138,7 +139,7 @@ int parse_args(const char *name,
|
||||||
DEBUGP("Parsing ARGS: %s\n", args);
|
DEBUGP("Parsing ARGS: %s\n", args);
|
||||||
|
|
||||||
/* Chew leading spaces */
|
/* Chew leading spaces */
|
||||||
while (*args == ' ')
|
while (isspace(*args))
|
||||||
args++;
|
args++;
|
||||||
|
|
||||||
while (*args) {
|
while (*args) {
|
||||||
|
|
Loading…
Reference in a new issue