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

version 1.23, 2012/05/21 17:25:41 version 1.24, 2012/06/12 11:44:34
Line 244  formateur_flux(struct_processus *s_etat_ Line 244  formateur_flux(struct_processus *s_etat_
   
 /*  /*
 ================================================================================  ================================================================================
     Routine de d'analyse d'un flux
   ================================================================================
     Entrées : structure sur l'état du processus et objet à afficher
   --------------------------------------------------------------------------------
     Sorties : chaine de caractères
   --------------------------------------------------------------------------------
     Effets de bord : néant
   ================================================================================
   */
   
   unsigned char *
   analyse_flux(struct_processus *s_etat_processus, unsigned char *donnees,
           long *longueur)
   {
       long                    offset;
   
       unsigned char           *chaine;
       unsigned char           hexadecimal[3];
       unsigned char           *ptr_ecriture;
       unsigned char           *ptr_lecture;
   
       if ((chaine = malloc(((*longueur) = (strlen(donnees)) + 1)
               * sizeof(unsigned char))) == NULL)
       {
           (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
           return(NULL);
       }
   
       ptr_lecture = donnees;
       ptr_ecriture = chaine;
   
       while((*ptr_lecture) != d_code_fin_chaine)
       {
           (*longueur)++;
   
           // Début de la séquence d'échappement
   
           switch((*ptr_lecture))
           {
               case '"':
               case '\b':
               case '\n':
               case '\t':
               {
                   offset = ptr_ecriture - chaine;
   
                   if ((chaine = realloc(chaine, ((*longueur) = (*longueur) + 1)
                           * sizeof(unsigned char))) == NULL)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       return(NULL);
                   }
   
                   ptr_ecriture = chaine + offset;
                   *ptr_ecriture++ = '\\';
                   *ptr_ecriture++ = *ptr_lecture++;
                   (*longueur)++;
                   break;
               }
   
               case ' ':
               {
                   *ptr_ecriture++ = *ptr_lecture++;
                   break;
               }
   
               default:
               {
                   if (isgraph((*ptr_lecture)))
                   {
                       *ptr_ecriture++ = *ptr_lecture++;
                   }
                   else
                   {
                       offset = ptr_ecriture - chaine;
   
                       if ((chaine = realloc(chaine, ((*longueur) = (*longueur)
                               + 3) * sizeof(unsigned char))) == NULL)
                       {
                           (*s_etat_processus).erreur_systeme =
                                   d_es_allocation_memoire;
                           return(NULL);
                       }
   
                       ptr_ecriture = chaine + offset;
                       *ptr_ecriture++ = '\\';
                       *ptr_ecriture++ = 'x';
   
                       sprintf(hexadecimal, "%02X", *ptr_lecture++);
   
                       *ptr_ecriture++ = hexadecimal[0];
                       *ptr_ecriture++ = hexadecimal[1];
                       (*longueur) += 3;
                   }
   
                   break;
               }
           }
       }
   
       (*ptr_ecriture) = d_code_fin_chaine;
   
       return(chaine);
   }
   
   
   /*
   ================================================================================
   Routine testant la validité d'une chaîne de caractères    Routine testant la validité d'une chaîne de caractères
 ================================================================================  ================================================================================
   Entrées : structure sur l'état du processus et chaîne courante    Entrées : structure sur l'état du processus et chaîne courante

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


CVSweb interface <joel.bertrand@systella.fr>