summaryrefslogtreecommitdiffstats
path: root/grammar/rainerscript.c
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2012-12-11 15:46:08 +0100
committerRainer Gerhards <rgerhards@adiscon.com>2012-12-11 15:46:08 +0100
commita8437e146808ee68c9b5979767a186a3da079107 (patch)
tree1f72ea9a514896b828fb4ac2ae68698a0af14642 /grammar/rainerscript.c
parent3c9fb9017fedcc0637f235e4c348287112f18447 (diff)
downloadrsyslog-a8437e146808ee68c9b5979767a186a3da079107.tar.gz
rsyslog-a8437e146808ee68c9b5979767a186a3da079107.tar.bz2
rsyslog-a8437e146808ee68c9b5979767a186a3da079107.zip
script optimizer: support textual severities in compare operations as well
Diffstat (limited to 'grammar/rainerscript.c')
-rw-r--r--grammar/rainerscript.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/grammar/rainerscript.c b/grammar/rainerscript.c
index e4c4f519..8f20bfcd 100644
--- a/grammar/rainerscript.c
+++ b/grammar/rainerscript.c
@@ -2547,6 +2547,23 @@ cnfexprOptimize_CMP_var(struct cnfexpr *expr)
}
free(cstr);
}
+ } else if(!strcmp("$syslogseverity-text", ((struct cnfvar*)expr->l)->name)) {
+ if(expr->r->nodetype == 'S') {
+ char *cstr = es_str2cstr(((struct cnfstringval*)expr->r)->estr, NULL);
+ int sev = decodeSyslogName((uchar*)cstr, syslogPriNames);
+ if(sev == -1) {
+ parser_errmsg("invalid syslogseverity '%s', expression will always "
+ "evaluate to FALSE", cstr);
+ } else {
+ /* we can acutally optimize! */
+ DBGPRINTF("optimizer: change comparison OP to FUNC prifilt()\n");
+ func = cnffuncNew_prifilt(0);
+ prifiltSetSeverity(func->funcdata, sev, expr->nodetype);
+ cnfexprDestruct(expr);
+ expr = (struct cnfexpr*) func;
+ }
+ free(cstr);
+ }
} else {
expr = cnfexprOptimize_CMP_severity_facility(expr);
}