}
#define shlim(f, lim) ffshlim((f), (lim))
-#define shgetc(f) (((f)->rpos != (f)->shend) ? *(f)->rpos++ : ffshgetc(f))
+#define shgetc(f) (((f)->rpos < (f)->shend) ? *(f)->rpos++ : ffshgetc(f))
#define shunget(f) ((f)->shend ? (void)(f)->rpos-- : (void)0)
static const unsigned char table[] = { -1,
return LLONG_MIN;
}
for (x=0; c-'0'<10U && x<INT_MAX/10; c = shgetc(f))
- x = 10*x + c-'0';
+ x = 10*x + (c-'0');
for (y=x; c-'0'<10U && y<LLONG_MAX/100; c = shgetc(f))
- y = 10*y + c-'0';
+ y = 10*y + (c-'0');
for (; c-'0'<10U; c = shgetc(f));
shunget(f);
return neg ? -y : y;
/* Calculate bias term to force rounding, move out lower bits */
if (bits < DBL_MANT_DIG) {
- bias = copysignl(scalbn(1, 2*DBL_MANT_DIG-bits-1), y);
- frac = fmodl(y, scalbn(1, DBL_MANT_DIG-bits));
+ bias = copysign(scalbn(1, 2*DBL_MANT_DIG-bits-1), y);
+ frac = fmod(y, scalbn(1, DBL_MANT_DIG-bits));
y -= frac;
y += bias;
}
else
frac += 0.75*sign;
}
- if (DBL_MANT_DIG-bits >= 2 && !fmodl(frac, 1))
+ if (DBL_MANT_DIG-bits >= 2 && !fmod(frac, 1))
frac++;
}
errno = ERANGE;
}
- return scalbnl(y, e2);
+ return scalbn(y, e2);
}
static double hexfloat(FFFILE *f, int bits, int emin, int sign, int pok)
}
if (bits < DBL_MANT_DIG)
- bias = copysignl(scalbn(1, 32+DBL_MANT_DIG-bits-1), sign);
+ bias = copysign(scalbn(1, 32+DBL_MANT_DIG-bits-1), sign);
if (bits<32 && y && !(x&1)) x++, y=0;
if (!y) errno = ERANGE;
- return scalbnl(y, e2);
+ return scalbn(y, e2);
}
static double fffloatscan(FFFILE *f, int prec, int pok)