1 /**********************************************************
2 * work with various lists.
3 **********************************************************/
4 /*
5 * $Id: slists.c,v 1.3 2005/05/16 11:17:30 mitry Exp $
6 *
7 * $Log: slists.c,v $
8 * Revision 1.3 2005/05/16 11:17:30 mitry
9 * Updated function prototypes. Changed code a bit.
10 *
11 */
12
13 #include "headers.h"
14
slist_add(slist_t ** l,const char * s)15 slist_t *slist_add(slist_t **l, const char *s)
16 {
17 slist_t **t;
18
19 for( t = l; *t; t = &((*t)->next ));
20
21 *t = (slist_t *) xmalloc( sizeof( slist_t ));
22 (*t)->next = NULL;
23 (*t)->str = xstrdup( s );
24 return *t;
25 }
26
27
slist_addl(slist_t ** l,const char * s)28 slist_t *slist_addl(slist_t **l, const char *s)
29 {
30 slist_t **t;
31
32 for( t = l; *t; t = &((*t)->next ));
33
34 *t = (slist_t *) xmalloc( sizeof( slist_t ));
35 (*t)->next = NULL;
36 (*t)->str = (char *) s;
37 return *t;
38 }
39
40
slist_dell(slist_t ** l)41 char *slist_dell(slist_t **l)
42 {
43 char *p = NULL;
44 slist_t *t, *cc = NULL;
45
46 for( t = *l; t && t->next; cc = t, p = t->next->str, t = t->next );
47
48 if ( cc )
49 xfree( cc->next );
50 else {
51 xfree( t );
52 *l = NULL;
53 }
54 return p;
55 }
56
57
slist_kill(slist_t ** l)58 void slist_kill(slist_t **l)
59 {
60 slist_t *t;
61
62 while( *l ) {
63 t = (*l)->next;
64 xfree( (*l)->str );
65 xfree( *l );
66 *l = t;
67 }
68 }
69
70
slist_killn(slist_t ** l)71 void slist_killn(slist_t **l)
72 {
73 slist_t *t;
74
75 while( *l ) {
76 t = (*l)->next;
77 xfree( *l );
78 *l = t;
79 }
80 }
81
82
aslist_add(aslist_t ** l,const char * s,const char * a)83 aslist_t *aslist_add(aslist_t **l, const char *s, const char *a)
84 {
85 aslist_t **t;
86
87 for( t = l; *t; t = &((*t)->next) );
88
89 *t = (aslist_t *) xmalloc( sizeof( aslist_t ));
90 (*t)->next = NULL;
91 (*t)->str = xstrdup( s );
92 (*t)->arg = xstrdup( a );
93 return *t;
94 }
95
96
aslist_find(aslist_t * l,const char * s)97 aslist_t *aslist_find(aslist_t *l, const char *s)
98 {
99 for(; l; l = l->next )
100 if ( !strcmp( l->str, s ))
101 return l;
102 return NULL;
103 }
104
105
aslist_kill(aslist_t ** l)106 void aslist_kill(aslist_t **l)
107 {
108 aslist_t *t;
109
110 while( *l ) {
111 t = (*l)->next;
112 xfree( (*l)->str );
113 xfree( (*l)->arg );
114 xfree( *l );
115 *l = t;
116 }
117 }
118
119
falist_add(falist_t ** l,const ftnaddr_t * a)120 void falist_add(falist_t **l, const ftnaddr_t *a)
121 {
122 falist_t **t;
123
124 for( t = l; *t; t = &((*t)->next) );
125
126 *t = (falist_t *) xmalloc( sizeof( falist_t ));
127 (*t)->next = NULL;
128 addr_cpy( &(*t)->addr, a );
129 }
130
131
falist_find(falist_t * l,const ftnaddr_t * a)132 falist_t *falist_find(falist_t *l, const ftnaddr_t *a)
133 {
134 for(; l; l = l->next )
135 if ( addr_cmp( &l->addr, a ))
136 return l;
137 return NULL;
138 }
139
140
falist_kill(falist_t ** l)141 void falist_kill(falist_t **l)
142 {
143 falist_t *t;
144
145 while( *l ) {
146 t = (*l)->next;
147 xfree( (*l)->addr.d );
148 xfree( *l );
149 *l = t;
150 }
151 }
152
153
faslist_add(faslist_t ** l,const char * s,const ftnaddr_t * a)154 void faslist_add(faslist_t **l, const char *s, const ftnaddr_t *a)
155 {
156 faslist_t **t;
157
158 for( t = l; *t; t = &((*t)->next) );
159
160 *t = (faslist_t *) xmalloc( sizeof( faslist_t ));
161 (*t)->next = NULL;
162 (*t)->str = xstrdup( s );
163 addr_cpy( &(*t)->addr, a );
164 }
165
166
faslist_kill(faslist_t ** l)167 void faslist_kill(faslist_t **l)
168 {
169 faslist_t *t;
170
171 while( *l ) {
172 t = (*l)->next;
173 xfree( (*l)->addr.d );
174 xfree( (*l)->str );
175 xfree( *l );
176 *l = t;
177 }
178 }
179