diff options
Diffstat (limited to 'src/ft_get_map.c')
-rw-r--r-- | src/ft_get_map.c | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/src/ft_get_map.c b/src/ft_get_map.c index 735e31e..06f3353 100644 --- a/src/ft_get_map.c +++ b/src/ft_get_map.c @@ -42,17 +42,33 @@ ft_check_err(char *line, size_t size) static char *ft_get_first_line(char *line, t_cub *clist) { - size_t len; char *mapl; - len = ft_strlen(line); - if (len < 2 || ft_check_err(line, len) < 0) + clist->map_w = ft_strlen(line); + if (clist->map_w <= 2 || ft_check_err(line, clist->map_w) < 0) return (NULL); - if (!(mapl = (char*)malloc(((len / 2) + 2) * sizeof(char)))) + if (!(mapl = (char*)malloc(((clist->map_w / 2) + 2) * sizeof(char)))) return (NULL); ft_linecpy(line, mapl, 0); ft_memdel(line); - clist->map_width = len; + return (mapl); +} + +static char +*ft_get_core_map(char *line, char *mapl, size_t i, t_cub *clist) +{ + if (ft_check_err(line, clist->map_w) < 0) + { + ft_memdel(line); + ft_memdel(mapl); + return (NULL); + } + if (!(mapl = (char*)ft_nrealloc(mapl, (((clist->map_w / 2) + 2) * i) + * sizeof(char), ((((clist->map_w / 2) + 2) * i) + + (clist->map_w / 2) + 2) * sizeof(char)))) + return (NULL); + ft_linecpy(line, mapl, ((clist->map_w / 2) + 2) * i); + ft_memdel(line); return (mapl); } @@ -60,36 +76,25 @@ int ft_get_map(int fd, t_cub *clist) { size_t i; - size_t len; int ret; char *line; char *mapl; - if (get_next_line(fd, &line) <= 0 || + if ((ret = get_next_line(fd, &line)) <= 0 || !(mapl = ft_get_first_line(line, clist))) { ft_memdel(line); return (-1); } i = 1; - ret = 1; - len = clist->map_width; while (ret > 0) { ret = get_next_line(fd, &line); - if (ft_check_err(line, len) < 0) - { - ft_memdel(line); - ft_memdel(mapl); + if (!(mapl = ft_get_core_map(line, mapl, i, clist))) return (-1); - } - mapl = (char*)ft_nrealloc(mapl, (((len / 2) + 2) * i) * sizeof(char), - ((((len / 2) + 2) * i) + (len / 2) + 2) * sizeof(char)); - ft_linecpy(line, mapl, ((len / 2) + 2) * i); - ft_memdel(line); i++; } - mapl[(i * ((len / 2) + 2)) - 1] = '\0'; + mapl[(i * ((clist->map_w / 2) + 2)) - 1] = '\0'; ft_free_words(clist->map, NULL); clist->map = ft_split(mapl, '\n'); ft_memdel(mapl); |