faboussard / 42_minishell

1 stars 0 forks source link

question melodie : ca change grand chose si identifier en argument ou commande ? #40

Closed faboussard closed 5 months ago

melobern commented 5 months ago

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);
}