--- rpl/src/instructions_s1.c 2012/05/21 17:25:44 1.48 +++ rpl/src/instructions_s1.c 2012/06/12 11:44:34 1.49 @@ -3417,6 +3417,7 @@ instruction_syseval(struct_processus *s_ struct sigaction action_courante; struct sigaction action_passee; + unsigned char *ligne; unsigned char *ptr; unsigned char *ptr2; unsigned char registre_autorisation_empilement_programme; @@ -3855,8 +3856,14 @@ instruction_syseval(struct_processus *s_ while(l_element_courant != NULL) { - longueur_ecriture = strlen((unsigned char *) - (*(*l_element_courant).donnee).objet); + if ((ligne = formateur_flux(s_etat_processus, + (unsigned char *) (*(*l_element_courant).donnee) + .objet, &longueur_ecriture)) == NULL) + { + (*s_etat_processus).erreur_systeme = + d_es_allocation_memoire; + return; + } # ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) @@ -3870,8 +3877,7 @@ instruction_syseval(struct_processus *s_ } while(write_atomic(s_etat_processus, - pipes_entree[1], (unsigned char *) - (*(*l_element_courant).donnee).objet, + pipes_entree[1], ligne, longueur_ecriture) != longueur_ecriture) { # ifndef SEMAPHORES_NOMMES @@ -3906,6 +3912,8 @@ instruction_syseval(struct_processus *s_ } } + free(ligne); + while(write_atomic(s_etat_processus, pipes_entree[1], "\n", 1) != 1) { @@ -4031,6 +4039,8 @@ instruction_syseval(struct_processus *s_ return; } + tampon[0] = d_code_fin_chaine; + # ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else @@ -4116,7 +4126,15 @@ instruction_syseval(struct_processus *s_ * Transformation de la chaîne en liste */ - longueur_tampon = strlen(tampon); + if ((ligne = analyse_flux(s_etat_processus, tampon, + &longueur_tampon)) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + free(tampon); + tampon = ligne; for(i = 0, ptr = tampon, nombre_lignes = 0; i < (long) longueur_tampon; i++, ptr++)