Ajout gestion erreur cd

This commit is contained in:
rick 2021-02-21 20:42:54 +01:00
parent e1b008fce4
commit 65574403f3
Signed by: Rick
GPG key ID: 2B593F087240EE99
2 changed files with 51 additions and 51 deletions

View file

@ -14,55 +14,6 @@
#include <unistd.h>
#include <errno.h>
/**
* error(): gère les erreurs selon leur code et leur type
* @code: code de lerreur, voir les différents codes dans le fichier .h
* @type: NON_FATAL_ERROR pour continuer lexécution
* FATAL_ERROR pour stoper le programme
* @message: message à afficher pour + dinfos 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 lutilisateur
* 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 lerreur, voir les différents codes dans le fichier .h
* @type: NON_FATAL_ERROR pour continuer lexécution
* FATAL_ERROR pour stoper le programme
* @message: message à afficher pour + dinfos 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);
}

View file

@ -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