boot/param: Move next_arg() function to lib/cmdline.c for later reuse
next_arg() will be used to parse boot parameters in the x86/boot/compressed code, so move it to lib/cmdline.c for better code reuse. No change in functionality. Signed-off-by: Baoquan He <bhe@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Cc: Jens Axboe <axboe@fb.com> Cc: Jessica Yu <jeyu@redhat.com> Cc: Johannes Berg <johannes.berg@intel.com> Cc: Josh Triplett <josh@joshtriplett.org> Cc: Larry Finger <Larry.Finger@lwfinger.net> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Petr Mladek <pmladek@suse.com> Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: dan.j.williams@intel.com Cc: dave.jiang@intel.com Cc: dyoung@redhat.com Cc: keescook@chromium.org Cc: zijun_hu <zijun_hu@htc.com> Link: http://lkml.kernel.org/r/1492436099-4017-2-git-send-email-bhe@redhat.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
@@ -160,58 +160,6 @@ static int parse_one(char *param,
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
/* You can use " around spaces, but can't escape ". */
|
||||
/* Hyphens and underscores equivalent in parameter names. */
|
||||
static char *next_arg(char *args, char **param, char **val)
|
||||
{
|
||||
unsigned int i, equals = 0;
|
||||
int in_quote = 0, quoted = 0;
|
||||
char *next;
|
||||
|
||||
if (*args == '"') {
|
||||
args++;
|
||||
in_quote = 1;
|
||||
quoted = 1;
|
||||
}
|
||||
|
||||
for (i = 0; args[i]; i++) {
|
||||
if (isspace(args[i]) && !in_quote)
|
||||
break;
|
||||
if (equals == 0) {
|
||||
if (args[i] == '=')
|
||||
equals = i;
|
||||
}
|
||||
if (args[i] == '"')
|
||||
in_quote = !in_quote;
|
||||
}
|
||||
|
||||
*param = args;
|
||||
if (!equals)
|
||||
*val = NULL;
|
||||
else {
|
||||
args[equals] = '\0';
|
||||
*val = args + equals + 1;
|
||||
|
||||
/* Don't include quotes in value. */
|
||||
if (**val == '"') {
|
||||
(*val)++;
|
||||
if (args[i-1] == '"')
|
||||
args[i-1] = '\0';
|
||||
}
|
||||
}
|
||||
if (quoted && args[i-1] == '"')
|
||||
args[i-1] = '\0';
|
||||
|
||||
if (args[i]) {
|
||||
args[i] = '\0';
|
||||
next = args + i + 1;
|
||||
} else
|
||||
next = args + i;
|
||||
|
||||
/* Chew up trailing spaces. */
|
||||
return skip_spaces(next);
|
||||
}
|
||||
|
||||
/* Args looks like "foo=bar,bar2 baz=fuz wiz". */
|
||||
char *parse_args(const char *doing,
|
||||
char *args,
|
||||
|
Reference in New Issue
Block a user