File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / bird / lib / patmatch.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Aug 22 12:33:54 2017 UTC (6 years, 10 months ago) by misho
Branches: bird, MAIN
CVS tags: v1_6_8p3, v1_6_3p0, v1_6_3, HEAD
bird 1.6.3

    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>