aboutsummaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorStefan Eßer <se@FreeBSD.org>2000-07-10 21:29:28 +0000
committerStefan Eßer <se@FreeBSD.org>2000-07-10 21:29:28 +0000
commitde96f24080fc65ba282e9e1d7812169d6e58d920 (patch)
tree12e7fe73038f3c0e4881d93346be69ccb9b62525 /bin
parentae74d7371823e5d43d809d557e18c295d1a4c3f3 (diff)
downloadsrc-de96f24080fc65ba282e9e1d7812169d6e58d920.tar.gz
src-de96f24080fc65ba282e9e1d7812169d6e58d920.zip
Add support for 64bit integer comparisons.
Notes
Notes: svn path=/head/; revision=62925
Diffstat (limited to 'bin')
-rw-r--r--bin/test/test.c56
1 files changed, 50 insertions, 6 deletions
diff --git a/bin/test/test.c b/bin/test/test.c
index c9df4e3cb758..73e6ebf935df 100644
--- a/bin/test/test.c
+++ b/bin/test/test.c
@@ -153,6 +153,8 @@ static int binop __P((void));
static int filstat __P((char *, enum token));
static int isoperand __P((void));
static int getn __P((const char *));
+static quad_t getq __P((const char *));
+static int intcmp __P((const char *, const char *));
static int newerf __P((const char *, const char *));
static int olderf __P((const char *, const char *));
static int equalf __P((const char *, const char *));
@@ -298,17 +300,17 @@ binop()
case STRGT:
return strcmp(opnd1, opnd2) > 0;
case INTEQ:
- return getn(opnd1) == getn(opnd2);
+ return intcmp(opnd1, opnd2) == 0;
case INTNE:
- return getn(opnd1) != getn(opnd2);
+ return intcmp(opnd1, opnd2) != 0;
case INTGE:
- return getn(opnd1) >= getn(opnd2);
+ return intcmp(opnd1, opnd2) >= 0;
case INTGT:
- return getn(opnd1) > getn(opnd2);
+ return intcmp(opnd1, opnd2) > 0;
case INTLE:
- return getn(opnd1) <= getn(opnd2);
+ return intcmp(opnd1, opnd2) <= 0;
case INTLT:
- return getn(opnd1) < getn(opnd2);
+ return intcmp(opnd1, opnd2) < 0;
case FILNT:
return newerf (opnd1, opnd2);
case FILOT:
@@ -443,6 +445,48 @@ getn(s)
return (int) r;
}
+/* atoi with error detection and 64 bit range */
+static quad_t
+getq(s)
+ const char *s;
+{
+ char *p;
+ quad_t r;
+
+ errno = 0;
+ r = strtoq(s, &p, 10);
+
+ if (errno != 0)
+ errx(2, "%s: out of range", s);
+
+ while (isspace((unsigned char)*p))
+ p++;
+
+ if (*p)
+ errx(2, "%s: bad number", s);
+
+ return r;
+}
+
+static int
+intcmp (s1, s2)
+ const char *s1, *s2;
+{
+ quad_t q1, q2;
+
+
+ q1 = getq(s1);
+ q2 = getq(s2);
+
+ if (q1 > q2)
+ return 1;
+
+ if (q1 < q2)
+ return -1;
+
+ return 0;
+}
+
static int
newerf (f1, f2)
const char *f1, *f2;