Contrary to what I convinced op@ to be the case, duplicate tags may exist
in legitimate tags files. So we should ignore duplicates rather than
erroring on them. This fixes parsing the /var/db/libc.tags file.

$ grep -wc ^memcpy /var/db/libc.tags
2

Index: tags.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/tags.c,v
retrieving revision 1.23
diff -u -p -r1.23 tags.c
--- tags.c      22 Mar 2023 22:09:37 -0000      1.23
+++ tags.c      28 Mar 2023 19:55:17 -0000
@@ -388,8 +388,10 @@ addctag(char *s)
        if (*l == '\0')
                goto cleanup;
        t->pat = strip(l, strlen(l));
-       if (RB_INSERT(tagtree, &tags, t) != NULL)
-               goto cleanup;
+       if (RB_INSERT(tagtree, &tags, t) != NULL) {
+               free(t);
+               free(s);
+       }
        return (TRUE);
 cleanup:
        free(t);

Reply via email to