Git's ispace does not include 11 and 12. Git's isprint includes control space characters (10-13). According to glibc-2.14.1 on C locale on Linux, this is wrong. This patch fixes it. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- I wrote a small C program to compare the result of all is* functions that Git replaces against the libc version. These are the only ones that differ. Which matches what Jan Schönherr commented. ctype.c | 6 +++--- git-compat-util.h | 11 ++++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/ctype.c b/ctype.c index 0bfebb4..71311a3 100644 --- a/ctype.c +++ b/ctype.c @@ -14,11 +14,11 @@ enum { P = GIT_PATHSPEC_MAGIC, /* other non-alnum, except for ] and } */ X = GIT_CNTRL, U = GIT_PUNCT, - Z = GIT_CNTRL | GIT_SPACE + Z = GIT_CNTRL_SPACE }; -const unsigned char sane_ctype[256] = { - X, X, X, X, X, X, X, X, X, Z, Z, X, X, Z, X, X, /* 0.. 15 */ +const unsigned int sane_ctype[256] = { + X, X, X, X, X, X, X, X, X, Z, Z, Z, Z, Z, X, X, /* 0.. 15 */ X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, /* 16.. 31 */ S, P, P, P, R, P, P, P, R, R, G, R, P, P, R, P, /* 32.. 47 */ D, D, D, D, D, D, D, D, D, D, P, P, P, P, P, G, /* 48.. 63 */ diff --git a/git-compat-util.h b/git-compat-util.h index 02f48f6..4ed3f94 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -474,8 +474,8 @@ extern const char tolower_trans_tbl[256]; #undef ispunct #undef isxdigit #undef isprint -extern const unsigned char sane_ctype[256]; -#define GIT_SPACE 0x01 +extern const unsigned int sane_ctype[256]; +#define GIT_CNTRL_SPACE 0x01 #define GIT_DIGIT 0x02 #define GIT_ALPHA 0x04 #define GIT_GLOB_SPECIAL 0x08 @@ -483,9 +483,10 @@ extern const unsigned char sane_ctype[256]; #define GIT_PATHSPEC_MAGIC 0x20 #define GIT_CNTRL 0x40 #define GIT_PUNCT 0x80 -#define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0) +#define GIT_SPACE 0x100 +#define sane_istest(x,mask) ((sane_ctype[(unsigned int)(x)] & (mask)) != 0) #define isascii(x) (((x) & ~0x7f) == 0) -#define isspace(x) sane_istest(x,GIT_SPACE) +#define isspace(x) sane_istest(x,GIT_SPACE | GIT_CNTRL_SPACE) #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) @@ -493,7 +494,7 @@ extern const unsigned char sane_ctype[256]; #define isupper(x) sane_iscase(x, 0) #define is_glob_special(x) sane_istest(x,GIT_GLOB_SPECIAL) #define is_regex_special(x) sane_istest(x,GIT_GLOB_SPECIAL | GIT_REGEX_SPECIAL) -#define iscntrl(x) (sane_istest(x,GIT_CNTRL)) +#define iscntrl(x) (sane_istest(x,GIT_CNTRL | GIT_CNTRL_SPACE)) #define ispunct(x) sane_istest(x, GIT_PUNCT | GIT_REGEX_SPECIAL | \ GIT_GLOB_SPECIAL | GIT_PATHSPEC_MAGIC) #define isxdigit(x) (hexval_table[x] != -1) -- 1.8.0.rc2.23.g1fb49df -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html