--- rpl/src/instructions_s1.c 2019/02/17 08:59:39 1.103 +++ rpl/src/instructions_s1.c 2019/05/16 09:15:08 1.106 @@ -3372,10 +3372,10 @@ instruction_sto(struct_processus *s_etat ================================================================================ */ -struct +static struct { struct_processus *s_etat_processus; - struct_liste_chainee *stdin; + struct_liste_chainee *fd_stdin; int pipe_entree; volatile int erreur; } arguments_stdin; @@ -3395,7 +3395,7 @@ thread_stdin(void *argument) ptr = argument; - l_element_courant = (*ptr).stdin; + l_element_courant = (*ptr).fd_stdin; s_etat_processus = (*ptr).s_etat_processus; (*ptr).erreur = d_es; @@ -3849,19 +3849,19 @@ instruction_syseval(struct_processus *s_ if (close(pipes_entree[1]) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; - return; + printf("%d\n",__LINE__); } if (close(pipes_sortie[0]) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; - return; + printf("%d\n",__LINE__); } if (close(pipes_erreur[0]) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; - return; + printf("%d\n",__LINE__); } if (pipes_entree[0] != STDIN_FILENO) @@ -3869,7 +3869,7 @@ instruction_syseval(struct_processus *s_ if (dup2(pipes_entree[0], STDIN_FILENO) == -1) { (*s_etat_processus).erreur_systeme = d_es_processus; - return; + printf("%d\n",__LINE__); } } @@ -3878,7 +3878,7 @@ instruction_syseval(struct_processus *s_ if (dup2(pipes_sortie[1], STDOUT_FILENO) == -1) { (*s_etat_processus).erreur_systeme = d_es_processus; - return; + printf("%d\n",__LINE__); } } @@ -3887,18 +3887,15 @@ instruction_syseval(struct_processus *s_ if (dup2(pipes_sortie[1], STDERR_FILENO) == -1) { (*s_etat_processus).erreur_systeme = d_es_processus; - return; + printf("%d\n",__LINE__); } } - if (nombre_arguments != 0) + if ((nombre_arguments != 0) && ((*s_etat_processus).erreur_systeme + == d_es)) { execvp(arguments[0], arguments); } - else - { - exit(EXIT_SUCCESS); - } /* * L'appel système execvp() a généré une erreur et n'a pu exécuter @@ -3927,6 +3924,17 @@ instruction_syseval(struct_processus *s_ write_atomic(s_etat_processus, pipes_erreur[1], " ", 1); close(pipes_erreur[1]); + if ((*s_etat_processus).langue == 'F') + { + printf("+++Système : erreurinterne dans SYSEVAL [%d]\n", + (int) getpid()); + } + else + { + printf("+++System : SYSEVAL internal error [%d]\n", + (int) getpid()); + } + exit(EXIT_SUCCESS); } else @@ -3991,7 +3999,7 @@ instruction_syseval(struct_processus *s_ } arguments_stdin.s_etat_processus = s_etat_processus; - arguments_stdin.stdin = l_element_stdin; + arguments_stdin.fd_stdin = l_element_stdin; arguments_stdin.pipe_entree = pipes_entree[1]; if (pthread_create(&thread_stdin_tid, &attributs, thread_stdin,