about summary refs log tree commit diff
path: root/mpick.c
diff options
context:
space:
mode:
authorDuncaen <mail@duncano.de>2017-10-26 21:50:29 +0200
committerDuncan Overbruck <administrator@duncano.de>2017-10-26 23:14:23 +0200
commit4e7a5c5ab6dcdc18a83ac388cb9c44146c035f8e (patch)
treecead14102255101ac125dcd80083eef103a6b58c /mpick.c
parent6a074d74511f9fd8fd7ccd4e21ea053f0bceecae (diff)
downloadmblaze-4e7a5c5ab6dcdc18a83ac388cb9c44146c035f8e.tar.gz
mblaze-4e7a5c5ab6dcdc18a83ac388cb9c44146c035f8e.tar.xz
mblaze-4e7a5c5ab6dcdc18a83ac388cb9c44146c035f8e.zip
mpick: add negations
Diffstat (limited to 'mpick.c')
-rw-r--r--mpick.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/mpick.c b/mpick.c
index e99f9d5..1bbc44e 100644
--- a/mpick.c
+++ b/mpick.c
@@ -329,10 +329,12 @@ parse_strcmp()
 {
 	enum prop prop;
 	enum op op;
+	int negate;
 	char *h;
 
 	h = 0;
 	prop = 0;
+	negate = 0;
 
 	if (token("from"))
 		prop = PROP_FROM;
@@ -357,6 +359,18 @@ parse_strcmp()
 		op = EXPR_STREQ;
 	else if (token("="))
 		op = EXPR_STREQ;
+	else if (token("!~~~"))
+		negate = 1, op = EXPR_GLOBI;
+	else if (token("!~~"))
+		negate = 1, op = EXPR_GLOB;
+	else if (token("!=~~"))
+		negate = 1, op = EXPR_REGEXI;
+	else if (token("!=~"))
+		negate = 1, op = EXPR_REGEX;
+	else if (token("!==="))
+		negate = 1, op = EXPR_STREQI;
+	else if (token("!==") || token("!="))
+		negate = 1, op = EXPR_STREQ;
 	else
 		parse_error("invalid string operator at '%.15s'", pos);
 
@@ -400,6 +414,12 @@ parse_strcmp()
 		exit(2);
 	}
 
+	if (negate) {
+		struct expr *not = mkexpr(EXPR_NOT);
+		not->a.expr = e;
+		return not;
+	}
+
 	return e;
 }