From e50e68fb0f75caf1fc5b92ca4a1d770753fb310e Mon Sep 17 00:00:00 2001 From: hugodu69 Date: Sun, 15 Dec 2019 03:44:44 +0100 Subject: [PATCH] tentative de faire disparaitre les presque leaks de la liste chainee --- get_next_line.c | 6 + leaks.txt | 427 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 433 insertions(+) create mode 100644 leaks.txt diff --git a/get_next_line.c b/get_next_line.c index d604dca..ff47fb1 100644 --- a/get_next_line.c +++ b/get_next_line.c @@ -137,5 +137,11 @@ int get_next_line(const int fd, char **line) return (-1); if (*(lst->string) && ++ret == 1) (lst->string)[0] = '\0'; +// free(lst); +// lst = lst->next; +// while (lst->next->lfd != fd) +// lst = lst->next; +// lst->next = lst->next->next; +// free(lst->next); return (ret); } diff --git a/leaks.txt b/leaks.txt new file mode 100644 index 0000000..f210e61 --- /dev/null +++ b/leaks.txt @@ -0,0 +1,427 @@ +fd3| /* ************************************************************************** */ +fd4| /* ************************************************************************** */ +fd5| /* ************************************************************************** */ +fd3| /* */ +fd4| /* */ +fd5| /* */ +fd3| /* ::: :::::::: */ +fd4| /* ::: :::::::: */ +fd5| /* ::: :::::::: */ +fd3| /* get_next_line.c :+: :+: :+: */ +fd4| /* get_next_line.h :+: :+: :+: */ +fd5| /* get_next_line_utils.c :+: :+: :+: */ +fd3| /* +:+ +:+ +:+ */ +fd4| /* +:+ +:+ +:+ */ +fd5| /* +:+ +:+ +:+ */ +fd3| /* By: hulamy +#+ +:+ +#+ */ +fd4| /* By: hulamy +#+ +:+ +#+ */ +fd5| /* By: hulamy +#+ +:+ +#+ */ +fd3| /* +#+#+#+#+#+ +#+ */ +fd4| /* +#+#+#+#+#+ +#+ */ +fd5| /* +#+#+#+#+#+ +#+ */ +fd3| /* Created: 2019/12/11 00:27:09 by hulamy #+# #+# */ +fd4| /* Created: 2019/01/29 10:19:37 by hulamy #+# #+# */ +fd5| /* Created: 2019/12/11 00:26:54 by hulamy #+# #+# */ +fd3| /* Updated: 2019/12/12 23:01:04 by hulamy ### ########.fr */ +fd4| /* Updated: 2019/12/11 00:56:04 by hulamy ### ########.fr */ +fd5| /* Updated: 2019/12/11 00:57:19 by hulamy ### ########.fr */ +fd3| /* */ +fd4| /* */ +fd5| /* */ +fd3| /* ************************************************************************** */ +fd4| /* ************************************************************************** */ +fd5| /* ************************************************************************** */ +fd3| +fd4| +fd5| +fd3| #include "get_next_line.h" +fd4| #ifndef GET_NEXT_LINE_H +fd5| #include "get_next_line.h" +fd3| +fd4| # define GET_NEXT_LINE_H +fd5| +fd3| +fd4| +fd5| char *ft_strdup(const char *src) +fd3| #include //for printf +fd4| # include +fd5| { +fd3| #include //for open +fd4| # include +fd5| int i; +fd3| +fd4| # include +fd5| char *str; +fd3| int main(int ac, char **av) +fd4| +fd5| +fd3| { +fd4| # ifndef BUFF_SIZE +fd5| i = 0; +fd3| int *fd; +fd4| # define BUFF_SIZE 9999 +fd5| while (src[i] != '\0') +fd3| int i; +fd4| # endif +fd5| i++; +fd3| int j; +fd4| +fd5| if (!(str = (char*)malloc(sizeof(*str) * (i + 1)))) +fd3| char *line; +fd4| typedef struct s_gnlist +fd5| return (NULL); +fd3| +fd4| { +fd5| while (i-- >= 0) +fd3| if (ac < 2) +fd4| int lfd; +fd5| str[i + 1] = src[i + 1]; +fd3| return (0); +fd4| char *string; +fd5| return (str); +fd3| line = NULL; +fd4| struct s_gnlist *next; +fd5| } +fd3| i = 0; +fd4| } t_gnlist; +fd5| +fd3| if (!(fd = (int *)malloc(sizeof(int) * ac))) +fd4| +fd5| char *ft_strchr(const char *s, int c) +fd3| return (0); +fd4| int get_next_line(const int fd, char **line); +fd5| { +fd3| while (++i <= ac - 1) +fd4| int multi_fd(int fd, t_gnlist **lst); +fd5| int i; +fd3| fd[i - 1] = open(av[i], O_RDONLY); +fd4| char *ft_strjoinfree(char const *s1, char const *s2); +fd5| int j; +fd3| i = 0; +fd4| int hasnewline(char *str, t_gnlist *lst, char **line); +fd5| +fd3| j = 0; +fd4| +fd5| i = 0; +fd3| while (j < ac - 1) +fd4| size_t ft_strlen(const char *str); +fd5| j = -1; +fd3| { +fd4| void *ft_memmove(void *dst, const void *src, size_t len); +fd5| while (s[i]) +fd3| if (get_next_line(fd[i], &line) > 0) +fd4| char *ft_strchr(const char *s, int c); +fd5| i++; +fd3| { +fd4| char *ft_strdup(const char *src); +fd5| while (++j < i + 1) +fd3| printf("fd%i| %s\n", fd[i], line); +fd4| +fd5| if (s[j] == c) +fd3| free(line); +fd4| #endif +fd5| return ((char *)s + j); +fd3| j = 0; +fd4|*FINI* +fd5| return (NULL); +fd3| } +fd4|*FINI* +fd5| } +fd3| else +fd4|*FINI* +fd5| +fd3| { +fd4|*FINI* +fd5| void *ft_memmove(void *dst, const void *src, size_t len) +fd3| printf("fd%i|*FINI*\n", fd[i]); +fd4|*FINI* +fd5| { +fd3| j++; +fd4|*FINI* +fd5| size_t i; +fd3| } +fd4|*FINI* +fd5| char *cpsrc; +fd3| i++; +fd4|*FINI* +fd5| char *cpdst; +fd3| if (i >= ac - 1) +fd4|*FINI* +fd5| +fd3| i = 0; +fd4|*FINI* +fd5| i = -1; +fd3| } +fd4|*FINI* +fd5| cpsrc = (char *)src; +fd3| free (fd); +fd4|*FINI* +fd5| cpdst = (char *)dst; +fd3| // while (1); +fd4|*FINI* +fd5| if (dst == src) +fd3| return (0); +fd4|*FINI* +fd5| return (dst); +fd3| } +fd4|*FINI* +fd5| if (cpsrc < cpdst) +fd3| +fd4|*FINI* +fd5| while (len--) +fd3| +fd4|*FINI* +fd5| cpdst[len] = cpsrc[len]; +fd3| int multi_fd(int fd, t_gnlist **lst) +fd4|*FINI* +fd5| else +fd3| { +fd4|*FINI* +fd5| while (++i < len) +fd3| t_gnlist *tmp; +fd4|*FINI* +fd5| cpdst[i] = cpsrc[i]; +fd3| +fd4|*FINI* +fd5| return (dst); +fd3| tmp = *lst; +fd4|*FINI* +fd5| } +fd3| while (*lst && (*lst)->lfd != fd && (*lst)->next != tmp) +fd4|*FINI* +fd5| +fd3| *lst = (*lst)->next; +fd4|*FINI* +fd5| size_t ft_strlen(const char *str) +fd3| if (!tmp || ((*lst)->next == tmp && (*lst)->lfd != fd)) +fd4|*FINI* +fd5| { +fd3| { +fd4|*FINI* +fd5| size_t i; +fd3| if (!(tmp = (t_gnlist*)malloc(sizeof(*tmp)))) +fd4|*FINI* +fd5| +fd3| return (0); +fd4|*FINI* +fd5| i = 0; +fd3| tmp->lfd = fd; +fd4|*FINI* +fd5| while (str[i]) +fd3| if (!(tmp->string = ft_strdup(""))) +fd4|*FINI* +fd5| i++; +fd3| return (0); +fd4|*FINI* +fd5| return (i); +fd3| if (*lst) +fd4|*FINI* +fd5| } +fd3| { +fd4|*FINI* +fd5|*FINI* +fd3| tmp->next = (*lst)->next; +fd4|*FINI* +fd5|*FINI* +fd3| (*lst)->next = tmp; +fd4|*FINI* +fd5|*FINI* +fd3| } +fd4|*FINI* +fd5|*FINI* +fd3| else +fd4|*FINI* +fd5|*FINI* +fd3| tmp->next = tmp; +fd4|*FINI* +fd5|*FINI* +fd3| *lst = tmp; +fd4|*FINI* +fd5|*FINI* +fd3| } +fd4|*FINI* +fd5|*FINI* +fd3| //free(tmp); +fd4|*FINI* +fd5|*FINI* +fd3| return (1); +fd4|*FINI* +fd5|*FINI* +fd3| } +fd4|*FINI* +fd5|*FINI* +fd3| +fd4|*FINI* +fd5|*FINI* +fd3| char *ft_strjoinfree(char const *s1, char const *s2) +fd4|*FINI* +fd5|*FINI* +fd3| { +fd4|*FINI* +fd5|*FINI* +fd3| char *str; +fd4|*FINI* +fd5|*FINI* +fd3| int len; +fd4|*FINI* +fd5|*FINI* +fd3| int j; +fd4|*FINI* +fd5|*FINI* +fd3| +fd4|*FINI* +fd5|*FINI* +fd3| if (!s1 || !s2) +fd4|*FINI* +fd5|*FINI* +fd3| return (NULL); +fd4|*FINI* +fd5|*FINI* +fd3| len = ft_strlen(s1) + ft_strlen(s2); +fd4|*FINI* +fd5|*FINI* +fd3| if (!(str = (char *)malloc(sizeof(char) * (len + 1)))) +fd4|*FINI* +fd5|*FINI* +fd3| return (NULL); +fd4|*FINI* +fd5|*FINI* +fd3| len = 0; +fd4|*FINI* +fd5|*FINI* +fd3| j = 0; +fd4|*FINI* +fd5|*FINI* +fd3| while (s1[j] != '\0') +fd4|*FINI* +fd5|*FINI* +fd3| str[len++] = s1[j++]; +fd4|*FINI* +fd5|*FINI* +fd3| j = 0; +fd4|*FINI* +fd5|*FINI* +fd3| while (s2[j] != '\0') +fd4|*FINI* +fd5|*FINI* +fd3| str[len++] = s2[j++]; +fd4|*FINI* +fd5|*FINI* +fd3| str[len] = '\0'; +fd4|*FINI* +fd5|*FINI* +fd3| free((char*)s1); +fd4|*FINI* +fd5|*FINI* +fd3| return (str); +fd4|*FINI* +fd5|*FINI* +fd3| } +fd4|*FINI* +fd5|*FINI* +fd3| +fd4|*FINI* +fd5|*FINI* +fd3| int hasnewline(char *str, t_gnlist *lst, char **line) +fd4|*FINI* +fd5|*FINI* +fd3| { +fd4|*FINI* +fd5|*FINI* +fd3| str[0] = '\0'; +fd4|*FINI* +fd5|*FINI* +fd3| if (!(*line = ft_strdup(lst->string))) +fd4|*FINI* +fd5|*FINI* +fd3| return (-1); +fd4|*FINI* +fd5|*FINI* +fd3| ft_memmove(lst->string, str + 1, ft_strlen(str + 1) + 1); +fd4|*FINI* +fd5|*FINI* +fd3| return (1); +fd4|*FINI* +fd5|*FINI* +fd3| } +fd4|*FINI* +fd5|*FINI* +fd3| +fd4|*FINI* +fd5|*FINI* +fd3| int get_next_line(const int fd, char **line) +fd4|*FINI* +fd5|*FINI* +fd3| { +fd4|*FINI* +fd5|*FINI* +fd3| char buf[BUFF_SIZE + 1]; +fd4|*FINI* +fd5|*FINI* +fd3| int ret; +fd4|*FINI* +fd5|*FINI* +fd3| static t_gnlist *lst = NULL; +fd4|*FINI* +fd5|*FINI* +fd3| char *str; +fd4|*FINI* +fd5|*FINI* +fd3| +fd4|*FINI* +fd5|*FINI* +fd3| if (!(multi_fd(fd, &lst)) || !(ret = 1) || !line || fd < 0) +fd4|*FINI* +fd5|*FINI* +fd3| return (-1); +fd4|*FINI* +fd5|*FINI* +fd3| while (ret > 0) +fd4|*FINI* +fd5|*FINI* +fd3| { +fd4|*FINI* +fd5|*FINI* +fd3| if ((str = ft_strchr(lst->string, '\n'))) +fd4|*FINI* +fd5|*FINI* +fd3| return (hasnewline(str, lst, line)); +fd4|*FINI* +fd5|*FINI* +fd3| if ((ret = read(fd, buf, BUFF_SIZE)) < 0) +fd4|*FINI* +fd5|*FINI* +fd3| return (-1); +fd4|*FINI* +fd5|*FINI* +fd3| buf[ret] = '\0'; +fd4|*FINI* +fd5|*FINI* +fd3| if (!(lst->string = ft_strjoinfree(lst->string, buf))) +fd4|*FINI* +fd5|*FINI* +fd3| return (-1); +fd4|*FINI* +fd5|*FINI* +fd3| } +fd4|*FINI* +fd5|*FINI* +fd3| if (*(lst->string) && !(*line = ft_strdup(lst->string))) +fd4|*FINI* +fd5|*FINI* +fd3| return (-1); +fd4|*FINI* +fd5|*FINI* +fd3| if (*(lst->string) && ++ret == 1) +fd4|*FINI* +fd5|*FINI* +fd3| (lst->string)[0] = '\0'; +fd4|*FINI* +fd5|*FINI* +fd3| return (ret); +fd4|*FINI* +fd5|*FINI* +fd3| } +fd4|*FINI* +fd5|*FINI* +fd3|*FINI*