/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_strsplit.c                                      :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: llellouc <marvin@42.fr>                    +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2016/01/22 13:44:33 by llellouc          #+#    #+#             */
/*   Updated: 2016/02/02 14:09:12 by llellouc         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include "../Header.h"

static int	ft_nb_lines(const char c, char const *s)
{
	int i;
	int nb_lines;

	i = 0;
	nb_lines = 0;
	while (s[i] != '\0')
	{
		if (s[i] == c)
			i++;
		if (s[i] != '\0')
			nb_lines++;
		while ((s[i] != '\0') && (s[i] != c))
			i++;
	}
	if (nb_lines == 0)
		return (-1);
    
	return (nb_lines + 1);
}

static char	**ft_split(char **ret, char const *s, char c, int i)
{
	int len;
	int k;

	k = 0;
	while (s[i] != '\0')
	{
		len = 0;
		if (s[i] == c)
			i++;
		while ((s[i] != c) && (s[i] != '\0'))
		{
			len++;
			i++;
		}
		if (len != 0)
		{
			ret[k] = ft_strndup(s + i - len, len);
			k++;
		}
        if (len == 0)
        {
            ret[k] = malloc(sizeof(char) * 1);
            ret[k][0] = '\0';
            k++;
        }
	}
	ret[k] = NULL;
	return (ret);
}

char		**ft_strsplit(char const *s, char c)
{
	char	**ret;

	ret = (char **)malloc(sizeof(char *) * ft_nb_lines(c, s));
	if (ret == NULL)
		return (NULL);
	return (ft_split(ret, s, c, 0));
}
