parser: add unsigned int parser
authorBingJing Chang <bingjingc@synology.com>
Fri, 29 Jan 2021 04:52:42 +0000 (12:52 +0800)
committerJan Kara <jack@suse.cz>
Wed, 3 Feb 2021 18:05:50 +0000 (19:05 +0100)
Will be used by fs parsing options

Link: https://lore.kernel.org/r/20210129045242.10268-1-bingjingc@synology.com
Reviewed-by: Robbie Ko<robbieko@synology.com>
Reviewed-by: Chung-Chiang Cheng <cccheng@synology.com>
Signed-off-by: BingJing Chang <bingjingc@synology.com>
Signed-off-by: Jan Kara <jack@suse.cz>
include/linux/parser.h
lib/parser.c

index 89e2b23..dd79f45 100644 (file)
@@ -29,6 +29,7 @@ typedef struct {
 
 int match_token(char *, const match_table_t table, substring_t args[]);
 int match_int(substring_t *, int *result);
+int match_uint(substring_t *s, unsigned int *result);
 int match_u64(substring_t *, u64 *result);
 int match_octal(substring_t *, int *result);
 int match_hex(substring_t *, int *result);
index f5b3e5d..7785e41 100644 (file)
@@ -188,6 +188,28 @@ int match_int(substring_t *s, int *result)
 }
 EXPORT_SYMBOL(match_int);
 
+/*
+ * match_uint - scan a decimal representation of an integer from a substring_t
+ * @s: substring_t to be scanned
+ * @result: resulting integer on success
+ *
+ * Description: Attempts to parse the &substring_t @s as a decimal integer. On
+ * success, sets @result to the integer represented by the string and returns 0.
+ * Returns -ENOMEM, -EINVAL, or -ERANGE on failure.
+ */
+int match_uint(substring_t *s, unsigned int *result)
+{
+       int err = -ENOMEM;
+       char *buf = match_strdup(s);
+
+       if (buf) {
+               err = kstrtouint(buf, 10, result);
+               kfree(buf);
+       }
+       return err;
+}
+EXPORT_SYMBOL(match_uint);
+
 /**
  * match_u64: - scan a decimal representation of a u64 from
  *                  a substring_t