summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Wilczek <p.wilczek@samsung.com>2013-01-27 22:59:24 +0000
committerTom Rini <trini@ti.com>2013-02-19 17:01:26 -0500
commit7df54d316e70e2d6ae080ef98aa9d2388bbb8af9 (patch)
treeef54472e87f03f989e5aa944f764736e3d68637b
parent7b395232da84ae59bd32985bf944a0a9f417a543 (diff)
downloadu-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.h1
-rw-r--r--lib/vsprintf.c23
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)
{