Diff for /rpl/src/formateur_fichiers.c between versions 1.65 and 1.75

version 1.65, 2013/03/22 13:09:13 version 1.75, 2013/12/03 09:36:11
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.13    RPL/2 (R) version 4.1.17
   Copyright (C) 1989-2013 Dr. BERTRAND Joël    Copyright (C) 1989-2013 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
Line 19 Line 19
 ================================================================================  ================================================================================
 */  */
   
 #define DEBUG_ERREURS  
 #include "rpl-conv.h"  #include "rpl-conv.h"
   
   
Line 85  formateur_fichier(struct_processus *s_et Line 85  formateur_fichier(struct_processus *s_et
     struct_liste_chainee        *l_liste1;      struct_liste_chainee        *l_liste1;
     struct_liste_chainee        *l_liste2;      struct_liste_chainee        *l_liste2;
   
       struct_objet                *s_format_tmp;
     struct_objet                *s_sous_objet;      struct_objet                *s_sous_objet;
     struct_objet                *s_sous_objet_1;      struct_objet                *s_sous_objet_1;
     struct_objet                *s_sous_objet_2;      struct_objet                *s_sous_objet_2;
Line 1000  formateur_fichier(struct_processus *s_et Line 1001  formateur_fichier(struct_processus *s_et
   
             if (format_sortie == 'N')              if (format_sortie == 'N')
             {              {
                 sprintf(tampon, "%llX", (*((logical8 *)                  sprintf(tampon, "%llX", (unsigned long long) (*((logical8 *)
                         ((*s_objet).objet))));                          ((*s_objet).objet))));
                 strcpy(base, "h");                  strcpy(base, "h");
             }              }
Line 1010  formateur_fichier(struct_processus *s_et Line 1011  formateur_fichier(struct_processus *s_et
                 {                  {
                     case 2:                      case 2:
                     {                      {
                         sprintf(tampon, "%llX", (*((logical8 *)                          sprintf(tampon, "%llX", (unsigned long long)
                                 ((*s_objet).objet))));                                  (*((logical8 *) ((*s_objet).objet))));
   
                         chaine = (unsigned char *) malloc((strlen(tampon) + 1)                          chaine = (unsigned char *) malloc((strlen(tampon) + 1)
                                 * sizeof(unsigned char));                                  * sizeof(unsigned char));
Line 1120  formateur_fichier(struct_processus *s_et Line 1121  formateur_fichier(struct_processus *s_et
   
                     case 8:                      case 8:
                     {                      {
                         sprintf(tampon, "%llo", (*((logical8 *)                          sprintf(tampon, "%llo", (*((unsigned long long *)
                                 ((*s_objet).objet))));                                  ((*s_objet).objet))));
                         strcpy(base, "o");                          strcpy(base, "o");
                         break;                          break;
Line 1128  formateur_fichier(struct_processus *s_et Line 1129  formateur_fichier(struct_processus *s_et
   
                     case 10:                      case 10:
                     {                      {
                         sprintf(tampon, "%llu", (*((logical8 *)                          sprintf(tampon, "%llu", (*((unsigned long long *)
                                 ((*s_objet).objet))));                                  ((*s_objet).objet))));
                         strcpy(base, "d");                          strcpy(base, "d");
                         break;                          break;
Line 1136  formateur_fichier(struct_processus *s_et Line 1137  formateur_fichier(struct_processus *s_et
   
                     case 16:                      case 16:
                     {                      {
                         sprintf(tampon, "%llX", (*((logical8 *)                          sprintf(tampon, "%llX", (unsigned long long)
                                 ((*s_objet).objet))));                                  (*((logical8 *) ((*s_objet).objet))));
                         strcpy(base, "h");                          strcpy(base, "h");
                         break;                          break;
                     }                      }
Line 1673  formateur_fichier(struct_processus *s_et Line 1674  formateur_fichier(struct_processus *s_et
                                   
                     chaine_sauvegarde = chaine;                      chaine_sauvegarde = chaine;
   
                       // Si le format_sortie vaut 'N', on remplace le format par
                       // { "native*(*)" }. L'intérêt est de pouvoir traiter une
                       // liste par un format "native*(*)".
   
                       if ((format_sortie == 'N') && ((*(*l_element_courant)
                               .donnee).type == LST))
                       {
                           if ((s_format_tmp = allocation(s_etat_processus, LST))
                                   == NULL)
                           {
                               return(NULL);
                           }
   
                           if (((*s_format_tmp).objet = allocation_maillon(
                                   s_etat_processus)) == NULL)
                           {
                               return(NULL);
                           }
   
                           (*((struct_liste_chainee *) (*s_format_tmp).objet))
                                   .suivant = NULL;
   
                           if (((*((struct_liste_chainee *) (*s_format_tmp).objet))
                                   .donnee = allocation(s_etat_processus, CHN))
                                   == NULL)
                           {
                               return(NULL);
                           }
   
                           if (((*(*((struct_liste_chainee *) (*s_format_tmp)
                                   .objet)).donnee).objet = malloc(11 *
                                   sizeof(unsigned char))) == NULL)
                           {
                               (*s_etat_processus).erreur_systeme =
                                       d_es_allocation_memoire;
                               return(NULL);
                           }
   
                           strcpy((unsigned char *) (*(*((struct_liste_chainee *)
                                   (*s_format_tmp).objet)).donnee).objet,
                                   "native*(*)");
                       }
                       else
                       {
                           if ((s_format_tmp = copie_objet(s_etat_processus,
                                   s_format, 'P')) == NULL)
                           {
                               return(NULL);
                           }
                       }
   
                     if ((chaine_formatee = formateur_fichier(s_etat_processus,                      if ((chaine_formatee = formateur_fichier(s_etat_processus,
                             (*l_element_courant).donnee, s_format,                              (*l_element_courant).donnee, s_format,
                             longueur, longueur_champ, format_sortie, type,                              longueur, longueur_champ, format_sortie, type,
                             longueur_effective, recursivite, export_fichier))                              longueur_effective, recursivite, export_fichier))
                             == NULL)                              == NULL)
                     {                      {
                           liberation(s_etat_processus, s_format_tmp);
                         free(chaine);                          free(chaine);
                         return(NULL);                          return(NULL);
                     }                      }
   
                       liberation(s_etat_processus, s_format_tmp);
   
                     if ((*(*l_element_courant).donnee).type == CHN)                      if ((*(*l_element_courant).donnee).type == CHN)
                     {                      {
                         chaine = (unsigned char *)                          chaine = (unsigned char *)
Line 3785  formateur_fichier(struct_processus *s_et Line 3840  formateur_fichier(struct_processus *s_et
                     }                      }
   
                     free(format_chaine);                      free(format_chaine);
                   
                       // Si le format_sortie vaut 'N', on remplace le format par
                       // { "native*(*)" }. L'intérêt est de pouvoir traiter une
                       // liste par un format "native*(*)".
   
                       if ((format_sortie == 'N') && ((*(*l_element_courant)
                               .donnee).type == LST))
                       {
                           if ((s_format_tmp = allocation(s_etat_processus, LST))
                                   == NULL)
                           {
                               return(NULL);
                           }
   
                           if (((*s_format_tmp).objet = allocation_maillon(
                                   s_etat_processus)) == NULL)
                           {
                               return(NULL);
                           }
   
                           (*((struct_liste_chainee *) (*s_format_tmp).objet))
                                   .suivant = NULL;
   
                           if (((*((struct_liste_chainee *) (*s_format_tmp).objet))
                                   .donnee = allocation(s_etat_processus, CHN))
                                   == NULL)
                           {
                               return(NULL);
                           }
   
                           if (((*(*((struct_liste_chainee *) (*s_format_tmp)
                                   .objet)).donnee).objet = malloc(11 *
                                   sizeof(unsigned char))) == NULL)
                           {
                               (*s_etat_processus).erreur_systeme =
                                       d_es_allocation_memoire;
                               return(NULL);
                           }
   
                           strcpy((unsigned char *) (*(*((struct_liste_chainee *)
                                   (*s_format_tmp).objet)).donnee).objet,
                                   "native*(*)");
                       }
                       else
                       {
                           if ((s_format_tmp = copie_objet(s_etat_processus,
                                   s_format, 'P')) == NULL)
                           {
                               return(NULL);
                           }
                       }
   
                     if ((chaine_formatee = formateur_fichier(s_etat_processus,                      if ((chaine_formatee = formateur_fichier(s_etat_processus,
                             (*l_element_courant).donnee, s_format,                              (*l_element_courant).donnee, s_format_tmp,
                             longueur, longueur_champ, format_sortie, type,                              longueur, longueur_champ, format_sortie, type,
                             longueur_effective, recursivite, export_fichier))                              longueur_effective, recursivite, export_fichier))
                             == NULL)                              == NULL)
                     {                      {
                           liberation(s_etat_processus, s_format_tmp);
                         free(chaine);                          free(chaine);
                         return(NULL);                          return(NULL);
                     }                      }
   
                       liberation(s_etat_processus, s_format_tmp);
   
                     if ((chaine = realloc(chaine,                      if ((chaine = realloc(chaine,
                             ((size_t) (longueur_totale + (*longueur_effective)))                              ((size_t) (longueur_totale + (*longueur_effective)))
                             * sizeof(unsigned char))) == NULL)                              * sizeof(unsigned char))) == NULL)
Line 3811  formateur_fichier(struct_processus *s_et Line 3920  formateur_fichier(struct_processus *s_et
                     free(chaine_formatee);                      free(chaine_formatee);
                 }                  }
   
                 nombre_elements++;  
                 l_element_courant = (*l_element_courant).suivant;  
   
                 if (format_sortie != 'N')                  if (format_sortie != 'N')
                 {                  {
                     l_element_courant_format =                      l_element_courant_format =
                             (*l_element_courant_format).suivant;                              (*l_element_courant_format).suivant;
                 }                  }
   
                   nombre_elements++;
                   l_element_courant = (*l_element_courant).suivant;
             }              }
   
             if (format_sortie != 'N')              if (format_sortie != 'N')
Line 4078  formateur_fichier(struct_processus *s_et Line 4187  formateur_fichier(struct_processus *s_et
                 memcpy(&(chaine[longueur_totale]), tampon, 1);                  memcpy(&(chaine[longueur_totale]), tampon, 1);
                 longueur_totale += 1;                  longueur_totale += 1;
             }              }
             else if (longueur_totale < (((integer8) 1) << 16))              else
             {              {
                 longueur_totale++;                  longueur_totale++;
   
                 for(i = 0; i < 7; i++)                  // i = { 0 (16 bits) 2 (32 bits) 6 (64 bits) }
   
                   i = 0;
   
                   for(;;)
                 {                  {
                     if ((longueur_totale < (((integer8) 1) << (8 * (i + 2))))                      if ((longueur_totale < (((integer8) 1) << (8 * (i + 2))))
                             || (i == 6))                              || (i == 6))
Line 4106  formateur_fichier(struct_processus *s_et Line 4219  formateur_fichier(struct_processus *s_et
                                 | ((i + 1) << 1));                                  | ((i + 1) << 1));
                         break;                          break;
                     }                      }
   
                       switch(i)
                       {
                           case 0 :
                           {
                               i = 2;
                               break;
                           }
   
                           case 2 :
                           {
                               i = 6;
                               break;
                           }
                       }
                 }                  }
   
                 if ((chaine = realloc(chaine, (((size_t) longueur_totale) + 3)                  // i = 0 => +3 (16 bits)
                   // i = 2 => +5 (32 bits)
                   // i = 6 => +9 (64 bits)
   
                   if ((chaine = realloc(chaine, (((size_t) longueur_totale)
                           + ((i == 0) ? 3 : ((i == 2) ? 5 : 9)))
                         * sizeof(unsigned char))) == NULL)                          * sizeof(unsigned char))) == NULL)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
Line 4119  formateur_fichier(struct_processus *s_et Line 4252  formateur_fichier(struct_processus *s_et
                 memcpy(&(chaine[longueur_totale]), tampon, 3);                  memcpy(&(chaine[longueur_totale]), tampon, 3);
                 longueur_totale += 3;                  longueur_totale += 3;
             }              }
             else if (longueur_totale < (((integer8) 1) << 32))  
             {  
             }  
   
             __zone();              __zone();
             (*longueur_effective) = longueur_totale;              (*longueur_effective) = longueur_totale;
Line 5275  lecture_fichier_non_formate(struct_proce Line 5405  lecture_fichier_non_formate(struct_proce
                             switch(deplacement)                              switch(deplacement)
                             {                              {
                                 case 1:                                  case 1:
                                     i1 = octets[0];                                      i1 = (integer1) octets[0];
                                 break;                                  break;
   
                                 case 2:                                  case 2:

Removed from v.1.65  
changed lines
  Added in v.1.75


CVSweb interface <joel.bertrand@systella.fr>