From: Alex Riesen Date: Thu, 28 Aug 2008 20:01:53 GMT Subject: Re: [PATCH] dir.c: avoid c99 array initialization Message-ID: <81b0412b0808281301m29830c20l3e16432ea8aef45d@mail.gmail.com> In-Reply-To: 2008/8/19 Brandon Casey : > 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; } }