From 0baf2490c3482bd3acd0e1f96fbffd2fb27ceb9c Mon Sep 17 00:00:00 2001
From: "plvines (corpora)" <paul.vines@baesystems.com>
Date: Fri, 14 Feb 2020 19:39:04 +0000
Subject: [PATCH] Added strictness CLI parse and functionality TODO: improve
 command line parsing / add flags

---
 pdf.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/pdf.c b/pdf.c
index 9674a98..87f0e6e 100644
--- a/pdf.c
+++ b/pdf.c
@@ -3,6 +3,7 @@
  */
 
 #include <string.h>	/* strncmp(), memset() */
+#include <stdlib.h>	/* exit() */
 
 #include <hammer/hammer.h>
 #include <hammer/glue.h>
@@ -24,6 +25,7 @@
 #endif
 
 
+
 /*
  * some helpers
  */
@@ -33,6 +35,8 @@ HParser *p_epsilon;
 HParser *p_return_0;
 HParser *p_return_1;
 
+uint8_t strictness = 0;
+
 /* a combinator to parse a given character but return a different value */
 
 HParsedToken *
@@ -252,6 +256,10 @@ act_viol(const HParseResult *p, void *viol)
 	H_RULE(p_violsev, SEQ(IGN(viol_preamble), nat));
 	uint severity = h_parse(p_violsev, viol, strlen((char *)viol))->ast->seq->elements[0]->uint;
 	fprintf(stderr, "VIOLATION[%d]: %s\n", severity, (char *) viol);
+
+	if (strictness && severity > strictness) {
+	    exit(1);
+	}
 	return (HParsedToken *) p->ast;
 }
 
@@ -1558,12 +1566,19 @@ main(int argc, char *argv[])
 	int fd;
 
 	/* command line handling */
-	if (argc != 2) {
+	if (argc > 3) {
 		fprintf(stderr, "usage: %s file\n", argv[0]);
 		return 1;
 	}
+	if (argc == 3) {
+	  H_RULE(nat, h_action(h_many1(h_action(h_ch_range('0', '9'), act_digit, NULL)),
+			       act_nat, NULL));
+	  strictness = h_parse(nat, (uint8_t *)argv[2], strlen(argv[2]))->ast->uint;
+	}
 	infile = argv[1];
 
+	fprintf(stderr, "Strictness %d\n", strictness);
+
 	/* mmap the input file */
 	fd = open(infile, O_RDONLY);
 	if (fd == -1)
-- 
GitLab