diff options
Diffstat (limited to '')
| -rw-r--r-- | src/ft_check_ext.c | 13 | ||||
| -rw-r--r-- | src/ft_exit.c | 1 | ||||
| -rw-r--r-- | src/ft_init_lists.c | 3 | ||||
| -rw-r--r-- | src/ft_map_error.c | 6 | ||||
| -rw-r--r-- | src/ft_parse_map.c | 58 | ||||
| -rw-r--r-- | src/ft_select_get.c | 2 | 
6 files changed, 40 insertions, 43 deletions
diff --git a/src/ft_check_ext.c b/src/ft_check_ext.c new file mode 100644 index 0000000..f4a1e92 --- /dev/null +++ b/src/ft_check_ext.c @@ -0,0 +1,13 @@ +#include <libft.h> +#include <stdint.h> + +int8_t +	ft_check_ext(const char *filep, const char *ext) +{ +	const uint8_t	extlen = ft_strlen(ext); + +	if (ft_strncmp(filep + (ft_strlen(filep) - extlen), ext, extlen)) +		return (-1); +	else +		return (0); +} diff --git a/src/ft_exit.c b/src/ft_exit.c index d4b69ba..53af7f9 100644 --- a/src/ft_exit.c +++ b/src/ft_exit.c @@ -33,6 +33,7 @@ static void  		ft_memdel((void**)&clist->wlist->winptr);  	ft_memdel((void**)&clist->wlist->wlx);  	ft_memdel((void**)&clist->wlist); +	ft_memdel((void**)&clist->errmsg);  	ft_memdel((void**)&clist);  } diff --git a/src/ft_init_lists.c b/src/ft_init_lists.c index dc50231..459e522 100644 --- a/src/ft_init_lists.c +++ b/src/ft_init_lists.c @@ -71,7 +71,8 @@ static t_cub  	if (!(clist = (t_cub*)malloc(sizeof(t_cub))))  		return (NULL);  	if (!(clist->plist = ft_init_player()) || -		!(clist->mlist = ft_init_map())) +		!(clist->mlist = ft_init_map()) || +		!(clist->errmsg = ft_calloc(1, sizeof(char))))  		return (NULL);  	clist->minimap = 0;  	clist->f_rgb = ft_init_rgb(); diff --git a/src/ft_map_error.c b/src/ft_map_error.c index 263eee8..cb099dc 100644 --- a/src/ft_map_error.c +++ b/src/ft_map_error.c @@ -15,10 +15,12 @@  #include <unistd.h>  int -	ft_map_error(t_cub *clist) +	ft_map_error(const char *errmsg, t_cub *clist)  {  	ft_dprintf(STDERR_FILENO, "Error\n");  	ft_dprintf(STDERR_FILENO, -		"\033[1;31mMap error: line %zu\033[0m\n", clist->mlist->line_chk); +				"\033[1;31mMap error: line %3zu: %s\033[0m\n", +				clist->mlist->line_chk, +				errmsg);  	return (ft_exit(4, clist));  } 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); diff --git a/src/ft_select_get.c b/src/ft_select_get.c index f550d98..4b82430 100644 --- a/src/ft_select_get.c +++ b/src/ft_select_get.c @@ -86,7 +86,7 @@ int8_t  	if (id < 0 || (*fun_ptr[id])(words, clist) < 0)  	{  		ft_free_words(words); -		return (-1); +		return ((id < 0) ? (-2) : (-1));  	}  	ft_free_words(words);  	return (id);  | 
