--- rpl/src/instructions_r4.c 2013/09/06 10:30:55 1.81 +++ rpl/src/instructions_r4.c 2013/09/26 14:19:28 1.82 @@ -865,6 +865,7 @@ instruction_read(struct_processus *s_eta integer8 position_finale; integer8 position_initiale; + logical1 device; logical1 format_degenere; logical1 indicateur_48; logical1 presence_chaine; @@ -1973,12 +1974,21 @@ instruction_read(struct_processus *s_eta BUG(((*descripteur).type != 'C'), uprintf("Bad filtype !\n")); longueur_enregistrement = 0; + device = d_faux; if ((position_initiale = ftell((*descripteur).descripteur_c)) == -1) { - (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; - return; + if (errno == ESPIPE) + { + device = d_vrai; + } + else + { + (*s_etat_processus).erreur_systeme = + d_es_erreur_fichier; + return; + } } l_element_courant_format = (struct_liste_chainee *) @@ -2072,15 +2082,19 @@ instruction_read(struct_processus *s_eta longueur_enregistrement++; } while((c != '\n') && (c != EOF)); - if (fseek((*descripteur).descripteur_c, - (long) position_initiale, SEEK_SET) != 0) + if (device == d_faux) { - liberation(s_etat_processus, s_objet_argument_1); - liberation(s_etat_processus, s_objet_resultat); + if (fseek((*descripteur).descripteur_c, + (long) position_initiale, SEEK_SET) != 0) + { + liberation(s_etat_processus, + s_objet_argument_1); + liberation(s_etat_processus, s_objet_resultat); - (*s_etat_processus).erreur_systeme = - d_es_erreur_fichier; - return; + (*s_etat_processus).erreur_systeme = + d_es_erreur_fichier; + return; + } } } else