fix: leak
This commit is contained in:
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);
|
||||
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;
|
||||
header_freer(header);
|
||||
map->map = get_body((const char **) file_content, header_size);
|
||||
ft_freer_tab_ultimate(1, file_content);
|
||||
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