Annotation of researchv10no/cmd/gre/re.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.