py/mpprint: Fix sign extension when printf'ing %u, %x and %X.

This commit is contained in:
Damien George 2016-02-01 15:08:42 +00:00
parent 331a48195d
commit 9e677114e4
3 changed files with 11 additions and 3 deletions

View File

@ -494,16 +494,16 @@ int mp_vprintf(const mp_print_t *print, const char *fmt, va_list args) {
break; break;
} }
case 'u': case 'u':
chrs += mp_print_int(print, va_arg(args, int), 0, 10, 'a', flags, fill, width); chrs += mp_print_int(print, va_arg(args, unsigned int), 0, 10, 'a', flags, fill, width);
break; break;
case 'd': case 'd':
chrs += mp_print_int(print, va_arg(args, int), 1, 10, 'a', flags, fill, width); chrs += mp_print_int(print, va_arg(args, int), 1, 10, 'a', flags, fill, width);
break; break;
case 'x': case 'x':
chrs += mp_print_int(print, va_arg(args, int), 0, 16, 'a', flags, fill, width); chrs += mp_print_int(print, va_arg(args, unsigned int), 0, 16, 'a', flags, fill, width);
break; break;
case 'X': case 'X':
chrs += mp_print_int(print, va_arg(args, int), 0, 16, 'A', flags, fill, width); chrs += mp_print_int(print, va_arg(args, unsigned int), 0, 16, 'A', flags, fill, width);
break; break;
case 'p': case 'p':
case 'P': // don't bother to handle upcase for 'P' case 'P': // don't bother to handle upcase for 'P'

View File

@ -8,6 +8,10 @@ ab abc
false true false true
(null) (null)
t t
-2147483648
2147483648
80000000
80000000
# vstr # vstr
tests tests
sts sts

View File

@ -22,6 +22,10 @@ STATIC mp_obj_t extra_coverage(void) {
mp_printf(&mp_plat_print, "%b %b\n", 0, 1); // bools mp_printf(&mp_plat_print, "%b %b\n", 0, 1); // bools
mp_printf(&mp_plat_print, "%s\n", NULL); // null string mp_printf(&mp_plat_print, "%s\n", NULL); // null string
mp_printf(&mp_plat_print, "%t\n"); // non-format char mp_printf(&mp_plat_print, "%t\n"); // non-format char
mp_printf(&mp_plat_print, "%d\n", 0x80000000); // should print signed
mp_printf(&mp_plat_print, "%u\n", 0x80000000); // should print unsigned
mp_printf(&mp_plat_print, "%x\n", 0x80000000); // should print unsigned
mp_printf(&mp_plat_print, "%X\n", 0x80000000); // should print unsigned
} }
// vstr // vstr