Écriture de la fonction native pour exit, close #1
Ajout doc & suppression fonction inutile dans parser.
This commit is contained in:
parent
fa1aceadc6
commit
4018bd6b4c
5 changed files with 36 additions and 44 deletions
|
@ -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 l’utilisateur
|
||||
|
@ -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 l’utilisateur ne met pas d’arguments,
|
||||
* 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 l’exécution
|
||||
* FATAL_ERROR pour stoper le programme
|
||||
* @message: message à afficher pour + d’infos ou erreur non implémentée
|
||||
*
|
||||
* En cas d’erreur fatale, le code d’erreur 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 l’utilisateur
|
||||
*
|
||||
* Return: 0 si ce n’est pas exit, 1 sinon
|
||||
*/
|
||||
int detect_exit(char *command)
|
||||
{
|
||||
/*
|
||||
* TODO c’est 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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 s’arreter */
|
||||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue