aboutsummaryrefslogtreecommitdiff
path: root/functions_reference/ref_ft_list_remove_if.c
diff options
context:
space:
mode:
Diffstat (limited to 'functions_reference/ref_ft_list_remove_if.c')
-rw-r--r--functions_reference/ref_ft_list_remove_if.c21
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);
+}