Ajout gestion erreur cd
This commit is contained in:
parent
e1b008fce4
commit
65574403f3
2 changed files with 51 additions and 51 deletions
|
@ -14,55 +14,6 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
/**
|
|
||||||
* 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
|
* native_command(): vérifie si la commande entrée par l’utilisateur
|
||||||
* est implémenté dans le terminal
|
* est implémenté dans le terminal
|
||||||
|
@ -108,8 +59,57 @@ void change_dir(char *dir)
|
||||||
{
|
{
|
||||||
if (chdir(dir) < 0)
|
if (chdir(dir) < 0)
|
||||||
{
|
{
|
||||||
|
int code = errno;
|
||||||
char txt_error[MAX_LENGTH] = "cd: ";
|
char txt_error[MAX_LENGTH] = "cd: ";
|
||||||
strcat(txt_error, dir);
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
#define ERR_PIPE_CREATION 200 /* erreur lors de la création des pipes */
|
#define ERR_PIPE_CREATION 200 /* erreur lors de la création des pipes */
|
||||||
#define ERR_FORK 201 /* erreur lors du fork */
|
#define ERR_FORK 201 /* erreur lors du fork */
|
||||||
|
|
||||||
void error(int code, int type, char *message);
|
|
||||||
int native_command(char *command[]);
|
int native_command(char *command[]);
|
||||||
void change_dir(char *dir);
|
void change_dir(char *dir);
|
||||||
|
void error(int code, int type, char *message);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue