Diff for /rpl/src/gestion_fichiers.c between versions 1.11 and 1.37

version 1.11, 2010/04/07 13:45:03 version 1.37, 2011/12/05 17:45:00
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.14    RPL/2 (R) version 4.1.5
   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"
   
   
 /*  /*
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-%lu-%lu-%lu", (unsigned long) getpid(),
                 (unsigned long) pthread_self(), ordre);                  (unsigned long) pthread_self(), ordre);
   
         if (chemin == NULL)          if (chemin == NULL)
Line 229  recherche_chemin_fichiers_temporaires(st Line 229  recherche_chemin_fichiers_temporaires(st
                 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 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;

Removed from v.1.11  
changed lines
  Added in v.1.37


CVSweb interface <joel.bertrand@systella.fr>