changeset 38808:68ea5100727d

glob: Use enum for __glob_pattern_type result From a patch proposed by Adhemerval Zanella in: https://sourceware.org/ml/libc-alpha/2017-09/msg00212.html * lib/glob_internal.h (GLOBPAT_NONE, GLOBPAT_SPECIAL) (GLOBPAT_BACKSLASH, GLOBPAT_BRACKET): New constants. * lib/glob_internal.h (__glob_pattern_type): * lib/glob.c (glob): * lib/glob_pattern_p.c (__glob_pattern_p): Use them.
author Paul Eggert <eggert@cs.ucla.edu>
date Tue, 05 Sep 2017 21:14:51 -0700
parents 1b4a640f6b6c
children d5002899a9ff
files ChangeLog lib/glob.c lib/glob_internal.h lib/glob_pattern_p.c
diffstat 4 files changed, 28 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Sep 05 18:58:50 2017 -0700
+++ b/ChangeLog	Tue Sep 05 21:14:51 2017 -0700
@@ -1,5 +1,15 @@
 2017-09-05  Paul Eggert  <eggert@cs.ucla.edu>
 
+	glob: Use enum for __glob_pattern_type result
+	From a patch proposed by Adhemerval Zanella in:
+	https://sourceware.org/ml/libc-alpha/2017-09/msg00212.html
+	* lib/glob_internal.h (GLOBPAT_NONE, GLOBPAT_SPECIAL)
+	(GLOBPAT_BACKSLASH, GLOBPAT_BRACKET): New constants.
+	* lib/glob_internal.h (__glob_pattern_type):
+	* lib/glob.c (glob):
+	* lib/glob_pattern_p.c (__glob_pattern_p):
+	Use them.
+
 	glob: fix for use in glibc
 	Problem reported by Adhemerval Zanella in:
 	https://sourceware.org/ml/libc-alpha/2017-09/msg00213.html
--- a/lib/glob.c	Tue Sep 05 18:58:50 2017 -0700
+++ b/lib/glob.c	Tue Sep 05 21:14:51 2017 -0700
@@ -903,7 +903,7 @@
      [ which we handle the same, using fnmatch.  Broken unterminated
      pattern bracket expressions ought to be rare enough that it is
      not worth special casing them, fnmatch will do the right thing.  */
-  if (meta & 5)
+  if (meta & (GLOBPAT_SPECIAL | GLOBPAT_BRACKET))
     {
       /* The directory name contains metacharacters, so we
          have to glob for the directory, and then glob for
@@ -1044,7 +1044,7 @@
       size_t old_pathc = pglob->gl_pathc;
       int orig_flags = flags;
 
-      if (meta & 2)
+      if (meta & GLOBPAT_BACKSLASH)
         {
           char *p = strchr (dirname, '\\'), *q;
           /* We need to unescape the dirname string.  It is certainly
@@ -1242,14 +1242,14 @@
                        / sizeof init_names->name[0]);
 
   meta = __glob_pattern_type (pattern, !(flags & GLOB_NOESCAPE));
-  if (meta == 0 && (flags & (GLOB_NOCHECK|GLOB_NOMAGIC)))
+  if (meta == GLOBPAT_NONE && (flags & (GLOB_NOCHECK|GLOB_NOMAGIC)))
     {
       /* We need not do any tests.  The PATTERN contains no meta
          characters and we must not return an error therefore the
          result will always contain exactly one name.  */
       flags |= GLOB_NOCHECK;
     }
-  else if (meta == 0)
+  else if (meta == GLOBPAT_NONE)
     {
       union
       {
--- a/lib/glob_internal.h	Tue Sep 05 18:58:50 2017 -0700
+++ b/lib/glob_internal.h	Tue Sep 05 21:14:51 2017 -0700
@@ -19,35 +19,43 @@
 #ifndef GLOB_INTERNAL_H
 # define GLOB_INTERNAL_H
 
+enum
+{
+  GLOBPAT_NONE      = 0x0,
+  GLOBPAT_SPECIAL   = 0x1,
+  GLOBPAT_BACKSLASH = 0x2,
+  GLOBPAT_BRACKET   = 0x4
+};
+
 static inline int
 __glob_pattern_type (const char *pattern, int quote)
 {
   const char *p;
-  int ret = 0;
+  int ret = GLOBPAT_NONE;
 
   for (p = pattern; *p != '\0'; ++p)
     switch (*p)
       {
       case '?':
       case '*':
-        return 1;
+        return GLOBPAT_SPECIAL;
 
       case '\\':
         if (quote)
           {
             if (p[1] != '\0')
               ++p;
-            ret |= 2;
+            ret |= GLOBPAT_BACKSLASH;
           }
         break;
 
       case '[':
-        ret |= 4;
+        ret |= GLOBPAT_BRACKET;
         break;
 
       case ']':
         if (ret & 4)
-          return 1;
+          return GLOBPAT_SPECIAL;
         break;
       }
 
--- a/lib/glob_pattern_p.c	Tue Sep 05 18:58:50 2017 -0700
+++ b/lib/glob_pattern_p.c	Tue Sep 05 21:14:51 2017 -0700
@@ -28,6 +28,6 @@
 int
 __glob_pattern_p (const char *pattern, int quote)
 {
-  return __glob_pattern_type (pattern, quote) == 1;
+  return __glob_pattern_type (pattern, quote) == GLOBPAT_SPECIAL;
 }
 weak_alias (__glob_pattern_p, glob_pattern_p)