Annotation of embedaddon/bird2/lib/patmatch.c, revision 1.1

1.1     ! misho       1: /*
        !             2:  *     BIRD Library -- Generic Shell-Like Pattern Matching (currently only '?' and '*')
        !             3:  *
        !             4:  *     (c) 1998--2000 Martin Mares <mj@ucw.cz>
        !             5:  */
        !             6: 
        !             7: #include "nest/bird.h"
        !             8: #include "lib/string.h"
        !             9: 
        !            10: #ifndef MATCH_FUNC_NAME
        !            11: #define MATCH_FUNC_NAME patmatch
        !            12: #endif
        !            13: 
        !            14: #ifndef Convert
        !            15: #define Convert(x) x
        !            16: #endif
        !            17: 
        !            18: int
        !            19: MATCH_FUNC_NAME(const byte *p, const byte *s)
        !            20: {
        !            21:   while (*p)
        !            22:     {
        !            23:       if (*p == '?' && *s)
        !            24:        p++, s++;
        !            25:       else if (*p == '*')
        !            26:        {
        !            27:          int z = p[1];
        !            28: 
        !            29:          if (!z)
        !            30:            return 1;
        !            31:          if (z == '\\' && p[2])
        !            32:            z = p[2];
        !            33:          z = Convert(z);
        !            34:          for(;;)
        !            35:            {
        !            36:              while (*s && Convert(*s) != z)
        !            37:                s++;
        !            38:              if (!*s)
        !            39:                return 0;
        !            40:              if (MATCH_FUNC_NAME(p+1, s))
        !            41:                return 1;
        !            42:              s++;
        !            43:            }
        !            44:        }
        !            45:       else
        !            46:        {
        !            47:          if (*p == '\\' && p[1])
        !            48:            p++;
        !            49:          if (Convert(*p++) != Convert(*s++))
        !            50:            return 0;
        !            51:        }
        !            52:     }
        !            53:   return !*s;
        !            54: }
        !            55: 
        !            56: #if 0
        !            57: /**
        !            58:  * patmatch - match shell-like patterns
        !            59:  * @p: pattern
        !            60:  * @s: string
        !            61:  *
        !            62:  * patmatch() returns whether given string @s matches the given shell-like
        !            63:  * pattern @p. The patterns consist of characters (which are matched literally),
        !            64:  * question marks which match any single character, asterisks which match any
        !            65:  * (possibly empty) string of characters and backslashes which are used to
        !            66:  * escape any special characters and force them to be treated literally.
        !            67:  *
        !            68:  * The matching process is not optimized with respect to time, so please
        !            69:  * avoid using this function for complex patterns.
        !            70:  */
        !            71: int
        !            72: patmatch(byte *p, byte *s)
        !            73: { DUMMY; }
        !            74: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>