]> git.neil.brown.name Git - metad.git/blob - dlink.c
Assorted reformating
[metad.git] / dlink.c
1
2 /* doubly linked lists */
3
4 #include        <unistd.h>
5 #include        <stdlib.h>
6 #include        <string.h>
7 #include        "dlink.h"
8
9
10 void *dl_head()
11 {
12         void *h;
13         h = dl_alloc(0);
14         dl_next(h) = h;
15         dl_prev(h) = h;
16         return h;
17 }
18
19 void dl_free(void *v)
20 {
21         struct __dl_head *vv  = v;
22         free(vv-1);
23 }
24
25
26 void dl_insert(void *head, void *val)
27 {
28     dl_next(val) = dl_next(head);
29     dl_prev(val) = head;
30     dl_next(dl_prev(val)) = val;
31     dl_prev(dl_next(val)) = val;
32 }
33
34 void dl_add(void *head, void *val)
35 {
36     dl_prev(val) = dl_prev(head);
37     dl_next(val) = head;
38     dl_next(dl_prev(val)) = val;
39     dl_prev(dl_next(val)) = val;
40 }
41
42 void dl_del(void *val)
43 {
44         if (dl_prev(val) == 0 || dl_next(val) == 0)
45                 return;
46         dl_prev(dl_next(val)) = dl_prev(val);
47         dl_next(dl_prev(val)) = dl_next(val);
48         dl_prev(val) = dl_next(val) = 0;
49 }
50
51 char *dl_strndup(char *s, int l)
52 {
53         char *n;
54         if (s == NULL)
55                 return NULL;
56         n = dl_newv(char, l+1);
57         if (n == NULL)
58                 return NULL;
59         else
60         {
61                 strncpy(n, s, l);
62                 n[l] = 0;
63                 return n;
64         }
65 }
66
67 char *dl_strdup(char *s)
68 {
69         return dl_strndup(s, (int)strlen(s));
70 }