3 Ben Kibbey <bjk@luxsci.net>
5 This file is part of pwmd.
7 Pwmd is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 2 of the License, or
10 (at your option) any later version.
12 Pwmd is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with Pwmd. If not, see <http://www.gnu.org/licenses/>.
25 #include "util-slist.h"
28 unsigned slist_length(struct slist_s
*list
)
33 for (cur
= list
; cur
; cur
= cur
->next
)
39 void *slist_nth_data(struct slist_s
*list
, unsigned n
)
44 for (i
= 0, cur
= list
; cur
; cur
= cur
->next
, i
++) {
52 struct slist_s
*slist_append(struct slist_s
*list
, void *data
)
57 cur
= xcalloc(1, sizeof(struct slist_s
));
62 for (cur
= list
; cur
; cur
= cur
->next
) {
67 cur
->next
= xcalloc(1, sizeof(struct slist_s
));
68 cur
->next
->data
= data
;
72 static struct slist_s
*free_once(struct slist_s
*cur
)
74 struct slist_s
*next
= cur
? cur
->next
: NULL
;
80 void slist_free(struct slist_s
*list
)
83 list
= free_once(list
);
86 struct slist_s
*slist_remove(struct slist_s
*list
, void *data
)
88 struct slist_s
*prev
, *cur
;
90 for (cur
= prev
= list
; cur
; prev
= cur
, cur
= cur
->next
) {
91 if (cur
->data
== data
) {
92 struct slist_s
*next
= free_once(cur
);