summaryrefslogtreecommitdiff
path: root/pcre_printint.c
diff options
context:
space:
mode:
authorzherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15>2013-12-22 16:27:35 +0000
committerzherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15>2013-12-22 16:27:35 +0000
commitf928c7adccd8daa61e76c22130d79689ec41f21c (patch)
treecd7785129e501b2214ee32c6d3a895c5ea08a64d /pcre_printint.c
parent27e5192041ef241b4d3f559d067b81e431698a63 (diff)
downloadpcre-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.c15
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)