mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
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:
parent
116f1c64d8
commit
07b4f49db2
@ -1,5 +1,12 @@
|
||||
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/i386/glob64.c: Likewise.
|
||||
* sysdeps/unix/sysv/linux/m68k/glob64.c: Likewise.
|
||||
|
@ -902,7 +902,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
|
||||
@ -1043,7 +1043,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
|
||||
@ -1241,14 +1241,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
|
||||
{
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user