Implement the basic binary operations.
>From 7d5836d27ed1d1a1d4bbd0349946b99228e6102c Mon Sep 17 00:00:00 2001
From: sin <s...@2f30.org>
Date: Tue, 15 Oct 2013 14:30:14 +0100
Subject: [PATCH] Implement the basic binary operations for test(1)

---
 test.c |   38 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)

diff --git a/test.c b/test.c
index 0c5b969..a312839 100644
--- a/test.c
+++ b/test.c
@@ -105,7 +105,43 @@ unary(const char *op, const char *arg)
 bool
 binary(const char *arg1, const char *op, const char *arg2)
 {
-       eprintf("not yet implemented\n");
+       int i;
+       long narg1, narg2;
+       enum operator { EQ, GE, GT, LE, LT, NE, STREQ, STRNOTEQ } oper;
+       char *optexts[] = { "-eq", "-ge", "-gt", "-le", "-lt", "-ne",
+               "=", "!="
+       };
+
+       for (i = 0; i < LEN(optexts); i++) {
+               if (strcmp(op, optexts[i]) == 0) {
+                       oper = i;
+                       switch (oper) {
+                       case STREQ:
+                               return strcmp(arg1, arg2) == 0;
+                       case STRNOTEQ:
+                               return strcmp(arg1, arg2) != 0;
+                       default:
+                               narg1 = estrtol(arg1, 0);
+                               narg2 = estrtol(arg2, 0);
+                               switch (oper) {
+                               case EQ:
+                                       return narg1 == narg2;
+                               case GE:
+                                       return narg1 >= narg2;
+                               case GT:
+                                       return narg1 > narg2;
+                               case LE:
+                                       return narg1 <= narg2;
+                               case LT:
+                                       return narg1 < narg2;
+                               case NE:
+                                       return narg1 != narg2;
+                               default:
+                                       usage();
+                               }
+                       }
+               }
+       }
        return false;
 }
 
-- 
1.7.10.4

Reply via email to