Example #1
0
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);
}
Example #2
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);
}