Re: [PATCH] dir.c: avoid c99 array initialization
- From
Alex Riesen <raa.lkml@gmail.com>
- Date
- Aug 28, 2008, 20:01 UTC
- Message-ID
- <81b0412b0808281301m29830c20l3e16432ea8aef45d@mail.gmail.com>
- In-Reply-To
- <G-ipWASixyGW7nvO1KquifehvBB7FNKwjPtIB0ukyEJ1Si1CJWM34w@cipher.nrlssc.navy.mil>
2008/8/19 Brandon Casey <casey@nrlssc.navy.mil>:
Show 14 quoted lines
> static int simple_length(const char *match)
> {
> - const char special[256] = {
> - [0] = 1, ['?'] = 1,
> - ['\\'] = 1, ['*'] = 1,
> - ['['] = 1
> - };
> + char special[256] = { 1, };
> int len = -1;
>
> + special['?'] = 1;
> + special['\\'] = 1;
> + special['*'] = 1;
> + special['['] = 1;For just these 5 values it is likely more effective to just use a conditional statement (less stack requested, less likely some stupid compiler tries to optimize it wrongly). And just as readable.
diff --git a/dir.c b/dir.c index 92452eb..1cf5985 100644 --- a/dir.c +++ b/dir.c @@ -680,17 +680,12 @@ static int cmp_name(const void *p1, const void *p2) */ static int simple_length(const char *match) { - const char special[256] = { - [0] = 1, ['?'] = 1, - ['\\'] = 1, ['*'] = 1, - ['['] = 1 - }; int len = -1; for (;;) { unsigned char c = *match++; len++; - if (special[c]) + if (!c || '?' == c || '\\' == c || '*' == c || '[' == c) return len; } }