1 /***
2   This file is part of avahi.
3 
4   avahi is free software; you can redistribute it and/or modify it
5   under the terms of the GNU Lesser General Public License as
6   published by the Free Software Foundation; either version 2.1 of the
7   License, or (at your option) any later version.
8 
9   avahi is distributed in the hope that it will be useful, but WITHOUT
10   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11   or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
12   Public License for more details.
13 
14   You should have received a copy of the GNU Lesser General Public
15   License along with avahi; if not, write to the Free Software
16   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
17   USA.
18 ***/
19 
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23 
24 #include <stdlib.h>
25 
26 #include "rlist.h"
27 #include "avahi-malloc.h"
28 
avahi_rlist_prepend(AvahiRList * r,void * data)29 AvahiRList* avahi_rlist_prepend(AvahiRList *r, void *data) {
30     AvahiRList *n;
31 
32     if (!(n = avahi_new(AvahiRList, 1)))
33         return NULL;
34 
35     n->data = data;
36 
37     AVAHI_LLIST_PREPEND(AvahiRList, rlist, r, n);
38     return r;
39 }
40 
avahi_rlist_remove(AvahiRList * r,void * data)41 AvahiRList* avahi_rlist_remove(AvahiRList *r, void *data) {
42     AvahiRList *n;
43 
44     for (n = r; n; n = n->rlist_next)
45 
46         if (n->data == data) {
47             AVAHI_LLIST_REMOVE(AvahiRList, rlist, r, n);
48             avahi_free(n);
49             break;
50         }
51 
52     return r;
53 }
54 
avahi_rlist_remove_by_link(AvahiRList * r,AvahiRList * n)55 AvahiRList* avahi_rlist_remove_by_link(AvahiRList *r, AvahiRList *n) {
56     assert(n);
57 
58     AVAHI_LLIST_REMOVE(AvahiRList, rlist, r, n);
59     avahi_free(n);
60 
61     return r;
62 }
63