diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2012-04-26 16:03:30 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2012-04-26 16:03:30 +0200 |
commit | 45dc0db51e78d3d6ef296f0cfd7a7a775e91415c (patch) | |
tree | 29532050057e47e532f9d376aaae33b8aed57940 /template.c | |
parent | 9ec02e670a5fec3d42d567ec593f618dfc9cacb8 (diff) | |
parent | 5624012710ea75acfd892903f05a6df69a51be39 (diff) | |
download | rsyslog-45dc0db51e78d3d6ef296f0cfd7a7a775e91415c.tar.gz rsyslog-45dc0db51e78d3d6ef296f0cfd7a7a775e91415c.tar.xz rsyslog-45dc0db51e78d3d6ef296f0cfd7a7a775e91415c.zip |
Merge branch 'master-fieldext'
Diffstat (limited to 'template.c')
-rw-r--r-- | template.c | 37 |
1 files changed, 29 insertions, 8 deletions
@@ -753,6 +753,13 @@ static int do_Parameter(unsigned char **pp, struct template *pTpl) pTpe->data.field.field_expand = 1; p ++; } + if(*p == ',') { /* real fromPos? */ + ++p; + iNum = 0; + while(isdigit((int)*p)) + iNum = iNum * 10 + *p++ - '0'; + pTpe->data.field.iFromPos = iNum; + } } } } else { @@ -853,10 +860,24 @@ static int do_Parameter(unsigned char **pp, struct template *pTpl) /* fallthrough to "regular" ToPos code */ #endif /* #ifdef FEATURE_REGEXP */ - iNum = 0; - while(isdigit((int)*p)) - iNum = iNum * 10 + *p++ - '0'; - pTpe->data.field.iToPos = iNum; + if(pTpe->data.field.has_fields == 1) { + iNum = 0; + while(isdigit((int)*p)) + iNum = iNum * 10 + *p++ - '0'; + pTpe->data.field.iFieldNr = iNum; + if(*p == ',') { /* get real toPos? */ + ++p; + iNum = 0; + while(isdigit((int)*p)) + iNum = iNum * 10 + *p++ - '0'; + pTpe->data.field.iToPos = iNum; + } + } else { + iNum = 0; + while(isdigit((int)*p)) + iNum = iNum * 10 + *p++ - '0'; + pTpe->data.field.iToPos = iNum; + } /* skip to next known good */ while(*p && *p != '%' && *p != ':') { /* TODO: complain on extra characters */ @@ -868,7 +889,7 @@ static int do_Parameter(unsigned char **pp, struct template *pTpl) #endif /* #ifdef FEATURE_REGEXP */ } - if((pTpe->data.field.has_fields == 0) && (pTpe->data.field.iToPos < pTpe->data.field.iFromPos)) { + if(pTpe->data.field.iToPos < pTpe->data.field.iFromPos) { iNum = pTpe->data.field.iToPos; pTpe->data.field.iToPos = pTpe->data.field.iFromPos; pTpe->data.field.iFromPos = iNum; @@ -1341,9 +1362,9 @@ void tplPrintList(rsconf_t *conf) } if(pTpe->data.field.has_fields == 1) { dbgprintf("[substring, field #%d only (delemiter %d)] ", - pTpe->data.field.iToPos, pTpe->data.field.field_delim); - } else if(pTpe->data.field.iFromPos != 0 || - pTpe->data.field.iToPos != 0) { + pTpe->data.field.iFieldNr, pTpe->data.field.field_delim); + } + if(pTpe->data.field.iFromPos != 0 || pTpe->data.field.iToPos != 0) { dbgprintf("[substring, from character %d to %d] ", pTpe->data.field.iFromPos, pTpe->data.field.iToPos); |