posix: Use enum for __glob_pattern_type result

This patch replaces the internal integer constant from
__glob_pattern_type return with a proper enum.

Checked on x86_64-linux-gnu and on a build using build-many-glibcs.py
for all major architectures.

	* posix/glob_internal.h (glob_pattern_type_t): New enumeration.
	(__glob_pattern_type): Use __glob_pat_types.
	* posix/glob_pattern_p.c (__glob_pattern_p): Likewise.
	* posix/glob.c (glob): Likewise.
	(glob_in_dir): Likewise.
This commit is contained in:
Adhemerval Zanella 2017-09-05 11:02:24 -03:00
parent 116f1c64d8
commit 07b4f49db2
4 changed files with 25 additions and 10 deletions

View File

@ -1,5 +1,12 @@
2017-09-08 Adhemerval Zanella <adhemerval.zanella@linaro.org> 2017-09-08 Adhemerval Zanella <adhemerval.zanella@linaro.org>
* posix/glob_internal.h (GLOBPAT_NONE, GLOBPAT_SPECIAL)
(GLOBPAT_BACKSLASH, GLOBPAT_BRACKET): New constants.
* posix/glob_internal.h (__glob_pattern_type):
* posix/glob.c (glob):
* posix/glob_pattern_p.c (__glob_pattern_p):
Use them.
* sysdeps/unix/sysv/linux/arm/glob64.c: Remove file. * sysdeps/unix/sysv/linux/arm/glob64.c: Remove file.
* sysdeps/unix/sysv/linux/i386/glob64.c: Likewise. * sysdeps/unix/sysv/linux/i386/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/m68k/glob64.c: Likewise. * sysdeps/unix/sysv/linux/m68k/glob64.c: Likewise.

View File

@ -902,7 +902,7 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int),
[ which we handle the same, using fnmatch. Broken unterminated [ which we handle the same, using fnmatch. Broken unterminated
pattern bracket expressions ought to be rare enough that it is pattern bracket expressions ought to be rare enough that it is
not worth special casing them, fnmatch will do the right thing. */ 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 /* The directory name contains metacharacters, so we
have to glob for the directory, and then glob for have to glob for the directory, and then glob for
@ -1043,7 +1043,7 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int),
size_t old_pathc = pglob->gl_pathc; size_t old_pathc = pglob->gl_pathc;
int orig_flags = flags; int orig_flags = flags;
if (meta & 2) if (meta & GLOBPAT_BACKSLASH)
{ {
char *p = strchr (dirname, '\\'), *q; char *p = strchr (dirname, '\\'), *q;
/* We need to unescape the dirname string. It is certainly /* We need to unescape the dirname string. It is certainly
@ -1241,14 +1241,14 @@ glob_in_dir (const char *pattern, const char *directory, int flags,
/ sizeof init_names->name[0]); / sizeof init_names->name[0]);
meta = __glob_pattern_type (pattern, !(flags & GLOB_NOESCAPE)); 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 /* We need not do any tests. The PATTERN contains no meta
characters and we must not return an error therefore the characters and we must not return an error therefore the
result will always contain exactly one name. */ result will always contain exactly one name. */
flags |= GLOB_NOCHECK; flags |= GLOB_NOCHECK;
} }
else if (meta == 0) else if (meta == GLOBPAT_NONE)
{ {
union union
{ {

View File

@ -19,35 +19,43 @@
#ifndef GLOB_INTERNAL_H #ifndef GLOB_INTERNAL_H
# define GLOB_INTERNAL_H # define GLOB_INTERNAL_H
enum
{
GLOBPAT_NONE = 0x0,
GLOBPAT_SPECIAL = 0x1,
GLOBPAT_BACKSLASH = 0x2,
GLOBPAT_BRACKET = 0x4
};
static inline int static inline int
__glob_pattern_type (const char *pattern, int quote) __glob_pattern_type (const char *pattern, int quote)
{ {
const char *p; const char *p;
int ret = 0; int ret = GLOBPAT_NONE;
for (p = pattern; *p != '\0'; ++p) for (p = pattern; *p != '\0'; ++p)
switch (*p) switch (*p)
{ {
case '?': case '?':
case '*': case '*':
return 1; return GLOBPAT_SPECIAL;
case '\\': case '\\':
if (quote) if (quote)
{ {
if (p[1] != '\0') if (p[1] != '\0')
++p; ++p;
ret |= 2; ret |= GLOBPAT_BACKSLASH;
} }
break; break;
case '[': case '[':
ret |= 4; ret |= GLOBPAT_BRACKET;
break; break;
case ']': case ']':
if (ret & 4) if (ret & 4)
return 1; return GLOBPAT_SPECIAL;
break; break;
} }

View File

@ -28,6 +28,6 @@
int int
__glob_pattern_p (const char *pattern, int quote) __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) weak_alias (__glob_pattern_p, glob_pattern_p)