diff options
author | zherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15> | 2013-12-22 16:27:35 +0000 |
---|---|---|
committer | zherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15> | 2013-12-22 16:27:35 +0000 |
commit | f928c7adccd8daa61e76c22130d79689ec41f21c (patch) | |
tree | cd7785129e501b2214ee32c6d3a895c5ea08a64d /pcre_printint.c | |
parent | 27e5192041ef241b4d3f559d067b81e431698a63 (diff) | |
download | pcre-f928c7adccd8daa61e76c22130d79689ec41f21c.tar.gz |
A new flag is set, when property checks are present in an XCLASS.
git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1414 2f5784b3-3f2a-0410-8824-cb99058d5e15
Diffstat (limited to 'pcre_printint.c')
-rw-r--r-- | pcre_printint.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/pcre_printint.c b/pcre_printint.c index e4ef152..60dcb55 100644 --- a/pcre_printint.c +++ b/pcre_printint.c @@ -644,7 +644,9 @@ for(;;) int i; unsigned int min, max; BOOL printmap; + BOOL invertmap = FALSE; pcre_uint8 *map; + pcre_uint8 inverted_map[32]; fprintf(f, " ["); @@ -653,7 +655,12 @@ for(;;) extra = GET(code, 1); ccode = code + LINK_SIZE + 1; printmap = (*ccode & XCL_MAP) != 0; - if ((*ccode++ & XCL_NOT) != 0) fprintf(f, "^"); + if ((*ccode & XCL_NOT) != 0) + { + invertmap = (*ccode & XCL_HASPROP) == 0; + fprintf(f, "^"); + } + ccode++; } else { @@ -666,6 +673,12 @@ for(;;) if (printmap) { map = (pcre_uint8 *)ccode; + if (invertmap) + { + for (i = 0; i < 32; i++) inverted_map[i] = ~map[i]; + map = inverted_map; + } + for (i = 0; i < 256; i++) { if ((map[i/8] & (1 << (i&7))) != 0) |