Ca change des choses dans cd actuellement, je pense que ca pourrait éventuellement en changer a d'autres endroits mais sinon je ne vois pas. Tout se fait au niveau du parsing : la commande reliée à ses arguments, donc à part pour le cas dont je parle ensuite, je ne sais pas trop.
Pour cd :
J'avais un soucis que je tente de régler en prenant en compte le type afin de savoir s'il y a réellement trop d'arguments ou si un espace entre deux quotes fait que la liste de token compte trois éléments au lieu de deux (commande + unique argument : cd ' ');
Contexte : test sur cd ' ' qui donne bash: cd: : No such file or directory sous Bash (si dossier non créé, car oui, on peut mkdir ' ', un dossier qui se nomme espace).
Le même test sur minishell donnait ça (avec une demande de ma part d'imprimer le nom du command->next et du command->next->next) :
>>> Minishell>$ cd ' '
minishell: cd: too many arguments
>>> Minishell>$ cd " "
minishell: cd: too many arguments
J'ai vérifié quel type il assignait à chacun des éléments de cette liste de tokens :
cd == 1 (COMMAND)
next == 2 (ARGUMENT)
next->next == 1 (COMMAND)
Du coup, pour qu'il comprenne qui doit continuer de faire cd normalement, j'ai mis cette fonction qui vérifie :
bool too_many_args(t_token_list *command)
{
if (command->next != NULL && command->next->next != NULL)
{
if (command->next->next->e_type != ARGUMENT && command->next->next->next == NULL)
return (0);
else
ft_putendl_fd("minishell: cd: too many arguments", 2);
return (1);
}
return (0);
}
Ca change des choses dans cd actuellement, je pense que ca pourrait éventuellement en changer a d'autres endroits mais sinon je ne vois pas. Tout se fait au niveau du parsing : la commande reliée à ses arguments, donc à part pour le cas dont je parle ensuite, je ne sais pas trop.
Pour cd : J'avais un soucis que je tente de régler en prenant en compte le type afin de savoir s'il y a réellement trop d'arguments ou si un espace entre deux quotes fait que la liste de token compte trois éléments au lieu de deux (commande + unique argument :
cd ' '
);Contexte : test sur
cd ' '
qui donnebash: cd: : No such file or directory
sous Bash (si dossier non créé, car oui, on peutmkdir ' '
, un dossier qui se nomme espace). Le même test sur minishell donnait ça (avec une demande de ma part d'imprimer le nom du command->next et du command->next->next) :J'ai vérifié quel type il assignait à chacun des éléments de cette liste de tokens : cd == 1 (COMMAND) next == 2 (ARGUMENT) next->next == 1 (COMMAND)
Du coup, pour qu'il comprenne qui doit continuer de faire cd normalement, j'ai mis cette fonction qui vérifie :