46 lines
		
	
	
	
		
			934 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
	
		
			934 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*
 | ||
|  |  * stdlib functions | ||
|  |  * | ||
|  |  * Author: Scott Wood <scottwood@freescale.com> | ||
|  |  * | ||
|  |  * Copyright (c) 2007 Freescale Semiconductor, Inc. | ||
|  |  * | ||
|  |  * This program is free software; you can redistribute it and/or modify it | ||
|  |  * under the terms of the GNU General Public License version 2 as published | ||
|  |  * by the Free Software Foundation. | ||
|  |  */ | ||
|  | 
 | ||
|  | #include "stdlib.h"
 | ||
|  | 
 | ||
|  | /* Not currently supported: leading whitespace, sign, 0x prefix, zero base */ | ||
|  | unsigned long long int strtoull(const char *ptr, char **end, int base) | ||
|  | { | ||
|  | 	unsigned long long ret = 0; | ||
|  | 
 | ||
|  | 	if (base > 36) | ||
|  | 		goto out; | ||
|  | 
 | ||
|  | 	while (*ptr) { | ||
|  | 		int digit; | ||
|  | 
 | ||
|  | 		if (*ptr >= '0' && *ptr <= '9' && *ptr < '0' + base) | ||
|  | 			digit = *ptr - '0'; | ||
|  | 		else if (*ptr >= 'A' && *ptr < 'A' + base - 10) | ||
|  | 			digit = *ptr - 'A' + 10; | ||
|  | 		else if (*ptr >= 'a' && *ptr < 'a' + base - 10) | ||
|  | 			digit = *ptr - 'a' + 10; | ||
|  | 		else | ||
|  | 			break; | ||
|  | 
 | ||
|  | 		ret *= base; | ||
|  | 		ret += digit; | ||
|  | 		ptr++; | ||
|  | 	} | ||
|  | 
 | ||
|  | out: | ||
|  | 	if (end) | ||
|  | 		*end = (char *)ptr; | ||
|  | 
 | ||
|  | 	return ret; | ||
|  | } |