OSDN Git Service

lib/cmdline: allow NULL to be an output for get_option()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 16 Dec 2020 04:43:30 +0000 (20:43 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 16 Dec 2020 06:46:16 +0000 (22:46 -0800)
In the future we would like to use get_option() to only validate the
string and parse it separately.  To achieve this, allow NULL to be an
output for get_option().

Link: https://lkml.kernel.org/r/20201112180732.75589-5-andriy.shevchenko@linux.intel.com
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Brendan Higgins <brendanhiggins@google.com>
Cc: David Gow <davidgow@google.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
Cc: Shuah Khan <skhan@linuxfoundation.org>
Cc: Vitor Massaru Iha <vitor@massaru.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
lib/cmdline.c

index ca89846..9e18623 100644 (file)
@@ -35,11 +35,14 @@ static int get_range(char **str, int *pint, int n)
 /**
  *     get_option - Parse integer from an option string
  *     @str: option string
- *     @pint: (output) integer value parsed from @str
+ *     @pint: (optional output) integer value parsed from @str
  *
  *     Read an int from an option string; if available accept a subsequent
  *     comma as well.
  *
+ *     When @pint is NULL the function can be used as a validator of
+ *     the current option in the string.
+ *
  *     Return values:
  *     0 - no int in string
  *     1 - int found, no subsequent comma
@@ -53,13 +56,16 @@ static int get_range(char **str, int *pint, int n)
 int get_option(char **str, int *pint)
 {
        char *cur = *str;
+       int value;
 
        if (!cur || !(*cur))
                return 0;
        if (*cur == '-')
-               *pint = -simple_strtoull(++cur, str, 0);
+               value = -simple_strtoull(++cur, str, 0);
        else
-               *pint = simple_strtoull(cur, str, 0);
+               value = simple_strtoull(cur, str, 0);
+       if (pint)
+               *pint = value;
        if (cur == *str)
                return 0;
        if (**str == ',') {