Diff for /rpl/src/gestion_fichiers.c between versions 1.19 and 1.77

version 1.19, 2010/08/26 19:07:36 version 1.77, 2020/01/10 11:15:42
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.19    RPL/2 (R) version 4.1.32
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2020 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 77  creation_nom_fichier(struct_processus *s Line 77  creation_nom_fichier(struct_processus *s
   
     do      do
     {      {
         sprintf(tampon, "RPL-%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 403  initialisation_controle(struct_processus Line 450  initialisation_controle(struct_processus
   
     unsigned char           *commande;      unsigned char           *commande;
   
     if (sqlite3_prepare_v2(sqlite, commande1, strlen(commande1), &ppStmt,      if (sqlite3_prepare_v2(sqlite, commande1, (int) strlen(commande1), &ppStmt,
             &queue) != SQLITE_OK)              &queue) != SQLITE_OK)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;          (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
Line 424  initialisation_controle(struct_processus Line 471  initialisation_controle(struct_processus
   
     if (fichier_indexe == d_vrai)      if (fichier_indexe == d_vrai)
     {      {
         if (alsprintf(&commande, commande2, position_clef) < 0)          if (alsprintf(s_etat_processus, &commande, commande2, position_clef)
                   < 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             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;
Line 488  initialisation_fichier_acces_indexe(stru Line 536  initialisation_fichier_acces_indexe(stru
   
     if (binaire == d_faux)      if (binaire == d_faux)
     {      {
         if (sqlite3_prepare_v2(sqlite, commande1, strlen(commande1), &ppStmt,          if (sqlite3_prepare_v2(sqlite, commande1, (int) strlen(commande1),
                 &queue) != SQLITE_OK)                  &ppStmt, &queue) != SQLITE_OK)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;              (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
             return(d_erreur);              return(d_erreur);
Line 507  initialisation_fichier_acces_indexe(stru Line 555  initialisation_fichier_acces_indexe(stru
             return(d_erreur);              return(d_erreur);
         }          }
   
         if (sqlite3_prepare_v2(sqlite, commande10, strlen(commande10), &ppStmt,          if (sqlite3_prepare_v2(sqlite, commande10, (int) strlen(commande10),
                 &queue) != SQLITE_OK)                  &ppStmt, &queue) != SQLITE_OK)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;              (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
             return(d_erreur);              return(d_erreur);
Line 528  initialisation_fichier_acces_indexe(stru Line 576  initialisation_fichier_acces_indexe(stru
     }      }
     else      else
     {      {
         if (sqlite3_prepare_v2(sqlite, commande2, strlen(commande2), &ppStmt,          if (sqlite3_prepare_v2(sqlite, commande2, (int) strlen(commande2),
                 &queue) != SQLITE_OK)                  &ppStmt, &queue) != SQLITE_OK)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;              (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
             return(d_erreur);              return(d_erreur);
Line 547  initialisation_fichier_acces_indexe(stru Line 595  initialisation_fichier_acces_indexe(stru
             return(d_erreur);              return(d_erreur);
         }          }
   
         if (sqlite3_prepare_v2(sqlite, commande20, strlen(commande20), &ppStmt,          if (sqlite3_prepare_v2(sqlite, commande20, (int) strlen(commande20),
                 &queue) != SQLITE_OK)                  &ppStmt, &queue) != SQLITE_OK)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;              (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
             return(d_erreur);              return(d_erreur);
Line 567  initialisation_fichier_acces_indexe(stru Line 615  initialisation_fichier_acces_indexe(stru
         }          }
     }      }
   
     if (sqlite3_prepare_v2(sqlite, commande3, strlen(commande3), &ppStmt,      if (sqlite3_prepare_v2(sqlite, commande3, (int) strlen(commande3), &ppStmt,
             &queue) != SQLITE_OK)              &queue) != SQLITE_OK)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;          (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
Line 586  initialisation_fichier_acces_indexe(stru Line 634  initialisation_fichier_acces_indexe(stru
         return(d_erreur);          return(d_erreur);
     }      }
   
     if (sqlite3_prepare_v2(sqlite, commande4, strlen(commande4), &ppStmt,      if (sqlite3_prepare_v2(sqlite, commande4, (int) strlen(commande4), &ppStmt,
             &queue) != SQLITE_OK)              &queue) != SQLITE_OK)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;          (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
Line 630  initialisation_fichier_acces_direct(stru Line 678  initialisation_fichier_acces_direct(stru
   
     if (binaire == d_faux)      if (binaire == d_faux)
     {      {
         if (sqlite3_prepare_v2(sqlite, commande1, strlen(commande1), &ppStmt,          if (sqlite3_prepare_v2(sqlite, commande1, (int) strlen(commande1),
                 &queue) != SQLITE_OK)                  &ppStmt, &queue) != SQLITE_OK)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;              (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
             return(d_erreur);              return(d_erreur);
Line 651  initialisation_fichier_acces_direct(stru Line 699  initialisation_fichier_acces_direct(stru
     }      }
     else      else
     {      {
         if (sqlite3_prepare_v2(sqlite, commande2, strlen(commande2), &ppStmt,          if (sqlite3_prepare_v2(sqlite, commande2, (int) strlen(commande2),
                 &queue) != SQLITE_OK)                  &ppStmt, &queue) != SQLITE_OK)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;              (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
             return(d_erreur);              return(d_erreur);
Line 671  initialisation_fichier_acces_direct(stru Line 719  initialisation_fichier_acces_direct(stru
         }          }
     }      }
   
     if (sqlite3_prepare_v2(sqlite, commande3, strlen(commande3), &ppStmt,      if (sqlite3_prepare_v2(sqlite, commande3, (int) strlen(commande3), &ppStmt,
             &queue) != SQLITE_OK)              &queue) != SQLITE_OK)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;          (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;

Removed from v.1.19  
changed lines
  Added in v.1.77


CVSweb interface <joel.bertrand@systella.fr>