From 2a353a9fb4c79b3505eb5f414beeb4f326abed4e Mon Sep 17 00:00:00 2001 From: Joerg Wunsch Date: Fri, 4 Aug 1995 17:08:07 +0000 Subject: [PATCH] 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(-) diff --git a/bin/expr/expr.y b/bin/expr/expr.y index e745bb7b4ac..76ffe4454f5 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; }