#include #include #include #include "tool.h" #include static int filebak_copyp ( const char *src, const char *dst, bool force) { if (force) unlink (dst); return file_copyp (src,dst); } /* Traitement initial prot‚geant l'‚tat courant d'un fichier … r‚viser filebak_ok et filebak_abort seront appel‚ aprŠs la r‚vision du fichier. Ce systŠme est compliqu‚ parce que le traitement sur UNIX est diff‚rent. (dans UNIX on ne peut pas simplement renommer le fichier … prot‚ger et cr‚er un autre … 0, car les privilŠges seront perdus). Sous UNIX, on copie imm‚diatement le fichier dans le fichier .extbak. Retourne -1 si erreur, ou permission pas accord‚e. Fonction mˆme si le fichier fname n'existe pas. */ export int filebak_before ( const char *fname, /* Fichier qui sera r‚vis‚ */ const char *extbak, /* extension du fichier … conserver */ char *ftmp, /* Fichier qui contient temporairement l'‚tat de fname */ char *fwork, /* Fichier … produire */ bool force) { int ret = -1; file_chgext (fname,ftmp,extbak); strcpy (fwork,fname); if ((force||file_writeok(fname)) && (!file_exist(fname) || filebak_copyp (fname,ftmp,force) != -1)){ ret = 0; } return ret; } export int filebak_before ( const char *fname, /* Fichier qui sera r‚vis‚ */ const char *extbak, /* extension du fichier … conserver */ char *ftmp, /* Fichier qui contient temporairement l'‚tat de fname */ char *fwork) /* Fichier … produire */ { return filebak_before(fname,extbak,ftmp,fwork,false); } /* Traitement final prot‚geant l'‚tat courant d'un fichier en r‚vision On repasse simplement les mˆme arguments qu'… filebak_before(). */ export int filebak_ok ( const char *, /* Fichier qui sera r‚vis‚ */ const char *, /* extension du fichier … conserver */ char *, /* Fichier qui contient temporairement l'‚tat de fname */ char *) /* Fichier … produire */ { return 0; } /* Abandon du traitement de r‚vision d'un fichier. On replace le fichier dans son ‚tat original. */ export int filebak_abort ( const char *fname, /* Fichier qui sera r‚vis‚ */ const char *, /* extension du fichier … conserver */ char *ftmp, /* Fichier qui contient temporairement l'‚tat de fname */ char *) /* Fichier … produire */ { int ret = 0; if (file_exist(ftmp)){ ret = file_copyp (ftmp,fname); } return ret; }