From eb85b914a4c163b4973e705e737bc0e6468db5e3 Mon Sep 17 00:00:00 2001 From: Mthandazo Ndhlovu Date: Thu, 11 Apr 2019 12:52:14 +0200 Subject: [PATCH] Leaks and error checking almost done function to clean traces of holder is done. Error checking before adjacency list creation is done also. Now focusing on breaking the parser with invalid maps. It should be ready in a day. --- includes/lem_in.h | 5 ++--- srcs/lem_in.c | 5 ++++- srcs/lm_check_errors.c | 26 ++++++++++++++++++++++---- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/includes/lem_in.h b/includes/lem_in.h index 6898070..e03ddad 100644 --- a/includes/lem_in.h +++ b/includes/lem_in.h @@ -6,13 +6,12 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/23 17:31:19 by tmaze #+# #+# */ -/* Updated: 2019/04/11 10:50:04 by tmaze ### ########.fr */ +/* Updated: 2019/04/11 12:47:51 by mndhlovu ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef LEM_IN_H # define LEM_IN_H - # include "libft.h" # include "limits.h" @@ -104,7 +103,7 @@ int lm_add_vertex(t_lmdata *ldata, char *raw, char flag int lm_ext_conn(t_holder *holder, t_lmdata *data , char *raw); int lm_find_index(t_lmdata *data, char *str); - +void lm_clear_unv(t_holder *holder); int lm_get_value(char *line); void lm_get_cmd_vert(int count, t_syntax *synt , t_lmdata *ldata, char *line); diff --git a/srcs/lem_in.c b/srcs/lem_in.c index a04b3fd..a9a4ff8 100644 --- a/srcs/lem_in.c +++ b/srcs/lem_in.c @@ -6,7 +6,7 @@ /* By: mndhlovu +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/25 06:31:05 by mndhlovu #+# #+# */ -/* Updated: 2019/04/11 10:50:40 by tmaze ### ########.fr */ +/* Updated: 2019/04/11 12:48:07 by mndhlovu ### ########.fr */ /* */ /* ************************************************************************** */ @@ -41,10 +41,13 @@ static int lem_in(t_syntax *synt, t_holder *holder, { if (!(lm_parser(synt, lmdata, holder))) return (0); + if (!(lm_verify_cmd(synt, holder, data))) + return (0); if (!lst_indinit(lmdata)) return (0); if (!(lm_adj_parser(lmdata, holder))) return (0); + lm_clear_unv(holder); if ((*ret = edmunds_karp(lmdata, get_node_role(lmdata, 's')->ind , get_node_role(lmdata, 'e')->ind)) == NULL) return (0); diff --git a/srcs/lm_check_errors.c b/srcs/lm_check_errors.c index dc1df1a..3fd5942 100644 --- a/srcs/lm_check_errors.c +++ b/srcs/lm_check_errors.c @@ -6,7 +6,7 @@ /* By: mndhlovu +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/04/02 08:39:09 by mndhlovu #+# #+# */ -/* Updated: 2019/04/08 15:43:01 by tmaze ### ########.fr */ +/* Updated: 2019/04/11 12:48:13 by mndhlovu ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,10 +25,28 @@ int lm_check_room_before(char **tab, t_syntax *synt) return (1); } -int lm_verify_cmd(t_syntax *synt) +void lm_clear_unv(t_holder *holder) { - if (synt->s_cmd && synt->e_cmd && synt->v_error - && synt->l_error && synt->e_error) + t_temp *data; + t_temp *flush; + + data = holder->data; + while (tmp) + { + flush = data; + data = data->next; + free(flush); + flush = NULL; + } + holder->data = NULL; +} + +int lm_verify_cmd(t_syntax *synt, t_holder *holder, t_lmdata *data) +{ + if (synt->s_cmd && synt->e_cmd && !synt->v_error + && !synt->l_error && !synt->e_error && !synt->s_error + && synt->nb_state && (holder->count > 0) + && (data->nb_nodes > 0)) return (1); return (0); }