diff options
author | joerg <joerg@FreeBSD.org> | 1995-08-04 17:08:07 +0000 |
---|---|---|
committer | joerg <joerg@FreeBSD.org> | 1995-08-04 17:08:07 +0000 |
commit | 3e48994129ea367a54285098fce04c409a947f5a (patch) | |
tree | c3e49d14d975dd5714df79e4e876496d37693605 /bin | |
parent | f7ba213e8cd24e1deeddaaeb5bbebaa2bd34817c (diff) | |
download | FreeBSD-src-3e48994129ea367a54285098fce04c409a947f5a.zip FreeBSD-src-3e48994129ea367a54285098fce04c409a947f5a.tar.gz |
expr(1) didn't comply to Posix.2 and its own man page: any
comparisions have been made as string comparisions, even in cases
where both operands clearly qualified as integers.
The fix is to make the parser properly analyzing whether an operand is
a valid integer or not.
Diffstat (limited to 'bin')
-rw-r--r-- | bin/expr/expr.y | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/bin/expr/expr.y b/bin/expr/expr.y index e745bb7..76ffe44 100644 --- a/bin/expr/expr.y +++ b/bin/expr/expr.y @@ -4,7 +4,7 @@ * * Largely rewritten by J.T. Conklin (jtc@wimsey.com) * - * $Id: expr.y,v 1.8 1994/09/24 02:55:37 davidg Exp $ + * $Id: expr.y,v 1.9 1995/03/19 13:28:41 joerg Exp $ */ #include <stdio.h> @@ -107,13 +107,25 @@ make_str (s) char *s; { struct val *vp; + int i, isint; vp = (struct val *) malloc (sizeof (*vp)); if (vp == NULL || ((vp->u.s = strdup (s)) == NULL)) { err (2, NULL); } + for(i = 1, isint = isdigit(s[0]) || s[0] == '-'; + isint && i < strlen(s); + i++) + { + if(!isdigit(s[i])) + isint = 0; + } + vp->type = string; + if(isint) + to_integer(vp); + return vp; } |