summaryrefslogtreecommitdiff
path: root/tests/test29.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test29.c')
-rw-r--r--tests/test29.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/test29.c b/tests/test29.c
new file mode 100644
index 000000000..e579a0e23
--- /dev/null
+++ b/tests/test29.c
@@ -0,0 +1,57 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "utlist.h"
+
+#define BUFLEN 20
+
+typedef struct el {
+ char bname[BUFLEN];
+ struct el *next, *prev;
+} el;
+
+static int namecmp(void *_a, void *_b)
+{
+ el *a = (el*)_a;
+ el *b = (el*)_b;
+ return strcmp(a->bname,b->bname);
+}
+
+int main()
+{
+ el *name, *tmp;
+ el *head = NULL;
+
+ char linebuf[BUFLEN];
+ FILE *file;
+
+ file = fopen( "test11.dat", "r" );
+ if (file == NULL) {
+ perror("can't open: ");
+ exit(-1);
+ }
+
+ while (fgets(linebuf,BUFLEN,file) != NULL) {
+ name = (el*)malloc(sizeof(el));
+ if (name == NULL) {
+ exit(-1);
+ }
+ strcpy(name->bname, linebuf);
+ DL_APPEND(head, name);
+ }
+ DL_SORT(head, namecmp);
+ DL_FOREACH(head,tmp) {
+ printf("%s", tmp->bname);
+ }
+
+ /* now delete the list head */
+ printf("deleting head %shead->prev: %s", head->bname, head->prev->bname);
+ DL_DELETE(head,head);
+ DL_FOREACH(head,tmp) {
+ printf("%s", tmp->bname);
+ }
+
+ fclose(file);
+
+ return 0;
+}