void ioctl_tree_free(ioctl_tree * tree) { if (tree == NULL) return; ioctl_tree_free(tree->child); ioctl_tree_free(tree->next); if (tree->type != NULL && tree->type->free_data != NULL) tree->type->free_data(tree); if (tree->last_added != NULL) ioctl_node_list_free(tree->last_added); free(tree); }
static void ioctl_emulate_close(int fd) { struct ioctl_fd_info *fdinfo; if (fd_map_get(&ioctl_wrapped_fds, fd, (const void **)&fdinfo)) { DBG(DBG_IOCTL, "ioctl_emulate_close: closing ioctl socket fd %i\n", fd); fd_map_remove(&ioctl_wrapped_fds, fd); ioctl_tree_free(fdinfo->tree); free(fdinfo); } }