mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-17 13:00:43 +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>
|
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.
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user