/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_get_map.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: rbousset +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/14 17:28:47 by rbousset #+# #+# */ /* Updated: 2020/02/14 17:28:47 by rbousset ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #include #include #include static size_t ft_get_map_h(char **map) { size_t i; i = 0; while (map[i]) i++; return (i); } static void ft_linecpy(char *line, char *mapl, size_t start) { size_t i; size_t j; size_t slen; i = 0; j = start; slen = ft_strlen(line); while (i < slen && line[i]) { while (line[i] == ' ') i++; mapl[j] = line[i]; i++; j++; } mapl[j] = '\n'; } static int8_t ft_cat_mapl(char *line, size_t i, t_cub *clist) { if (!(clist->mlist->mapl = (char *)ft_nrealloc(clist->mlist->mapl, ((clist->mlist->map_w + 1) * i) * sizeof(char), ((clist->mlist->map_w + 1) * (i + 1)) * sizeof(char)))) { ft_strlcpy(clist->errmsg, FT_ERR_ALLOCATE, ft_strlen(FT_ERR_ALLOCATE) + 1); return (-1); } ft_linecpy(line, clist->mlist->mapl, (clist->mlist->map_w + 1) * i); return (0); } int ft_get_map_first_line(char *line, t_cub *clist) { clist->mlist->map_start = clist->mlist->line_chk; if (!line[0]) { ft_memdel((void**)&line); ft_strlcpy(clist->errmsg, FT_ERR_READ, ft_strlen(FT_ERR_READ) + 1); return (-1); } clist->mlist->map_w = ft_get_line_len(line); if (ft_check_map_line(line, 1, clist) < 0) { ft_memdel((void**)&line); ft_strlcpy(clist->errmsg, FT_ERR_READ, ft_strlen(FT_ERR_READ) + 1); return (-1); } ft_memdel((void**)&clist->mlist->mapl); if (ft_cat_mapl(line, 0, clist) < 0) { ft_memdel((void**)&line); return (-1); } ft_memdel((void**)&line); return (1); } int ft_get_map_core(int fd, t_cub *clist) { int ret; size_t i; char *line; i = 1; ret = 1; while ((ret = get_next_line(fd, &line)) > 0) { clist->mlist->line_chk += 1; if (!line[0] || ft_check_map_line(line, 0, clist) < 0 || ft_cat_mapl(line, i, clist) < 0) { ft_memdel((void**)&line); return (-1); } ft_memdel((void**)&line); i++; } ft_memdel((void**)&line); clist->mlist->mapl[((clist->mlist->map_w + 1) * i) - 1] = '\0'; ft_free_words(clist->mlist->map); clist->mlist->map = ft_split(clist->mlist->mapl, '\n'); clist->mlist->map_h = ft_get_map_h(clist->mlist->map); ft_memdel((void**)&clist->mlist->mapl); return (0); }