From 65574403f3fe49bb1ce687c94608c9a17cb50efa Mon Sep 17 00:00:00 2001 From: rick Date: Sun, 21 Feb 2021 20:42:54 +0100 Subject: [PATCH] Ajout gestion erreur cd --- src/boitoutil/essential_shell.c | 100 ++++++++++++++++---------------- src/boitoutil/essential_shell.h | 2 +- 2 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/boitoutil/essential_shell.c b/src/boitoutil/essential_shell.c index 9623614..53fca43 100644 --- a/src/boitoutil/essential_shell.c +++ b/src/boitoutil/essential_shell.c @@ -14,55 +14,6 @@ #include #include -/** - * error(): gère les erreurs selon leur code et leur type - * @code: code de l’erreur, voir les différents codes dans le fichier .h - * @type: NON_FATAL_ERROR pour continuer l’exécution - * FATAL_ERROR pour stoper le programme - * @message: message à afficher pour + d’infos ou erreur non implémentée - */ -void error(int code, int type, char *message) -{ - if (code == 0) - return; - - const char *txt_error = strerror(code); - if (errno == EINVAL) - { - switch (code) - { - case ERR_PIPE_CREATION: - fprintf(stderr, "Erreur lors de la création des pipes.\n"); - break; - case ERR_FORK: - fprintf(stderr, "Le fork a échoué, le processus enfant a été avorté.\n"); - break; - - default: - if (message == NULL) - fprintf(stderr, "Erreur inconnue.\n"); - else - fprintf(stderr, "%s\n", message); - } - if (message != NULL) - fprintf(stderr, "Message complémentaire :\n%s\n", message); - } - else - { - if (message != NULL) - { - errno = code; - perror(message); - } - else - fprintf(stderr, "%s\n", txt_error); - } - - - if (type == FATAL_ERROR) - exit(code); -} - /** * native_command(): vérifie si la commande entrée par l’utilisateur * est implémenté dans le terminal @@ -108,8 +59,57 @@ void change_dir(char *dir) { if (chdir(dir) < 0) { + int code = errno; char txt_error[MAX_LENGTH] = "cd: "; strcat(txt_error, dir); - error(errno, NON_FATAL_ERROR, txt_error); + error(code, NON_FATAL_ERROR, txt_error); } } + +/** + * error(): gère les erreurs selon leur code et leur type + * @code: code de l’erreur, voir les différents codes dans le fichier .h + * @type: NON_FATAL_ERROR pour continuer l’exécution + * FATAL_ERROR pour stoper le programme + * @message: message à afficher pour + d’infos ou erreur non implémentée + */ +void error(int code, int type, char *message) +{ + if (code == 0) + return; + + /* const char *txt_error = strerror(code); */ + if (errno == EINVAL) + { + switch (code) + { + case ERR_PIPE_CREATION: + fprintf(stderr, "Erreur lors de la création des pipes.\n"); + break; + case ERR_FORK: + fprintf(stderr, "Le fork a échoué, le processus enfant a été avorté.\n"); + break; + + default: + if (message == NULL) + fprintf(stderr, "Erreur inconnue.\n"); + else + fprintf(stderr, "%s\n", message); + } + if (message != NULL) + fprintf(stderr, "Message complémentaire :\n%s\n", message); + } + else + { + if (message != NULL) + { + errno = code; + perror(message); + } + /* else + fprintf(stderr, "%s\n", txt_error); */ + } + + if (type == FATAL_ERROR) + exit(code); +} diff --git a/src/boitoutil/essential_shell.h b/src/boitoutil/essential_shell.h index a3b57d0..53d1eae 100644 --- a/src/boitoutil/essential_shell.h +++ b/src/boitoutil/essential_shell.h @@ -17,8 +17,8 @@ #define ERR_PIPE_CREATION 200 /* erreur lors de la création des pipes */ #define ERR_FORK 201 /* erreur lors du fork */ -void error(int code, int type, char *message); int native_command(char *command[]); void change_dir(char *dir); +void error(int code, int type, char *message); #endif