Diff for /rpl/src/instructions_r4.c between versions 1.58 and 1.59

version 1.58, 2012/06/21 16:07:25 version 1.59, 2012/06/22 10:12:19
Line 864  instruction_read(struct_processus *s_eta Line 864  instruction_read(struct_processus *s_eta
     integer8                        position_finale;      integer8                        position_finale;
     integer8                        position_initiale;      integer8                        position_initiale;
   
       logical1                        format_degenere;
     logical1                        indicateur_48;      logical1                        indicateur_48;
     logical1                        presence_chaine;      logical1                        presence_chaine;
     logical1                        presence_indicateur;      logical1                        presence_indicateur;
     logical1                        trame_complete;      logical1                        trame_complete;
   
       long                            longueur;
   
     socklen_t                       longueur_adresse;      socklen_t                       longueur_adresse;
   
     sqlite3_stmt                    *ppStmt;      sqlite3_stmt                    *ppStmt;
Line 888  instruction_read(struct_processus *s_eta Line 891  instruction_read(struct_processus *s_eta
     struct_descripteur_fichier      *descripteur;      struct_descripteur_fichier      *descripteur;
   
     struct_liste_chainee            *l_element_courant;      struct_liste_chainee            *l_element_courant;
       struct_liste_chainee            *l_element_courant_format;
     struct_liste_chainee            *l_element_inclus;      struct_liste_chainee            *l_element_inclus;
     struct_liste_chainee            *l_element_suivant;      struct_liste_chainee            *l_element_suivant;
   
Line 901  instruction_read(struct_processus *s_eta Line 905  instruction_read(struct_processus *s_eta
     unsigned char                   caractere;      unsigned char                   caractere;
     unsigned char                   *clef_utf8;      unsigned char                   *clef_utf8;
     unsigned char                   *commande;      unsigned char                   *commande;
       unsigned char                   *format_chaine;
     unsigned char                   poubelle[256];      unsigned char                   poubelle[256];
     unsigned char                   *ptr;      unsigned char                   *ptr;
     unsigned char                   *tampon_lecture;      unsigned char                   *tampon_lecture;
Line 2056  printf("L=%d\n", longueur_enregistrement Line 2061  printf("L=%d\n", longueur_enregistrement
                     return;                      return;
                 }                  }
   
                 do                  l_element_courant_format = (struct_liste_chainee *)
                 {                          (*(*((struct_fichier *) (*s_objet_argument_1).objet))
                     c = getc((*descripteur).descripteur_c);                          .format).objet;
                     longueur_enregistrement++;                  l_element_courant = NULL;
                 } while((c != '\n') && (c != EOF));  
   
                 if (fseek((*descripteur).descripteur_c, position_initiale,  
                         SEEK_SET) != 0)  
                 {  
                     liberation(s_etat_processus, s_objet_argument_1);  
   
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;  
                     return;  
                 }  
   
                 if ((tampon_lecture = malloc((longueur_enregistrement)  
                         * sizeof(unsigned char))) == NULL)  
                 {  
                     (*s_etat_processus).erreur_systeme =  
                             d_es_allocation_memoire;  
                     return;  
                 }  
   
                 longueur_effective = fread(tampon_lecture,  
                         (size_t) sizeof(unsigned char),  
                         (size_t) longueur_enregistrement - 1,  
                         (*descripteur).descripteur_c);  
   
                 if ((s_objet_resultat = allocation(s_etat_processus, LST))                  if ((s_objet_resultat = allocation(s_etat_processus, LST))
                         == NULL)                          == NULL)
Line 2092  printf("L=%d\n", longueur_enregistrement Line 2074  printf("L=%d\n", longueur_enregistrement
                     return;                      return;
                 }                  }
   
                 if (((*s_objet_resultat).objet =                  while(l_element_courant_format != NULL)
                         allocation_maillon(s_etat_processus)) == NULL)  
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      if ((*(*l_element_courant_format).donnee).type != CHN)
                             d_es_allocation_memoire;                      {
                     return;                          liberation(s_etat_processus, s_objet_argument_1);
                 }                          liberation(s_etat_processus, s_objet_resultat);
   
                 (*((struct_liste_chainee *) (*s_objet_resultat).objet))                          (*s_etat_processus).erreur_execution =
                         .suivant = NULL;                                  d_ex_erreur_type_argument;
                           return;
                       }
   
                 if (((*((struct_liste_chainee *) (*s_objet_resultat).objet))                      if ((format_chaine = conversion_majuscule((unsigned char *)
                         .donnee = allocation(s_etat_processus, CHN)) == NULL)                              (*(*l_element_courant_format).donnee).objet))
                 {                              == NULL)
                     (*s_etat_processus).erreur_systeme =                      {
                             d_es_allocation_memoire;                          (*s_etat_processus).erreur_systeme =
                     return;                                  d_es_allocation_memoire;
                 }                          return;
                       }
   
                 if ((((*(*((struct_liste_chainee *) (*s_objet_resultat).objet))                      if (strncmp("LENGTH*(", format_chaine, 8) != 0)
                         .donnee)).objet = analyse_flux(s_etat_processus,                      {
                         tampon_lecture, longueur_enregistrement - 1)) == NULL)                          liberation(s_etat_processus, s_objet_argument_1);
                 {                          liberation(s_etat_processus, s_objet_resultat);
                     return;                          free(format_chaine);
                 }  
   
                 free(tampon_lecture);                          (*s_etat_processus).erreur_execution =
                                   d_ex_erreur_format_fichier;
                           return;
                       }
   
                       longueur = strlen(format_chaine);
   
                       if (format_chaine[longueur] != ')')
                       {
                           liberation(s_etat_processus, s_objet_argument_1);
                           liberation(s_etat_processus, s_objet_resultat);
                           free(format_chaine);
   
                           (*s_etat_processus).erreur_execution =
                                   d_ex_erreur_format_fichier;
                           return;
                       }
   
                       format_chaine[longueur] = d_code_fin_chaine;
   
                       if (format_chaine[8] == '*')
                       {
                           format_degenere = d_vrai;
                       }
                       else
                       {
                           // Détermination de la longueur
                           format_degenere = d_faux;
   
                           if (sscanf(&(format_chaine[8]), "%ld", &longueur) != 1)
                           {
                               liberation(s_etat_processus, s_objet_argument_1);
                               liberation(s_etat_processus, s_objet_resultat);
                               free(format_chaine);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_format_fichier;
                               return;
                           }
                       }
   
                       free(format_chaine);
   
                       if (format_degenere == d_vrai)
                       {
                           do
                           {
                               c = getc((*descripteur).descripteur_c);
                               longueur_enregistrement++;
                           } while((c != '\n') && (c != EOF));
   
                           if (fseek((*descripteur).descripteur_c,
                                   position_initiale, SEEK_SET) != 0)
                           {
                               liberation(s_etat_processus, s_objet_argument_1);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_systeme =
                                       d_es_erreur_fichier;
                               return;
                           }
                       }
                       else
                       {
                           longueur_enregistrement = longueur;
                       }
   
                       if ((tampon_lecture = malloc((longueur_enregistrement)
                               * sizeof(unsigned char))) == NULL)
                       {
                           (*s_etat_processus).erreur_systeme =
                                   d_es_allocation_memoire;
                           return;
                       }
   
                       longueur_effective = fread(tampon_lecture,
                               (size_t) sizeof(unsigned char),
                               (size_t) longueur_enregistrement,
                               (*descripteur).descripteur_c);
   
                       if (l_element_courant == NULL)
                       {
                           // Premier maillon de la liste
                           if (((*s_objet_resultat).objet =
                                   allocation_maillon(s_etat_processus)) == NULL)
                           {
                               (*s_etat_processus).erreur_systeme =
                                       d_es_allocation_memoire;
                               return;
                           }
   
                           l_element_courant = (*s_objet_resultat).objet;
                       }
                       else
                       {
                           if (((*l_element_courant).suivant =
                                   allocation_maillon(s_etat_processus)) == NULL)
                           {
                               (*s_etat_processus).erreur_systeme =
                                       d_es_allocation_memoire;
                               return;
                           }
   
                           l_element_courant = (*l_element_courant).suivant;
                       }
   
                       (*l_element_courant).suivant = NULL;
   
                       if (((*l_element_courant).donnee =
                               allocation(s_etat_processus, CHN)) == NULL)
                       {
                           (*s_etat_processus).erreur_systeme =
                                   d_es_allocation_memoire;
                           return;
                       }
   
                       if (format_degenere == d_vrai)
                       {
                           if (((*(*l_element_courant).donnee).objet =
                               analyse_flux(s_etat_processus, tampon_lecture,
                               longueur_enregistrement - 1)) == NULL)
                           {
                               return;
                           }
                       }
                       else
                       {
                           if (((*(*l_element_courant).donnee).objet =
                               analyse_flux(s_etat_processus, tampon_lecture,
                               longueur_enregistrement)) == NULL)
                           {
                               return;
                           }
                       }
   
                       free(tampon_lecture);
   
                       l_element_courant_format =
                               (*l_element_courant_format).suivant;
                   }
   
                 if (empilement(s_etat_processus,                  if (empilement(s_etat_processus,
                         &((*s_etat_processus).l_base_pile),                          &((*s_etat_processus).l_base_pile),
Line 2342  printf("L=%d\n", longueur_enregistrement Line 2464  printf("L=%d\n", longueur_enregistrement
   
                             if (caractere == '"')                              if (caractere == '"')
                             {                              {
                                 presence_chaine =                                  if (position_finale > 0)
                                         (presence_chaine == d_vrai)                                  {
                                         ? d_faux : d_vrai;                                      if (tampon_lecture[position_finale - 1]
                                               != '\\')
                                       {
                                           presence_chaine = (presence_chaine ==
                                                   d_vrai) ? d_faux : d_vrai;
                                       }
                                   }
                                   else
                                   {
                                       presence_chaine =
                                               (presence_chaine == d_vrai)
                                               ? d_faux : d_vrai;
                                   }
                             }                              }
                             else                              else
                             {                              {

Removed from v.1.58  
changed lines
  Added in v.1.59


CVSweb interface <joel.bertrand@systella.fr>