lib: allow memparse() to accept a NULL and ignorable second parm
Extend memparse() to allow the caller to use a NULL second parameter, which would represent no interest in returning the address of the end of the parsed string. In numerous cases, callers invoke memparse() to parse a possibly-suffixed string (such as "64K" or "2G" or whatever) and define a character pointer to accept the end pointer being returned by memparse() even though they have no interest in it and promptly throw it away. This (backward-compatible) enhancement allows callers to use NULL in the cases where they just don't care about getting back that end pointer. [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
cb345d7352
Коммит
fd19382974
|
@ -116,7 +116,7 @@ char *get_options(const char *str, int nints, int *ints)
|
|||
/**
|
||||
* memparse - parse a string with mem suffixes into a number
|
||||
* @ptr: Where parse begins
|
||||
* @retptr: (output) Pointer to next char after parse completes
|
||||
* @retptr: (output) Optional pointer to next char after parse completes
|
||||
*
|
||||
* Parses a string into a number. The number stored at @ptr is
|
||||
* potentially suffixed with %K (for kilobytes, or 1024 bytes),
|
||||
|
@ -126,11 +126,13 @@ char *get_options(const char *str, int nints, int *ints)
|
|||
* megabyte, or one gigabyte, respectively.
|
||||
*/
|
||||
|
||||
unsigned long long memparse (char *ptr, char **retptr)
|
||||
unsigned long long memparse(char *ptr, char **retptr)
|
||||
{
|
||||
unsigned long long ret = simple_strtoull (ptr, retptr, 0);
|
||||
char *endptr; /* local pointer to end of parsed string */
|
||||
|
||||
switch (**retptr) {
|
||||
unsigned long long ret = simple_strtoull(ptr, &endptr, 0);
|
||||
|
||||
switch (*endptr) {
|
||||
case 'G':
|
||||
case 'g':
|
||||
ret <<= 10;
|
||||
|
@ -140,10 +142,14 @@ unsigned long long memparse (char *ptr, char **retptr)
|
|||
case 'K':
|
||||
case 'k':
|
||||
ret <<= 10;
|
||||
(*retptr)++;
|
||||
endptr++;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (retptr)
|
||||
*retptr = endptr;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче