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
This commit is contained in:
parent
ddd5c68e84
commit
8f720cc667
@ -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;
|
||||
|
@ -399,7 +399,7 @@ __vfprintf(FILE *fp, const char *fmt0, va_list ap)
|
||||
#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() \
|
||||
|
@ -479,7 +479,7 @@ __vfwprintf(FILE *fp, const wchar_t *fmt0, va_list ap)
|
||||
#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() \
|
||||
|
Loading…
Reference in New Issue
Block a user