Diff for /rpl/src/instructions_o1.c between versions 1.5 and 1.6

version 1.5, 2010/03/05 11:20:08 version 1.6, 2010/03/06 18:29:07
Line 915  instruction_open(struct_processus *s_eta Line 915  instruction_open(struct_processus *s_eta
     integer8                    port;      integer8                    port;
     integer8                    position_clef;      integer8                    position_clef;
   
     logical1                    autorisation_liberation_nom;  
     logical1                    erreur;      logical1                    erreur;
     logical1                    existence;      logical1                    existence;
     logical1                    ouverture;      logical1                    ouverture;
     logical1                    presence_port;      logical1                    presence_port;
   
       sqlite3                     *sqlite;
   
     struct_liste_chainee        *l_element_courant;      struct_liste_chainee        *l_element_courant;
     struct_liste_chainee        *l_element_courant_sous_objet;      struct_liste_chainee        *l_element_courant_sous_objet;
   
Line 2684  instruction_open(struct_processus *s_eta Line 2685  instruction_open(struct_processus *s_eta
   
                 sprintf(nom, "%s.rpl", nom_temporaire);                  sprintf(nom, "%s.rpl", nom_temporaire);
                 free(nom_temporaire);                  free(nom_temporaire);
   
                 autorisation_liberation_nom = d_vrai;  
             }              }
             else              else
             {              {
                 autorisation_liberation_nom = d_faux;                  if ((nom = transliteration(s_etat_processus, nom,
                           d_locale, "UTF-8")) == NULL)
                   {
                       liberation(s_etat_processus, s_objet_argument);
                       liberation(s_etat_processus, s_objet_resultat);
                       return;
                   }
             }              }
   
             /*              /*
Line 2712  instruction_open(struct_processus *s_eta Line 2717  instruction_open(struct_processus *s_eta
             if (((*((struct_fichier *) (*s_objet_resultat).objet)).format =              if (((*((struct_fichier *) (*s_objet_resultat).objet)).format =
                     allocation(s_etat_processus, LST)) == NULL)                      allocation(s_etat_processus, LST)) == NULL)
             {              {
                   free(nom);
   
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 return;                  return;
             }              }
Line 2719  instruction_open(struct_processus *s_eta Line 2726  instruction_open(struct_processus *s_eta
             (*(*((struct_fichier *) (*s_objet_resultat).objet))              (*(*((struct_fichier *) (*s_objet_resultat).objet))
                     .format).objet = NULL;                      .format).objet = NULL;
   
               descripteur = NULL;
   
             switch(type_ouverture)              switch(type_ouverture)
             {              {
                 case 'N' :                  case 'N' :
Line 2728  instruction_open(struct_processus *s_eta Line 2737  instruction_open(struct_processus *s_eta
   
                     if ((erreur != 0) || (unite != 0))                      if ((erreur != 0) || (unite != 0))
                     {                      {
                           free(nom);
   
                         liberation(s_etat_processus, s_objet_argument);                          liberation(s_etat_processus, s_objet_argument);
                         liberation(s_etat_processus, s_objet_resultat);                          liberation(s_etat_processus, s_objet_resultat);
   
Line 2736  instruction_open(struct_processus *s_eta Line 2747  instruction_open(struct_processus *s_eta
                         return;                          return;
                     }                      }
   
                     if ((descripteur = fopen(nom, "w+")) == NULL)                      if (type_acces == 'S')
                     {                      {
                         liberation(s_etat_processus, s_objet_argument);                          if ((descripteur = fopen(nom, "w+")) == NULL)
                         liberation(s_etat_processus, s_objet_resultat);                          {
                               free(nom);
   
                         (*s_etat_processus).erreur_execution =                              liberation(s_etat_processus, s_objet_argument);
                                 d_ex_erreur_acces_fichier;                              liberation(s_etat_processus, s_objet_resultat);
                         return;  
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
                       }
                       else
                       {
                           // Si le fichier existe, on le supprime.
   
                           if (unlink(nom) != 0)
                           {
                               free(nom);
   
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
   
                           if (sqlite3_open_v2(nom, &sqlite,
                                   SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
                                   NULL) != SQLITE_OK)
                           {
                               free(nom);
   
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
   
                           if ((descripteur = fopen(nom, "a+")) == NULL)
                           {
                               free(nom);
   
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
   
                           if (type_acces == 'D')
                           {
                               if (initialisation_fichier_acces_direct(
                                       s_etat_processus, sqlite,
                                       (format == 'N') ? d_faux : d_vrai)
                                       != d_absence_erreur)
                               {
                                   free(nom);
   
                                   liberation(s_etat_processus, s_objet_argument);
                                   liberation(s_etat_processus, s_objet_resultat);
   
                                   return;
                               }
                           }
                           else
                           {
                               if (initialisation_fichier_acces_indexe(
                                       s_etat_processus, sqlite,
                                       (format == 'N') ? d_faux : d_vrai)
                                       != d_absence_erreur)
                               {
                                   free(nom);
   
                                   liberation(s_etat_processus, s_objet_argument);
                                   liberation(s_etat_processus, s_objet_resultat);
   
                                   return;
                               }
                           }
                     }                      }
   
                     break;                      break;
Line 2751  instruction_open(struct_processus *s_eta Line 2840  instruction_open(struct_processus *s_eta
   
                 case 'O' :                  case 'O' :
                 {                  {
                     erreur = caracteristiques_fichier(s_etat_processus,                      erreur = caracteristiques_fichier(s_etat_processus, nom,
                             nom, &existence, &ouverture, &unite);                              &existence, &ouverture, &unite);
   
                     if ((erreur != d_absence_erreur) || (existence == d_faux))                      if ((erreur != d_absence_erreur) || (existence == d_faux))
                     {                      {
                           free(nom);
   
                         liberation(s_etat_processus, s_objet_argument);                          liberation(s_etat_processus, s_objet_argument);
                         liberation(s_etat_processus, s_objet_resultat);                          liberation(s_etat_processus, s_objet_resultat);
   
Line 2764  instruction_open(struct_processus *s_eta Line 2855  instruction_open(struct_processus *s_eta
                         return;                          return;
                     }                      }
   
                     if ((descripteur = fopen(nom, "r+")) == NULL)                      if (type_acces == 'S')
                     {                      {
                         liberation(s_etat_processus, s_objet_argument);                          if ((descripteur = fopen(nom, "r+")) == NULL)
                         liberation(s_etat_processus, s_objet_resultat);                          {
                               free(nom);
   
                         (*s_etat_processus).erreur_execution =                              liberation(s_etat_processus, s_objet_argument);
                                 d_ex_erreur_acces_fichier;                              liberation(s_etat_processus, s_objet_resultat);
                         return;  
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
                       }
                       else
                       {
                           if (sqlite3_open_v2(nom, &sqlite,
                                   SQLITE_OPEN_READWRITE,
                                   NULL) != SQLITE_OK)
                           {
                               free(nom);
   
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
   
                           if ((descripteur = fopen(nom, "a+")) == NULL)
                           {
                               free(nom);
   
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
                     }                      }
   
                     break;                      break;
Line 2784  instruction_open(struct_processus *s_eta Line 2908  instruction_open(struct_processus *s_eta
   
                     if ((erreur != d_absence_erreur) || (existence == d_faux))                      if ((erreur != d_absence_erreur) || (existence == d_faux))
                     {                      {
                           free(nom);
   
                         liberation(s_etat_processus, s_objet_argument);                          liberation(s_etat_processus, s_objet_argument);
                         liberation(s_etat_processus, s_objet_resultat);                          liberation(s_etat_processus, s_objet_resultat);
   
Line 2796  instruction_open(struct_processus *s_eta Line 2922  instruction_open(struct_processus *s_eta
   
                     if ((descripteur = fopen(nom, "r")) == NULL)                      if ((descripteur = fopen(nom, "r")) == NULL)
                     {                      {
                           free(nom);
   
                         liberation(s_etat_processus, s_objet_argument);                          liberation(s_etat_processus, s_objet_argument);
                         liberation(s_etat_processus, s_objet_resultat);                          liberation(s_etat_processus, s_objet_resultat);
   
Line 2812  instruction_open(struct_processus *s_eta Line 2940  instruction_open(struct_processus *s_eta
   
                     if (fcntl(fileno(descripteur), F_GETLK, &lock) == -1)                      if (fcntl(fileno(descripteur), F_GETLK, &lock) == -1)
                     {                      {
                           free(nom);
   
                         if (fclose(descripteur) != 0)                          if (fclose(descripteur) != 0)
                         {                          {
                               liberation(s_etat_processus, s_objet_argument);
                             liberation(s_etat_processus, s_objet_resultat);                              liberation(s_etat_processus, s_objet_resultat);
   
                             (*s_etat_processus).erreur_systeme =                              (*s_etat_processus).erreur_systeme =
Line 2821  instruction_open(struct_processus *s_eta Line 2952  instruction_open(struct_processus *s_eta
                             return;                              return;
                         }                          }
   
                           liberation(s_etat_processus, s_objet_argument);
                         liberation(s_etat_processus, s_objet_resultat);                          liberation(s_etat_processus, s_objet_resultat);
   
                         (*s_etat_processus).erreur_systeme =                          (*s_etat_processus).erreur_systeme =
Line 2828  instruction_open(struct_processus *s_eta Line 2960  instruction_open(struct_processus *s_eta
                         return;                          return;
                     }                      }
   
                     if (fclose(descripteur) != 0)                      if (lock.l_type != F_UNLCK)
                     {                      {
                           free(nom);
   
                           if (fclose(descripteur) != 0)
                           {
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_systeme =
                                       d_es_erreur_fichier;
                               return;
                           }
   
                           liberation(s_etat_processus, s_objet_argument);
                         liberation(s_etat_processus, s_objet_resultat);                          liberation(s_etat_processus, s_objet_resultat);
   
                         (*s_etat_processus).erreur_systeme =                          (*s_etat_processus).erreur_execution =
                                 d_es_erreur_fichier;                                  d_ex_fichier_verrouille;
                         return;                          return;
                     }                      }
   
                     if ((descripteur = fopen(nom, "w+")) == NULL)                      if (fclose(descripteur) != 0)
                     {                      {
                           free(nom);
   
                         liberation(s_etat_processus, s_objet_argument);                          liberation(s_etat_processus, s_objet_argument);
                         liberation(s_etat_processus, s_objet_resultat);                          liberation(s_etat_processus, s_objet_resultat);
   
                         (*s_etat_processus).erreur_execution =                          (*s_etat_processus).erreur_systeme =
                                 d_ex_erreur_acces_fichier;                                  d_es_erreur_fichier;
                         return;                          return;
                     }                      }
   
                       if (type_acces == 'S')
                       {
                           if ((descripteur = fopen(nom, "w+")) == NULL)
                           {
                               free(nom);
   
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
                       }
                       else
                       {
                           if (sqlite3_open_v2(nom, &sqlite,
                                   SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
                                   NULL) != SQLITE_OK)
                           {
                               free(nom);
   
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
   
                           // Ouverture du fichier pour pouvoir gérer les
                           // verrous à la façon des fichiers séquentiels.
   
                           if ((descripteur = fopen(nom, "a+")) == NULL)
                           {
                               free(nom);
   
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
   
                           if (type_acces == 'D')
                           {
                               if (initialisation_fichier_acces_direct(
                                       s_etat_processus, sqlite,
                                       (format == 'N') ? d_faux : d_vrai)
                                       != d_absence_erreur)
                               {
                                   free(nom);
   
                                   liberation(s_etat_processus, s_objet_argument);
                                   liberation(s_etat_processus, s_objet_resultat);
   
                                   return;
                               }
                           }
                           else
                           {
                               if (initialisation_fichier_acces_indexe(
                                       s_etat_processus, sqlite,
                                       (format == 'N') ? d_faux : d_vrai)
                                       != d_absence_erreur)
                               {
                                   free(nom);
   
                                   liberation(s_etat_processus, s_objet_argument);
                                   liberation(s_etat_processus, s_objet_resultat);
   
                                   return;
                               }
                           }
                       }
   
                     break;                      break;
                 }                  }
   
Line 2857  instruction_open(struct_processus *s_eta Line 3081  instruction_open(struct_processus *s_eta
   
                     if (erreur == d_erreur)                      if (erreur == d_erreur)
                     {                      {
                           free(nom);
   
                         liberation(s_etat_processus, s_objet_argument);                          liberation(s_etat_processus, s_objet_argument);
                         liberation(s_etat_processus, s_objet_resultat);                          liberation(s_etat_processus, s_objet_resultat);
   
Line 2867  instruction_open(struct_processus *s_eta Line 3093  instruction_open(struct_processus *s_eta
   
                     if (existence == d_faux)                      if (existence == d_faux)
                     {                      {
                         if ((descripteur = fopen(nom, "w+")) == NULL)                          if (type_acces == 'S')
                         {                          {
                             liberation(s_etat_processus, s_objet_argument);                              if ((descripteur = fopen(nom, "w+")) == NULL)
                             liberation(s_etat_processus, s_objet_resultat);                              {
                                   free(nom);
   
                             (*s_etat_processus).erreur_execution =                                  liberation(s_etat_processus, s_objet_argument);
                                     d_ex_erreur_acces_fichier;                                  liberation(s_etat_processus, s_objet_resultat);
                             return;  
                                   (*s_etat_processus).erreur_execution =
                                           d_ex_erreur_acces_fichier;
                                   return;
                               }
                           }
                           else
                           {
                               if (sqlite3_open_v2(nom, &sqlite,
                                       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
                                       NULL) != SQLITE_OK)
                               {
                                   free(nom);
   
                                   liberation(s_etat_processus, s_objet_argument);
                                   liberation(s_etat_processus, s_objet_resultat);
   
                                   (*s_etat_processus).erreur_execution =
                                           d_ex_erreur_acces_fichier;
                                   return;
                               }
   
                               if ((descripteur = fopen(nom, "a+")) == NULL)
                               {
                                   free(nom);
   
                                   liberation(s_etat_processus, s_objet_argument);
                                   liberation(s_etat_processus, s_objet_resultat);
   
                                   (*s_etat_processus).erreur_execution =
                                           d_ex_erreur_acces_fichier;
                                   return;
                               }
   
                               if (type_acces == 'D')
                               {
                                   if (initialisation_fichier_acces_direct(
                                           s_etat_processus, sqlite,
                                           (format == 'N') ? d_faux : d_vrai)
                                           != d_absence_erreur)
                                   {
                                       free(nom);
   
                                       liberation(s_etat_processus,
                                               s_objet_argument);
                                       liberation(s_etat_processus,
                                               s_objet_resultat);
   
                                       return;
                                   }
                               }
                               else
                               {
                                   if (initialisation_fichier_acces_indexe(
                                           s_etat_processus, sqlite,
                                           (format == 'N') ? d_faux : d_vrai)
                                           != d_absence_erreur)
                                   {
                                       free(nom);
   
                                       liberation(s_etat_processus,
                                               s_objet_argument);
                                       liberation(s_etat_processus,
                                               s_objet_resultat);
   
                                       return;
                                   }
                               }
                         }                          }
                     }                      }
                     else                      else
                     {                      {
                         if ((descripteur = fopen(nom, "r+")) == NULL)                          if (type_acces == 'S')
                         {                          {
                             liberation(s_etat_processus, s_objet_argument);                              if ((descripteur = fopen(nom, "r+")) == NULL)
                             liberation(s_etat_processus, s_objet_resultat);                              {
                                   free(nom);
   
                             (*s_etat_processus).erreur_execution =                                  liberation(s_etat_processus, s_objet_argument);
                                     d_ex_erreur_acces_fichier;                                  liberation(s_etat_processus, s_objet_resultat);
                             return;  
                                   (*s_etat_processus).erreur_execution =
                                           d_ex_erreur_acces_fichier;
                                   return;
                               }
                           }
                           else
                           {
                               if (sqlite3_open_v2(nom, &sqlite,
                                       SQLITE_OPEN_READWRITE,
                                       NULL) != SQLITE_OK)
                               {
                                   free(nom);
   
                                   liberation(s_etat_processus, s_objet_argument);
                                   liberation(s_etat_processus, s_objet_resultat);
   
                                   (*s_etat_processus).erreur_execution =
                                           d_ex_erreur_acces_fichier;
                                   return;
                               }
   
                               if ((descripteur = fopen(nom, "a+")) == NULL)
                               {
                                   free(nom);
   
                                   liberation(s_etat_processus, s_objet_argument);
                                   liberation(s_etat_processus, s_objet_resultat);
   
                                   (*s_etat_processus).erreur_execution =
                                           d_ex_erreur_acces_fichier;
                                   return;
                               }
                         }                          }
                     }                      }
   
Line 2900  instruction_open(struct_processus *s_eta Line 3227  instruction_open(struct_processus *s_eta
   
                     if ((erreur != d_absence_erreur) || (existence != d_faux))                      if ((erreur != d_absence_erreur) || (existence != d_faux))
                     {                      {
                           free(nom);
   
                         liberation(s_etat_processus, s_objet_argument);                          liberation(s_etat_processus, s_objet_argument);
                         liberation(s_etat_processus, s_objet_resultat);                          liberation(s_etat_processus, s_objet_resultat);
   
Line 2908  instruction_open(struct_processus *s_eta Line 3237  instruction_open(struct_processus *s_eta
                         return;                          return;
                     }                      }
   
                     if ((descripteur = fopen(nom, "w+")) == NULL)                      if (type_acces == 'S')
                     {                      {
                         liberation(s_etat_processus, s_objet_argument);                          if ((descripteur = fopen(nom, "w+")) == NULL)
                         liberation(s_etat_processus, s_objet_resultat);                          {
                               free(nom);
   
                         (*s_etat_processus).erreur_execution =                              liberation(s_etat_processus, s_objet_argument);
                                 d_ex_erreur_acces_fichier;                              liberation(s_etat_processus, s_objet_resultat);
                         return;  
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
                       }
                       else
                       {
                           // Si le fichier existe, on le supprime.
   
                           if (unlink(nom) != 0)
                           {
                               free(nom);
   
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
   
                           if (sqlite3_open_v2(nom, &sqlite,
                                   SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
                                   NULL) != SQLITE_OK)
                           {
                               free(nom);
   
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
   
                           if ((descripteur = fopen(nom, "a+")) == NULL)
                           {
                               free(nom);
   
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_acces_fichier;
                               return;
                           }
   
                           if (type_acces == 'D')
                           {
                               if (initialisation_fichier_acces_direct(
                                       s_etat_processus, sqlite,
                                       (format == 'N') ? d_faux : d_vrai)
                                       != d_absence_erreur)
                               {
                                   free(nom);
   
                                   liberation(s_etat_processus, s_objet_argument);
                                   liberation(s_etat_processus, s_objet_resultat);
   
                                   return;
                               }
                           }
                           else
                           {
                               if (initialisation_fichier_acces_indexe(
                                       s_etat_processus, sqlite,
                                       (format == 'N') ? d_faux : d_vrai)
                                       != d_absence_erreur)
                               {
                                   free(nom);
   
                                   liberation(s_etat_processus, s_objet_argument);
                                   liberation(s_etat_processus, s_objet_resultat);
   
                                   return;
                               }
                           }
                     }                      }
   
                     break;                      break;
Line 2944  instruction_open(struct_processus *s_eta Line 3351  instruction_open(struct_processus *s_eta
             (*((struct_fichier *) (*s_objet_resultat).objet)).position_clef =              (*((struct_fichier *) (*s_objet_resultat).objet)).position_clef =
                     position_clef;                      position_clef;
                           
             if (autorisation_liberation_nom == d_vrai)  
             {  
                 free(nom);  
             }  
   
             rewind(descripteur);              rewind(descripteur);
   
             lock.l_type = F_WRLCK;              lock.l_type = F_WRLCK;
Line 2963  instruction_open(struct_processus *s_eta Line 3365  instruction_open(struct_processus *s_eta
                 {                  {
                     liberation(s_etat_processus, s_objet_resultat);                      liberation(s_etat_processus, s_objet_resultat);
   
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;                      (*s_etat_processus).erreur_systeme =
                               d_es_erreur_fichier;
                     return;                      return;
                 }                  }
   
Line 2998  instruction_open(struct_processus *s_eta Line 3401  instruction_open(struct_processus *s_eta
   
                     liberation(s_etat_processus, s_objet_resultat);                      liberation(s_etat_processus, s_objet_resultat);
   
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;                      (*s_etat_processus).erreur_systeme =
                               d_es_erreur_fichier;
                     return;                      return;
                 }                  }
             }              }
Line 3010  instruction_open(struct_processus *s_eta Line 3414  instruction_open(struct_processus *s_eta
   
                 if ((lock.l_type == F_RDLCK) && (protection != 'R'))                  if ((lock.l_type == F_RDLCK) && (protection != 'R'))
                 {                  {
                       free(nom);
   
                     if (fclose(descripteur) != 0)                      if (fclose(descripteur) != 0)
                     {                      {
                         liberation(s_etat_processus, s_objet_resultat);                          liberation(s_etat_processus, s_objet_resultat);
Line 3027  instruction_open(struct_processus *s_eta Line 3433  instruction_open(struct_processus *s_eta
                 }                  }
                 else if ((lock.l_type == F_WRLCK) && (protection != 'W'))                  else if ((lock.l_type == F_WRLCK) && (protection != 'W'))
                 {                  {
                       free(nom);
   
                     if (fclose(descripteur) != 0)                      if (fclose(descripteur) != 0)
                     {                      {
                         liberation(s_etat_processus, s_objet_resultat);                          liberation(s_etat_processus, s_objet_resultat);
Line 3044  instruction_open(struct_processus *s_eta Line 3452  instruction_open(struct_processus *s_eta
                 }                  }
                 else                  else
                 {                  {
                       free(nom);
   
                       if (fclose(descripteur) != 0)
                       {
                           liberation(s_etat_processus, s_objet_resultat);
   
                           (*s_etat_processus).erreur_systeme =
                                   d_es_erreur_fichier;
                           return;
                       }
   
                     liberation(s_etat_processus, s_objet_resultat);                      liberation(s_etat_processus, s_objet_resultat);
   
                     (*s_etat_processus).erreur_execution =                      (*s_etat_processus).erreur_execution =
Line 3087  instruction_open(struct_processus *s_eta Line 3506  instruction_open(struct_processus *s_eta
                  * Recherche du premier descripteur libre                   * Recherche du premier descripteur libre
                  */                   */
   
                 if ((chaine_descripteurs = malloc(                  if ((chaine_descripteurs = malloc(sizeof(unsigned char) *
                         ds_nombre_maximum_fichiers_ouverts + 1)) == NULL)                          (ds_nombre_maximum_fichiers_ouverts + 1))) == NULL)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
                             d_es_allocation_memoire;                              d_es_allocation_memoire;
Line 3166  instruction_open(struct_processus *s_eta Line 3585  instruction_open(struct_processus *s_eta
                     = prochain_descripteur;                      = prochain_descripteur;
             (*((struct_descripteur_fichier *) (*l_element_courant).donnee))              (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
                     .identifiant = prochain_descripteur;                      .identifiant = prochain_descripteur;
             (*((struct_descripteur_fichier *) (*l_element_courant).donnee))  
                     .descripteur = descripteur;              if (type_acces == 'S')
               {
                   (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
                           .type = 'C';
                   (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
                           .descripteur_c = descripteur;
               }
               else
               {
                   (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
                           .type = 'S';
                   (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
                           .descripteur_c = descripteur;
                   (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
                           .descripteur_sqlite = sqlite;
               }
   
             (*((struct_descripteur_fichier *) (*l_element_courant).donnee))              (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
                     .pid = getpid();                      .pid = getpid();
             (*((struct_descripteur_fichier *) (*l_element_courant).donnee))              (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
Line 3175  instruction_open(struct_processus *s_eta Line 3610  instruction_open(struct_processus *s_eta
             (*((struct_descripteur_fichier *) (*l_element_courant).donnee))              (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
                     .effacement = (type_ouverture == 'S') ? 'Y' : 'N';                      .effacement = (type_ouverture == 'S') ? 'Y' : 'N';
   
             if (((*((struct_descripteur_fichier *) (*l_element_courant)              (*((struct_descripteur_fichier *) (*l_element_courant)
                     .donnee)).nom = malloc((strlen((*((struct_fichier *)                      .donnee)).nom = nom;
                     (*s_objet_resultat).objet)).nom) + 1) *  
                     sizeof(unsigned char))) == NULL)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return;  
             }  
   
             strcpy((*((struct_descripteur_fichier *) (*l_element_courant)  
                     .donnee)).nom, (*((struct_fichier *) (*s_objet_resultat)  
                     .objet)).nom);  
         }          }
         else if (type_arguments == 'S')          else if (type_arguments == 'S')
         {          {
Line 3633  instruction_open(struct_processus *s_eta Line 4058  instruction_open(struct_processus *s_eta
             else              else
             {              {
                 if (((*((struct_socket *) (*s_objet_resultat).objet)).adresse =                  if (((*((struct_socket *) (*s_objet_resultat).objet)).adresse =
                         malloc((strlen(nom) + 1) * sizeof(unsigned char)))                          transliteration(s_etat_processus, nom,
                         == NULL)                          d_locale, "UTF-8")) == NULL)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      liberation(s_etat_processus, s_objet_argument);
                             d_es_allocation_memoire;                      liberation(s_etat_processus, s_objet_resultat);
                     return;                      return;
                 }                  }
   
                 strcpy((*((struct_socket *) (*s_objet_resultat).objet)).adresse,  
                         nom);  
             }              }
   
             if (((*((struct_socket *) (*s_objet_resultat).objet))              if (((*((struct_socket *) (*s_objet_resultat).objet))

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


CVSweb interface <joel.bertrand@systella.fr>