mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	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:
		
							parent
							
								
									cb345d7352
								
							
						
					
					
						commit
						fd19382974
					
				
					 1 changed files with 11 additions and 5 deletions
				
			
		|  | @ -116,7 +116,7 @@ char *get_options(const char *str, int nints, int *ints) | ||||||
| /**
 | /**
 | ||||||
|  *	memparse - parse a string with mem suffixes into a number |  *	memparse - parse a string with mem suffixes into a number | ||||||
|  *	@ptr: Where parse begins |  *	@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 |  *	Parses a string into a number.  The number stored at @ptr is | ||||||
|  *	potentially suffixed with %K (for kilobytes, or 1024 bytes), |  *	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. |  *	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': | ||||||
| 	case 'g': | 	case 'g': | ||||||
| 		ret <<= 10; | 		ret <<= 10; | ||||||
|  | @ -140,10 +142,14 @@ unsigned long long memparse (char *ptr, char **retptr) | ||||||
| 	case 'K': | 	case 'K': | ||||||
| 	case 'k': | 	case 'k': | ||||||
| 		ret <<= 10; | 		ret <<= 10; | ||||||
| 		(*retptr)++; | 		endptr++; | ||||||
| 	default: | 	default: | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	if (retptr) | ||||||
|  | 		*retptr = endptr; | ||||||
|  | 
 | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Robert P. J. Day
						Robert P. J. Day