Diff for /rpl/src/formateur_flux.c between versions 1.24 and 1.33

version 1.24, 2012/06/12 11:44:34 version 1.33, 2013/03/01 09:29:30
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.9    RPL/2 (R) version 4.1.13
   Copyright (C) 1989-2012 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 165  formateur_flux(struct_processus *s_etat_ Line 165  formateur_flux(struct_processus *s_etat_
                             {                              {
                                 printf("+++Information : "                                  printf("+++Information : "
                                         "Séquence d'échappement "                                          "Séquence d'échappement "
                                         "inconnue [%d]\n",                                          "inconnue (\\x%c%c) [%d]\n",
                                           *ptr_lecture, *(ptr_lecture + 1),
                                         (int) getpid());                                          (int) getpid());
                             }                              }
                             else                              else
                             {                              {
                                 printf("+++Warning : Unknown "                                  printf("+++Warning : Unknown "
                                         "escape code "                                          "escape code (\\x%c%c) [%d]\n",
                                         "[%d]\n", (int) getpid());                                          *ptr_lecture, *(ptr_lecture + 1),
                                           (int) getpid());
                             }                              }
                         }                          }
                     }                      }
Line 182  formateur_flux(struct_processus *s_etat_ Line 184  formateur_flux(struct_processus *s_etat_
                         {                          {
                             printf("+++Information : "                              printf("+++Information : "
                                     "Séquence d'échappement "                                      "Séquence d'échappement "
                                     "inconnue [%d]\n", (int) getpid());                                      "tronquée [%d]\n", (int) getpid());
                         }                          }
                         else                          else
                         {                          {
                             printf("+++Warning : Unknown escape code "                              printf("+++Warning : Truncated escape code "
                                     "[%d]\n", (int) getpid());                                      "[%d]\n", (int) getpid());
                         }                          }
                     }                      }
Line 212  formateur_flux(struct_processus *s_etat_ Line 214  formateur_flux(struct_processus *s_etat_
             }              }
             else              else
             {              {
                 if ((*s_etat_processus).langue == 'F')                  if ((*(ptr_lecture + 1)) == d_code_fin_chaine)
                 {                  {
                     printf("+++Information : Séquence d'échappement "                      if ((*s_etat_processus).langue == 'F')
                             "inconnue [%d]\n", (int) getpid());                      {
                           printf("+++Information : "
                                   "Séquence d'échappement "
                                   "tronquée [%d]\n", (int) getpid());
                       }
                       else
                       {
                           printf("+++Warning : Truncated escape code "
                                   "[%d]\n", (int) getpid());
                       }
                 }                  }
                 else                  else
                 {                  {   
                     printf("+++Warning : Unknown escape code "                      if ((*s_etat_processus).langue == 'F')
                             "[%d]\n", (int) getpid());                      {
                           printf("+++Information : Séquence d'échappement "
                                   "inconnue (%c%c) [%d]\n",
                                   *ptr_lecture, *(ptr_lecture + 1),
                                   (int) getpid());
                       }
                       else
                       {
                           printf("+++Warning : Unknown escape code (%c%c) "
                                   "[%d]\n", *ptr_lecture, *(ptr_lecture + 1),
                                   (int) getpid());
                       }
                 }                  }
             }              }
         }          }
