Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry.  Still no -f support though.
diff --git a/lib/args.c b/lib/args.c
index 918119c..f4ceba1 100644
--- a/lib/args.c
+++ b/lib/args.c
@@ -36,7 +36,7 @@
 //       [yz] needs at least one of y or z. TODO
 //   at the beginning:
 //     ^ stop at first nonoption argument
-//     <0 die if less than leftover arguments (default 0)
+//     <0 die if less than # leftover arguments (default 0)
 //     >9 die if > # leftover arguments (default MAX_INT)
 //     ? Allow unknown arguments (pass them through to command).
 //     & first argument has imaginary dash (ala tar/ps)
@@ -241,7 +241,7 @@
 
 		// If this is the start of a new option that wasn't a longopt,
 
-		} else if (strchr(":*#@.", *options)) {
+		} else if (strchr(":*#@.-", *options)) {
 			if (CFG_TOYBOX_DEBUG && new->type)
 				error_exit("multiple types %c:%c%c", new->c, new->type, *options);
 			new->type = *options;
diff --git a/lib/lib.h b/lib/lib.h
index ab10eb7..c219039 100644
--- a/lib/lib.h
+++ b/lib/lib.h
@@ -35,6 +35,7 @@
 
 void llist_free(void *list, void (*freeit)(void *data));
 void *llist_pop(void *list);  // actually void **list, but the compiler's dumb
+void dlist_add_nomalloc(struct double_list **list, struct double_list *new);
 struct double_list *dlist_add(struct double_list **list, char *data);
 
 // args.c
diff --git a/lib/llist.c b/lib/llist.c
index c6e7da3..8588721 100644
--- a/lib/llist.c
+++ b/lib/llist.c
@@ -35,18 +35,24 @@
 	return (void *)next;
 }
 
+void dlist_add_nomalloc(struct double_list **list, struct double_list *new)
+{
+	if (*list) {
+		new->next = *list;
+		new->prev = (*list)->prev;
+		(*list)->prev->next = new;
+		(*list)->prev = new;
+	} else *list = new->next = new->prev = new;
+}
+
+
 // Add an entry to the end of a doubly linked list
 struct double_list *dlist_add(struct double_list **list, char *data)
 {
-	struct double_list *line = xmalloc(sizeof(struct double_list));
+	struct double_list *new = xmalloc(sizeof(struct double_list));
 
-	line->data = data;
-	if (*list) {
-		line->next = *list;
-		line->prev = (*list)->prev;
-		(*list)->prev->next = line;
-		(*list)->prev = line;
-	} else *list = line->next = line->prev = line;
+	new->data = data;
+	dlist_add_nomalloc(list, new);
 
-	return line;
+	return new;
 }