/** frees all data and nodes in a list. * @param head the top node of the list to be freed. */ NETSNMP_INLINE void netsnmp_free_all_list_data(netsnmp_data_list *head) { netsnmp_data_list *tmpptr; for (; head;) { netsnmp_free_list_data(head); tmpptr = head; head = head->next; SNMP_FREE(tmpptr); } }
/** Removes a named node from a data_list (and frees it) * @param realhead a pointer to the head node of a data_list * @param name the name to find and remove * @return 0 on successful find-and-delete, 1 otherwise. */ int netsnmp_remove_list_node(netsnmp_data_list **realhead, const char *name) { netsnmp_data_list *head, *prev; for (head = *realhead, prev = NULL; head; prev = head, head = head->next) { if (head->name && strcmp(head->name, name) == 0) { if (prev) prev->next = head->next; else *realhead = head->next; netsnmp_free_list_data(head); free(head); return 0; } } return 1; }