#include #include #include #include #include #include #include "etc.h" #include "etc.m" /* Signale message d'erreur pour ouverture de fichier qui a échoué */ export void fopen_prterr ( const char *fname, int lecture, /* Le fichier était ouvert en mode lecture seulement ? */ int quit) /* Termine execution si erreur */ { const char *msg; char path[MAXSIZ_PATH]; /* Contiendra la portion répertoire */ path[0] = '\0'; if (file_exist (fname)){ /* Le fichier existe, il y a un probleme d'acces */ if (lecture){ msg = MSG_U(E_NOREAD,"Lecture interdite du fichier %s\n"); }else{ msg = MSG_U(E_NOWRITE,"Ecriture interdite au fichier %s\n"); } }else{ /* Mode écriture commandé */ path_splitlex (fname,path,NULL); if (file_type(path)!=1){ if (lecture){ msg = MSG_U(E_CANTREADDIR,"Ne peut lire le fichier %s\n" "Le répertoire %s n'existe pas\n"); }else{ msg = MSG_U(E_CANTWRITEDIR,"Ne peut écrire le fichier %s\n" "Le répertoire %s n'existe pas\n"); } }else{ if (lecture){ msg = MSG_U(E_CANTREADF,"Ne peut lire le fichier %s\n" "Il n'existe pas\n"); }else{ msg = MSG_U(E_CANTWRITEF ,"Ecriture interdite au fichier %s\n"); } } } fprintf (stderr,msg,fname,path); if (quit) exit (-1); } /* Ouvre un fichier avec fopen en signalant erreur avec error_printf(). Tente de signaler une erreur informative. */ export FILE *fopen_err ( const char *fname, const char *mode, int quit) /* Termine execution si erreur */ { FILE *f = fopen_share (fname,mode); if (f == NULL){ fopen_prterr (fname,strchr(mode,'r')!=NULL,quit); } return (f); } #ifdef TEST int main (int argc, char *argv[]) { if (argc == 2){ fopen_err (argv[1],"r",0); fopen_err (argv[1],"w",0); file_unlink (argv[1]); }else{ printf ("Nom du fichier à ouvrir\n"); } } #endif