/* * File: command.c * Author: Arthur Brandao * * Created on 9 novembre 2018 */ #include #include #include #include "error.h" #include "str.h" #include "parser.h" #include "command.h" /* --- Extern --- */ extern Error error; char* cmdlist[2] = { "cd", NULL }; /* --- Fonctions publiques --- */ boolean is_internal_cmd(const char* cmd){ //Parcours tableau pour trouver correspondance for(int i = 0; cmdlist[i] != NULL; i++){ printf("%s - %s\n", cmd, cmdlist[i]); if(strncmp(cmd, cmdlist[i], strlen(cmdlist[i]) + 1) == 0){ return true; } } return false; } int launch_internal_command(Command* cmd){ int result, length = strlen(cmd->name) + 1; //cd if(strncmp(cmd->name, cmdlist[0], length) == 0){ result = cd(cmd->argc, cmd->argv); return result; } //Aucune commande else { return SHELL_FAIL; } } /* --- Commandes --- */ int cd(int argc, char** argv) { //Si trop d'arguments if (argc > 2) { error.print("too many arguments : 1 required, %d given\n", argc - 1); return SHELL_FAIL; } else { //Si aucun argument on va à la racine if (argc == 1) { if (chdir("/") == ERR) { addperror("Erreur chdir()"); return SHELL_ERR; } } //Sinon on va dans le dossier indiqué par l'utilisateur else { if (chdir(argv[1]) == ERR) { error.print("path does not exist\n"); return SHELL_ERR; } } } return SHELL_OK; //show_current_dir("current working directory is: ", "\n"); }