From 3e48994129ea367a54285098fce04c409a947f5a Mon Sep 17 00:00:00 2001 From: joerg Date: Fri, 4 Aug 1995 17:08:07 +0000 Subject: 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. --- bin/expr/expr.y | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'bin/expr/expr.y') 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 @@ -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; } -- cgit v1.1