From: mirv Date: Sun, 6 Jan 2008 20:18:40 +0000 (+0100) Subject: avoid unnecessary error messages from loader X-Git-Tag: 0.9.0~43 X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=fcd36d98d7bf24d98f4ca9e4f2ce178c24e12610;p=sasc-ng.git avoid unnecessary error messages from loader --- diff --git a/data.c b/data.c index 9d8a996..ad4925e 100644 --- a/data.c +++ b/data.c @@ -258,8 +258,9 @@ void cStructLoader::CheckAccess(void) if(errno!=EACCES) PRINTF(L_GEN_ERROR,"failed access %s: %s",path,strerror(errno)); PRINTF(L_GEN_WARN,"no write permission on %s. Changes will not be saved!",path); - SL_CLRFLAG(SL_READWRITE); + SL_SETFLAG(SL_NOACCESS); } + else SL_CLRFLAG(SL_NOACCESS); } bool cStructLoader::CheckUnmodified(void) @@ -272,14 +273,29 @@ bool cStructLoader::CheckUnmodified(void) return true; } +void cStructLoader::LoadFinished(void) +{ + SL_CLRFLAG(SL_SHUTUP); + if(!SL_TSTFLAG(SL_LOADED)) + PRINTF(L_CORE_LOAD,"loading %s terminated with error. Changes will not be saved!",path); +} + +void cStructLoader::OpenFailed(void) +{ + if(SL_TSTFLAG(SL_VERBOSE) && !SL_TSTFLAG(SL_SHUTUP)) { + PRINTF(L_GEN_ERROR,"failed open %s: %s",path,strerror(errno)); + SL_SETFLAG(SL_SHUTUP); + } + if(SL_TSTFLAG(SL_MISSINGOK)) SL_SETFLAG(SL_LOADED); + else SL_CLRFLAG(SL_LOADED); +} + void cStructLoader::Load(bool reload) { if(SL_TSTFLAG(SL_DISABLED) || (reload && !SL_TSTFLAG(SL_WATCH))) return; FILE *f=fopen(path,"r"); if(f) { int curr_mtime=MTime(true); - CheckAccess(); - SL_SETFLAG(SL_LOADED); ListLock(true); bool doload=false; if(!reload) { @@ -297,7 +313,9 @@ void cStructLoader::Load(bool reload) doload=true; } if(doload) { + SL_SETFLAG(SL_LOADED); PRINTF(L_GEN_INFO,"loading %s from %s",type,path); + CheckAccess(); int lineNum=0, num=0; char buff[4096]; while(fgets(buff,sizeof(buff),f)) { @@ -347,15 +365,10 @@ void cStructLoader::Load(bool reload) else ListUnlock(); fclose(f); + LoadFinished(); } - else { - if(SL_TSTFLAG(SL_VERBOSE)) - PRINTF(L_GEN_ERROR,"failed open %s: %s",path,strerror(errno)); - if(SL_TSTFLAG(SL_MISSINGOK)) SL_SETFLAG(SL_LOADED); - else SL_CLRFLAG(SL_LOADED); - } - if(!SL_TSTFLAG(SL_LOADED)) - PRINTF(L_CORE_LOAD,"loading %s terminated with error. Changes will not be saved!",path); + else + OpenFailed(); } void cStructLoader::Purge(void) @@ -371,10 +384,16 @@ void cStructLoader::Purge(void) } } +bool cStructLoader::CheckDoSave(void) +{ + return !SL_TSTFLAG(SL_DISABLED) && SL_TSTFLAG(SL_READWRITE) + && !SL_TSTFLAG(SL_NOACCESS) && SL_TSTFLAG(SL_LOADED) + && IsModified() && CheckUnmodified(); +} + void cStructLoader::Save(void) { - if(!SL_TSTFLAG(SL_DISABLED) && SL_TSTFLAG(SL_READWRITE) && SL_TSTFLAG(SL_LOADED) - && IsModified() && CheckUnmodified()) { + if(CheckDoSave()) { cSafeFile f(path); if(f.Open()) { ListLock(false); @@ -407,11 +426,11 @@ void cStructLoaderPlain::Load(bool reload) if(SL_TSTFLAG(SL_DISABLED) || reload) return; FILE *f=fopen(path,"r"); if(f) { - CheckAccess(); PreLoad(); + ListLock(true); SL_SETFLAG(SL_LOADED); PRINTF(L_GEN_INFO,"loading %s from %s",type,path); - ListLock(true); + CheckAccess(); int lineNum=0; char buff[4096]; while(fgets(buff,sizeof(buff),f)) { @@ -436,15 +455,10 @@ void cStructLoaderPlain::Load(bool reload) ListUnlock(); PostLoad(); fclose(f); + LoadFinished(); } - else { - if(SL_TSTFLAG(SL_VERBOSE)) - PRINTF(L_GEN_ERROR,"failed open %s: %s",path,strerror(errno)); - if(SL_TSTFLAG(SL_MISSINGOK)) SL_SETFLAG(SL_LOADED); - else SL_CLRFLAG(SL_LOADED); - } - if(!SL_TSTFLAG(SL_LOADED)) - PRINTF(L_CORE_LOAD,"loading %s terminated with error. Changes will not be saved!",path); + else + OpenFailed(); } void cStructLoaderPlain::PreSave(FILE *f) @@ -455,8 +469,7 @@ void cStructLoaderPlain::PreSave(FILE *f) void cStructLoaderPlain::Save(void) { - if(!SL_TSTFLAG(SL_DISABLED) && SL_TSTFLAG(SL_READWRITE) && SL_TSTFLAG(SL_LOADED) - && IsModified() && CheckUnmodified()) { + if(CheckDoSave()) { cSafeFile f(path); if(f.Open()) { ListLock(false); diff --git a/data.h b/data.h index 820e8e2..54e6ba2 100644 --- a/data.h +++ b/data.h @@ -100,6 +100,8 @@ public: #define SL_LOADED 0x100 #define SL_MODIFIED 0x200 #define SL_DISABLED 0x400 +#define SL_SHUTUP 0x800 +#define SL_NOACCESS 0x1000 #define SL_SETFLAG(x) flags|=(x) #define SL_CLRFLAG(x) flags&=~(x) @@ -119,6 +121,9 @@ protected: // void CheckAccess(void); bool CheckUnmodified(void); + void LoadFinished(void); + void OpenFailed(void); + bool CheckDoSave(void) time_t MTime(bool log); // virtual cStructItem *ParseLine(char *line)=0;