diff options
Diffstat (limited to 'lib/parser.c')
| -rw-r--r-- | lib/parser.c | 47 | 
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/parser.c b/lib/parser.c index b6d11631231b..3278958b472a 100644 --- a/lib/parser.c +++ b/lib/parser.c @@ -152,6 +152,36 @@ static int match_number(substring_t *s, int *result, int base)  }  /** + * match_u64int: scan a number in the given base from a substring_t + * @s: substring to be scanned + * @result: resulting u64 on success + * @base: base to use when converting string + * + * Description: Given a &substring_t and a base, attempts to parse the substring + * as a number in that base. On success, sets @result to the integer represented + * by the string and returns 0. Returns -ENOMEM, -EINVAL, or -ERANGE on failure. + */ +static int match_u64int(substring_t *s, u64 *result, int base) +{ +	char *buf; +	int ret; +	u64 val; +	size_t len = s->to - s->from; + +	buf = kmalloc(len + 1, GFP_KERNEL); +	if (!buf) +		return -ENOMEM; +	memcpy(buf, s->from, len); +	buf[len] = '\0'; + +	ret = kstrtoull(buf, base, &val); +	if (!ret) +		*result = val; +	kfree(buf); +	return ret; +} + +/**   * match_int: - scan a decimal representation of an integer from a substring_t   * @s: substring_t to be scanned   * @result: resulting integer on success @@ -167,6 +197,23 @@ int match_int(substring_t *s, int *result)  EXPORT_SYMBOL(match_int);  /** + * match_u64: - scan a decimal representation of a u64 from + *                  a substring_t + * @s: substring_t to be scanned + * @result: resulting unsigned long long on success + * + * Description: Attempts to parse the &substring_t @s as a long 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_u64(substring_t *s, u64 *result) +{ +	return match_u64int(s, result, 0); +} +EXPORT_SYMBOL(match_u64); + +/**   * match_octal: - scan an octal representation of an integer from a substring_t   * @s: substring_t to be scanned   * @result: resulting integer on success  |