vsprintf: add ustrtoll function
authorPiotr Wilczek <p.wilczek@samsung.com>
Sun, 27 Jan 2013 22:59:24 +0000 (22:59 +0000)
committerChanho Park <chanho61.park@samsung.com>
Fri, 24 Jul 2015 07:29:47 +0000 (16:29 +0900)
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>
Conflicts:
lib/vsprintf.c

include/exports.h
lib/vsprintf.c

index 6cf31aa5e794c0c6fb186bb6ee3705136cc40a2b..41d5085e16c27017d7e02540c3aacfa2090e994a 100644 (file)
@@ -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);
index 27cb836126560434159128b2bbe0f25ad3d8d123..d8b14f07f3a67108dc6999f81df1fce38a624eec 100644 (file)
@@ -121,7 +121,31 @@ unsigned long ustrtoul(const char *cp, char **endp, unsigned int base)
        return result;
 }
 
-unsigned long long simple_strtoull (const char *cp, char **endp, unsigned int base)
+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)
 {
        unsigned long long result = 0, value;