[BACK]Return to match.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/match.c between version 1.1 and 1.2

version 1.1, 1999/09/26 20:53:36 version 1.2, 1999/11/23 22:25:54
Line 20 
Line 20 
   
 /* Returns true if the given string matches the pattern (which may contain  /* Returns true if the given string matches the pattern (which may contain
    ? and * as wildcards), and zero if it does not match. */     ? and * as wildcards), and zero if it does not match. */
   
 int match_pattern(const char *s, const char *pattern)  int
   match_pattern(const char *s, const char *pattern)
 {  {
   while (1)          for (;;) {
     {                  /* If at end of pattern, accept if also at end of string. */
       /* If at end of pattern, accept if also at end of string. */                  if (!*pattern)
       if (!*pattern)                          return !*s;
         return !*s;  
   
       /* Process '*'. */                  /* Process '*'. */
       if (*pattern == '*')                  if (*pattern == '*') {
         {                          /* Skip the asterisk. */
           /* Skip the asterisk. */                          pattern++;
           pattern++;  
   
           /* If at end of pattern, accept immediately. */                          /* If at end of pattern, accept immediately. */
           if (!*pattern)                          if (!*pattern)
             return 1;                                  return 1;
   
           /* If next character in pattern is known, optimize. */                          /* If next character in pattern is known, optimize. */
           if (*pattern != '?' && *pattern != '*')                          if (*pattern != '?' && *pattern != '*') {
             {                                  /* Look instances of the next character in
               /* Look instances of the next character in pattern, and try                                     pattern, and try to match starting from
                  to match starting from those. */                                     those. */
               for (; *s; s++)                                  for (; *s; s++)
                 if (*s == *pattern &&                                          if (*s == *pattern &&
                     match_pattern(s + 1, pattern + 1))                                              match_pattern(s + 1, pattern + 1))
                   return 1;                                                  return 1;
               /* Failed. */                                  /* Failed. */
               return 0;                                  return 0;
             }                          }
                           /* Move ahead one character at a time and try to
                              match at each position. */
                           for (; *s; s++)
                                   if (match_pattern(s, pattern))
                                           return 1;
                           /* Failed. */
                           return 0;
                   }
                   /* There must be at least one more character in the
                      string.  If we are at the end, fail. */
                   if (!*s)
                           return 0;
   
           /* Move ahead one character at a time and try to match at each                  /* Check if the next character of the string is
              position. */                     acceptable. */
           for (; *s; s++)                  if (*pattern != '?' && *pattern != *s)
             if (match_pattern(s, pattern))                          return 0;
               return 1;  
           /* Failed. */  
           return 0;  
         }  
   
       /* There must be at least one more character in the string.  If we are                  /* Move to the next character, both in string and in
          at the end, fail. */                     pattern. */
       if (!*s)                  s++;
         return 0;                  pattern++;
           }
       /* Check if the next character of the string is acceptable. */          /* NOTREACHED */
       if (*pattern != '?' && *pattern != *s)  
         return 0;  
   
       /* Move to the next character, both in string and in pattern. */  
       s++;  
       pattern++;  
     }  
   /*NOTREACHED*/  
 }  }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2