md: support bitmaps on RAID10 arrays larger then 2 terabytes
[safe/jmp/linux-2.6] / lib / vsprintf.c
index 25f0157..7536ace 100644 (file)
@@ -398,7 +398,7 @@ static noinline char* put_dec(char *buf, unsigned long long num)
 
 enum format_type {
        FORMAT_TYPE_NONE, /* Just a string part */
-       FORMAT_TYPE_WITDH,
+       FORMAT_TYPE_WIDTH,
        FORMAT_TYPE_PRECISION,
        FORMAT_TYPE_CHAR,
        FORMAT_TYPE_STR,
@@ -768,10 +768,9 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr,
 static int format_decode(const char *fmt, struct printf_spec *spec)
 {
        const char *start = fmt;
-       bool sign = false;
 
        /* we finished early by reading the field width */
-       if (spec->type == FORMAT_TYPE_WITDH) {
+       if (spec->type == FORMAT_TYPE_WIDTH) {
                if (spec->field_width < 0) {
                        spec->field_width = -spec->field_width;
                        spec->flags |= LEFT;
@@ -829,7 +828,7 @@ static int format_decode(const char *fmt, struct printf_spec *spec)
                spec->field_width = skip_atoi(&fmt);
        else if (*fmt == '*') {
                /* it's the next argument */
-               spec->type = FORMAT_TYPE_WITDH;
+               spec->type = FORMAT_TYPE_WIDTH;
                return ++fmt - start;
        }
 
@@ -844,7 +843,7 @@ precision:
                                spec->precision = 0;
                } else if (*fmt == '*') {
                        /* it's the next argument */
-                       spec->type = FORMAT_TYPE_WITDH;
+                       spec->type = FORMAT_TYPE_PRECISION;
                        return ++fmt - start;
                }
        }
@@ -900,7 +899,7 @@ qualifier:
 
        case 'd':
        case 'i':
-               sign = true;
+               spec->flags |= SIGN;
        case 'u':
                break;
 
@@ -912,7 +911,7 @@ qualifier:
        if (spec->qualifier == 'L')
                spec->type = FORMAT_TYPE_LONG_LONG;
        else if (spec->qualifier == 'l') {
-               if (sign)
+               if (spec->flags & SIGN)
                        spec->type = FORMAT_TYPE_LONG;
                else
                        spec->type = FORMAT_TYPE_ULONG;
@@ -921,12 +920,12 @@ qualifier:
        } else if (spec->qualifier == 't') {
                spec->type = FORMAT_TYPE_PTRDIFF;
        } else if (spec->qualifier == 'h') {
-               if (sign)
+               if (spec->flags & SIGN)
                        spec->type = FORMAT_TYPE_SHORT;
                else
                        spec->type = FORMAT_TYPE_USHORT;
        } else {
-               if (sign)
+               if (spec->flags & SIGN)
                        spec->type = FORMAT_TYPE_INT;
                else
                        spec->type = FORMAT_TYPE_UINT;
@@ -1003,7 +1002,7 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
                        break;
                }
 
-               case FORMAT_TYPE_WITDH:
+               case FORMAT_TYPE_WIDTH:
                        spec.field_width = va_arg(args, int);
                        break;
 
@@ -1052,13 +1051,6 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
                        if (str < end)
                                *str = '%';
                        ++str;
-                       if (*fmt) {
-                               if (str < end)
-                                       *str = *fmt;
-                               ++str;
-                       } else {
-                               --fmt;
-                       }
                        break;
 
                case FORMAT_TYPE_NRCHARS: {
@@ -1101,8 +1093,8 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
                        case FORMAT_TYPE_SHORT:
                                num = (short) va_arg(args, int);
                                break;
-                       case FORMAT_TYPE_UINT:
-                               num = va_arg(args, unsigned int);
+                       case FORMAT_TYPE_INT:
+                               num = (int) va_arg(args, int);
                                break;
                        default:
                                num = va_arg(args, unsigned int);
@@ -1307,7 +1299,7 @@ do {                                                                      \
                case FORMAT_TYPE_NONE:
                        break;
 
-               case FORMAT_TYPE_WITDH:
+               case FORMAT_TYPE_WIDTH:
                case FORMAT_TYPE_PRECISION:
                        save_arg(int);
                        break;
@@ -1340,8 +1332,6 @@ do {                                                                      \
                        break;
 
                case FORMAT_TYPE_INVALID:
-                       if (!*fmt)
-                               --fmt;
                        break;
 
                case FORMAT_TYPE_NRCHARS: {
@@ -1473,7 +1463,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
                        break;
                }
 
-               case FORMAT_TYPE_WITDH:
+               case FORMAT_TYPE_WIDTH:
                        spec.field_width = get_arg(int);
                        break;
 
@@ -1524,13 +1514,6 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
                        if (str < end)
                                *str = '%';
                        ++str;
-                       if (*fmt) {
-                               if (str < end)
-                                       *str = *fmt;
-                               ++str;
-                       } else {
-                               --fmt;
-                       }
                        break;
 
                case FORMAT_TYPE_NRCHARS: