rectif cliopts (DG qui segv) + retrait leaks des fds

This commit is contained in:
william 2017-03-25 13:13:19 +01:00
parent 1d7e3fc03c
commit e4e0630c42
3 changed files with 5 additions and 8 deletions

View file

@ -13,7 +13,7 @@
NAME = 42sh NAME = 42sh
CC = gcc CC = gcc
FLAGS = -Wall -Wextra -Werror #-fvisibility=hidden FLAGS = -Wall -Wextra -Werror -fsanitize=address#-fvisibility=hidden
D_FLAGS = -g D_FLAGS = -g
DELTA = $$(echo "$$(tput cols)-47"|bc) DELTA = $$(echo "$$(tput cols)-47"|bc)

View file

@ -21,10 +21,6 @@ static char *check_required(char ***av, char *arg)
{ {
char *ret; char *ret;
DG("%p, av", av);
DG("%p, *av", *av);
DG("%p, arg", arg);
DG("%s, *arg", arg);
if (!av || !*av) if (!av || !*av)
return (NULL); return (NULL);
if (!arg || !*arg || !*(arg + 1)) if (!arg || !*arg || !*(arg + 1))
@ -69,6 +65,8 @@ static int cliopts_parse_short(
{ {
if (!(map = get_map_short(opt_map, arg[i]))) if (!(map = get_map_short(opt_map, arg[i])))
return (ERR_SET(E_CO_INV, arg[i])); return (ERR_SET(E_CO_INV, arg[i]));
((t_data_template*)data)->flag |= map->flag_on;
((t_data_template*)data)->flag &= ~map->flag_off;
if (map->get) if (map->get)
{ {
if (map->arg_required && !(tmp = check_required(av, arg + i))) if (map->arg_required && !(tmp = check_required(av, arg + i)))
@ -77,10 +75,8 @@ static int cliopts_parse_short(
if ((map->get)(tmp, data)) if ((map->get)(tmp, data))
return (ERR_SET(E_CO_MISS, *arg)); return (ERR_SET(E_CO_MISS, *arg));
if (map->arg_required) if (map->arg_required)
arg += ft_strlen(arg) - 1; break ;
} }
((t_data_template*)data)->flag |= map->flag_on;
((t_data_template*)data)->flag &= ~map->flag_off;
} }
return (++(*av) ? 0 : 0); return (++(*av) ? 0 : 0);
} }

View file

@ -19,6 +19,7 @@ void data_exit(void)
data = data_singleton(); data = data_singleton();
ft_strdel(&data->line.input); ft_strdel(&data->line.input);
ft_strdel(&data->binary); ft_strdel(&data->binary);
exec_popfds();
ft_sstrfree(data->env); ft_sstrfree(data->env);
ft_sstrfree(data->local_var); ft_sstrfree(data->local_var);
ft_sstrfree(data->argv); ft_sstrfree(data->argv);