Re: [PATCH] wildmatch: correct isprint and isspace
From: Jan H. Schönherr <hidden>
Date: 2016-06-15 22:55:18
Am 15.11.2012 13:19, schrieb Nguyễn Thái Ngọc Duy:
On Thu, Nov 15, 2012 at 2:30 AM, René Scharfe [off-list ref] 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.)
quoted hunk ↗ jump to hunk
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]"
#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