[BACK]Return to fnmatch.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / gen

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/libc/gen/fnmatch.c between version 1.1 and 1.2

version 1.1, 1993/03/21 09:45:37 version 1.2, 1993/04/10 00:25:35
Line 87  fnmatch(pattern, string, flags)
Line 87  fnmatch(pattern, string, flags)
         for (;;)          for (;;)
                 switch (c = *pattern++) {                  switch (c = *pattern++) {
                 case EOS:                  case EOS:
                         return(*string == EOS);                          return(!(*string == EOS));
                 case '?':                  case '?':
                         if ((test = *string++) == EOS ||                          if (((test = *string++) == EOS) ||
                             test == '/' && flags & FNM_PATHNAME)                              ((test == '/') && (flags & FNM_PATHNAME)))
                                 return(0);                                  return(1);
                         break;                          break;
                 case '*':                  case '*':
                         c = *pattern;                          c = *pattern;
Line 102  fnmatch(pattern, string, flags)
Line 102  fnmatch(pattern, string, flags)
                         /* optimize for pattern with * at end or before / */                          /* optimize for pattern with * at end or before / */
                         if (c == EOS)                          if (c == EOS)
                                 if (flags & FNM_PATHNAME)                                  if (flags & FNM_PATHNAME)
                                         return(!index(string, '/'));                                          return(index(string, '/') != NULL);
                                 else                                  else
                                         return(1);  
                         else if (c == '/' && flags & FNM_PATHNAME) {  
                                 if ((string = index(string, '/')) == NULL)  
                                         return(0);                                          return(0);
                           else if ((c == '/') && (flags & FNM_PATHNAME)) {
                                   if ((string = index(string, '/')) == NULL)
                                           return(1);
                                 break;                                  break;
                         }                          }
   
                         /* general case, use recursion */                          /* general case, use recursion */
                         while ((test = *string) != EOS) {                          while ((test = *string) != EOS) {
                                 if (fnmatch(pattern, string, flags))                                  if (!fnmatch(pattern, string, flags))
                                         return(1);                                          return(0);
                                 if (test == '/' && flags & FNM_PATHNAME)                                  if (test == '/' && flags & FNM_PATHNAME)
                                         break;                                          break;
                                 ++string;                                  ++string;
                         }                          }
                         return(0);                          return(1);
                 case '[':                  case '[':
                         if ((test = *string++) == EOS ||                          if ((test = *string++) == EOS ||
                             test == '/' && flags & FNM_PATHNAME)                              test == '/' && flags & FNM_PATHNAME)
                                 return(0);                                  return(1);
                         if ((pattern = rangematch(pattern, test)) == NULL)                          if ((pattern = rangematch(pattern, test)) == NULL)
                                 return(0);                                  return(1);
                         break;                          break;
                 case '\\':                  case '\\':
                         if (flags & FNM_QUOTE) {                          if (flags & FNM_QUOTE) {
Line 134  fnmatch(pattern, string, flags)
Line 134  fnmatch(pattern, string, flags)
                                         --pattern;                                          --pattern;
                                 }                                  }
                                 if (c != *string++)                                  if (c != *string++)
                                         return(0);                                          return(1);
                                 break;                                  break;
                         }                          }
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 default:                  default:
                         if (c != *string++)                          if (c != *string++)
                                 return(0);                                  return(1);
                         break;                          break;
                 }                  }
 }  }

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

CVSweb <webmaster@jp.NetBSD.org>