From: Yang Tse Date: Sun, 24 Aug 2008 00:15:59 +0000 (+0000) Subject: Test if type casting a 'signed int' to a 'signed long long' fails to do sign extensio... X-Git-Tag: curl-7_19_0~72 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=79cbe508944029672ec2de1db9d559473ec02110;p=thirdparty%2Fcurl.git Test if type casting a 'signed int' to a 'signed long long' fails to do sign extension on x86_64. --- diff --git a/lib/mprintf.c b/lib/mprintf.c index be6832fa13..3a83cf0011 100644 --- a/lib/mprintf.c +++ b/lib/mprintf.c @@ -325,6 +325,7 @@ static long dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos, int flags; long max_param=0; long i; + int aux_signed_int; while(*fmt) { if(*fmt++ == '%') { @@ -591,9 +592,17 @@ static long dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos, else if(vto[i].flags & FLAGS_UNSIGNED) vto[i].data.num.as_unsigned = (mp_uintmax_t)va_arg(arglist, unsigned int); - else + else { + /* vto[i].data.num.as_signed = (mp_intmax_t)va_arg(arglist, int); + */ + aux_signed_int = va_arg(arglist, int); + if(sizeof(mp_intmax_t) > sizeof(long)) + vto[i].data.num.as_signed = (mp_intmax_t)aux_signed_int; + else + vto[i].data.num.as_signed = (long)aux_signed_int; + } } break;