diff --git a/src/parser/parser.c b/src/parser/parser.c index 85d4b7f..8487081 100644 --- a/src/parser/parser.c +++ b/src/parser/parser.c @@ -31,22 +31,22 @@ char* get_input() } /** - * parse_char(): Récupère l’entrée de l’utilisateur avant de la parser + * get_command(): Récupère l’entrée de l’utilisateur avant de la parser * @args: Tableau de string * @find: caractère utilisé pour parser * * Récupère l’entrée de l’utilisateur avant de la parser avec le caractère * find. Chaque string sera mise dans une case de args. */ -void parse_char(char *args[], char find) +void get_command(char *args[], char find) { char *user_input = get_input(); - tok_space(user_input, args, find); + parse_string(user_input, args, find); free(user_input); } /** - * tok_space(): Découpe la chaine orig et met chaque mot dans le tableau dest + * parse_string(): Découpe la chaine orig et met chaque mot dans le tableau dest * @orig: chaine à découper * @dest: tableau de string où sera stocker les mots * @find: caractère à utilise pour parser la chaine orig @@ -54,7 +54,7 @@ void parse_char(char *args[], char find) * La chaine de caractères orig est découpée selon le caractère find * et chaques mots sont mis dans le tableau dest. */ -void tok_space(char *orig, char *dest[], char find) +void parse_string(char *orig, char *dest[], char find) { char *token = strtok(orig, &find); diff --git a/src/parser/parser.h b/src/parser/parser.h index ac147b3..06279b1 100644 --- a/src/parser/parser.h +++ b/src/parser/parser.h @@ -9,9 +9,10 @@ # define _PARSER_H_ #define MAX_LENGTH 200 /* taille maximum des tableaux utilisés */ +#define SHELL rishtik char* get_input(); -void parse_char(char *args[], char find); -void tok_space(char *args,char *commands[], char find); +void get_command(char *args[], char find); +void parse_string(char *args,char *commands[], char find); #endif diff --git a/src/shellOpt.c b/src/shellOpt.c index c9bd2d1..5f257d7 100644 --- a/src/shellOpt.c +++ b/src/shellOpt.c @@ -29,44 +29,57 @@ int main() command[i] = (char *) calloc(MAX_LENGTH, sizeof(char)); } - parse_char(args, '|'); + get_command(args, '|'); int index = 0; while (strcmp(args[0], "exit")) { while (args[index] != NULL) { - pid = fork(); - if (!pid) + if (strncmp(args[index], "cd", 2)) { - tok_space(args[index], command, ' '); - if (args[1] != NULL) + pid = fork(); + if (!pid) { - if (args[index+1] == NULL) - dup2(my_pipe[0], STDIN_FILENO); - else if (index == 0) - dup2(my_pipe[1], STDOUT_FILENO); - /*else { - dup2(my_pipe[0], STDIN_FILENO); - dup2(my_pipe[1], STDOUT_FILENO); - }*/ - close(my_pipe[0]); - close(my_pipe[1]); - } + parse_string(args[index], command, ' '); + if (args[1] != NULL) + { + if (args[index+1] == NULL) + dup2(my_pipe[0], STDIN_FILENO); + else if (index == 0) + dup2(my_pipe[1], STDOUT_FILENO); + /*else { + dup2(my_pipe[0], STDIN_FILENO); + dup2(my_pipe[1], STDOUT_FILENO); + }*/ + close(my_pipe[0]); + close(my_pipe[1]); + } - execvp(command[0], command); - return 0; - } - else - { - if (args[index + 1] == NULL) - { - close(my_pipe[1]); - close(my_pipe[0]); - waitpid(pid, NULL, 0); + execvp(command[0], command); + return 0; + } + else + { + if (args[index + 1] == NULL) + { + close(my_pipe[1]); + close(my_pipe[0]); + waitpid(pid, NULL, 0); + } } - index++; } + else + { + parse_string(args[index], command, ' '); + execvp(command[0], command); + for (int i = 0; i < MAX_LENGTH; i++) + { + free(command[i]); + command[i] = (char *) calloc(MAX_LENGTH, sizeof(char)); + } + } + index++; } for (int i = 0; i < MAX_LENGTH; i++) @@ -76,7 +89,7 @@ int main() args[i] = (char *) calloc(MAX_LENGTH, sizeof(char)); command[i] = (char *) calloc(MAX_LENGTH, sizeof(char)); } - parse_char(args, '|'); + get_command(args, '|'); if (pipe(my_pipe) == -1) { printf("erreur sur le pipe");