--- rpl/rpliconv/rpliconv.c 2010/01/26 15:22:46 1.1.1.1 +++ rpl/rpliconv/rpliconv.c 2010/06/20 17:06:27 1.6 @@ -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"); @@ -97,6 +98,7 @@ main(int argc, char *argv[]) { file *f_source; + int caractere; int ios; unsigned char *encodage_destination; @@ -107,7 +109,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 +278,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 +289,18 @@ main(int argc, char *argv[]) return(-1); } - if (fread(&(fichier_source[d_LONGUEUR * (i - 1)]), - sizeof(unsigned char), d_LONGUEUR, stdin) < d_LONGUEUR) + for(j = 0; (j < d_LONGUEUR) && (drapeau == 0); j++) { - break; + if ((caractere = getc(stdin)) == EOF) + { + fichier_source[(d_LONGUEUR * (i - 1)) + j] = 0; + drapeau = 1; + } + else + { + fichier_source[(d_LONGUEUR * (i - 1)) + j] = + (unsigned char) caractere; + } } } }