--- rpl/rpliconv/rpliconv.c 2010/04/21 13:45:42 1.2 +++ rpl/rpliconv/rpliconv.c 2010/05/24 16:23:10 1.3 @@ -58,13 +58,14 @@ reencodage(unsigned char *chaine_entree, do { longueur_sortie = d_LONGUEUR; + longueur_entree = strlen(buffer_entree); pointeur = buffer_sortie; if ((ios = iconv(transcodage, (char **) &buffer_entree, &longueur_entree, (char **) &pointeur, &longueur_sortie)) == (size_t) -1) { - // On autorise les erreurs EINVAL et EILSEQ + // On autorise les erreurs EINVAL et E2BIG if (errno == EILSEQ) { perror("iconv"); @@ -107,7 +108,9 @@ main(int argc, char *argv[]) unsigned char *fichier_source; unsigned char *fichier_destination; + unsigned long drapeau; unsigned long i; + unsigned long j; unsigned long nombre_caracteres; nom_fichier_source = NULL; @@ -274,8 +277,9 @@ main(int argc, char *argv[]) // Lecture depuis stdin fichier_source = NULL; + drapeau = 0; - for(i = 1;; i++) + for(i = 1; drapeau == 0; i++) { if ((fichier_source = realloc(fichier_source, ((d_LONGUEUR * i) + 1) * sizeof(unsigned char))) == NULL) @@ -284,10 +288,15 @@ main(int argc, char *argv[]) return(-1); } - if (fread(&(fichier_source[d_LONGUEUR * (i - 1)]), - sizeof(unsigned char), d_LONGUEUR, stdin) < d_LONGUEUR) + fflush(stdin); + + for(j = 0; (j < d_LONGUEUR) && (drapeau == 0); j++) { - break; + if ((fichier_source[(d_LONGUEUR * (i - 1)) + j] = getc(stdin)) + == (unsigned char) EOF) + { + drapeau = 1; + } } } }