fix: leak
This commit is contained in:
		
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @ -1,6 +1,6 @@ | ||||
| SRCS_GAME := main.c game/game.c game/init.c game/manage.c \ | ||||
| game/manage_keys.c game/raycasting.c game/dda.c | ||||
| SRCS_MAP := parsing.c parsing_header.c parsing_header2.c parsing_meta.c parsing_body.c | ||||
| SRCS_MAP := parsing.c parsing_header.c parsing_header2.c parsing_meta.c parsing_body.c map.c | ||||
| SRCS_MAP := $(addprefix map/, $(SRCS_MAP)) | ||||
|  | ||||
| SRCS := ${SRCS_MAP} \ | ||||
|  | ||||
							
								
								
									
										14
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								main.c
									
									
									
									
									
								
							| @ -6,27 +6,31 @@ | ||||
| /*   By: erey-bet <marvin@42.fr>                    +#+  +:+       +#+        */ | ||||
| /*                                                +#+#+#+#+#+   +#+           */ | ||||
| /*   Created: 2023/04/26 12:44:55 by erey-bet          #+#    #+#             */ | ||||
| /*   Updated: 2023/05/05 11:47:28 by cchauvet         ###   ########.fr       */ | ||||
| /*   Updated: 2023/05/05 14:48:45 by cchauvet         ###   ########.fr       */ | ||||
| /*                                                                            */ | ||||
| /* ************************************************************************** */ | ||||
|  | ||||
| #include "cube3D.h" | ||||
| #include "map/map.h" | ||||
|  | ||||
| int	main(int argc, char **argv) | ||||
| { | ||||
| 	t_map	*map; | ||||
| 	t_map	map; | ||||
|  | ||||
| 	if (argc != 2) | ||||
| 	{ | ||||
| 		ft_eprintf("No argument"); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	map = map_parsing(argv[1]); | ||||
| 	if (!map) | ||||
| 	if (map_parsing(argv[1], &map)) | ||||
| 	{ | ||||
| 		map_freer(&map); | ||||
| 		return (2); | ||||
| 	if (start_game(*map))  | ||||
| 	} | ||||
| 	if (start_game(map))  | ||||
| 	{ | ||||
| 		return (3); | ||||
| 	} | ||||
| 	map_freer(&map); | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
							
								
								
									
										16
									
								
								map/map.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								map/map.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| #include "map.h" | ||||
| #include "./parsing_private.h" | ||||
|  | ||||
| void	map_freer(t_map *map) | ||||
| { | ||||
| 	size_t	i; | ||||
|  | ||||
| 	ft_freer_tab_ultimate(1, map->map); | ||||
| 	i = 0; | ||||
| 	while (i < 4) | ||||
| 	{ | ||||
| 		if (map->img_path[i] != NULL) | ||||
| 			free(map->img_path[i]); | ||||
| 		i++; | ||||
| 	} | ||||
| } | ||||
| @ -1,6 +1,7 @@ | ||||
| #include "./parsing_private.h" | ||||
| #include "map.h" | ||||
| #include <stddef.h> | ||||
| #include <stdlib.h> | ||||
|  | ||||
| static ssize_t get_nb_line(const char *path) | ||||
| { | ||||
| @ -47,43 +48,54 @@ static char	**read_map(const char *path) | ||||
| 	return (map); | ||||
| } | ||||
|  | ||||
| t_map	*map_parsing(const char *path) | ||||
| void	header_freer(char ***header) | ||||
| { | ||||
| 	size_t	i; | ||||
| 	size_t	j; | ||||
|  | ||||
| 	i = 0; | ||||
| 	while (header[i] != NULL) | ||||
| 	{ | ||||
| 		j = 0; | ||||
| 		while (header[i][j] != NULL) | ||||
| 		{ | ||||
| 			free(header[i][j]); | ||||
| 			j++; | ||||
| 		} | ||||
| 		free(header[i]); | ||||
| 		i++; | ||||
| 	} | ||||
| 	free(header); | ||||
| } | ||||
|  | ||||
| int	map_parsing(const char *path, t_map *map) | ||||
| { | ||||
| 	char	**file_content; | ||||
| 	char	***header; | ||||
| 	char	**body; | ||||
| 	size_t	header_size; | ||||
| 	t_map	*map; | ||||
|  | ||||
| 	if (parsing_meta(path)) | ||||
| 		return (NULL); | ||||
| 	map = ft_calloc(1, sizeof(t_map)); | ||||
| 	if (map == NULL) | ||||
| 		return (NULL); | ||||
| 		return (1); | ||||
| 	ft_bzero(map, sizeof(t_map)); | ||||
| 	file_content = read_map(path); | ||||
| 	if (file_content == NULL) | ||||
| 	{ | ||||
| 		ft_eprintf("map: file error"); | ||||
| 		return (NULL); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	header = get_header((const char **) file_content, &header_size); | ||||
| 	if (header_is_valid(header, map) == 0) | ||||
| 	{ | ||||
| 		header_freer(header); | ||||
| 		ft_freer_tab_ultimate(1, file_content); | ||||
| 		ft_freer_ultimate(1, map); | ||||
| 		return (NULL); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	//ici aussi header; | ||||
| 	body = get_body((const char **) file_content, header_size); | ||||
| 	header_freer(header); | ||||
| 	map->map = get_body((const char **) file_content, header_size); | ||||
| 	ft_freer_tab_ultimate(1, file_content);  | ||||
| 	if (body_is_valid((const char **) body, map) == 0) | ||||
| 	{ | ||||
| 		ft_freer_ultimate(1, map); | ||||
| 		// faudra free | ||||
| 		return (NULL); | ||||
| 	} | ||||
| 	map->map = body; | ||||
| 	if (body_is_valid(map) == 0) | ||||
| 		return (1); | ||||
| 	map->direction = map->map[(size_t) map->ply_y][(size_t) map->ply_x]; | ||||
| 	map->map[(size_t) map->ply_y][(size_t) map->ply_x] = '0'; | ||||
| 	return (map); | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
| @ -2,6 +2,6 @@ | ||||
| # define PARSING_H | ||||
| # include "map.h" | ||||
|  | ||||
| t_map	*map_parsing(const char *path); | ||||
| int	map_parsing(const char *path, t_map *map); | ||||
|  | ||||
| #endif | ||||
|  | ||||
| @ -1,5 +1,4 @@ | ||||
| #include "parsing_private.h" | ||||
| #include <stddef.h> | ||||
|  | ||||
| char	**get_body(const char **file_content, size_t header_size) | ||||
| { | ||||
| @ -141,13 +140,13 @@ void	get_size(const char **body, t_map *map) | ||||
| 	map->size_y = y; | ||||
| } | ||||
|  | ||||
| int	body_is_valid(const char **body, t_map *map) | ||||
| int	body_is_valid(t_map *map) | ||||
| { | ||||
| 	int	error; | ||||
|  | ||||
| 	if (body == NULL) | ||||
| 	if (map->map == NULL) | ||||
| 		return (0); | ||||
| 	error = get_spawn_position(body, &map->ply_x, &map->ply_y); | ||||
| 	error = get_spawn_position((const char **) map->map, &map->ply_x, &map->ply_y); | ||||
| 	if (error == 1) | ||||
| 	{ | ||||
| 		ft_eprintf("map: spawn position: multiple definition"); | ||||
| @ -158,20 +157,20 @@ int	body_is_valid(const char **body, t_map *map) | ||||
| 		ft_eprintf("map: spawn position: not define"); | ||||
| 		return (0); | ||||
| 	} | ||||
| 	error = map_surround(body); | ||||
| 	error = map_surround((const char **)map->map); | ||||
| 	if (error) | ||||
| 	{ | ||||
| 		ft_eprintf("map: not surrounded"); | ||||
| 		return (0); | ||||
| 	} | ||||
| 	error = map_is_in_one_part(body); | ||||
| 	error = map_is_in_one_part((const char **)map->map); | ||||
| 	if (error) | ||||
| 	{ | ||||
| 		ft_eprintf("map: splitted"); | ||||
| 		return (0); | ||||
| 	} | ||||
| 	if (body_contain_normal_char(body) == 0) | ||||
| 	if (body_contain_normal_char((const char **)map->map) == 0) | ||||
| 		return (0); | ||||
| 	get_size(body, map); | ||||
| 	get_size((const char **)map->map, map); | ||||
| 	return (1); | ||||
| } | ||||
|  | ||||
| @ -25,20 +25,20 @@ static int	is_header(const char *line) | ||||
| 	if (list == NULL) | ||||
| 	{ | ||||
| 		ft_eprintf("malloc failed"); | ||||
| 		ft_freer_ultimate(1, list); | ||||
| 		ft_freer_tab_ultimate(1, list); | ||||
| 		return (0); | ||||
| 	} | ||||
| 	if (ft_tablen((const void **) list) != 2) | ||||
| 	{ | ||||
| 		ft_freer_ultimate(1, list); | ||||
| 		ft_freer_tab_ultimate(1, list); | ||||
| 		return (0); | ||||
| 	} | ||||
| 	if (get_token(list[0]) == 0) | ||||
| 	{ | ||||
| 		ft_freer_ultimate(1, list); | ||||
| 		ft_freer_tab_ultimate(1, list); | ||||
| 		return (0); | ||||
| 	} | ||||
| 	ft_freer_ultimate(1, list); | ||||
| 	ft_freer_tab_ultimate(1, list); | ||||
| 	return (1); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -1,5 +1,4 @@ | ||||
| #include "./parsing_private.h" | ||||
| #include <stddef.h> | ||||
|  | ||||
| static int	set_texture(t_map *map, int token, const char *key, char *value) | ||||
| { | ||||
| @ -8,7 +7,9 @@ static int	set_texture(t_map *map, int token, const char *key, char *value) | ||||
| 		ft_eprintf("redefinition of %s", key); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	map->img[token - 1] = value; | ||||
| 	map->img_path[token - 1] = ft_strdup(value); | ||||
| 	if (map->img_path[token - 1] == NULL) | ||||
| 		return (1); | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
| @ -61,6 +62,7 @@ static int	set_color(long long *color, const char *key, char *value) | ||||
| 		return (1); | ||||
| 	} | ||||
| 	*color = get_color((const char **) tab); | ||||
| 	ft_freer_tab_ultimate(1, tab); | ||||
| 	return (*color == -1); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -9,5 +9,5 @@ int		get_token(const char *str); | ||||
| char	***get_header(const char **file_content, size_t *header_size); | ||||
| int		header_is_valid(char ***header, t_map *map); | ||||
| char	**get_body(const char **file_content, size_t header_size); | ||||
| int		body_is_valid(const char **body, t_map *map); | ||||
| int		body_is_valid(t_map *map); | ||||
| #endif | ||||
|  | ||||
		Reference in New Issue
	
	Block a user