summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-03-10 17:17:32 +0100
committerIngo Molnar <mingo@elte.hu>2009-03-10 17:17:32 +0100
commit2395037e5dd6841a6fa23afbb31e79d92e549cd1 (patch)
tree953ad725344aca1f89da86358737e5dc0b93b46e /lib
parentbbcd3063597a3824357cd83c501c2a2aa21ef37b (diff)
parent39e874f8afbdb3745e2406ce4ecbde9ac4cbaa78 (diff)
Merge branch 'core/printk' into tracing/ftrace
Diffstat (limited to 'lib')
-rw-r--r--lib/vsprintf.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 25f01578c85..dc167437700 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -768,7 +768,6 @@ 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) {
@@ -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;
@@ -1101,8 +1100,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);