From: Junio C Hamano Date: Tue, 29 Jun 2010 05:43:25 GMT Subject: Re: [PATCH] string-list.h: Add STRING_LIST_INIT macro and make use of it. Message-ID: <7v4ogmcs1u.fsf@alter.siamese.dyndns.org> In-Reply-To: Alex Riesen writes: >> But I wonder if this is worth it (not this "more complete", but your >> patch). We convert 16 or so instances of initialization for "no strdup" >> list, but there are about the same number of "strdup" instances still >> spelled out: >> >> $ git grep -e 'struct string_list [^ ]* = {.*' >> $ git grep -e 'struct string_list [^ ]* = {.*1' >> >> Wouldn't it be more sensible to use this instead? >> >> #define STRING_LIST_INIT(pleasedup) { NULL, 0, 0, (pleasedup) } > > This begs for using strdup(string-to-dup) in the macro argument, which > will not compile with ancient compilers which don't allow code in an > initializer. Err, one of us must be confused. I was suggesting to rewrite things like these, found in builtin/remote.c (add and rm): struct string_list track = { NULL, 0, 0, 0 }; struct string_list branches = { NULL, 0, 0, 1 }; like so: #define STRING_LIST_INIT(pleasedup) { NULL, 0, 0, (pleasedup) } struct string_list track = STRING_LIST_INIT(0); struct string_list branches = STRING_LIST_INIT(1); I don't see strdup in macro argument anywhere. The original patch in this thread proposed to do this instead: #define STRING_LIST_INIT { NULL, 0, 0, 0 } struct string_list track = STRING_LIST_INIT; struct string_list branches = { NULL, 0, 0, 1 }; converting about half of initializers to the macro, and leaving the other half spelled out.