Jeff King <peff@xxxxxxxx> writes: > If we like the alloc_grow approach, there are a lot of places where we > can drop a 3-5 line conditional into a single line. I find it much more > readable, but others may disagree. I like the readability, but > cache.h | 6 ++++++ > dir.c | 23 +++++++++++------------ > 2 files changed, 17 insertions(+), 12 deletions(-) > > diff --git a/cache.h b/cache.h > index 5e7381e..f771519 100644 > --- a/cache.h > +++ b/cache.h > @@ -224,6 +224,12 @@ extern void verify_filename(const char *prefix, const char *name); > extern void verify_non_filename(const char *prefix, const char *name); > > #define alloc_nr(x) (((x)+16)*3/2) > +#define alloc_grow(x, nr, alloc) do { \ > + if(nr >= alloc) { \ > + alloc = alloc_nr(alloc); \ > + x = xrealloc((x), alloc * sizeof(*(x))); \ > + } \ > +} while(0) worry a bit about macro safety. I think the presence of an assignment to alloc and x would make sure we would catch an error to pass non lvalue as 'alloc' and 'x', so it may be Ok as is. A comment before the macro, and a space between 'if' and opening parenthesis, would be good things to have. - 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