Annotation of 43BSDTahoe/new/nntp/server/ngmatch.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char    *sccsid = "@(#)ngmatch.c        1.2     (Berkeley) 10/15/87";
        !             3: #endif
        !             4: 
        !             5: #include "common.h"
        !             6: 
        !             7: /*
        !             8:  * nntpngmatch -- match a list of newsgroup specifiers with a list of
        !             9:  * given newsgroups.  A pointer to the routine which determines a match is
        !            10:  * also given.  This allows us to do regular expression handling for RFC
        !            11:  * 977's NEWNEWS, and more efficient "strncmps" for the access file, which
        !            12:  * must be checked often.
        !            13:  * 
        !            14:  * This is NOT the same routine as ngmatch in the news software.  Pity.
        !            15:  * 
        !            16:  *     Parameters:     "nglist" is the list of group specifiers (limited
        !            17:  *                     regexp) to match against.
        !            18:  *                     "ngcount" is the number of groups in nglist.
        !            19:  *                     "matchlist" is the list of newsgroups to match against.
        !            20:  *                     "matchcount" is number of groups in matchlist.
        !            21:  *
        !            22:  *     Returns:        1 if the named newsgroup is in the list.
        !            23:  *                     0 otherwise.
        !            24:  */
        !            25: 
        !            26: ngmatch(func, dflt, ngspec, ngspeccount, matchlist, matchcount)
        !            27:        int             (*func)();
        !            28:        int             dflt;
        !            29:        char            **ngspec;
        !            30:        int             ngspeccount;
        !            31:        char            **matchlist;
        !            32:        int             matchcount;
        !            33: {
        !            34:        register int    i, j;
        !            35:        register int    match;
        !            36:        register char   *cp;
        !            37: 
        !            38:        if (ngspeccount == 0)
        !            39:                return (1);
        !            40: 
        !            41:        match = dflt;
        !            42: 
        !            43:        for (i = 0; i < matchcount; ++i) {
        !            44:                if (cp = index(matchlist[i], '/'))
        !            45:                        *cp = '\0';
        !            46:                for (j = 0; j < ngspeccount; ++j) {
        !            47:                        if (ngspec[j][0] == '!') {      /* Handle negation */
        !            48:                                if ((*func)(ngspec[j]+1, matchlist[i])) {
        !            49:                                        match = 0;
        !            50:                                }
        !            51:                        } else {
        !            52:                                if ((*func)(ngspec[j], matchlist[i])) {
        !            53:                                        match = 1;
        !            54:                                }
        !            55:                        }
        !            56:                }
        !            57:        }
        !            58: 
        !            59:        return (match);
        !            60: }
        !            61: 
        !            62: 
        !            63: /*
        !            64:  * restreql -- A small regular expression string equivalnce routine.
        !            65:  * Thanks and a tip of the hat to Nick Lai, <[email protected]>
        !            66:  * for this time saving device.
        !            67:  *
        !            68:  *     Parameters:     "w" is an asterisk-broadened regexp,
        !            69:  *                     "s" is a non-regexp string.
        !            70:  *     Returns:        1 if match, 0 otherwise.
        !            71:  *
        !            72:  *     Side effects:   None.
        !            73:  */
        !            74: 
        !            75: restreql(w, s)
        !            76:        register char *w;
        !            77:        register char *s;
        !            78: {
        !            79: 
        !            80:        while (*s && *w) {
        !            81:                switch (*w) {
        !            82:                        case '*':
        !            83:                                for (w++; *s; s++)
        !            84:                                        if (restreql(w, s))
        !            85:                                                return 1;
        !            86:                                break;
        !            87:                        default:
        !            88:                                if (*w != *s)
        !            89:                                        return 0;
        !            90:                                w++, s++;
        !            91:                                break;
        !            92:                }
        !            93:        }
        !            94:        if (*s)
        !            95:                return 0;
        !            96:        while (*w)
        !            97:                if (*w++ != '*')
        !            98:                        return 0;
        !            99: 
        !           100:        return 1;
        !           101: }
        !           102: 
        !           103: 
        !           104: /*
        !           105:  * strneql -- see if s1 is equivalent to s2 up to the length of s1.
        !           106:  * Return 1 if so, 0 otherwise.
        !           107:  */
        !           108: 
        !           109: strneql(s1, s2)
        !           110:        register char   *s1;
        !           111:        register char   *s2;
        !           112: {
        !           113:        return (!strncmp(s1, s2, strlen(s1)));
        !           114: }

unix.superglobalmegacorp.com

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