diff options
Diffstat (limited to 'functions_reference/ref_ft_list_remove_if.c')
| -rw-r--r-- | functions_reference/ref_ft_list_remove_if.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/functions_reference/ref_ft_list_remove_if.c b/functions_reference/ref_ft_list_remove_if.c new file mode 100644 index 0000000..8b55da1 --- /dev/null +++ b/functions_reference/ref_ft_list_remove_if.c @@ -0,0 +1,21 @@ +#include "libasm_test.h" + +void +ref_ft_list_remove_if(t_list **begin_list, void *data_ref, + int (*cmp)(), void (*free_fct)(void *)) +{ + t_list *saved_next; + + if (begin_list == NULL || *begin_list == NULL) + return ; + if (cmp(&(*begin_list)->val, data_ref) != 0) + { + ref_ft_list_remove_if(&(*begin_list)->next, data_ref, cmp, free_fct); + return ; + } + saved_next = (*begin_list)->next; + free_fct((*begin_list)->val); + free(*begin_list); + *begin_list = saved_next; + ref_ft_list_remove_if(begin_list, data_ref, cmp, free_fct); +} |
