summaryrefslogtreecommitdiff
path: root/ft_lstmap_bonus.c
diff options
context:
space:
mode:
Diffstat (limited to 'ft_lstmap_bonus.c')
-rw-r--r--ft_lstmap_bonus.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/ft_lstmap_bonus.c b/ft_lstmap_bonus.c
index 91eabfc..1e4b867 100644
--- a/ft_lstmap_bonus.c
+++ b/ft_lstmap_bonus.c
@@ -6,7 +6,7 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/10 16:45:21 by dkaiser #+# #+# */
-/* Updated: 2024/03/10 19:03:00 by dkaiser ### ########.fr */
+/* Updated: 2024/03/11 13:25:08 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
@@ -15,29 +15,36 @@
t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *))
{
t_list *result;
- t_list *new;
+ t_list *cur_new;
+ void *content;
if (!lst || !f || !del)
return (NULL);
- new = ft_lstnew(f(lst->content));
- if (!new)
+ content = f(lst->content);
+ cur_new = ft_lstnew(content);
+ if (!cur_new)
{
- free(new);
+ del(content);
return (NULL);
}
- result = new;
+ result = cur_new;
+ if (!lst->next)
+ return (result);
lst = lst->next;
while (lst)
{
- new->next = ft_lstnew(f(lst->content));
- if (!new->next)
+ content = f(lst->content);
+ cur_new->next = ft_lstnew(content);
+ if (!cur_new->next)
{
- ft_lstclear(&new, del);
+ del(content);
+ ft_lstclear(&result, del);
return (NULL);
}
- new = new->next;
+ if (!lst->next)
+ return (result);
lst = lst->next;
+ cur_new = cur_new->next;
}
- // new->next = NULL;
return (result);
}