diff options
author | Piotr Wilczek <p.wilczek@samsung.com> | 2013-01-27 22:59:24 +0000 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2013-02-19 17:01:26 -0500 |
commit | 7df54d316e70e2d6ae080ef98aa9d2388bbb8af9 (patch) | |
tree | ef54472e87f03f989e5aa944f764736e3d68637b | |
parent | 7b395232da84ae59bd32985bf944a0a9f417a543 (diff) | |
download | u-boot-imx-7df54d316e70e2d6ae080ef98aa9d2388bbb8af9.zip u-boot-imx-7df54d316e70e2d6ae080ef98aa9d2388bbb8af9.tar.gz u-boot-imx-7df54d316e70e2d6ae080ef98aa9d2388bbb8af9.tar.bz2 |
vsprintf: add ustrtoll function
Add 'ustrtoull' function to convert size from string (ex: 1GiB)
to unsigned long long type
Signed-off-by: Piotr Wilczek <p.wilczek@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
-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 6cf31aa..41d5085 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 3c432f8..533a96b 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) { |