--- rpl/src/instructions_r4.c 2023/08/08 08:53:40 1.117 +++ rpl/src/instructions_r4.c 2023/11/24 10:48:21 1.118 @@ -2536,6 +2536,8 @@ instruction_read(struct_processus *s_eta } // Une donnée a été reçue. + // Attention : on peut TOUJOURS recevoir 0 + // indiquant que la socket est close. if (ios >= 0) { @@ -2543,23 +2545,30 @@ instruction_read(struct_processus *s_eta position_initiale = 0; presence_indicateur = d_faux; - do + if (ios > 0) { - if (tampon_lecture[position_initiale] == '{') + do { - presence_indicateur = d_vrai; - break; - } + if (tampon_lecture[position_initiale] == '{') + { + presence_indicateur = d_vrai; + break; + } - position_initiale++; - } while(position_initiale < longueur_effective); + position_initiale++; + } while(position_initiale < longueur_effective); + } + else + { + presence_indicateur = d_vrai; + } if (presence_indicateur == d_vrai) { position_finale = position_initiale + 1; presence_chaine = d_faux; presence_indicateur = d_faux; - niveau = 1; + niveau = 0; while(position_finale < longueur_effective) { @@ -2567,20 +2576,11 @@ instruction_read(struct_processus *s_eta if (caractere == '"') { - if (position_finale > 0) - { - if (tampon_lecture[position_finale - 1] - != '\\') - { - presence_chaine = (presence_chaine == - d_vrai) ? d_faux : d_vrai; - } - } - else + if (tampon_lecture[position_finale - 1] + != '\\') { - presence_chaine = - (presence_chaine == d_vrai) - ? d_faux : d_vrai; + presence_chaine = (presence_chaine == + d_vrai) ? d_faux : d_vrai; } } else @@ -2785,7 +2785,6 @@ instruction_read(struct_processus *s_eta } } while(trame_complete == d_faux); - tampon_lecture[++position_finale] = d_code_fin_chaine; tampon = (*s_etat_processus).instruction_courante; (*s_etat_processus).instruction_courante = tampon_lecture; @@ -3179,7 +3178,7 @@ instruction_read(struct_processus *s_eta return; } - if (ios <= 0) + if (ios < 0) { nanosleep(&attente, NULL); INCR_GRANULARITE(attente.tv_nsec); @@ -3210,7 +3209,7 @@ instruction_read(struct_processus *s_eta position_initiale = 0; presence_indicateur = d_faux; } - else if (ios > 0) + else if (ios >= 0) { // On retire une trame du buffer.