int get_next_line(int const fd, char **dest) { static t_fd *current_fd = NULL; char buffer[BUFF_SIZE + 1]; char *line; int len; int ret; ret = 0; current_fd = ft_get_fd(current_fd, fd); if ((fd < 0 || fd == 1 || fd == 2) || dest == NULL) return (-1); while (fd >= 0 && ((len = ft_check_endofline(current_fd->text)) || (ret = ft_read_fd(fd, buffer)) > 0) && len <= 0) current_fd->text = ft_strfreejoin(current_fd->text, buffer, 2); if (ret == -1) return (-1); if (len > 0) current_fd->text[len - 1] = '\0'; *dest = ft_strdup(current_fd->text); line = current_fd->text; current_fd->text = ((len > 0) ? ft_strdup(current_fd->text + len) : ft_strdup("")); free(line); current_fd = current_fd->begin_list; return ((len || **dest) ? 1 : 0); }
int get_next_line(int const fd, char **line) { static char *stay; char *ptr; int size; if (BUFF_SIZE < 1 || fd < 0 || !line) return (-1); if (stay == 0) stay = ""; size = BUFF_SIZE; while (1) { ptr = stay; while (*ptr || size < BUFF_SIZE) { if (*ptr == '\n' || *ptr == -1 || *ptr == 0) return (ft_fill(line, &stay, ptr)); ptr++; } size = ft_read_fd(&stay, fd); if (size == -1) return (-1); } return (0); }