aboutsummaryrefslogtreecommitdiff
path: root/src/printf.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2004-06-25 01:10:48 +0000
committerdrh <drh@noemail.net>2004-06-25 01:10:48 +0000
commite9707671447d0061f13ec9fdf990c47ca0ea085c (patch)
tree88eadc97522ab8916d3c110fba901447e402d63b /src/printf.c
parent256a4ec4a3937f9afd27ced3ea01001964f903cb (diff)
downloadsqlite-e9707671447d0061f13ec9fdf990c47ca0ea085c.tar.gz
sqlite-e9707671447d0061f13ec9fdf990c47ca0ea085c.zip
Fix signed integer problems in vxprintf. Ticket #778. Also remove some
dead code from util.c. (CVS 1685) FossilOrigin-Name: 200cd3baf60e6cfad9fa3971834367821456ae30
Diffstat (limited to 'src/printf.c')
-rw-r--r--src/printf.c40
1 files changed, 16 insertions, 24 deletions
diff --git a/src/printf.c b/src/printf.c
index 40af67e37..a190a1017 100644
--- a/src/printf.c
+++ b/src/printf.c
@@ -345,35 +345,27 @@ static int vxprintf(
*/
switch( xtype ){
case etRADIX:
- if( flag_longlong ) longvalue = va_arg(ap,sqlite_int64);
- else if( flag_long ) longvalue = va_arg(ap,long int);
- else longvalue = va_arg(ap,int);
-#if 1
- /* For the format %#x, the value zero is printed "0" not "0x0".
- ** I think this is stupid. */
- if( longvalue==0 ) flag_alternateform = 0;
-#else
- /* More sensible: turn off the prefix for octal (to prevent "00"),
- ** but leave the prefix for hex. */
- if( longvalue==0 && infop->base==8 ) flag_alternateform = 0;
-#endif
if( infop->flags & FLAG_SIGNED ){
- if( flag_longlong ){
- if( *(i64*)&longvalue<0 ){
- longvalue = -*(i64*)&longvalue;
- prefix = '-';
- }else if( flag_plussign ) prefix = '+';
- else if( flag_blanksign ) prefix = ' ';
- else prefix = 0;
+ i64 v;
+ if( flag_longlong ) v = va_arg(ap,i64);
+ else if( flag_long ) v = va_arg(ap,long int);
+ else v = va_arg(ap,int);
+ if( v<0 ){
+ longvalue = -v;
+ prefix = '-';
}else{
- if( *(long*)&longvalue<0 ){
- longvalue = -*(long*)&longvalue;
- prefix = '-';
- }else if( flag_plussign ) prefix = '+';
+ longvalue = v;
+ if( flag_plussign ) prefix = '+';
else if( flag_blanksign ) prefix = ' ';
else prefix = 0;
}
- }else prefix = 0;
+ }else{
+ if( flag_longlong ) longvalue = va_arg(ap,u64);
+ else if( flag_long ) longvalue = va_arg(ap,unsigned long int);
+ else longvalue = va_arg(ap,unsigned int);
+ prefix = 0;
+ }
+ if( longvalue==0 ) flag_alternateform = 0;
if( flag_zeropad && precision<width-(prefix!=0) ){
precision = width-(prefix!=0);
}