#include #include #include #include "etc.h" /* Ouverture d'un fichier dans un répertoire virtuel. (voir les fonction vdir_xxxx) Vérifie si le path fname correspond existe localement ou dans l'archive. Si le fichier est ouvert en écriture et que le fichier est présent dans l'archive et pas localement, le fichier sera copier localement avant l'ouverture. Retourne NULL si erreur ou ne peut ouvrir ou fichier existe pas. Attention: L'ouverture en écriture seulement est identique à fopen (un peu plus lent peut-être). */ export FILE *vfopen ( const char *fname, const char *mode) { char reel[MAXSIZ_PATH]; int exist = vdir_exist (fname,reel); if (exist == 2){ /* Le fichier est présent dans l'archive. Si ouverture pour modification (pas seulement écriture), on doit copier le fichier */ if (strchr(mode,'a') != NULL || strchr(mode,'+') != NULL){ if (file_copyp(reel,fname)==-1) return NULL; }else if (strchr(mode,'w')==NULL){ fname = reel; } } return fopen_share (fname,mode); }