fix check args exit

This commit is contained in:
kinou-p 2022-04-20 18:14:50 +02:00
parent ade8aef236
commit 211c35dacf

View File

@ -3,58 +3,55 @@
/* ::: :::::::: */ /* ::: :::::::: */
/* exit.c :+: :+: :+: */ /* exit.c :+: :+: :+: */
/* +:+ +:+ +:+ */ /* +:+ +:+ +:+ */
/* By: sadjigui <sadjigui@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/04/15 11:23:32 by apommier #+# #+# */ /* Created: 2022/04/20 17:53:35 by apommier #+# #+# */
/* Updated: 2022/04/20 17:48:23 by sadjigui ### ########.fr */ /* Updated: 2022/04/20 18:14:27 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../../includes/minishell.h" #include "../../includes/minishell.h"
unsigned long long ft_atoi_long(const char *nptr) unsigned long long ft_atoi_long(const char *nptr)
{ {
int i; int i;
unsigned long long nbr; unsigned long long nbr;
unsigned long long minus; unsigned long long minus;
minus = 1; minus = 1;
nbr = 0; nbr = 0;
i = 0; i = 0;
while ((nptr[i] >= 9 && nptr[i] <= 13) || nptr[i] == 32) while ((nptr[i] >= 9 && nptr[i] <= 13) || nptr[i] == 32)
i++; i++;
if (nptr[i] == '+') if (nptr[i] == '+')
i++; i++;
else if (nptr[i] == '-') else if (nptr[i] == '-')
{ {
i++; i++;
minus = -1; minus = -1;
} }
while (nptr[i] >= '0' && nptr[i] <= '9') while (nptr[i] >= '0' && nptr[i] <= '9')
{ {
nbr = nbr * 10 + nptr[i] - '0'; nbr = nbr * 10 + nptr[i] - '0';
i++; i++;
} }
return (minus * nbr); return (minus * nbr);
} }
int max_long(char *nbr) int max_long(char *nbr)
{ {
unsigned long long long_max; unsigned long long long_max;
long_max = 9223372036854775807; long_max = 9223372036854775807;
printf("%s\n", nbr);
if (ft_strlen(nbr) > 20) if (ft_strlen(nbr) > 20)
return (1); return (1);
if (nbr[0] == '-') if (nbr[0] == '-')
{ {
printf("--->%lld\n", ft_atoi_long(nbr));
if (ft_atoi_long(nbr + 1) > long_max + 1) if (ft_atoi_long(nbr + 1) > long_max + 1)
return (1); return (1);
} }
else if (ft_atoi_long(nbr) > long_max) else if (ft_atoi_long(nbr) > long_max)
return (1); return (1);
printf("return 0\n");
return (0); return (0);
} }
@ -64,11 +61,8 @@ void exit_error(t_cmd *cmd)
exit_shell(cmd, 2); exit_shell(cmd, 2);
} }
void ft_exit(t_s_cmd *cmd) int check_exit_args(t_s_cmd *cmd)
{ {
int i;
i = -1;
if (cmd->nb_args > 2) if (cmd->nb_args > 2)
{ {
ft_putstr_fd("Minishell: exit: too many arguments\n", 2); ft_putstr_fd("Minishell: exit: too many arguments\n", 2);
@ -76,14 +70,27 @@ void ft_exit(t_s_cmd *cmd)
cmd->big_cmd->err_var = 1; cmd->big_cmd->err_var = 1;
else else
exit(1); exit(1);
return ; return (0);
} }
return (1);
}
void ft_exit(t_s_cmd *cmd)
{
int i;
i = 0;
if (!check_exit_args(cmd))
return ;
else if (cmd->nb_args == 1) else if (cmd->nb_args == 1)
exit_shell(cmd->big_cmd, 0); exit_shell(cmd->big_cmd, 0);
while (cmd->args[1][++i]) while (cmd->args[1][i] == ' ')
i++;
if (cmd->args[1][i] == '-')
i++;
while (cmd->args[1][i])
{ {
if ((!ft_isdigit(cmd->args[1][i]) && !(cmd->args[1][i] == '-' if (!ft_isdigit(cmd->args[1][i++]))
&& ft_isdigit(cmd->args[1][i + 1]))))
exit_error(cmd->big_cmd); exit_error(cmd->big_cmd);
} }
if (max_long(cmd->args[1])) if (max_long(cmd->args[1]))