--- rpl/src/transliteration.c 2013/02/27 17:11:46 1.64 +++ rpl/src/transliteration.c 2013/03/04 13:00:26 1.65 @@ -135,8 +135,40 @@ reencodage(struct_processus *s_etat_proc &longueur_entree, (char **) &pointeur, &longueur_sortie)) == (size_t) -1) { - // On autorise les erreurs EINVAL et EILSEQ - if (errno == EILSEQ) + // On autorise les erreurs EINVAL si le caractère suivant est non + // nul : la séquence d'entrée est continue sur le bloc suivant. + + if (errno == EINVAL) + { + if ((*(buffer_entree + 1)) == d_code_fin_chaine) + { + free(buffer_sortie); + free(chaine_sortie); + + // On affiche une erreur ici car la fonction d'affichage + // de l'erreur utilise la macro printf() donc une + // opération de translitération qui échouera elle aussi. + // Le positionnement de l'erreur permet de sortir du + // programme. + + if ((*s_etat_processus).langue == 'F') + { + fprintf(stderr, "+++Erreur : Erreur de transcodage\n"); + } + else + { + fprintf(stderr, "+++Error : Transcodage error\n"); + } + + (*s_etat_processus).erreur_execution = + d_ex_erreur_transcodage; + return(NULL); + } + } + + // Si la séquence d'entrée est invalide, on reçoit une erreur + // EILSEQ. + else if (errno == EILSEQ) { free(buffer_sortie); free(chaine_sortie);