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