diff options
Diffstat (limited to 'src/libregexp/regcomp.c')
-rw-r--r-- | src/libregexp/regcomp.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/libregexp/regcomp.c b/src/libregexp/regcomp.c index b8286dc7..ba0175ff 100644 --- a/src/libregexp/regcomp.c +++ b/src/libregexp/regcomp.c @@ -232,7 +232,7 @@ optimize(Reprog *pp) int size; Reprog *npp; Reclass *cl; - int diff; + int diff, proglen; /* * get rid of NOOP chains @@ -249,10 +249,13 @@ optimize(Reprog *pp) * necessary. Reallocate to the actual space used * and then relocate the code. */ - size = sizeof(Reprog) + (freep - pp->firstinst)*sizeof(Reinst); + proglen = freep - pp->firstinst; + size = sizeof(Reprog) + proglen*sizeof(Reinst); npp = realloc(pp, size); - if(npp==0 || npp==pp) + if(npp==0 || npp==pp){ + pp->proglen = proglen; return pp; + } diff = (char *)npp - (char *)pp; freep = (Reinst *)((char *)freep + diff); for(inst=npp->firstinst; inst<freep; inst++){ @@ -273,6 +276,7 @@ optimize(Reprog *pp) *(char**)(void*)&inst->u2.left += diff; } *(char**)(void*)&npp->startinst += diff; + npp->proglen = proglen; return npp; } |