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