From b2792c86215c358571b256d3997eca35130b969c Mon Sep 17 00:00:00 2001 From: mirv <unknown> Date: Fri, 4 Jan 2008 18:30:38 +0100 Subject: [PATCH] check if file has been modified before saving --- data.c | 16 ++++++++++++++-- data.h | 1 + 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/data.c b/data.c index b38809d..86c6c15 100644 --- a/data.c +++ b/data.c @@ -261,6 +261,16 @@ void cStructLoader::CheckAccess(void) } } +bool cStructLoader::CheckUnmodified(void) +{ + time_t curr_mtime=MTime(); + if(mtime && mtime<curr_mtime && SL_TSTFLAG(SL_WATCH)) { + PRINTF(L_CORE_LOAD,"abort save as file %s has been changed externaly",path); + return false; + } + return true; +} + void cStructLoader::Load(bool reload) { if(SL_TSTFLAG(SL_DISABLED) || (reload && !SL_TSTFLAG(SL_WATCH))) return; @@ -361,7 +371,8 @@ void cStructLoader::Purge(void) void cStructLoader::Save(void) { - if(!SL_TSTFLAG(SL_DISABLED) && SL_TSTFLAG(SL_READWRITE) && SL_TSTFLAG(SL_LOADED) && IsModified()) { + if(!SL_TSTFLAG(SL_DISABLED) && SL_TSTFLAG(SL_READWRITE) && SL_TSTFLAG(SL_LOADED) + && IsModified() && CheckUnmodified()) { cSafeFile f(path); if(f.Open()) { ListLock(false); @@ -429,7 +440,8 @@ void cStructLoaderPlain::Load(bool reload) void cStructLoaderPlain::Save(void) { - if(!SL_TSTFLAG(SL_DISABLED) && SL_TSTFLAG(SL_READWRITE) && SL_TSTFLAG(SL_LOADED) && IsModified()) { + if(!SL_TSTFLAG(SL_DISABLED) && SL_TSTFLAG(SL_READWRITE) && SL_TSTFLAG(SL_LOADED) + && IsModified() && CheckUnmodified()) { cSafeFile f(path); if(f.Open()) { ListLock(false); diff --git a/data.h b/data.h index 6a40ff8..26ba4b6 100644 --- a/data.h +++ b/data.h @@ -118,6 +118,7 @@ protected: time_t mtime; // void CheckAccess(void); + bool CheckUnmodified(void); time_t MTime(void); // virtual cStructItem *ParseLine(char *line)=0; -- 2.39.5