(isstring): Remove.
authorJim Meyering <jim@meyering.net>
Sat, 18 Aug 2001 20:45:59 +0000 (20:45 +0000)
committerJim Meyering <jim@meyering.net>
Sat, 18 Aug 2001 20:45:59 +0000 (20:45 +0000)
(eval2): Do comparisons as strings first, before trying to convert to
integer.  This avoids loss of information and wrong result, e.g. for
"expr '00' '<' '0!'", where you don't want to convert '00' to '0'.

src/expr.c

index 98f8ee49b2e5db8db0b06a3dcb2bdaf4b9a04969..6222939d04c30a1aa88adff3f5b70dc8e6bd846f 100644 (file)
@@ -283,14 +283,6 @@ null (VALUE *v)
     }
 }
 
-/* Return nonzero if V is a string value.  */
-
-static int
-isstring (VALUE *v)
-{
-  return v->type == string;
-}
-
 /* Coerce V to a string value (can't fail).  */
 
 static void
@@ -699,16 +691,11 @@ eval2 (void)
        return l;
       args++;
       r = eval3 ();
-      toarith (l);
-      toarith (r);
-      if (isstring (l) || isstring (r))
-       {
-         tostring (l);
-         tostring (r);
-         lval = strcoll (l->u.s, r->u.s);
-         rval = 0;
-       }
-      else
+      tostring (l);
+      tostring (r);
+      lval = strcoll (l->u.s, r->u.s);
+      rval = 0;
+      if (toarith (l) && toarith (r))
        {
          lval = l->u.i;
          rval = r->u.i;