svn commit: r189131 - head/lib/libc/stdio

David Schultz das at FreeBSD.org
Fri Feb 27 20:58:19 PST 2009


Author: das
Date: Sat Feb 28 04:58:18 2009
New Revision: 189131
URL: http://svn.freebsd.org/changeset/base/189131

Log:
  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

Modified:
  head/lib/libc/stdio/printf-pos.c
  head/lib/libc/stdio/vfprintf.c
  head/lib/libc/stdio/vfwprintf.c

Modified: head/lib/libc/stdio/printf-pos.c
==============================================================================
--- head/lib/libc/stdio/printf-pos.c	Sat Feb 28 02:37:55 2009	(r189130)
+++ head/lib/libc/stdio/printf-pos.c	Sat Feb 28 04:58:18 2009	(r189131)
@@ -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 fla
 	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 fla
 	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,
 		    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;

Modified: head/lib/libc/stdio/vfprintf.c
==============================================================================
--- head/lib/libc/stdio/vfprintf.c	Sat Feb 28 02:37:55 2009	(r189130)
+++ head/lib/libc/stdio/vfprintf.c	Sat Feb 28 04:58:18 2009	(r189131)
@@ -399,7 +399,7 @@ __vfprintf(FILE *fp, const char *fmt0, v
 #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT)
 #define SJARG() \
 	(flags&INTMAXT ? GETARG(intmax_t) : \
-	    flags&SIZET ? (intmax_t)GETARG(size_t) : \
+	    flags&SIZET ? (intmax_t)GETARG(ssize_t) : \
 	    flags&PTRDIFFT ? (intmax_t)GETARG(ptrdiff_t) : \
 	    (intmax_t)GETARG(long long))
 #define	UJARG() \

Modified: head/lib/libc/stdio/vfwprintf.c
==============================================================================
--- head/lib/libc/stdio/vfwprintf.c	Sat Feb 28 02:37:55 2009	(r189130)
+++ head/lib/libc/stdio/vfwprintf.c	Sat Feb 28 04:58:18 2009	(r189131)
@@ -479,7 +479,7 @@ __vfwprintf(FILE *fp, const wchar_t *fmt
 #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT)
 #define SJARG() \
 	(flags&INTMAXT ? GETARG(intmax_t) : \
-	    flags&SIZET ? (intmax_t)GETARG(size_t) : \
+	    flags&SIZET ? (intmax_t)GETARG(ssize_t) : \
 	    flags&PTRDIFFT ? (intmax_t)GETARG(ptrdiff_t) : \
 	    (intmax_t)GETARG(long long))
 #define	UJARG() \


More information about the svn-src-head mailing list