diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2012-12-11 15:46:08 +0100 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2012-12-11 15:46:08 +0100 |
commit | a8437e146808ee68c9b5979767a186a3da079107 (patch) | |
tree | 1f72ea9a514896b828fb4ac2ae68698a0af14642 /grammar/rainerscript.c | |
parent | 3c9fb9017fedcc0637f235e4c348287112f18447 (diff) | |
download | rsyslog-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.c | 17 |
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); } |