]> Savannah Git Hosting - gnulib.git/commitdiff
glob: Use enum for __glob_pattern_type result
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 6 Sep 2017 04:14:51 +0000 (21:14 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 6 Sep 2017 04:15:55 +0000 (21:15 -0700)
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.

ChangeLog
lib/glob.c
lib/glob_internal.h
lib/glob_pattern_p.c

index 61e3e8cd11339059fb85e98e14dd95b99ba2441f..448bad2c19823b68509bdfb320552846bb908cf3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
index ddab5357670f97aedaa5b256f4c21fc0898eb575..4c6c31b8198c4afa8506dce0384b499a8481919a 100644 (file)
@@ -903,7 +903,7 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int),
      [ 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 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int),
       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 @@ glob_in_dir (const char *pattern, const char *directory, int flags,
                        / 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
       {
index 12c93660b73627c1ee5dc230c6157d4f945d0dcb..d118b3533d41ff79fe0f52e67f9abc40fcbb1b84 100644 (file)
 #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;
       }
 
index a17d3371821b8c9cbdc7198df0f0ddfe4b8442e4..8489106e90510daf49f1536243b08ef8939bf1d7 100644 (file)
@@ -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)