--- rpl/src/formateur_fichiers.c 2010/01/27 22:22:10 1.2 +++ rpl/src/formateur_fichiers.c 2011/06/27 09:04:55 1.29 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.10 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.0 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -30,7 +30,7 @@ Entrées : structure sur l'état du processus et objet à afficher Longueur est la précision requise et longueur_champ, le nombre maximal de caractères de la chaîne résultat (-1 signifiant une absence de contrainte) - Type = 'F/U' + Type = 'F/U' (formaté, non formaté) -------------------------------------------------------------------------------- Sorties : chaine de caractères et longueur du tableau de caractères -------------------------------------------------------------------------------- @@ -1176,16 +1176,37 @@ formateur_fichier(struct_processus *s_et return(NULL); } - chaine = (unsigned char *) malloc((strlen((unsigned char *) - ((*s_objet).objet)) + 1) * sizeof(unsigned char)); - - if (chaine == NULL) + if ((longueur_champ == -1) || (strlen((unsigned char *) + (*s_objet).objet) < longueur_champ)) { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return(NULL); + chaine = (unsigned char *) malloc((strlen((unsigned char *) + ((*s_objet).objet)) + 1) * sizeof(unsigned char)); + + if (chaine == NULL) + { + (*s_etat_processus).erreur_systeme = + d_es_allocation_memoire; + return(NULL); + } + + strcpy(chaine, (unsigned char *) ((*s_objet).objet)); } + else + { + chaine = (unsigned char *) malloc((longueur_champ + 1) + * sizeof(unsigned char)); - strcpy(chaine, (unsigned char *) ((*s_objet).objet)); + if (chaine == NULL) + { + (*s_etat_processus).erreur_systeme = + d_es_allocation_memoire; + return(NULL); + } + + strncpy(chaine, (unsigned char *) ((*s_objet).objet), + longueur_champ); + chaine[longueur_champ] = d_code_fin_chaine; + } } else if ((*s_objet).type == CPL) { @@ -1565,6 +1586,7 @@ formateur_fichier(struct_processus *s_et longueur, longueur_champ, format_sortie, type, longueur_effective, recursivite)) == NULL) { + free(chaine); return(NULL); } @@ -1706,7 +1728,7 @@ formateur_fichier(struct_processus *s_et (((*(*((struct_tableau *) (*s_format).objet)) .elements[i]).type == TBL) && ((*(*((struct_tableau *) (*s_objet).objet)).elements[i]) - .type == TAB))) + .type == TBL))) { chaine_sauvegarde = chaine; @@ -4574,7 +4596,7 @@ formateur_fichier(struct_processus *s_et (((*(*((struct_tableau *) (*s_format).objet)) .elements[i]).type == TBL) && ((*(*((struct_tableau *) (*s_objet).objet)).elements[i]) - .type == TAB))) + .type == TBL))) { chaine_sauvegarde = chaine; @@ -5633,14 +5655,7 @@ formateur_fichier_nombre(struct_processu strcat(construction_chaine, tampon); free(tampon); - if (test_cfsf(s_etat_processus, 48) == d_faux) - { - strcat(construction_chaine, ","); - } - else - { - strcat(construction_chaine, "."); - } + strcat(construction_chaine, ","); tampon = formateur_fichier_reel(s_etat_processus, (void *) &((*((struct_complexe16 *)