Re: [PATCH] wildmatch: correct isprint and isspace
- From
- Jan H. Schönherr <schnhrr@cs.tu-berlin.de>
- Date
- Nov 15, 2012, 17:13 UTC
- Message-ID
- <50A522B5.7080206@cs.tu-berlin.de>
- In-Reply-To
- <1352981983-22005-1-git-send-email-pclouds@gmail.com>
Am 15.11.2012 13:19, schrieb Nguyễn Thái Ngọc Duy:
Show 12 quoted lines
> On Thu, Nov 15, 2012 at 2:30 AM, René Scharfe <rene.scharfe@lsrfire.ath.cx> wrote: > > Nevertheless, it's unfortunate that we have an isspace() that *almost* does > > what the widely known thing of the same name does. I'd shy away from > > changing git's version directly, because it's used more than a hundred times > > in the code, and estimating the impact of adding \v and \f to it. > > Perhaps renaming it to isgitspace() is a good first step, followed by > > adding a "standard" version of isspace() for wildmatch? > > There are just too many call sites of isspace() and there is a risk > of new call sites coming in independently. So I think keeping isspace() > as-is and using a different name for the standard version is probably > a better choice.
After having a closer look, where wildmatch is actually used -- matching filenames -- and I've not yet seen \v or \f in a filename, it's possibly unnecessary to do anything about isspace() right now.
(It's probably more an issue that filenames can be localized, and we only support unlocalized character classes.)
Show 14 quoted lines
> diff --git a/git-compat-util.h b/git-compat-util.h > index 02f48f6..d4c3fda 100644 > --- a/git-compat-util.h > +++ b/git-compat-util.h > @@ -486,6 +486,7 @@ extern const unsigned char sane_ctype[256]; > #define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0) > #define isascii(x) (((x) & ~0x7f) == 0) > #define isspace(x) sane_istest(x,GIT_SPACE) > +#define isspace_posix(x) (((x) >= 9 && (x) <= 13) || (x) == 32) > #define isdigit(x) sane_istest(x,GIT_DIGIT) > #define isalpha(x) sane_istest(x,GIT_ALPHA) > #define isalnum(x) sane_istest(x,GIT_ALPHA | GIT_DIGIT) > @@ -499,7 +500,8 @@ extern const unsigned char sane_ctype[256]; > #define isxdigit(x) (hexval_table[x] != -1)
This was from a previous patch, but maybe: "hexval_table[(unsigned char)x]"
Show 5 quoted lines
> #define isprint(x) (sane_istest(x, GIT_ALPHA | GIT_DIGIT | GIT_SPACE | \ > GIT_PUNCT | GIT_REGEX_SPECIAL | GIT_GLOB_SPECIAL | \ > - GIT_PATHSPEC_MAGIC)) > + GIT_PATHSPEC_MAGIC) && \ > + (x) >= 32)
May I suggest the current is_print() implementation in master:
#define isprint(x) ((x) >= 0x20 && (x) <= 0x7e)
To summarize my opinion:
I no longer see a reason to correct isspace() (unless somebody with an actual use case complains), and a more POSIXly isprint() is already in master.
=> Nothing to do. :)
Regards Jan