Fix of the vaarg fix
This commit is contained in:
@@ -53,10 +53,10 @@ static unsigned char mkhex (unsigned char ch);
|
||||
static int cvt (double number, int prec, int sharpflag, unsigned char *negp,
|
||||
unsigned char fmtch, unsigned char *startp, unsigned char *endp);
|
||||
|
||||
union {
|
||||
unsigned long u32;
|
||||
va_list ap32;
|
||||
} x;
|
||||
// union {
|
||||
// unsigned long u32;
|
||||
// va_list ap32;
|
||||
// } x;
|
||||
|
||||
int
|
||||
_doprnt (char const *fmt, va_list ap, FILE *stream)
|
||||
@@ -368,13 +368,18 @@ number: if (sign && ((long) ul != 0L)) {
|
||||
case 'F':
|
||||
case 'g':
|
||||
case 'G': {
|
||||
|
||||
// --- IM - vaarg alignment issue fix:
|
||||
|
||||
double d;
|
||||
|
||||
unsigned long *da;
|
||||
|
||||
da = (unsigned long *) ≈
|
||||
|
||||
unsigned long *l = (unsigned long *) &d;
|
||||
|
||||
x.ap32 = ap;
|
||||
|
||||
if ( x.u32 & 4) {
|
||||
if ( (*da) & 4) { // maj
|
||||
l[0]= va_arg(ap, unsigned long);
|
||||
l[1]= va_arg(ap, unsigned long);
|
||||
}
|
||||
@@ -384,6 +389,8 @@ number: if (sign && ((long) ul != 0L)) {
|
||||
l[1]= va_arg(ap, unsigned long);
|
||||
}
|
||||
|
||||
// ---
|
||||
|
||||
/*
|
||||
* don't do unrealistic precision; just pad it with
|
||||
* zeroes later, so buffer size stays rational.
|
||||
|
||||
Reference in New Issue
Block a user