From 0881683b36d94dfbc740481bb82a7e679facb0d3 Mon Sep 17 00:00:00 2001 From: David Schultz Date: Sat, 28 Feb 2009 04:58:18 +0000 Subject: Make sure %zd treats negative arguments properly on 32-bit platforms. Fix harmless but related bugs in %_$zd and %_$tu. PR: 131880 MFC after: 1 week --- lib/libc/stdio/printf-pos.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'lib/libc/stdio/printf-pos.c') diff --git a/lib/libc/stdio/printf-pos.c b/lib/libc/stdio/printf-pos.c index 945ba61b78be2..351bed58951db 100644 --- a/lib/libc/stdio/printf-pos.c +++ b/lib/libc/stdio/printf-pos.c @@ -61,7 +61,7 @@ __FBSDID("$FreeBSD$"); enum typeid { T_UNUSED, TP_SHORT, T_INT, T_U_INT, TP_INT, T_LONG, T_U_LONG, TP_LONG, T_LLONG, T_U_LLONG, TP_LLONG, - T_PTRDIFFT, TP_PTRDIFFT, T_SIZET, TP_SIZET, + T_PTRDIFFT, TP_PTRDIFFT, T_SSIZET, T_SIZET, TP_SIZET, T_INTMAXT, T_UINTMAXT, TP_INTMAXT, TP_VOID, TP_CHAR, TP_SCHAR, T_DOUBLE, T_LONG_DOUBLE, T_WINT, TP_WCHAR }; @@ -145,7 +145,7 @@ addsarg(struct typetable *types, int flags) if (flags & INTMAXT) types->table[types->nextarg++] = T_INTMAXT; else if (flags & SIZET) - types->table[types->nextarg++] = T_SIZET; + types->table[types->nextarg++] = T_SSIZET; else if (flags & PTRDIFFT) types->table[types->nextarg++] = T_PTRDIFFT; else if (flags & LLONGINT) @@ -168,7 +168,7 @@ adduarg(struct typetable *types, int flags) else if (flags & SIZET) types->table[types->nextarg++] = T_SIZET; else if (flags & PTRDIFFT) - types->table[types->nextarg++] = T_PTRDIFFT; + types->table[types->nextarg++] = T_SIZET; else if (flags & LLONGINT) types->table[types->nextarg++] = T_U_LLONG; else if (flags & LONGINT) @@ -716,6 +716,9 @@ build_arg_table(struct typetable *types, va_list ap, union arg **argtable) case T_SIZET: (*argtable) [n].sizearg = va_arg (ap, size_t); break; + case T_SSIZET: + (*argtable) [n].sizearg = va_arg (ap, ssize_t); + break; case TP_SIZET: (*argtable) [n].psizearg = va_arg (ap, size_t *); break; -- cgit v1.2.3