version 1.13, 2010/05/24 10:58:30
|
version 1.37, 2011/12/05 17:45:00
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.0.16 |
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; |