]> git.karo-electronics.de Git - linux-beck.git/blobdiff - lib/vsprintf.c
lib/string.c: improve strrchr()
[linux-beck.git] / lib / vsprintf.c
index ec337f64f52ddada251c9126561e5e38a38093e5..602d2081e713c802406e35888b996f6aea05823a 100644 (file)
@@ -114,8 +114,9 @@ int skip_atoi(const char **s)
 {
        int i = 0;
 
-       while (isdigit(**s))
+       do {
                i = i*10 + *((*s)++) - '0';
+       } while (isdigit(**s));
 
        return i;
 }
@@ -1604,8 +1605,7 @@ qualifier:
 
        case 'p':
                spec->type = FORMAT_TYPE_PTR;
-               return fmt - start;
-               /* skip alnum */
+               return ++fmt - start;
 
        case '%':
                spec->type = FORMAT_TYPE_PERCENT_CHAR;
@@ -1728,7 +1728,7 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
 
        /* Reject out-of-range values early.  Large positive sizes are
           used for unknown buffer sizes. */
-       if (WARN_ON_ONCE((int) size < 0))
+       if (WARN_ON_ONCE(size > INT_MAX))
                return 0;
 
        str = buf;
@@ -1794,7 +1794,7 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
                        break;
 
                case FORMAT_TYPE_PTR:
-                       str = pointer(fmt+1, str, end, va_arg(args, void *),
+                       str = pointer(fmt, str, end, va_arg(args, void *),
                                      spec);
                        while (isalnum(*fmt))
                                fmt++;
@@ -2232,7 +2232,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
                }
 
                case FORMAT_TYPE_PTR:
-                       str = pointer(fmt+1, str, end, get_arg(void *), spec);
+                       str = pointer(fmt, str, end, get_arg(void *), spec);
                        while (isalnum(*fmt))
                                fmt++;
                        break;