diff options
| -rw-r--r-- | include/exports.h | 1 | ||||
| -rw-r--r-- | lib/vsprintf.c | 23 | 
2 files changed, 24 insertions, 0 deletions
| diff --git a/include/exports.h b/include/exports.h index 6cf31aa5e..41d5085e1 100644 --- a/include/exports.h +++ b/include/exports.h @@ -24,6 +24,7 @@ int setenv (const char *varname, const char *varvalue);  long simple_strtol(const char *cp,char **endp,unsigned int base);  int strcmp(const char * cs,const char * ct);  unsigned long ustrtoul(const char *cp, char **endp, unsigned int base); +unsigned long long ustrtoull(const char *cp, char **endp, unsigned int base);  #if defined(CONFIG_CMD_I2C)  int i2c_write (uchar, uint, int , uchar* , int);  int i2c_read (uchar, uint, int , uchar* , int); diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 3c432f876..533a96b85 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -126,6 +126,29 @@ unsigned long ustrtoul(const char *cp, char **endp, unsigned int base)  	return result;  } +unsigned long long ustrtoull(const char *cp, char **endp, unsigned int base) +{ +	unsigned long long result = simple_strtoull(cp, endp, base); +	switch (**endp) { +	case 'G': +		result *= 1024; +		/* fall through */ +	case 'M': +		result *= 1024; +		/* fall through */ +	case 'K': +	case 'k': +		result *= 1024; +		if ((*endp)[1] == 'i') { +			if ((*endp)[2] == 'B') +				(*endp) += 3; +			else +				(*endp) += 2; +		} +	} +	return result; +} +  unsigned long long simple_strtoull(const char *cp, char **endp,  					unsigned int base)  { |