|
|
1.1 ! root 1: #include "re.h" ! 2: #include "lre.h" ! 3: #include "hdr.h" ! 4: ! 5: re_re * ! 6: re_recomp(char *b, char *e, unsigned char *map) ! 7: { ! 8: return(egprep(greparse, (unsigned char *)b, (unsigned char *)e, map, 1)); ! 9: } ! 10: ! 11: re_reexec(re_re *pat, char *b, char *e, char *match[10][2]) ! 12: { ! 13: unsigned char *mb[10], *me[10], **rb, **re; ! 14: int n, i; ! 15: ! 16: if(match) ! 17: rb = mb, re = me; ! 18: else ! 19: rb = re = 0; ! 20: n = eg_match(pat, (unsigned char *)b, (unsigned char *)e, rb, re); ! 21: if(match) ! 22: for(i = 0; i < 10; i++){ ! 23: match[i][0] = (char *)mb[i]; ! 24: match[i][1] = (char *)me[i]; ! 25: } ! 26: return(n); ! 27: } ! 28: ! 29: static void ! 30: freeexpr(register Expr *e) ! 31: { ! 32: switch(e->type) ! 33: { ! 34: case Literal: ! 35: case Dot: ! 36: case Carat: ! 37: case Dollar: ! 38: if(e->follow) ! 39: free((char *)e->follow); ! 40: break; ! 41: case Compcharclass: ! 42: case Charclass: ! 43: free((char *)e->r); ! 44: break; ! 45: case Cat: ! 46: case Alternate: ! 47: freeexpr(e->l); ! 48: freeexpr(e->r); ! 49: break; ! 50: case Star: ! 51: case Plus: ! 52: case Quest: ! 53: case Group: ! 54: case EOP: ! 55: freeexpr(e->l); ! 56: break; ! 57: case Backref: ! 58: default: ! 59: break; ! 60: } ! 61: } ! 62: ! 63: void ! 64: re_refree(re_re *re) ! 65: { ! 66: if(re == 0) ! 67: return; ! 68: if(re->posbase) ! 69: free((char *)re->posbase); ! 70: if(re->root) ! 71: freeexpr(re->root); ! 72: if(re->ptr) ! 73: free((char *)re->ptr); ! 74: if(re->states) ! 75: free((char *)re->states); ! 76: /* leave br alone for now; it is hard to get right */ ! 77: free((char *)re); ! 78: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.