Diff for /rpl/src/instructions_c4.c between versions 1.2 and 1.21

version 1.2, 2010/01/27 22:22:12 version 1.21, 2011/04/21 16:00:56
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.10    RPL/2 (R) version 4.1.0.prerelease.0
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2011 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 20 Line 20
 */  */
   
   
 #include "rpl.conv.h"  #include "rpl-conv.h"
 #include "convert.conv.h"  #include "convert-conv.h"
   
   
 /*  /*
Line 402  instruction_corr(struct_processus *s_eta Line 402  instruction_corr(struct_processus *s_eta
 void  void
 instruction_copyright(struct_processus *s_etat_processus)  instruction_copyright(struct_processus *s_etat_processus)
 {  {
 #   include                     "copyright.conv.h"  #   include                     "copyright-conv.h"
   
     (*s_etat_processus).erreur_execution = d_ex;      (*s_etat_processus).erreur_execution = d_ex;
   
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 543  instruction_convert(struct_processus *s_ Line 544  instruction_convert(struct_processus *s_
             (((*s_objet_argument_3).type == INT) ||              (((*s_objet_argument_3).type == INT) ||
             ((*s_objet_argument_3).type == REL)))              ((*s_objet_argument_3).type == REL)))
     {      {
         longueur_chaine = strlen(ds_rplconvert_commande) - 9          if ((*s_etat_processus).rpl_home == NULL)
                 + strlen((unsigned char *) (*s_objet_argument_1).objet)  
                 + strlen((unsigned char *) (*s_objet_argument_2).objet)  
                 + (2 * strlen(d_exec_path));  
   
         if ((commande = malloc((longueur_chaine + 1) * sizeof(unsigned char)))  
                 == NULL)  
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              longueur_chaine = strlen(ds_rplconvert_commande) - 9
             return;                      + strlen((unsigned char *) (*s_objet_argument_1).objet)
                       + strlen((unsigned char *) (*s_objet_argument_2).objet)
                       + (2 * strlen(d_exec_path));
   
               if ((commande = malloc((longueur_chaine + 1) *
                       sizeof(unsigned char))) == NULL)
               {
                   (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   return;
               }
   
               sprintf(commande, ds_rplconvert_commande, d_exec_path, d_exec_path,
                       (unsigned char *) (*s_objet_argument_2).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
           {
               longueur_chaine = strlen(ds_rplconvert_commande) - 9
                       + strlen((unsigned char *) (*s_objet_argument_1).objet)
                       + strlen((unsigned char *) (*s_objet_argument_2).objet)
                       + (2 * strlen((*s_etat_processus).rpl_home));
   
         sprintf(commande, ds_rplconvert_commande, d_exec_path, d_exec_path,              if ((commande = malloc((longueur_chaine + 1) *
                 (unsigned char *) (*s_objet_argument_2).objet,                      sizeof(unsigned char))) == NULL)
                 (unsigned char *) (*s_objet_argument_1).objet);              {
                   (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   return;
               }
   
               sprintf(commande, ds_rplconvert_commande,
                       (*s_etat_processus).rpl_home, (*s_etat_processus).rpl_home,
                       (unsigned char *) (*s_objet_argument_2).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 684  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 767  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 787  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 810  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 954  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 998  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.2  
changed lines
  Added in v.1.21


CVSweb interface <joel.bertrand@systella.fr>