lib: linklist: add listnode_add_before()

This utility function, to join the zoo that the Quagga linked-list
implementation has accumulated, does an insert-before while returning
the newly allocated node.

It is similar to:
- listnode_add_after(), but
  - complementary direction
  - returns allocated node
- list_add_node_prev(), but
  - supports before == NULL
  - returns allocated node

In general, the entire linked-list implementation is in bad shape, and
while it needs a cleanup / rewrite / replacement, this would both cause
significant conflicts and block other cleanups...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
diff --git a/lib/linklist.h b/lib/linklist.h
index 6209c8b..96aaf43 100644
--- a/lib/linklist.h
+++ b/lib/linklist.h
@@ -68,6 +68,7 @@
 extern void listnode_add (struct list *, void *);
 extern void listnode_add_sort (struct list *, void *);
 extern void listnode_add_after (struct list *, struct listnode *, void *);
+extern struct listnode *listnode_add_before (struct list *, struct listnode *, void *);
 extern void listnode_move_to_tail (struct list *, struct listnode *);
 extern void listnode_delete (struct list *, void *);
 extern struct listnode *listnode_lookup (struct list *, void *);