dir.c: Avoid c99 array initialization
The following syntax: char foo[] = { [0] = 1, [7] = 2, [15] = 3 }; is a c99 construct which some compilers do not support even though they support other c99 constructs. This construct can be avoided by folding these 'special' test cases into the sane_ctype array and making use of the related infrastructure. Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
1b0f7978dd
commit
63e8aea74e
10
ctype.c
10
ctype.c
@ -9,18 +9,20 @@
|
|||||||
#undef SS
|
#undef SS
|
||||||
#undef AA
|
#undef AA
|
||||||
#undef DD
|
#undef DD
|
||||||
|
#undef GS
|
||||||
|
|
||||||
#define SS GIT_SPACE
|
#define SS GIT_SPACE
|
||||||
#define AA GIT_ALPHA
|
#define AA GIT_ALPHA
|
||||||
#define DD GIT_DIGIT
|
#define DD GIT_DIGIT
|
||||||
|
#define GS GIT_SPECIAL /* \0, *, ?, [, \\ */
|
||||||
|
|
||||||
unsigned char sane_ctype[256] = {
|
unsigned char sane_ctype[256] = {
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, SS, SS, 0, 0, SS, 0, 0, /* 0-15 */
|
GS, 0, 0, 0, 0, 0, 0, 0, 0, SS, SS, 0, 0, SS, 0, 0, /* 0-15 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 16-15 */
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 16-15 */
|
||||||
SS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 32-15 */
|
SS, 0, 0, 0, 0, 0, 0, 0, 0, 0, GS, 0, 0, 0, 0, 0, /* 32-15 */
|
||||||
DD, DD, DD, DD, DD, DD, DD, DD, DD, DD, 0, 0, 0, 0, 0, 0, /* 48-15 */
|
DD, DD, DD, DD, DD, DD, DD, DD, DD, DD, 0, 0, 0, 0, 0, GS, /* 48-15 */
|
||||||
0, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, /* 64-15 */
|
0, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, /* 64-15 */
|
||||||
AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, 0, 0, 0, 0, 0, /* 80-15 */
|
AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, GS, GS, 0, 0, 0, /* 80-15 */
|
||||||
0, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, /* 96-15 */
|
0, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, /* 96-15 */
|
||||||
AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, 0, 0, 0, 0, 0, /* 112-15 */
|
AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, AA, 0, 0, 0, 0, 0, /* 112-15 */
|
||||||
/* Nothing in the 128.. range */
|
/* Nothing in the 128.. range */
|
||||||
|
14
dir.c
14
dir.c
@ -52,11 +52,6 @@ int common_prefix(const char **pathspec)
|
|||||||
return prefix;
|
return prefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int special_char(unsigned char c1)
|
|
||||||
{
|
|
||||||
return !c1 || c1 == '*' || c1 == '[' || c1 == '?' || c1 == '\\';
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Does 'match' matches the given name?
|
* Does 'match' matches the given name?
|
||||||
* A match is found if
|
* A match is found if
|
||||||
@ -80,7 +75,7 @@ static int match_one(const char *match, const char *name, int namelen)
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
unsigned char c1 = *match;
|
unsigned char c1 = *match;
|
||||||
unsigned char c2 = *name;
|
unsigned char c2 = *name;
|
||||||
if (special_char(c1))
|
if (isspecial(c1))
|
||||||
break;
|
break;
|
||||||
if (c1 != c2)
|
if (c1 != c2)
|
||||||
return 0;
|
return 0;
|
||||||
@ -680,17 +675,12 @@ static int cmp_name(const void *p1, const void *p2)
|
|||||||
*/
|
*/
|
||||||
static int simple_length(const char *match)
|
static int simple_length(const char *match)
|
||||||
{
|
{
|
||||||
const char special[256] = {
|
|
||||||
[0] = 1, ['?'] = 1,
|
|
||||||
['\\'] = 1, ['*'] = 1,
|
|
||||||
['['] = 1
|
|
||||||
};
|
|
||||||
int len = -1;
|
int len = -1;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
unsigned char c = *match++;
|
unsigned char c = *match++;
|
||||||
len++;
|
len++;
|
||||||
if (special[c])
|
if (isspecial(c))
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -329,11 +329,13 @@ extern unsigned char sane_ctype[256];
|
|||||||
#define GIT_SPACE 0x01
|
#define GIT_SPACE 0x01
|
||||||
#define GIT_DIGIT 0x02
|
#define GIT_DIGIT 0x02
|
||||||
#define GIT_ALPHA 0x04
|
#define GIT_ALPHA 0x04
|
||||||
|
#define GIT_SPECIAL 0x08
|
||||||
#define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0)
|
#define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0)
|
||||||
#define isspace(x) sane_istest(x,GIT_SPACE)
|
#define isspace(x) sane_istest(x,GIT_SPACE)
|
||||||
#define isdigit(x) sane_istest(x,GIT_DIGIT)
|
#define isdigit(x) sane_istest(x,GIT_DIGIT)
|
||||||
#define isalpha(x) sane_istest(x,GIT_ALPHA)
|
#define isalpha(x) sane_istest(x,GIT_ALPHA)
|
||||||
#define isalnum(x) sane_istest(x,GIT_ALPHA | GIT_DIGIT)
|
#define isalnum(x) sane_istest(x,GIT_ALPHA | GIT_DIGIT)
|
||||||
|
#define isspecial(x) sane_istest(x,GIT_SPECIAL)
|
||||||
#define tolower(x) sane_case((unsigned char)(x), 0x20)
|
#define tolower(x) sane_case((unsigned char)(x), 0x20)
|
||||||
#define toupper(x) sane_case((unsigned char)(x), 0)
|
#define toupper(x) sane_case((unsigned char)(x), 0)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user