From: Paul Eggert <eggert@cs.ucla.edu>
To: Adhemerval Zanella <adhemerval.zanella@linaro.org>,
libc-alpha@sourceware.org, Gnulib bugs <bug-gnulib@gnu.org>
Subject: Re: [PATCH 8/9] posix: Use enum for __glob_pattern_type result
Date: Wed, 06 Sep 2017 04:18:00 -0000 [thread overview]
Message-ID: <018ac06d-cb0a-edb9-7de5-560f614fda80@cs.ucla.edu> (raw)
In-Reply-To: <1504643122-14874-9-git-send-email-adhemerval.zanella@linaro.org>
[-- Attachment #1: Type: text/plain, Size: 710 bytes --]
Adhemerval Zanella wrote:
> +enum glob_pattern_type_t
> +{
> + __GLOB_NONE = 0x0,
> + __GLOB_SPECIAL = 0x1,
> + __GLOB_BACKSLASH = 0x2,
> + __GLOB_BRACKET = 0x4
> +};
The identifier glob_pattern_type_t is not used elsewhere, so let's omit it. This
makes it clearer that we're merely defining handy names for int constants, as
opposed to defining a new type.
Also, names like __GLOB_NONE could cause problems when Gnulib is used on non-GNU
platforms, which might use those names for other purposes. As glob_internal.h is
not user-visible, let's use ordinary names. I suggest GLOBPAT_NONE,
GLOBPAT_SPECIAL, etc., as done in the attached patch, which I installed into Gnulib.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-glob-Use-enum-for-__glob_pattern_type-result.patch --]
[-- Type: text/x-patch; name="0001-glob-Use-enum-for-__glob_pattern_type-result.patch", Size: 4657 bytes --]
From 36102f8d365655b5d9693ccff0349acc73c60433 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Tue, 5 Sep 2017 21:14:51 -0700
Subject: [PATCH] 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.
---
ChangeLog | 10 ++++++++++
lib/glob.c | 8 ++++----
lib/glob_internal.h | 18 +++++++++++++-----
lib/glob_pattern_p.c | 2 +-
4 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 61e3e8c..448bad2 100644
--- 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
diff --git a/lib/glob.c b/lib/glob.c
index ddab535..4c6c31b 100644
--- a/lib/glob.c
+++ b/lib/glob.c
@@ -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
{
diff --git a/lib/glob_internal.h b/lib/glob_internal.h
index 12c93660..d118b35 100644
--- a/lib/glob_internal.h
+++ b/lib/glob_internal.h
@@ -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;
}
diff --git a/lib/glob_pattern_p.c b/lib/glob_pattern_p.c
index a17d337..8489106 100644
--- a/lib/glob_pattern_p.c
+++ b/lib/glob_pattern_p.c
@@ -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)
--
2.7.4
next prev parent reply other threads:[~2017-09-06 4:18 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-05 20:25 [PATCH 0/9] posix: glob fixes and refactor Adhemerval Zanella
2017-09-05 20:25 ` [PATCH 2/9] posix: accept inode 0 is a valid inode number (BZ #19971) Adhemerval Zanella
2017-09-05 20:25 ` [PATCH 7/9] posix: Consolidate glob implementation Adhemerval Zanella
2017-09-12 7:35 ` Andreas Schwab
2017-09-12 14:08 ` Adhemerval Zanella
2017-09-12 14:17 ` Andreas Schwab
2017-09-12 14:29 ` Joseph Myers
2017-09-12 14:39 ` Andreas Schwab
2017-09-12 14:50 ` Joseph Myers
2017-09-12 12:56 ` Andreas Schwab
2017-09-12 14:22 ` Adhemerval Zanella
2017-09-12 14:34 ` Andreas Schwab
2017-09-13 12:26 ` Adhemerval Zanella
2017-09-05 20:25 ` [PATCH 1/9] posix: Sync glob with gnulib [BZ #1062] Adhemerval Zanella
2017-09-06 2:01 ` Paul Eggert
2017-09-06 12:52 ` Adhemerval Zanella
2017-09-12 14:20 ` Andreas Schwab
2017-09-12 17:06 ` Adhemerval Zanella
2017-09-05 20:25 ` [PATCH 4/9] Sync scratch_buffer with gnulib Adhemerval Zanella
2017-09-18 6:09 ` Florian Weimer
2017-09-18 11:43 ` Adhemerval Zanella
2017-09-18 11:57 ` Florian Weimer
2017-09-18 12:25 ` Adhemerval Zanella
2017-09-05 20:25 ` [PATCH 6/9] posix: fix glob bugs with long login names Adhemerval Zanella
2017-09-05 20:25 ` [PATCH 3/9] posix: Allow glob to match dangling symlinks [BZ #866] Adhemerval Zanella
2017-09-06 1:27 ` Paul Eggert
2017-09-06 12:57 ` Adhemerval Zanella
2017-09-09 9:50 ` Andreas Schwab
2017-09-09 11:56 ` Adhemerval Zanella
2017-09-09 17:02 ` Paul Eggert
2017-09-09 17:11 ` Zack Weinberg
2017-09-09 17:26 ` Andreas Schwab
2017-09-09 17:33 ` Zack Weinberg
2017-09-10 8:19 ` Adhemerval Zanella
2017-09-10 17:13 ` Paul Eggert
2017-09-11 14:34 ` Joseph Myers
2017-09-11 14:38 ` Zack Weinberg
2017-09-11 16:53 ` Paul Eggert
2017-09-11 17:25 ` Zack Weinberg
2017-09-11 17:38 ` Paul Eggert
2017-09-11 17:56 ` Zack Weinberg
2017-09-11 18:03 ` Paul Eggert
2017-09-11 20:09 ` Adhemerval Zanella
2017-09-13 9:14 ` Paul Eggert
2017-09-13 12:22 ` Adhemerval Zanella
2017-09-14 10:05 ` Szabolcs Nagy
2017-09-14 13:43 ` Adhemerval Zanella
2017-09-15 20:18 ` Florian Weimer
2017-09-15 20:27 ` Adhemerval Zanella
2017-09-17 7:16 ` Paul Eggert
2017-09-17 7:48 ` Florian Weimer
2017-09-17 14:18 ` Adhemerval Zanella
2017-09-05 20:25 ` [PATCH 8/9] posix: Use enum for __glob_pattern_type result Adhemerval Zanella
2017-09-06 1:30 ` Paul Eggert
2017-09-06 4:18 ` Paul Eggert [this message]
2017-09-06 13:04 ` Adhemerval Zanella
2017-09-06 16:18 ` Paul Eggert
2017-09-06 16:54 ` Adhemerval Zanella
2017-09-05 20:25 ` [PATCH 5/9] posix: Fix getpwnam_r usage (BZ #1062) Adhemerval Zanella
2017-09-05 20:25 ` [PATCH 9/9] posix: Fix glob with GLOB_NOCHECK returning modified patterns (BZ#10246) Adhemerval Zanella
2017-09-07 22:14 ` Paul Eggert
2017-09-08 9:16 ` Adhemerval Zanella
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=018ac06d-cb0a-edb9-7de5-560f614fda80@cs.ucla.edu \
--to=eggert@cs.ucla.edu \
--cc=adhemerval.zanella@linaro.org \
--cc=bug-gnulib@gnu.org \
--cc=libc-alpha@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).