]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - lib/vsprintf.c
lib/vsprintf.c: another small hack
[karo-tx-linux.git] / lib / vsprintf.c
index 98f1ce907d3d8a9c79fc95c8c107eb28bfa2662b..2753f9261115e8beb3e4bef7c1d28101905cd810 100644 (file)
@@ -341,10 +341,10 @@ int num_to_str(char *buf, int size, unsigned long long num)
 }
 
 #define SIGN   1               /* unsigned/signed, must be 1 */
-#define ZEROPAD        2               /* pad with zero */
+#define LEFT   2               /* left justified */
 #define PLUS   4               /* show plus */
 #define SPACE  8               /* space if plus */
-#define LEFT   16              /* left justified */
+#define ZEROPAD        16              /* pad with zero, must be 16 == '0' - ' ' */
 #define SMALL  32              /* use lowercase in hex (must be 32 == 0x20) */
 #define SPECIAL        64              /* prefix hex with "0x", octal with "0" */
 
@@ -383,9 +383,6 @@ static noinline_for_stack
 char *number(char *buf, char *end, unsigned long long num,
             struct printf_spec spec)
 {
-       /* we are called with base 8, 10 or 16, only, thus don't need "G..."  */
-       static const char digits[16] = "0123456789ABCDEF"; /* "GHIJKLMNOPQRSTUVWXYZ"; */
-
        char tmp[3 * sizeof(num)];
        char sign;
        char locase;
@@ -422,7 +419,7 @@ char *number(char *buf, char *end, unsigned long long num,
        /* generate full string in tmp[], in reverse order */
        i = 0;
        if (num < spec.base)
-               tmp[i++] = digits[num] | locase;
+               tmp[i++] = hex_asc_upper[num] | locase;
        else if (spec.base != 10) { /* 8 or 16 */
                int mask = spec.base - 1;
                int shift = 3;
@@ -430,7 +427,7 @@ char *number(char *buf, char *end, unsigned long long num,
                if (spec.base == 16)
                        shift = 4;
                do {
-                       tmp[i++] = (digits[((unsigned char)num) & mask] | locase);
+                       tmp[i++] = (hex_asc_upper[((unsigned char)num) & mask] | locase);
                        num >>= shift;
                } while (num);
        } else { /* base 10 */
@@ -470,7 +467,8 @@ char *number(char *buf, char *end, unsigned long long num,
        }
        /* zero or space padding */
        if (!(spec.flags & LEFT)) {
-               char c = (spec.flags & ZEROPAD) ? '0' : ' ';
+               char c = ' ' + (spec.flags & ZEROPAD);
+               BUILD_BUG_ON(' ' + ZEROPAD != '0');
                while (--spec.field_width >= 0) {
                        if (buf < end)
                                *buf = c;