[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.7 and 1.8

version 1.7, 1993/11/09 18:22:09 version 1.8, 1993/11/11 03:21:24
Line 55  fnmatch(pattern, string, flags)
Line 55  fnmatch(pattern, string, flags)
         register const char *pattern, *string;          register const char *pattern, *string;
         int flags;          int flags;
 {  {
           const char *stringstart = string;
         register char c;          register char c;
         char test;          char test;
   
Line 63  fnmatch(pattern, string, flags)
Line 64  fnmatch(pattern, string, flags)
                 case EOS:                  case EOS:
                         return (*string == EOS ? 0 : FNM_NOMATCH);                          return (*string == EOS ? 0 : FNM_NOMATCH);
                 case '?':                  case '?':
                         if ((test = *string++) == EOS ||                          if (*string == EOS)
                             test == '/' && flags & FNM_PATHNAME)  
                                 return (FNM_NOMATCH);                                  return (FNM_NOMATCH);
                           if (*string == '/' && (flags & FNM_PATHNAME))
                                   return (FNM_NOMATCH);
                           if (*string == '.' && (flags & FNM_PERIOD) &&
                               (string == stringstart || ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
                                   return (FNM_NOMATCH);
                           ++string;
                         break;                          break;
                 case '*':                  case '*':
                         c = *pattern;                          c = *pattern;
Line 73  fnmatch(pattern, string, flags)
Line 79  fnmatch(pattern, string, flags)
                         while (c == '*')                          while (c == '*')
                                 c = *++pattern;                                  c = *++pattern;
   
                           if (*string == '.' && (flags & FNM_PERIOD) &&
                               (string == stringstart || ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
                                   return (FNM_NOMATCH);
   
                         /* 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)
Line 88  fnmatch(pattern, string, flags)
Line 98  fnmatch(pattern, string, flags)
   
                         /* 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 & ~FNM_PERIOD))
                                         return (0);                                          return (0);
                                 if (test == '/' && flags & FNM_PATHNAME)                                  if (test == '/' && flags & FNM_PATHNAME)
                                         break;                                          break;
Line 96  fnmatch(pattern, string, flags)
Line 106  fnmatch(pattern, string, flags)
                         }                          }
                         return (FNM_NOMATCH);                          return (FNM_NOMATCH);
                 case '[':                  case '[':
                         if ((test = *string++) == EOS ||                          if (*string == EOS)
                             test == '/' && flags & FNM_PATHNAME)                                  return (FNM_NOMATCH);
                           if (*string == '/' && flags & FNM_PATHNAME)
                                 return (FNM_NOMATCH);                                  return (FNM_NOMATCH);
                         if ((pattern = rangematch(pattern, test, flags)) == NULL)                          if ((pattern = rangematch(pattern, *string, flags)) == NULL)
                                 return (FNM_NOMATCH);                                  return (FNM_NOMATCH);
                           ++string;
                         break;                          break;
                 case '\\':                  case '\\':
                         if (!(flags & FNM_NOESCAPE)) {                          if (!(flags & FNM_NOESCAPE)) {

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8

CVSweb <webmaster@jp.NetBSD.org>