]> www.vanbest.org Git - sasc-ng.git/commitdiff
check if file has been modified before saving
authormirv <unknown>
Fri, 4 Jan 2008 17:30:38 +0000 (18:30 +0100)
committermirv <unknown>
Fri, 4 Jan 2008 17:30:38 +0000 (18:30 +0100)
data.c
data.h

diff --git a/data.c b/data.c
index b38809dad58daaab9bfc5d2f049238785d3bcd61..86c6c15e569da3a9e0c01f1165c8cc8858b22c43 100644 (file)
--- 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 6a40ff808c5ac0aff10696226921697865fa137b..26ba4b6926fc6633d1442171145251b91540aaf5 100644 (file)
--- 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;