aboutsummaryrefslogtreecommitdiffstats
path: root/src/ft_parse_map.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ft_parse_map.c')
-rw-r--r--src/ft_parse_map.c58
1 files changed, 19 insertions, 39 deletions
diff --git a/src/ft_parse_map.c b/src/ft_parse_map.c
index 0e1a1e7..0eef871 100644
--- a/src/ft_parse_map.c
+++ b/src/ft_parse_map.c
@@ -18,32 +18,6 @@
#include <stdint.h>
static void
- ft_check_cub(const char *map_path, t_cub *clist)
-{
- char **words;
- size_t i;
-
- if (!(words = ft_split(map_path, '.')))
- {
- ft_dprintf(STDERR_FILENO, "Error\n");
- ft_dprintf(STDERR_FILENO, "\033[31;1mMap is not a .cub\033[0m\n");
- ft_free_words(words);
- ft_exit(6, clist);
- }
- i = 0;
- while (words[i])
- i++;
- if (ft_strncmp(words[i - 1], "cub", 3))
- {
- ft_dprintf(STDERR_FILENO, "Error\n");
- ft_dprintf(STDERR_FILENO, "\033[31;1mMap is not a .cub\033[0m\n");
- ft_free_words(words);
- ft_exit(6, clist);
- }
- ft_free_words(words);
-}
-
-static void
ft_check_map_last_line(t_cub *clist)
{
t_map *ml;
@@ -58,16 +32,16 @@ static void
while (ml->map[i - 1][j])
{
if (ml->map[i - 1][j] != '1' && ml->map[i - 1][j] != '\0')
- ft_map_error(clist);
+ ft_map_error(FT_ERR_MAP_L_L, clist);
j++;
}
}
static int8_t
- ft_error_here(char *line, t_cub *clist)
+ft_error_here(const char *errmsg, char *line, t_cub *clist)
{
ft_memdel((void**)&line);
- return (ft_map_error(clist));
+ return (ft_map_error(errmsg, clist));
}
static int8_t
@@ -79,9 +53,9 @@ static int8_t
clist->mlist->line_chk += 1;
if ((ret = get_next_line(fd, &line)) < 0)
- return (ft_map_error(clist));
+ return (ft_map_error(FT_ERR_READ, clist));
if (ret == 0)
- return (ft_error_here(line, clist));
+ return (ft_error_here(FT_ERR_UNFINISHED, line, clist));
if (!line[0])
{
ft_memdel((void**)&line);
@@ -89,31 +63,37 @@ static int8_t
}
if (!ft_ischarset("RNSEWFC1\0", line[0])
|| !(words = ft_split(line, ' ')))
- return (ft_error_here(line, clist));
+ return (ft_error_here(FT_ERR_ILL_ENTRY, line, clist));
if ((ret = ft_select_get(words, clist)) == 12)
return ((ft_get_map_first_line(line, clist) < 0) ? (-1) : (12));
ft_memdel((void**)&line);
return (ret);
}
+static void
+ ft_no_map_error(t_cub *clist)
+{
+ ft_dprintf(STDERR_FILENO, "Error\n");
+ ft_dprintf(STDERR_FILENO, "\033[31;1mNo map\033[0m\n");
+ ft_exit(5, clist);
+}
+
void
ft_parse_map(const char *map_path, t_cub *clist)
{
int fd;
int8_t ret;
- ft_check_cub(map_path, clist);
+ if (ft_check_ext(map_path, ".cub") < 0)
+ ft_map_error(FT_ERR_NOT_A_CUB, clist);
fd = open(map_path, O_RDONLY);
if (fd < 0)
- {
- ft_dprintf(STDERR_FILENO, "Error\n");
- ft_dprintf(STDERR_FILENO, "\033[31;1mNo map\033[0m\n");
- ft_exit(5, clist);
- }
+ ft_no_map_error(clist);
ret = 1;
while (ret != 12 && ret != -1)
ret = ft_parse_it(fd, clist);
- (ret == -1) ? (ft_map_error(clist)) : 0;
+ (ret == -2) ? (ft_map_error(FT_ERR_ALR_SET, clist)) : 0;
+ (ret == -1) ? (ft_map_error(clist->errmsg, clist)) : 0;
if (ft_get_map_core(fd, clist) < 0)
ft_map_error(clist);
ft_check_map_last_line(clist);