diff --git a/fish_shell/fish_commands.c b/fish_shell/fish_commands.c index 7c3e40d..18d45b4 100644 --- a/fish_shell/fish_commands.c +++ b/fish_shell/fish_commands.c @@ -55,7 +55,7 @@ int fishHelp(WordArray *args) { } int fishExit(WordArray *args) { - freeWordArray(args); + args->size = args->size; return EXIT_SIGNAL; } diff --git a/fish_shell/fish_core.c b/fish_shell/fish_core.c index 922b4f6..1532aa1 100644 --- a/fish_shell/fish_core.c +++ b/fish_shell/fish_core.c @@ -171,6 +171,12 @@ int fishExecute(WordList *list) { if (splited != NULL) freeWordList(splited); } break; + case REVERSE_AND: + if (signal) signal = fishExecute(splited); + else { + if (splited != NULL) freeWordList(splited); + } + break; case OR: signal = fishExecute(splited); break; @@ -194,11 +200,13 @@ int loadRightCommand(WordArray *array){ WordList * parseWordList(WordList *list, shell_operator *an_operator) { char *op_str[] = { + (char*) ";", (char*) "||", (char*) "&&" }; shell_operator op[] = { OR, + REVERSE_AND, AND }; WordList *newList = NULL; diff --git a/fish_shell/fish_types.h b/fish_shell/fish_types.h index 860efa5..cef1a74 100644 --- a/fish_shell/fish_types.h +++ b/fish_shell/fish_types.h @@ -14,7 +14,8 @@ typedef enum { PIPE, BACKGROUND_PROCESS, AND, - OR + OR, + REVERSE_AND } shell_operator ; typedef struct {