4 * $Id: data_list.c,v 1.1.1.1 2005/04/29 01:45:21 echo Exp $
6 #include <net-snmp/net-snmp-config.h>
20 #include <net-snmp/library/data_list.h>
22 /***********************************************************************/
24 * New Handler based API
26 /***********************************************************************/
29 netsnmp_free_list_data(netsnmp_data_list *node)
31 Netsnmp_Free_List_Data *beer;
35 beer = node->free_func;
38 SNMP_FREE(node->name);
42 netsnmp_free_all_list_data(netsnmp_data_list *head)
44 netsnmp_data_list *tmpptr;
46 netsnmp_free_list_data(head);
53 NETSNMP_INLINE netsnmp_data_list *
54 netsnmp_create_data_list(const char *name, void *data,
55 Netsnmp_Free_List_Data * beer)
57 netsnmp_data_list *node = SNMP_MALLOC_TYPEDEF(netsnmp_data_list);
60 node->name = strdup(name);
62 node->free_func = beer;
68 netsnmp_add_list_data(netsnmp_data_list **head, netsnmp_data_list *node)
70 netsnmp_data_list *ptr;
77 * xxx-rks: check for duplicate names?
79 for (ptr = *head; ptr->next != NULL; ptr = ptr->next) {
85 if (ptr) /* should always be true */
90 netsnmp_get_list_data(netsnmp_data_list *head, const char *name)
92 for (; head; head = head->next)
93 if (head->name && strcmp(head->name, name) == 0)
100 NETSNMP_INLINE void *
101 netsnmp_get_list_node(netsnmp_data_list *head, const char *name)
103 for (; head; head = head->next)
104 if (head->name && strcmp(head->name, name) == 0)
112 netsnmp_remove_list_node(netsnmp_data_list **realhead, const char *name)
114 netsnmp_data_list *head, *prev;
115 for (head = *realhead, prev = NULL; head;
116 prev = head, head = head->next) {
117 if (head->name && strcmp(head->name, name) == 0) {
119 prev->next = head->next;
121 *realhead = head->next;
122 netsnmp_free_list_data(head);