Line 256  formateur_flux(struct_processus *s_etat_ Line 278  formateur_flux(struct_processus *s_etat_
   
 unsigned char *  unsigned char *
 analyse_flux(struct_processus *s_etat_processus, unsigned char *donnees,  analyse_flux(struct_processus *s_etat_processus, unsigned char *donnees,
         long *longueur)          long longueur)
 {  {
       long                    longueur_courante;
     long                    offset;      long                    offset;
   
     unsigned char           *chaine;      unsigned char           *chaine;
Line 265  analyse_flux(struct_processus *s_etat_pr Line 288  analyse_flux(struct_processus *s_etat_pr
     unsigned char           *ptr_ecriture;      unsigned char           *ptr_ecriture;
     unsigned char           *ptr_lecture;      unsigned char           *ptr_lecture;
   
     if ((chaine = malloc(((*longueur) = (strlen(donnees)) + 1)      if ((chaine = malloc((longueur_courante = longueur + 1) *
             * sizeof(unsigned char))) == NULL)              sizeof(unsigned char))) == NULL)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;          (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
         return(NULL);          return(NULL);
Line 275  analyse_flux(struct_processus *s_etat_pr Line 298  analyse_flux(struct_processus *s_etat_pr
     ptr_lecture = donnees;      ptr_lecture = donnees;
     ptr_ecriture = chaine;      ptr_ecriture = chaine;
   
     while((*ptr_lecture) != d_code_fin_chaine)      while(longueur > 0)
     {      {
         (*longueur)++;  
   
         // Début de la séquence d'échappement          // Début de la séquence d'échappement
   
         switch((*ptr_lecture))          switch((*ptr_lecture))
Line 287  analyse_flux(struct_processus *s_etat_pr Line 308  analyse_flux(struct_processus *s_etat_pr
             case '\b':              case '\b':
             case '\n':              case '\n':
             case '\t':              case '\t':
               case '\\':
             {              {
                 offset = ptr_ecriture - chaine;                  offset = ptr_ecriture - chaine;
   
                 if ((chaine = realloc(chaine, ((*longueur) = (*longueur) + 1)                  if ((chaine = realloc(chaine, (++longueur_courante)
                         * sizeof(unsigned char))) == NULL)                          * sizeof(unsigned char))) == NULL)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
Line 300  analyse_flux(struct_processus *s_etat_pr Line 322  analyse_flux(struct_processus *s_etat_pr
   
                 ptr_ecriture = chaine + offset;                  ptr_ecriture = chaine + offset;
                 *ptr_ecriture++ = '\\';                  *ptr_ecriture++ = '\\';
                 *ptr_ecriture++ = *ptr_lecture++;  
                 (*longueur)++;                  switch((*ptr_lecture++))
                   {
                       case '"':
                       {
                           *ptr_ecriture++ = '"';
                           break;
                       }
   
                       case '\b':
                       {
                           *ptr_ecriture++ = 'b';
                           break;
                       }
   
                       case '\n':
                       {
                           *ptr_ecriture++ = 'n';
                           break;
                       }
   
                       case '\t':
                       {
                           *ptr_ecriture++ = 't';
                           break;
                       }
   
                       case '\\':
                       {
                           *ptr_ecriture++ = '\\';
                           break;
                       }
                   }
   
                 break;                  break;
             }              }
   
Line 321  analyse_flux(struct_processus *s_etat_pr Line 375  analyse_flux(struct_processus *s_etat_pr
                 {                  {
                     offset = ptr_ecriture - chaine;                      offset = ptr_ecriture - chaine;
   
                     if ((chaine = realloc(chaine, ((*longueur) = (*longueur)                      if ((chaine = realloc(chaine, (longueur_courante =
                             + 3) * sizeof(unsigned char))) == NULL)                              longueur_courante + 3) * sizeof(unsigned char)))
                               == NULL)
                     {                      {
                         (*s_etat_processus).erreur_systeme =                          (*s_etat_processus).erreur_systeme =
                                 d_es_allocation_memoire;                                  d_es_allocation_memoire;
Line 337  analyse_flux(struct_processus *s_etat_pr Line 392  analyse_flux(struct_processus *s_etat_pr
   
                     *ptr_ecriture++ = hexadecimal[0];                      *ptr_ecriture++ = hexadecimal[0];
                     *ptr_ecriture++ = hexadecimal[1];                      *ptr_ecriture++ = hexadecimal[1];
                     (*longueur) += 3;  
                 }                  }
   
                 break;                  break;
             }              }
         }          }
   
           longueur--;
     }      }
   
     (*ptr_ecriture) = d_code_fin_chaine;      (*ptr_ecriture) = d_code_fin_chaine;

Removed from v.1.24  
changed lines
  Added in v.1.33


CVSweb interface <joel.bertrand@systella.fr>