about summary refs log tree commit diff
path: root/posix/fnmatch_loop.c
diff options
context:
space:
mode:
Diffstat (limited to 'posix/fnmatch_loop.c')
-rw-r--r--posix/fnmatch_loop.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/posix/fnmatch_loop.c b/posix/fnmatch_loop.c
index 831bd0631a..3a6dffb1e4 100644
--- a/posix/fnmatch_loop.c
+++ b/posix/fnmatch_loop.c
@@ -176,8 +176,8 @@ FCT (pattern, string, no_leading_period, flags)
 
 	case L('['):
 	  {
-	    /* Nonzero if the sense of the character class is inverted.  */
 	    static int posixly_correct;
+	    /* Nonzero if the sense of the character class is inverted.  */
 	    register int not;
 	    CHAR cold;
 
@@ -273,6 +273,7 @@ FCT (pattern, string, no_leading_period, flags)
 			|| (STREQ (str, L("xdigit")) && ISXDIGIT ((UCHAR) *n)))
 		      goto matched;
 #endif
+		    c = *p++;
 		  }
 		else if (c == L('\0'))
 		  /* [ (unterminated) loses.  */
@@ -415,13 +416,14 @@ FCT (pattern, string, no_leading_period, flags)
 
 	  matched:
 	    /* Skip the rest of the [...] that already matched.  */
-	    while (c != L(']'))
+	    do
 	      {
+		c = *p++;
+
 		if (c == L('\0'))
 		  /* [... (unterminated) loses.  */
 		  return FNM_NOMATCH;
 
-		c = *p++;
 		if (!(flags & FNM_NOESCAPE) && c == L('\\'))
 		  {
 		    if (*p == L('\0'))
@@ -439,6 +441,7 @@ FCT (pattern, string, no_leading_period, flags)
 		    c = *p;
 		  }
 	      }
+	    while (c != L(']'));
 	    if (not)
 	      return FNM_NOMATCH;
 	  }