|
@@ -216,23 +216,28 @@ int run(CommandTab ct){
|
|
|
int tube[ct.length][2];
|
|
|
int tubepos = 0;
|
|
|
int infd = -1, outfd = -1, errfd = -1;
|
|
|
- boolean bpipe = false, nextpipe = false;
|
|
|
+ boolean bpipe = false, skippipe = false, skip = false;
|
|
|
//Parcours les commandes
|
|
|
for(int i = 0; i < ct.length; i++){
|
|
|
c = ct.cmd[i];
|
|
|
+ //Si on skip
|
|
|
+ if(skip){
|
|
|
+ skip = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
//Si pipe avant
|
|
|
- if(nextpipe){
|
|
|
+ if(skippipe){
|
|
|
//Si fin chaine pipe
|
|
|
if(c->next != SHELL_PIPE){
|
|
|
- nextpipe = false;
|
|
|
+ skippipe = false;
|
|
|
}
|
|
|
//Passe la commande
|
|
|
continue;
|
|
|
}
|
|
|
//Si pipe creation d'un fichier commun
|
|
|
- nextpipe = c->next == SHELL_PIPE ;
|
|
|
+ skippipe = c->next == SHELL_PIPE ;
|
|
|
if(c->next == SHELL_PIPE && c->output == STDOUT){
|
|
|
- nextpipe = false;
|
|
|
+ skippipe = false;
|
|
|
bpipe = true;
|
|
|
//Creation tube
|
|
|
if(pipe(tube[tubepos]) == ERR){
|
|
@@ -305,7 +310,15 @@ int run(CommandTab ct){
|
|
|
c->output = STDOUT;
|
|
|
}
|
|
|
//Agit en fonction de la jointure avec la prochaine commande
|
|
|
- /*ToDo*/
|
|
|
+ if(c->next == SHELL_IF){
|
|
|
+ if(result != EXIT_SUCCESS){
|
|
|
+ skip = true;
|
|
|
+ }
|
|
|
+ } else if(c->next == SHELL_ELSE){
|
|
|
+ if(result == EXIT_SUCCESS){
|
|
|
+ skip = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
if(result != EXIT_SUCCESS){
|
|
|
return SHELL_FAIL;
|