From 17d9364f3727be4d9b5e07e9de4ea0b3d4703765 Mon Sep 17 00:00:00 2001 From: klmp200 Date: Fri, 26 May 2017 18:34:30 +0200 Subject: [PATCH] Perfect logic is perfect --- fish_shell/fish_commands.c | 2 ++ fish_shell/fish_core.c | 27 ++++++++++++++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/fish_shell/fish_commands.c b/fish_shell/fish_commands.c index deec191..1249b8f 100644 --- a/fish_shell/fish_commands.c +++ b/fish_shell/fish_commands.c @@ -33,9 +33,11 @@ builtinCommand **getBuiltinCommands(){ int fishCd(WordArray *args) { if (args->size < 2){ fprintf(stderr, "fish: Où sont les arguments de ta commande \"cd\" connard ?!\n"); + return EXIT_FAILURE; } else { if (chdir(args->words[1]) != 0){ perror("fish"); + return EXIT_FAILURE; } } freeWordArray(args); diff --git a/fish_shell/fish_core.c b/fish_shell/fish_core.c index df99802..b135254 100644 --- a/fish_shell/fish_core.c +++ b/fish_shell/fish_core.c @@ -156,33 +156,38 @@ int fishExecute(WordList *list) { int signal = 1; splited = parseWordList(list, &op); - array = wordListToWordArray(list); - - signal = loadRightCommand(array); - if (signal == EXIT_SIGNAL){ - if (splited != NULL) freeWordList(splited); - if (array != NULL) freeWordArray(array); - return signal; - } switch (op) { case AND: + signal = fishExecute(list); if (!signal) signal = fishExecute(splited); else { if (splited != NULL) freeWordList(splited); + splited = NULL; } break; case REVERSE_AND: - if (signal) signal = fishExecute(splited); + signal = fishExecute(list); + if (signal && signal != EXIT_SIGNAL) signal = fishExecute(splited); else { if (splited != NULL) freeWordList(splited); + splited = NULL; } break; case OR: - signal = fishExecute(splited); + signal = fishExecute(list); + if (signal != EXIT_SIGNAL) signal = fishExecute(splited); break; default: - break; + array = wordListToWordArray(list); + signal = loadRightCommand(array); + splited = NULL; } + + if (signal == EXIT_SIGNAL){ + if (splited != NULL) freeWordList(splited); + if (array != NULL) freeWordArray(array); + } + return signal; }