aboutsummaryrefslogtreecommitdiffstats
path: root/src/ft_lstmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ft_lstmap.c')
-rw-r--r--src/ft_lstmap.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/ft_lstmap.c b/src/ft_lstmap.c
new file mode 100644
index 0000000..c001a2d
--- /dev/null
+++ b/src/ft_lstmap.c
@@ -0,0 +1,26 @@
+#include "libft.h"
+#include <stdlib.h>
+
+t_list *
+ft_lstmap (t_list *lst, void *(*f) (void *), void (*del) (void *))
+{
+ t_list *new_list;
+ t_list *node;
+ void *content;
+
+ new_list = NULL;
+ while (lst)
+ {
+ content = f (lst->content);
+ node = ft_lstnew (content);
+ if (!node)
+ {
+ del (content);
+ ft_lstclear (&new_list, del);
+ return (NULL);
+ }
+ ft_lstadd_back (&new_list, node);
+ lst = lst->next;
+ }
+ return (new_list);
+}