From: Junio C Hamano Date: Tue, 22 Sep 2015 01:17:16 GMT Subject: Re: [PATCH v7 1/3] worktree: add top-level worktree.c Message-ID: In-Reply-To: Eric Sunshine writes: > Making the last entry a NULL means get_worktrees() would have to > return an array of pointers rather than an array of structures, which > is more syntactically noisy, and complex since it's harder to reason > about pointer-to-pointer. In my mind, at least, the simplicity of the > array of structures approach (even with the slight ugliness of the > dummy sentinel) outweighs the complexity of the array-of-pointers > approach. Hmph, I think the bog-standard way in our code is an array of pointers. An array of structures have a few downsides: - You have to copy a lot when you do realloc(3); - You have to move a lot when you insert a new element; - Individual structure cannot be pointed at by a pointer sensibly. Passing &worktree[4] to a function that expects "struct worktree *" is unsafe unless you are sure nobody is mucking with the worktree[] array. For the read-only operation "worktree list", the last one may not matter much because you would build all the elements before doing anything else, but once you want to run this inside a library and maintain the in-core forest of worktrees that are in sync with what your running process does (i.e. create a new or destroy an existing worktree), it may become problematic.