Get rid of crazy empty tag_list element at the start
Lubomir I. Ivanov
neolit123 at gmail.com
Mon Mar 10 10:02:47 PDT 2014
On 10 March 2014 19:00, Lubomir I. Ivanov <neolit123 at gmail.com> wrote:
> On 10 March 2014 18:42, Linus Torvalds <torvalds at linux-foundation.org> wrote:
>> So this is totally unrelated to the git repository format, except for
>> the fact that I noticed it while writing the git saving code.
>> The subsurface divetag list handling is being stupid, and has a
>> initial dummy entry at the head of the list for no good reason.
>> I say "no good reason", because there *is* a reason for it: it allows
>> code to avoid the special case of empty list and adding entries to
>> before the first entry etc etc. But that reason is a really *bad*
>> reason, because it's valid only because people don't understand basic
>> list manipulation and pointers to pointers.
>> So get rid of the dummy element, and do things right instead - by
>> passing a *pointer* to the list, instead of the list. And then when
>> traversing the list and looking for a place to insert things, don't go
>> to the next entry - just update the "pointer to pointer" to point to
>> the address of the next entry. Each entry in a C linked list is no
>> different than the list itself, so you can use the pointer to the
>> pointer to the next entry as a pointer to the list.
>> This is a pet peeve of mine. The real beauty of pointers can never be
>> understood unless you understand the indirection they allow. People
>> who grew up with Pascal and were corrupted by that mindset are
>> mentally stunted. Niklaus Wirth has a lot to answer for!
>> But never fear. You too can overcome that mental limitation, it just
>> needs some brain exercise. Reading this patch may help. In particular,
>> contemplate the new "taglist_add_divetag()".
>> Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
>> Ok, I'll admit that I didn't test this heavily, but I couldn't take
>> that dummy entry any more.
> looks like a nice change,
> hmm, isn't taglist_init_global() still supposed to be called in main()
> so that the default tags are added?
> another small issue would be in this warning:
> load-git.c:169: warning: passing argument 1 of 'taglist_add_tag' from incompatib
> le pointer type
> dive.h:318: note: expected 'struct tag_entry **' but argument is of type 'struct
> tag_entry *'
> on a quick look it should be:
> static void parse_dive_tags(char *line, struct membuffer *str, void *_dive)
> taglist_add_tag(dive->tag_list, &tag);
More information about the subsurface