Annotation of embedaddon/bird/lib/patmatch.c, revision 1.1.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>