Diff for /rpl/src/instructions_s3.c between versions 1.27 and 1.35

version 1.27, 2011/07/25 07:44:58 version 1.35, 2012/04/13 14:12:59
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.2    RPL/2 (R) version 4.1.8
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2012 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 47  instruction_sub(struct_processus *s_etat Line 47  instruction_sub(struct_processus *s_etat
     struct_objet                *s_objet_argument_3;      struct_objet                *s_objet_argument_3;
     struct_objet                *s_objet_resultat;      struct_objet                *s_objet_resultat;
   
       unsigned char               *ptr1;
       unsigned char               *ptr2;
   
     unsigned long               i;      unsigned long               i;
   
     (*s_etat_processus).erreur_execution = d_ex;      (*s_etat_processus).erreur_execution = d_ex;
Line 144  instruction_sub(struct_processus *s_etat Line 147  instruction_sub(struct_processus *s_etat
     if ((*s_objet_argument_3).type == CHN)      if ((*s_objet_argument_3).type == CHN)
     {      {
         if ((*((integer8 *) (*s_objet_argument_1).objet)) > (integer8)          if ((*((integer8 *) (*s_objet_argument_1).objet)) > (integer8)
                 strlen((unsigned char *) (*s_objet_argument_3).objet))                  longueur_chaine(s_etat_processus,
                   (unsigned char *) (*s_objet_argument_3).objet))
         {          {
             liberation(s_etat_processus, s_objet_argument_1);              liberation(s_etat_processus, s_objet_argument_1);
             liberation(s_etat_processus, s_objet_argument_2);              liberation(s_etat_processus, s_objet_argument_2);
Line 160  instruction_sub(struct_processus *s_etat Line 164  instruction_sub(struct_processus *s_etat
             return;              return;
         }          }
   
         if (((*s_objet_resultat).objet = extraction_chaine((unsigned char *)          if ((ptr1 = pointeur_ieme_caractere(s_etat_processus, (unsigned char *)
                 (*s_objet_argument_3).objet, (*((integer8 *)                  (*s_objet_argument_3).objet, (*((integer8 *)
                 (*s_objet_argument_2).objet)), (*((integer8 *)                  (*s_objet_argument_2).objet)) - 1)) == NULL)
                 (*s_objet_argument_1).objet)))) == NULL)          {
               liberation(s_etat_processus, s_objet_argument_1);
               liberation(s_etat_processus, s_objet_argument_2);
               liberation(s_etat_processus, s_objet_argument_3);
   
               (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
               return;
           }
   
           if ((ptr2 = pointeur_ieme_caractere(s_etat_processus, ptr1,
                   (*((integer8 *) (*s_objet_argument_1).objet))
                   - ((*((integer8 *) (*s_objet_argument_2).objet)) - 1))) == NULL)
           {
               liberation(s_etat_processus, s_objet_argument_1);
               liberation(s_etat_processus, s_objet_argument_2);
               liberation(s_etat_processus, s_objet_argument_3);
   
               (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
               return;
           }
   
           if (((*s_objet_resultat).objet = malloc(((ptr2 - ptr1) + 1) *
                   sizeof(unsigned char))) == NULL)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             return;              return;
         }          }
   
           strncpy((unsigned char *) (*s_objet_resultat).objet, ptr1,
                   ptr2 - ptr1)[ptr2 - ptr1] = d_code_fin_chaine;
     }      }
   
 /*  /*

Removed from v.1.27  
changed lines
  Added in v.1.35


CVSweb interface <joel.bertrand@systella.fr>