mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Arith: informative err msg on '.' radix point in non-'.' locales
Scripts that use floating point shell arithmetic confusingly fail with 'arithmetic syntax error' when running in a locale that uses ',' as the radix point, because '.' is generally assumed by scripts. The error message is confounding as the problem is not a syntax error but a locale that is incompatible with the script. src/cmd/ksh93/sh/arith.c: - If the locale's radix point is not '.' but a '.' is found in its place, issue an informative error message that instructs setting LC_NUMERIC=C. Resolves: https://github.com/ksh93/ksh/issues/145
This commit is contained in:
parent
d1483150ab
commit
c8513fcb7a
1 changed files with 4 additions and 1 deletions
|
@ -388,6 +388,7 @@ static Sfdouble_t arith(const char **ptr, struct lval *lvalue, int type, Sfdoubl
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char lastbase=0, *val = xp, oerrno = errno;
|
char lastbase=0, *val = xp, oerrno = errno;
|
||||||
|
const char radix = GETDECIMAL(0);
|
||||||
lvalue->eflag = 0;
|
lvalue->eflag = 0;
|
||||||
errno = 0;
|
errno = 0;
|
||||||
if(shp->bltindata.bnode==SYSLET && !sh_isoption(SH_LETOCTAL))
|
if(shp->bltindata.bnode==SYSLET && !sh_isoption(SH_LETOCTAL))
|
||||||
|
@ -418,7 +419,9 @@ static Sfdouble_t arith(const char **ptr, struct lval *lvalue, int type, Sfdoubl
|
||||||
c='e';
|
c='e';
|
||||||
else
|
else
|
||||||
c = *str;
|
c = *str;
|
||||||
if(c==GETDECIMAL(0) || c=='e' || c == 'E' || lastbase == 16 && (c == 'p' || c == 'P'))
|
if(c=='.' && radix!='.')
|
||||||
|
errormsg(SH_DICT,ERROR_exit(1),"%s: radix point '.' requires LC_NUMERIC=C",val);
|
||||||
|
if(c==radix || c=='e' || c == 'E' || lastbase == 16 && (c == 'p' || c == 'P'))
|
||||||
{
|
{
|
||||||
lvalue->isfloat=1;
|
lvalue->isfloat=1;
|
||||||
r = strtold(val,&str);
|
r = strtold(val,&str);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue