From 9508cc0ed53fbffd5650894107a449288f6b0283 Mon Sep 17 00:00:00 2001 From: Julian Stecklina Date: Mon, 13 Feb 2012 20:31:55 +0100 Subject: [PATCH] Fixed wrong sign extension in printf on 64 bit This patch fixes printf errors caused by sign extension of values that were supposed to be unsigned. Fixes #6. Also handles the case where sizeof(long long) != sizeof(long). --- base/src/base/console/console.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/base/src/base/console/console.cc b/base/src/base/console/console.cc index c9c6f19b8..f1388d8e3 100644 --- a/base/src/base/console/console.cc +++ b/base/src/base/console/console.cc @@ -275,7 +275,8 @@ void Console::vprintf(const char *format, va_list list) case Format_command::LONG: - numeric_arg = va_arg(list, long); + numeric_arg = (cmd.type == Format_command::UINT) ? + va_arg(list, unsigned long) : va_arg(list, long); break; case Format_command::SIZE_T: @@ -285,7 +286,8 @@ void Console::vprintf(const char *format, va_list list) case Format_command::DEFAULT: - numeric_arg = va_arg(list, int); + numeric_arg = (cmd.type == Format_command::UINT) ? + va_arg(list, unsigned int) : va_arg(list, int); break; } }