Écriture de la fonction native pour exit, close #1

Ajout doc & suppression fonction inutile dans parser.
This commit is contained in:
rick 2021-02-23 18:23:36 +01:00
parent fa1aceadc6
commit 4018bd6b4c
Signed by: Rick
GPG key ID: 2B593F087240EE99
5 changed files with 36 additions and 44 deletions

View file

@ -17,7 +17,8 @@
#include <signal.h>
pid_t pid;
int exit_code;
int exit_code = 0;
int need_exit = 0;
/**
* native_command(): vérifie si la commande entrée par lutilisateur
@ -34,9 +35,12 @@ int exit_code;
int native_command(char *command[])
{
int ret = 1; /* 0 si commande non native */
if (!strcmp(command[0], "cd"))
change_dir(command);
if (!strcmp(command[0], "ouï-dire") || !strcmp(command[0], "oui-dire")
else if (!strcmp(command[0], "exit"))
thus_exit(command);
else if (!strcmp(command[0], "ouï-dire") || !strcmp(command[0], "oui-dire")
|| !strcmp(command[0], "echo"))
{
char *tmp = calloc(MAX_LENGTH, sizeof(char));
@ -58,7 +62,9 @@ int native_command(char *command[])
/**
* change_dir(): fonction pour implémenter la commande cd
* @dir: le répertoire à ouvrir
* @command: la commande passée avec ses arguments
*
* Structure de la commande cd : cd dossier
*/
void change_dir(char *command[])
{
@ -75,10 +81,21 @@ void change_dir(char *command[])
}
}
//void thus_exit(char *command[])
//{
// exit_code = 0;
//}
/**
* thus_exit(): fonction pour implémenter la commande exit
* @command: la commande passée avec ses arguments
*
* Si lutilisateur ne met pas darguments,
* la valeur 0 sera utilisé par défaut.
* Cette valeur sera utilisée pour exit_code et
* need_exit sera mit à 1.
*/
void thus_exit(char *command[])
{
if (command[1] != NULL)
exit_code = atoi(command[1]);
need_exit = 1;
}
void ctrl_c_handler()
{
@ -94,6 +111,9 @@ void ctrl_c_handler()
* @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
*
* En cas derreur fatale, le code derreur sera mit dans exit_code
* et need_exit sera mit à 1.
*/
void error(int code, int type, char *message)
{
@ -133,5 +153,8 @@ void error(int code, int type, char *message)
}
if (type == FATAL_ERROR)
exit(code);
{
need_exit = 1;
exit_code = code;
}
}

View file

@ -21,10 +21,11 @@
extern pid_t pid;
extern int exit_code;
extern int need_exit; /* 0 = pas besoin de sortir, 1 = commande exit appelée */
int native_command(char *command[]);
void change_dir(char *command[]);
//void thus_exit(char *command[])
void thus_exit(char *command[]);
void ctrl_c_handler();
void error(int code, int type, char *message);

View file

@ -113,34 +113,3 @@ void parse_string(char *orig, char *dest[], char find)
free(token);
}
/**
* detect_exit(): vérifie si la commande entrée est exit
* @command: la première commande entrée par lutilisateur
*
* Return: 0 si ce nest pas exit, 1 sinon
*/
int detect_exit(char *command)
{
/*
* TODO cest dégueulasse, à changer pour un truc plus propre
*/
char *str = malloc(MAX_LENGTH * sizeof(char));
strcpy(str, command);
char find = ' ';
char *token = strtok(str, &find);
char *args[MAX_LENGTH];
int ret = 0, i = 0;
while (token != NULL)
{
args[i] = token;
token = strtok(NULL, &find);
i++;
}
if (i == 1 && !strcmp(args[0], "exit"))
ret++;
free(token);
return ret;
}

View file

@ -13,6 +13,5 @@
char* get_input();
int get_command(char *args[], char find);
void parse_string(char *args,char *commands[], char find);
int detect_exit(char *command);
#endif

View file

@ -28,7 +28,7 @@ int main()
char *commands[MAX_LENGTH];
char *args[MAX_LENGTH];
int result, index = 0, end = 0; /* end permet de savoir quand sarreter */
int result, index = 0;
int my_pipe[2];
/* init pour la gestion du ctrl c */
@ -50,7 +50,7 @@ int main()
commands[i] = (char *) calloc(MAX_LENGTH, sizeof(char));
}
while (!get_command(commands, '|') && !detect_exit(commands[0]))
while (!need_exit && !get_command(commands, '|'))
{
while (commands[index] != NULL)
{
@ -122,5 +122,5 @@ int main()
free(commands[i]);
free(args[i]);
}
return 0;
return exit_code;
}