[PATCH v3 1/2] lib/cmdline: add new function get_option_ull()

2021-01-22 Thread Wesley Zhao
In the future we would pass the unsigned long long parameter
like(0x123456781234) in cmdline on the 64bit platform, so add a new
option parse function get_option_ull()

Signed-off-by: Wesley Zhao 
---
 include/linux/kernel.h |  2 ++
 lib/cmdline.c  | 94 ++
 2 files changed, 82 insertions(+), 14 deletions(-)

diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index f7902d8c1048..eb1f0b14a0c5 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -348,6 +348,8 @@ extern __scanf(2, 0)
 int vsscanf(const char *, const char *, va_list);
 
 extern int get_option(char **str, int *pint);
+extern int get_option_ll(char **str, long long *pll);
+extern int get_option_ull(char **str, unsigned long long *pull);
 extern char *get_options(const char *str, int nints, int *ints);
 extern unsigned long long memparse(const char *ptr, char **retptr);
 extern bool parse_option_str(const char *str, const char *option);
diff --git a/lib/cmdline.c b/lib/cmdline.c
index b390dd03363b..6030fc70e0f5 100644
--- a/lib/cmdline.c
+++ b/lib/cmdline.c
@@ -31,6 +31,81 @@ static int get_range(char **str, int *pint, int n)
*pint++ = x;
return inc_counter;
 }
+/**
+ * get_option_ull - Parse unsigned long long from an option string
+ * @str: option string
+ * @pull: (output) unsigned long long value parsed from @str
+ *
+ * Read an unsigned long long from an option string; if available accept a 
subsequent
+ * comma as well.
+ *
+ * Return values:
+ * 0 - no ull in string
+ * 1 - ull found, no subsequent comma
+ * 2 - ull found including a subsequent comma
+ * 3 - hyphen found to denote a range
+ */
+
+int get_option_ull(char **str, unsigned long long *pull)
+{
+   char *cur = *str;
+   unsigned long long value;
+
+   if (!cur || !(*cur))
+   return 0;
+   value = simple_strtoull(cur, str, 0);
+   if (pull)
+   *pull = value;
+   if (cur == *str)
+   return 0;
+   if (**str == ',') {
+   (*str)++;
+   return 2;
+   }
+   if (**str == '-')
+   return 3;
+
+   return 1;
+}
+EXPORT_SYMBOL(get_option_ull);
+
+/**
+ * get_option_ll - Parse long long from an option string
+ * @str: option string
+ * @pll: (output) long long value parsed from @str
+ *
+ * Read an long long from an option string; if available accept a 
subsequent
+ * comma as well.
+ *
+ * Return values:
+ * 0 - no ll in string
+ * 1 - ll found, no subsequent comma
+ * 2 - ll found including a subsequent comma
+ * 3 - hyphen found to denote a range
+ */
+
+int get_option_ll(char **str, long long *pll)
+{
+   char *cur = *str;
+   unsigned long long value;
+   int ret;
+
+   if (!cur || !(*cur))
+   return 0;
+   if (*cur == '-') {
+   (*str) = cur + 1;
+   ret = get_option_ull(str, );
+   if (pll)
+   *pll = -value;
+   } else {
+   ret = get_option_ull(str, );
+   if (pll)
+   *pll = value;
+   }
+
+   return ret;
+}
+EXPORT_SYMBOL(get_option_ll);
 
 /**
  * get_option - Parse integer from an option string
@@ -56,26 +131,17 @@ static int get_range(char **str, int *pint, int n)
 int get_option(char **str, int *pint)
 {
char *cur = *str;
-   int value;
+   long long value;
+   int ret;
 
if (!cur || !(*cur))
return 0;
-   if (*cur == '-')
-   value = -simple_strtoull(++cur, str, 0);
-   else
-   value = simple_strtoull(cur, str, 0);
+   ret = get_option_ll(str, );
+
if (pint)
*pint = value;
-   if (cur == *str)
-   return 0;
-   if (**str == ',') {
-   (*str)++;
-   return 2;
-   }
-   if (**str == '-')
-   return 3;
 
-   return 1;
+   return ret;
 }
 EXPORT_SYMBOL(get_option);
 
-- 
2.7.4



Re: [PATCH v3 1/2] lib/cmdline: add new function get_option_ull()

2021-01-22 Thread Andy Shevchenko
On Fri, Jan 22, 2021 at 07:55:36AM -0800, Wesley Zhao wrote:
> In the future we would pass the unsigned long long parameter
> like(0x123456781234) in cmdline on the 64bit platform, so add a new
> option parse function get_option_ull()

You missed period at the end of phrase.

Overall this patch is not needed at all.

-- 
With Best Regards,
Andy Shevchenko