mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
arith: Fix variables 'nan' and 'inf' in arithmetic for POSIX mode
The --posix compliance option now disables the case-insensitive special floating point constants Inf and NaN so that all case variants of $((inf)) and $((nan)) refer to the variables by those names as the standard requires. (BUG_ARITHNAN) src/cmd/ksh93/sh/arith.c: arith(): - Only do case-insensitive checks for "Inf" and "NaN" if the POSIX option is off.
This commit is contained in:
parent
d9cd49c6d7
commit
56c2e13e92
5 changed files with 39 additions and 6 deletions
|
|
@ -349,14 +349,14 @@ static Sfdouble_t arith(const char **ptr, struct lval *lvalue, int type, Sfdoubl
|
|||
}
|
||||
*str = 0;
|
||||
cp = (char*)*ptr;
|
||||
if ((cp[0] == 'i' || cp[0] == 'I') && (cp[1] == 'n' || cp[1] == 'N') && (cp[2] == 'f' || cp[2] == 'F') && cp[3] == 0)
|
||||
if(!sh_isoption(SH_POSIX) && (cp[0] == 'i' || cp[0] == 'I') && (cp[1] == 'n' || cp[1] == 'N') && (cp[2] == 'f' || cp[2] == 'F') && cp[3] == 0)
|
||||
{
|
||||
Inf = strtold("Inf", NiL);
|
||||
Infnod.nvalue.ldp = &Inf;
|
||||
np = &Infnod;
|
||||
nv_onattr(np,NV_NOFREE|NV_LDOUBLE|NV_RDONLY);
|
||||
}
|
||||
else if ((cp[0] == 'n' || cp[0] == 'N') && (cp[1] == 'a' || cp[1] == 'A') && (cp[2] == 'n' || cp[2] == 'N') && cp[3] == 0)
|
||||
else if(!sh_isoption(SH_POSIX) && (cp[0] == 'n' || cp[0] == 'N') && (cp[1] == 'a' || cp[1] == 'A') && (cp[2] == 'n' || cp[2] == 'N') && cp[3] == 0)
|
||||
{
|
||||
NaN = strtold("NaN", NiL);
|
||||
NaNnod.nvalue.ldp = &NaN;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue