Diff for /rpl/src/instructions_c4.c between versions 1.5 and 1.8

version 1.5, 2010/03/04 17:42:46 version 1.8, 2010/03/09 10:18:45
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.12    RPL/2 (R) version 4.0.13
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2010 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
Line 472  instruction_convert(struct_processus *s_ Line 472  instruction_convert(struct_processus *s_
     struct_objet                *s_objet_argument_3;      struct_objet                *s_objet_argument_3;
   
     unsigned char               *commande;      unsigned char               *commande;
       unsigned char               *executable_candidat;
     unsigned char               ligne[1024 + 1];      unsigned char               ligne[1024 + 1];
     unsigned char               *tampon_instruction;      unsigned char               *tampon_instruction;
   
Line 560  instruction_convert(struct_processus *s_ Line 561  instruction_convert(struct_processus *s_
             sprintf(commande, ds_rplconvert_commande, d_exec_path, d_exec_path,              sprintf(commande, ds_rplconvert_commande, d_exec_path, d_exec_path,
                     (unsigned char *) (*s_objet_argument_2).objet,                      (unsigned char *) (*s_objet_argument_2).objet,
                     (unsigned char *) (*s_objet_argument_1).objet);                      (unsigned char *) (*s_objet_argument_1).objet);
   
               if (alsprintf(&executable_candidat, "%s/bin/rplconvert",
                       d_exec_path) < 0)
               {
                   (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   return;
               }
   
               if (controle(s_etat_processus, executable_candidat, "md5",
                       rplconvert_md5) != d_vrai)
               {
                   (*s_etat_processus).erreur_systeme = d_es_somme_controle;
                   return;
               }
   
               if (controle(s_etat_processus, executable_candidat, "sha1",
                       rplconvert_sha1) != d_vrai)
               {
                   (*s_etat_processus).erreur_systeme = d_es_somme_controle;
                   return;
               }
   
               free(executable_candidat);
         }          }
         else          else
         {          {
Line 579  instruction_convert(struct_processus *s_ Line 603  instruction_convert(struct_processus *s_
                     (*s_etat_processus).rpl_home, (*s_etat_processus).rpl_home,                      (*s_etat_processus).rpl_home, (*s_etat_processus).rpl_home,
                     (unsigned char *) (*s_objet_argument_2).objet,                      (unsigned char *) (*s_objet_argument_2).objet,
                     (unsigned char *) (*s_objet_argument_1).objet);                      (unsigned char *) (*s_objet_argument_1).objet);
   
               if (alsprintf(&executable_candidat, "%s/bin/rplconvert",
                       (*s_etat_processus).rpl_home) < 0)
               {
                   (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   return;
               }
   
               if (controle(s_etat_processus, executable_candidat, "md5",
                       rplconvert_md5) != d_vrai)
               {
                   (*s_etat_processus).erreur_systeme = d_es_somme_controle;
                   return;
               }
   
               if (controle(s_etat_processus, executable_candidat, "sha1",
                       rplconvert_sha1) != d_vrai)
               {
                   (*s_etat_processus).erreur_systeme = d_es_somme_controle;
                   return;
               }
   
               free(executable_candidat);
         }          }
   
         if ((pipe = popen(commande, "r")) == NULL)          if ((pipe = popen(commande, "r")) == NULL)
Line 706  instruction_convert(struct_processus *s_ Line 753  instruction_convert(struct_processus *s_
 void  void
 instruction_close(struct_processus *s_etat_processus)  instruction_close(struct_processus *s_etat_processus)
 {  {
     file                        *descripteur;      const char                  *queue;
   
     int                         socket;      int                         socket;
   
     logical1                    socket_connectee;      logical1                    socket_connectee;
   
       sqlite3_stmt                *ppStmt;
   
       struct_descripteur_fichier  *descripteur;
   
     struct_liste_chainee        *l_element_courant;      struct_liste_chainee        *l_element_courant;
     struct_liste_chainee        *l_element_precedent;      struct_liste_chainee        *l_element_precedent;
   
Line 789  instruction_close(struct_processus *s_et Line 840  instruction_close(struct_processus *s_et
                         (*((struct_descripteur_fichier *) (*l_element_courant)                          (*((struct_descripteur_fichier *) (*l_element_courant)
                         .donnee)).tid) != 0))                          .donnee)).tid) != 0))
                 {                  {
                     descripteur = (*((struct_descripteur_fichier *)                      descripteur = (struct_descripteur_fichier *)
                             (*l_element_courant).donnee)).descripteur;                              (*l_element_courant).donnee;
   
                     if (l_element_precedent == NULL)                      if (l_element_precedent == NULL)
                     {                      {
Line 809  instruction_close(struct_processus *s_et Line 860  instruction_close(struct_processus *s_et
   
                     free((*((struct_descripteur_fichier *)                      free((*((struct_descripteur_fichier *)
                             (*l_element_courant).donnee)).nom);                              (*l_element_courant).donnee)).nom);
                     free((*l_element_courant).donnee);  
                     free(l_element_courant);                      free(l_element_courant);
   
                     break;                      break;
Line 832  instruction_close(struct_processus *s_et Line 882  instruction_close(struct_processus *s_et
          * Fermeture du fichier           * Fermeture du fichier
          */           */
   
         if (fclose(descripteur) != 0)          if (fclose((*descripteur).descripteur_c) != 0)
         {          {
               free(descripteur);
             liberation(s_etat_processus, s_objet_argument);              liberation(s_etat_processus, s_objet_argument);
   
             (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;              (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
             return;              return;
         }          }
   
           if ((*descripteur).type != 'C')
           {
               if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,
                       "vacuum", 7, &ppStmt, &queue) != SQLITE_OK)
               {
                   free(descripteur);
                   liberation(s_etat_processus, s_objet_argument);
   
                   (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   return;
               }
   
               if (sqlite3_step(ppStmt) != SQLITE_DONE)
               {
                   free(descripteur);
                   liberation(s_etat_processus, s_objet_argument);
   
                   (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   return;
               }
   
               if (sqlite3_finalize(ppStmt) != SQLITE_OK)
               {
                   free(descripteur);
                   liberation(s_etat_processus, s_objet_argument);
   
                   (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   return;
               }
   
               if (sqlite3_close((*descripteur).descripteur_sqlite) != SQLITE_OK)
               {
                   free(descripteur);
                   liberation(s_etat_processus, s_objet_argument);
   
                   (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   return;
               }
   
               free(descripteur);
           }
   
         if ((*((struct_fichier *) (*s_objet_argument).objet)).ouverture == 'S')          if ((*((struct_fichier *) (*s_objet_argument).objet)).ouverture == 'S')
         {          {
             if (destruction_fichier((*((struct_fichier *)              if (destruction_fichier((*((struct_fichier *)
Line 976  instruction_create(struct_processus *s_e Line 1069  instruction_create(struct_processus *s_e
   
     struct_objet                *s_objet_argument;      struct_objet                *s_objet_argument;
   
       unsigned char               *nom;
   
     unsigned long               unite;      unsigned long               unite;
   
     (*s_etat_processus).erreur_execution = d_ex;      (*s_etat_processus).erreur_execution = d_ex;
Line 1020  instruction_create(struct_processus *s_e Line 1115  instruction_create(struct_processus *s_e
   
     if ((*s_objet_argument).type == CHN)      if ((*s_objet_argument).type == CHN)
     {      {
         erreur = caracteristiques_fichier(s_etat_processus, (unsigned char *)          if ((nom = transliteration(s_etat_processus, (unsigned char *)
                 (*s_objet_argument).objet, &existence, &ouverture, &unite);                  (*s_objet_argument).objet, d_locale, "UTF-8")) == NULL)
           {
               liberation(s_etat_processus, s_objet_argument);
               return;
           }
   
           erreur = caracteristiques_fichier(s_etat_processus, nom,
                   &existence, &ouverture, &unite);
   
         if ((erreur != d_absence_erreur) || (existence == d_vrai))          if ((erreur != d_absence_erreur) || (existence == d_vrai))
         {          {
             liberation(s_etat_processus, s_objet_argument);              liberation(s_etat_processus, s_objet_argument);
               free(nom);
   
             (*s_etat_processus).erreur_execution =              (*s_etat_processus).erreur_execution =
                     d_ex_erreur_acces_fichier;                      d_ex_erreur_acces_fichier;
             return;              return;
         }          }
   
         if ((fichier = fopen((unsigned char *) (*s_objet_argument).objet, "w"))          if ((fichier = fopen(nom, "w")) == NULL)
                 == NULL)  
         {          {
             liberation(s_etat_processus, s_objet_argument);              liberation(s_etat_processus, s_objet_argument);
               free(nom);
   
             (*s_etat_processus).erreur_execution =              (*s_etat_processus).erreur_execution =
                     d_ex_erreur_acces_fichier;                      d_ex_erreur_acces_fichier;
             return;              return;
         }          }
   
           free(nom);
   
         if (fclose(fichier) != 0)          if (fclose(fichier) != 0)
         {          {
             liberation(s_etat_processus, s_objet_argument);              liberation(s_etat_processus, s_objet_argument);

Removed from v.1.5  
changed lines
  Added in v.1.8


CVSweb interface <joel.bertrand@systella.fr>