Diff for /rpl/src/gestion_fichiers.c between versions 1.10 and 1.53

version 1.10, 2010/03/09 10:18:44 version 1.53, 2013/06/21 14:15:52
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.13    RPL/2 (R) version 4.1.15
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2013 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"
   
   
 /*  /*
Line 77  creation_nom_fichier(struct_processus *s Line 77  creation_nom_fichier(struct_processus *s
   
     do      do
     {      {
         sprintf(tampon, "RPL2-%lu-%lu-%lu", (unsigned long) getpid(),          sprintf(tampon, "RPL-%llu-%llu-%lu", (unsigned long long) getpid(),
                 (unsigned long) pthread_self(), ordre);                  (unsigned long long) pthread_self(), ordre);
   
         if (chemin == NULL)          if (chemin == NULL)
         {          {
Line 222  recherche_chemin_fichiers_temporaires(st Line 222  recherche_chemin_fichiers_temporaires(st
     {      {
         if (chemins[i][0] == '$')          if (chemins[i][0] == '$')
         {          {
             candidat = getenv("RPL_TMP_PATH");              candidat = getenv(chemins[i] + 1);
   
             if (candidat != NULL)              if (candidat != NULL)
             {              {
                 if ((nom_candidat = creation_nom_fichier(s_etat_processus,                  if ((nom_candidat = creation_nom_fichier(s_etat_processus,
                         candidat)) == NULL)                          candidat)) == NULL)
                 {                  {
                     return NULL;                      return(NULL);
                 }                  }
   
                 if ((fichier = fopen(nom_candidat, "w+")) != NULL)                  if ((fichier = fopen(nom_candidat, "w+")) != NULL)
Line 245  recherche_chemin_fichiers_temporaires(st Line 245  recherche_chemin_fichiers_temporaires(st
                     }                      }
                     else                      else
                     {                      {
                         return NULL;                          return(NULL);
                     }                      }
                 }                  }
                 else                  else
Line 259  recherche_chemin_fichiers_temporaires(st Line 259  recherche_chemin_fichiers_temporaires(st
             if ((nom_candidat = creation_nom_fichier(s_etat_processus,              if ((nom_candidat = creation_nom_fichier(s_etat_processus,
                     chemins[i])) == NULL)                      chemins[i])) == NULL)
             {              {
                 return NULL;                  return(NULL);
             }              }
   
             if ((fichier = fopen(nom_candidat, "w+")) != NULL)              if ((fichier = fopen(nom_candidat, "w+")) != NULL)
Line 275  recherche_chemin_fichiers_temporaires(st Line 275  recherche_chemin_fichiers_temporaires(st
                 }                  }
                 else                  else
                 {                  {
                     return NULL;                      return(NULL);
                 }                  }
             }              }
             else              else
Line 287  recherche_chemin_fichiers_temporaires(st Line 287  recherche_chemin_fichiers_temporaires(st
         i++;          i++;
     }      }
   
     return chemin;      return(chemin);
 }  }
   
   
Line 348  caracteristiques_fichier(struct_processu Line 348  caracteristiques_fichier(struct_processu
                 l_element_courant = (*l_element_courant).suivant;                  l_element_courant = (*l_element_courant).suivant;
             }              }
         }          }
           else if (errno == EACCES)
           {
               // Le répertoire n'est pas accessible en écriture. On tente
               // l'ouverture du fichier.
   
               if ((descripteur = open(nom, O_RDONLY, S_IRUSR | S_IWUSR)) == -1)
               {
                   // Le fichier n'existe pas.
                   close(descripteur);
                   erreur = d_absence_erreur;
               }
               else
               {
                   erreur = d_absence_erreur;
                   (*existence) = d_vrai;
   
                   // On chercher à savoir si le fichier est ouvert.
                   // S'il est ouvert, on renvoie son unité de rattachement.
   
                   l_element_courant = (*s_etat_processus).s_fichiers;
   
                   while(l_element_courant != NULL)
                   {
                       if (strcmp((*((struct_descripteur_fichier *)
                               (*l_element_courant).donnee)).nom, nom) == 0)
                       {
                           if (((*((struct_descripteur_fichier *)
                                   (*l_element_courant).donnee)).pid == getpid())
                                   && (pthread_equal(
                                   (*((struct_descripteur_fichier *)
                                   (*l_element_courant).donnee)).tid,
                                   pthread_self()) != 0))
                           {
                               (*ouverture) = d_vrai;
   
                               (*unite) = (unsigned long)
                                       fileno((*((struct_descripteur_fichier *)
                                       (*l_element_courant).donnee))
                                       .descripteur_c);
                               break;
                           }
                       }
   
                       l_element_courant = (*l_element_courant).suivant;
                   }
               }
           }
         else          else
         {          {
             erreur = d_erreur;              erreur = d_erreur;
Line 430  initialisation_controle(struct_processus Line 477  initialisation_controle(struct_processus
             return(d_erreur);              return(d_erreur);
         }          }
   
         if (sqlite3_prepare_v2(sqlite, commande, strlen(commande), &ppStmt,          if (sqlite3_prepare_v2(sqlite, commande, (int) strlen(commande),
                 &queue) != SQLITE_OK)                  &ppStmt, &queue) != SQLITE_OK)
         {          {
             free(commande);              free(commande);
             (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;              (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;

Removed from v.1.10  
changed lines
  Added in v.1.53


CVSweb interface <joel.bertrand@systella.fr>