Diff for /rpl/src/instructions_s11.c between versions 1.1 and 1.2

version 1.1, 2011/08/29 07:43:02 version 1.2, 2011/08/29 10:29:31
Line 44  instruction_srev(struct_processus *s_eta Line 44  instruction_srev(struct_processus *s_eta
     unsigned char           *ptr_e;      unsigned char           *ptr_e;
     unsigned char           *ptr_l;      unsigned char           *ptr_l;
   
       unsigned int            i;
       unsigned int            saut;
   
     if ((*s_etat_processus).affichage_arguments == 'Y')      if ((*s_etat_processus).affichage_arguments == 'Y')
     {      {
         printf("\n  SREV ");          printf("\n  SREV ");
Line 93  instruction_srev(struct_processus *s_eta Line 96  instruction_srev(struct_processus *s_eta
             (*s_objet_argument).objet) + 1) * sizeof(unsigned char))) == NULL)              (*s_objet_argument).objet) + 1) * sizeof(unsigned char))) == NULL)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;          (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
           return;
     }      }
   
     ptr_l = (unsigned char *) (*s_objet_argument).objet;      ptr_l = (unsigned char *) (*s_objet_argument).objet;
     ptr_e = ((unsigned char *) (*s_objet_resultat).objet) +      ptr_e = ((unsigned char *) (*s_objet_resultat).objet) +
             strlen((unsigned char *) (*s_objet_argument).objet);              strlen((unsigned char *) (*s_objet_argument).objet);
     (*(ptr_e + 1)) = d_code_fin_chaine;      (*ptr_e) = d_code_fin_chaine;
   
     while((*ptr_l) != d_code_fin_chaine)      while((*ptr_l) != d_code_fin_chaine)
     {      {
         (*ptr_e) = (*ptr_l);          if ((*ptr_l) == '\\')
         ptr_l++;          {
         ptr_e--;              // On n'inverse pas une séquence d'échappement.
               // Les séquences d'échappement valides sont :
               // '\\', '\"', '\b', '\n', '\t' et '\x??'.
   
               switch(*(ptr_l + 1))
               {
                   case '\\':
                   case '"':
                   case 'b':
                   case 'n':
                   case 't':
                   {
                       saut = 2;
                       break;
                   }
   
                   case 'x':
                   {
                       saut = 4;
                       break;
                   }
               }   
   
               for(i = 0; i < saut; i++)
               {
                   if (*(ptr_l + i) == d_code_fin_chaine)
                   {
                       saut = i;
                       break;
                   }
   
                   (*((ptr_e - saut) + i)) = (*(ptr_l + i));
               }
   
               ptr_e -= saut;
               ptr_l += saut;
           }
           else
           {
               ptr_e--;
               (*ptr_e) = (*ptr_l);
               ptr_l++;
           }
     }      }
   
     liberation(s_etat_processus, s_objet_argument);      liberation(s_etat_processus, s_objet_argument);

Removed from v.1.1  
changed lines
  Added in v.1.2


CVSweb interface <joel.bertrand@systella.fr>