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.