summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2002-12-18 16:56:26 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2002-12-18 16:56:26 +0000
commit24dd6fcd97da2f322f31876de0126334722148d3 (patch)
tree42ba9bdb920c34f4e727700c0db45b72459e2972
parent17961: Armin Wolfermann: add OpenBSD support in _sysctl (diff)
downloadzsh-24dd6fcd97da2f322f31876de0126334722148d3.tar
zsh-24dd6fcd97da2f322f31876de0126334722148d3.tar.gz
zsh-24dd6fcd97da2f322f31876de0126334722148d3.tar.bz2
zsh-24dd6fcd97da2f322f31876de0126334722148d3.tar.lz
zsh-24dd6fcd97da2f322f31876de0126334722148d3.tar.xz
zsh-24dd6fcd97da2f322f31876de0126334722148d3.tar.zst
zsh-24dd6fcd97da2f322f31876de0126334722148d3.zip
18013: Handle test of (( float == 0.0)) properly
-rw-r--r--ChangeLog6
-rw-r--r--Src/builtin.c7
-rw-r--r--Src/exec.c7
3 files changed, 14 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 938008bfe..5dbed500b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2002-12-18 Peter Stephenson <pws@csr.com>
+
+ * 18013: Src/builtin.c, Src/exec.c: let and (( ... )) should
+ return zero status on floating point only if the value compares
+ equal to 0 as a floating point number.
+
2002-11-25 Oliver Kiddle <opk@zsh.org>
* 17961: Armin Wolfermann: Completion/Unix/Command/_sysctl:
diff --git a/Src/builtin.c b/Src/builtin.c
index cb7c82052..b175bcae9 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -4097,13 +4097,14 @@ bin_ttyctl(char *name, char **argv, char *ops, int func)
int
bin_let(char *name, char **argv, char *ops, int func)
{
- zlong val = 0;
+ mnumber val = zero_mnumber;
while (*argv)
- val = mathevali(*argv++);
+ val = matheval(*argv++);
/* Errors in math evaluation in let are non-fatal. */
errflag = 0;
- return !val;
+ /* should test for fabs(val.u.d) < epsilon? */
+ return (val.type == MN_INTEGER) ? val.u.l == 0 : val.u.d == 0.0;
}
/* umask command. umask may be specified as octal digits, or in the *
diff --git a/Src/exec.c b/Src/exec.c
index 4ed4f0671..fec58c511 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -3054,7 +3054,7 @@ static int
execarith(Estate state, int do_exec)
{
char *e;
- zlong val = 0;
+ mnumber val = zero_mnumber;
int htok = 0;
if (isset(XTRACE)) {
@@ -3068,7 +3068,7 @@ execarith(Estate state, int do_exec)
if (isset(XTRACE))
fprintf(xtrerr, " %s", e);
- val = mathevali(e);
+ val = matheval(e);
cmdpop();
@@ -3077,7 +3077,8 @@ execarith(Estate state, int do_exec)
fflush(xtrerr);
}
errflag = 0;
- return !val;
+ /* should test for fabs(val.u.d) < epsilon? */
+ return (val.type == MN_INTEGER) ? val.u.l == 0 : val.u.d == 0.0;
}
/* perform time ... command */