ssl_remove_defn.c
void ssl_remove(SSLIST *list, const char *str)
{
NODE *node_to_free = NULL;
NODE *before;
/* Do nothing if list is empty or str is `less than' than list->head->str. */
if (list->head == NULL || strcmp(str, list->head->str) < 0)
return;
/* Should removal be at head? */
if (strcmp(str, list->head->str) == 0) {
node_to_free = list->head;
list->head = list->head->next;
}
else { /* Have to search list. */
before = list->head;
while (before->next != NULL && strcmp(str, before->next->str) > 0)
before = before->next;
if (before->next != NULL
&& strcmp(str, before->next->str) == 0) { /* If a match was found. */
node_to_free = before->next;
before->next = before->next->next;
}
}
if (node_to_free != NULL) {
free((void*) node_to_free->str);
free((void*) node_to_free);
}
}
Generated by GNU enscript 1.6.1.