The following reply was made to PR bin/116074; it has been noted by GNATS.

From: dfil...@freebsd.org (dfilter service)
To: bug-follo...@freebsd.org
Cc:  
Subject: Re: bin/116074: commit references a PR
Date: Fri, 16 Apr 2010 22:29:33 +0000 (UTC)

 Author: jilles
 Date: Fri Apr 16 22:29:24 2010
 New Revision: 206711
 URL: http://svn.freebsd.org/changeset/base/206711
 
 Log:
   fnmatch: Fix bad FNM_PERIOD disabling if an asterisk has been seen.
   
   Example: fnmatch("a*b/*", "abbb/.x", FNM_PATHNAME | FNM_PERIOD)
   
   PR:          116074
   MFC after:   1 week
 
 Modified:
   head/lib/libc/gen/fnmatch.c
   head/tools/regression/lib/libc/gen/test-fnmatch.c
 
 Modified: head/lib/libc/gen/fnmatch.c
 ==============================================================================
 --- head/lib/libc/gen/fnmatch.c        Fri Apr 16 22:15:26 2010        
(r206710)
 +++ head/lib/libc/gen/fnmatch.c        Fri Apr 16 22:29:24 2010        
(r206711)
 @@ -67,7 +67,8 @@ __FBSDID("$FreeBSD$");
  #define RANGE_ERROR     (-1)
  
  static int rangematch(const char *, wchar_t, int, char **, mbstate_t *);
 -static int fnmatch1(const char *, const char *, int, mbstate_t, mbstate_t);
 +static int fnmatch1(const char *, const char *, const char *, int, mbstate_t,
 +              mbstate_t);
  
  int
  fnmatch(pattern, string, flags)
 @@ -76,22 +77,21 @@ fnmatch(pattern, string, flags)
  {
        static const mbstate_t initial;
  
 -      return (fnmatch1(pattern, string, flags, initial, initial));
 +      return (fnmatch1(pattern, string, string, flags, initial, initial));
  }
  
  static int
 -fnmatch1(pattern, string, flags, patmbs, strmbs)
 -      const char *pattern, *string;
 +fnmatch1(pattern, string, stringstart, flags, patmbs, strmbs)
 +      const char *pattern, *string, *stringstart;
        int flags;
        mbstate_t patmbs, strmbs;
  {
 -      const char *stringstart;
        char *newp;
        char c;
        wchar_t pc, sc;
        size_t pclen, sclen;
  
 -      for (stringstart = string;;) {
 +      for (;;) {
                pclen = mbrtowc(&pc, pattern, MB_LEN_MAX, &patmbs);
                if (pclen == (size_t)-1 || pclen == (size_t)-2)
                        return (FNM_NOMATCH);
 @@ -145,8 +145,8 @@ fnmatch1(pattern, string, flags, patmbs,
  
                        /* General case, use recursion. */
                        while (sc != EOS) {
 -                              if (!fnmatch1(pattern, string,
 -                                  flags & ~FNM_PERIOD, patmbs, strmbs))
 +                              if (!fnmatch1(pattern, string, stringstart,
 +                                  flags, patmbs, strmbs))
                                        return (0);
                                sclen = mbrtowc(&sc, string, MB_LEN_MAX,
                                    &strmbs);
 
 Modified: head/tools/regression/lib/libc/gen/test-fnmatch.c
 ==============================================================================
 --- head/tools/regression/lib/libc/gen/test-fnmatch.c  Fri Apr 16 22:15:26 
2010        (r206710)
 +++ head/tools/regression/lib/libc/gen/test-fnmatch.c  Fri Apr 16 22:29:24 
2010        (r206711)
 @@ -174,6 +174,7 @@ struct testcase {
        "*a", ".a/b", FNM_PATHNAME | FNM_LEADING_DIR, 0,
        "*", ".a/b", FNM_PATHNAME | FNM_PERIOD | FNM_LEADING_DIR, FNM_NOMATCH,
        "*a", ".a/b", FNM_PATHNAME | FNM_PERIOD | FNM_LEADING_DIR, FNM_NOMATCH,
 +      "a*b/*", "abbb/.x", FNM_PATHNAME | FNM_PERIOD, FNM_NOMATCH,
  };
  
  static const char *
 _______________________________________________
 svn-src-...@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"
 
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to