Get rid of crazy empty tag_list element at the start

Lubomir I. Ivanov neolit123 at gmail.com
Mon Mar 10 10:00:05 PDT 2014


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);

i can send a patch on top of this one if you would like?

lubomir
--


More information about the subsurface mailing list