Hello Ondrej, * Ondrej Bilka wrote on Fri, May 01, 2009 at 09:36:39PM CEST: > +#define NULTEST(...) if (__builtin_expect(!(__VA_ARGS__),0)) return NULL; > +#define NULTEST2(...) if (__builtin_expect(!(__VA_ARGS__),0)) return -1; [...] > +static fnmatch_state * > +initfnmatchstate () > +{ > + fnmatch_state *st; > + NULTEST (st = (fnmatch_state *) malloc (sizeof (fnmatch_state))); > + NULTEST (st->states = malloc (sizeof (struct states)));
That NULTEST thing is cute but makes me cringe. If the second malloc runs out of memory, then you return, but leak memory from the first malloc. So in a tight memory situation, your code starts contributing to the problem. Also, __VA_ARGS__ requires a C99 compiler. Cheers, Ralf