added new capability to property replacer.

Multiple immediately successive field delimiters are treated as
a single one.

Signed-off-by: Rainer Gerhards <rgerhards@adiscon.com>
This commit is contained in:
Zhuang Yuyao 2008-09-10 12:18:34 +02:00 committed by Rainer Gerhards
parent ae425d47c5
commit d65470842d
4 changed files with 15 additions and 0 deletions

View File

@ -1,5 +1,8 @@
---------------------------------------------------------------------------
Version 3.21.5 [DEVEL] (rgerhards), 2008-09-??
- added new capability to property replacer: multiple immediately
successive field delimiters are treated as a single one.
Thanks to Zhuang Yuyao for the patch.
---------------------------------------------------------------------------
Version 3.21.4 [DEVEL] (rgerhards), 2008-09-04
- removed compile time fixed message size limit (was 2K), limit can now

View File

@ -1809,6 +1809,11 @@ char *MsgGetProp(msg_t *pMsg, struct templateEntry *pTpe,
++pFld; /* skip to field terminator */
if(*pFld == pTpe->data.field.field_delim) {
++pFld; /* eat it */
if (pTpe->data.field.field_expand != 0) {
while (*pFld == pTpe->data.field.field_delim) {
++pFld;
}
}
++iCurrFld;
}
}

View File

@ -603,6 +603,7 @@ static int do_Parameter(unsigned char **pp, struct template *pTpl)
/* now we fall through the "regular" FromPos code */
#endif /* #ifdef FEATURE_REGEXP */
if(*p == 'F') {
pTpe->data.field.field_expand = 0;
/* we have a field counter, so indicate it in the template */
++p; /* eat 'F' */
if (*p == ':') {
@ -630,7 +631,11 @@ static int do_Parameter(unsigned char **pp, struct template *pTpl)
pTpe->data.field.field_delim = 9;
} else {
pTpe->data.field.field_delim = iNum;
if (*p == '+') {
pTpe->data.field.field_expand = 1;
p ++;
}
}
}
} else {
/* invalid character after F, so we need to reject

View File

@ -84,6 +84,8 @@ struct templateEntry {
#endif
unsigned has_fields; /* support for field-counting: field to extract */
unsigned char field_delim; /* support for field-counting: field delemiter char */
int field_expand; /* use multiple instances of the field delimiter as a single one? */
enum tplFormatTypes eDateFormat;
enum tplFormatCaseConvTypes eCaseConv;
struct { /* bit fields! */