]> www.vanbest.org Git - sasc-ng.git/commitdiff
introduce loader flags
authormirv <unknown>
Fri, 4 Jan 2008 10:33:12 +0000 (11:33 +0100)
committermirv <unknown>
Fri, 4 Jan 2008 10:33:12 +0000 (11:33 +0100)
cam.c
data.c
data.h
system-common.h
systems/irdeto/irdeto.c
systems/seca/seca.c
systems/viaccess/viaccess.c

diff --git a/cam.c b/cam.c
index bd5e17858eef0c70cbd02cf8732281887ba14cdc..95d3d8e24da555a6c8292d6d5802573852f7fcf2 100644 (file)
--- a/cam.c
+++ b/cam.c
@@ -618,7 +618,7 @@ cString cEcmData::ToString(bool hide)
 cEcmCache ecmcache;
 
 cEcmCache::cEcmCache(void)
-:cStructList<cEcmData>("ecm cache",ECMCACHE_FILE,true,true,false,false)
+:cStructList<cEcmData>("ecm cache",ECMCACHE_FILE,SL_READWRITE|SL_MISSINGOK)
 {}
 
 void cEcmCache::New(cEcmInfo *e)
diff --git a/data.c b/data.c
index 85af8f6b349b7938146d2ebdcb7dc6c4a9a0c3b3..ac96b90c0382af2a81a01eb81eb808cc9eca2e09 100644 (file)
--- a/data.c
+++ b/data.c
@@ -180,12 +180,11 @@ cCommentItem::cCommentItem(void)
 
 // -- cStructLoader ------------------------------------------------------------
 
-cStructLoader::cStructLoader(const char *Type, const char *Filename, bool rw, bool miok, bool wat, bool verb)
+cStructLoader::cStructLoader(const char *Type, const char *Filename, int Flags)
 :lock(true)
 {
-  path=0; mtime=0; modified=loaded=disabled=false;
-  type=Type; filename=Filename;
-  readwrite=rw; missingok=miok; watch=wat; verbose=verb;
+  path=0; mtime=0;
+  type=Type; filename=Filename; flags=Flags&SL_CUSTOMMASK;
   cStructLoaders::Register(this);
 }
 
@@ -261,9 +260,9 @@ time_t cStructLoader::MTime(void)
   return st.st_mtime;
 }
 
-bool cStructLoader::Load(bool reload)
+void cStructLoader::Load(bool reload)
 {
-  if(reload && !watch) return true;
+  if(SL_TSTFLAG(SL_DISABLED) || (reload && !SL_TSTFLAG(SL_WATCH))) return;
   FILE *f=fopen(path,"r");
   if(f) {
     int curr_mtime=MTime();
@@ -271,10 +270,10 @@ bool cStructLoader::Load(bool reload)
       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);
-      readwrite=false;
+      SL_CLRFLAG(SL_READWRITE);
       }
 
-    loaded=true;
+    SL_SETFLAG(SL_LOADED);
     ListLock(true);
     bool doload=false;
     if(!reload) {
@@ -299,7 +298,7 @@ bool cStructLoader::Load(bool reload)
         lineNum++;
         if(!index(buff,'\n') && !feof(f)) {
           PRINTF(L_GEN_ERROR,"file %s readbuffer overflow line#%d",path,lineNum);
-          loaded=false;
+          SL_CLRFLAG(SL_LOADED);
           break;
           }
         strreplace(buff,'\n',0); strreplace(buff,'\r',0); // chomp
@@ -331,7 +330,7 @@ bool cStructLoader::Load(bool reload)
           }
         else {
           PRINTF(L_GEN_ERROR,"out of memory loading file %s",path);
-          loaded=false;
+          SL_CLRFLAG(SL_LOADED);
           break;
           }
         }
@@ -343,39 +342,43 @@ bool cStructLoader::Load(bool reload)
     fclose(f);
     }
   else {
-    if(verbose) PRINTF(L_GEN_ERROR,"failed open %s: %s",path,strerror(errno));
-    loaded=missingok;
+    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(!loaded) PRINTF(L_CORE_LOAD,"loading %s terminated with error. Changes will not be saved!",path);
-  return loaded;
+  if(!SL_TSTFLAG(SL_LOADED))
+    PRINTF(L_CORE_LOAD,"loading %s terminated with error. Changes will not be saved!",path);
 }
 
 void cStructLoader::Purge(void)
 {
-  ListLock(true);
-  for(cStructItem *it=First(); it;) {
-    cStructItem *n=Next(it);
-    if(it->Deleted()) Del(it);
-    it=n;
+  if(!SL_TSTFLAG(SL_DISABLED)) {
+    ListLock(true);
+    for(cStructItem *it=First(); it;) {
+      cStructItem *n=Next(it);
+      if(it->Deleted()) Del(it);
+      it=n;
+      }
+    ListUnlock();
     }
-  ListUnlock();
 }
 
 void cStructLoader::Save(void)
 {
-  ListLock(false);
-  if(readwrite && loaded && IsModified()) {
+  if(!SL_TSTFLAG(SL_DISABLED) && SL_TSTFLAG(SL_READWRITE) && SL_TSTFLAG(SL_LOADED) && IsModified()) {
     cSafeFile f(path);
     if(f.Open()) {
+      ListLock(false);
       for(cStructItem *it=First(); it; it=Next(it))
         if(!it->Deleted() && !it->Save(f)) break;
       f.Close();
       mtime=MTime();
-      PRINTF(L_CORE_LOAD,"saved %s to %s",type,path);
       Modified(false);
+      ListUnlock();
+      PRINTF(L_CORE_LOAD,"saved %s to %s",type,path);
       }
     }
-  ListUnlock();
 }
 
 // -- cStructLoaders -----------------------------------------------------------
@@ -405,8 +408,7 @@ void cStructLoaders::SetCfgDir(const char *cfgdir)
 void cStructLoaders::Load(bool reload)
 {
   if(!reload || lastReload.TimedOut()) {
-    for(cStructLoader *ld=first; ld; ld=ld->next)
-      if(!ld->disabled) ld->Load(reload);
+    for(cStructLoader *ld=first; ld; ld=ld->next) ld->Load(reload);
     lastReload.Set(RELOAD_TIMEOUT);
     }
 }
@@ -414,8 +416,7 @@ void cStructLoaders::Load(bool reload)
 void cStructLoaders::Save(void)
 {
   if(lastSave.TimedOut()) {
-    for(cStructLoader *ld=first; ld; ld=ld->next)
-      if(!ld->disabled) ld->Save();
+    for(cStructLoader *ld=first; ld; ld=ld->next) ld->Save();
     lastSave.Set(SAVE_TIMEOUT);
     }
 }
@@ -423,8 +424,7 @@ void cStructLoaders::Save(void)
 void cStructLoaders::Purge(void)
 {
   if(lastPurge.TimedOut()) {
-    for(cStructLoader *ld=first; ld; ld=ld->next)
-      if(!ld->disabled) ld->Purge();
+    for(cStructLoader *ld=first; ld; ld=ld->next) ld->Purge();
     lastPurge.Set(PURGE_TIMEOUT);
     }
 }
@@ -934,7 +934,7 @@ cPlainKeys keys;
 cPlainKeyType *cPlainKeys::first=0;
 
 cPlainKeys::cPlainKeys(void)
-:cStructList<cPlainKey>("keys",KEY_FILE,true,true,true,true)
+:cStructList<cPlainKey>("keys",KEY_FILE,SL_READWRITE|SL_MISSINGOK|SL_WATCH|SL_VERBOSE)
 {}
 
 void cPlainKeys::Register(cPlainKeyType *pkt, bool Super)
diff --git a/data.h b/data.h
index ca6c5cde2b2cf4c338cb86f64285ec6029dd76bb..4b8c1a8f8f2a1c71a9368a4dd00d0915074ada58 100644 (file)
--- a/data.h
+++ b/data.h
@@ -91,44 +91,57 @@ public:
 
 //--------------------------------------------------------------
 
+#define SL_READWRITE 1
+#define SL_MISSINGOK 2
+#define SL_WATCH     4
+#define SL_VERBOSE   8
+#define SL_CUSTOMMASK 0xFF
+#define SL_LOADED    0x100
+#define SL_MODIFIED  0x200
+#define SL_DISABLED  0x300
+
+#define SL_SETFLAG(x) flags|=(x)
+#define SL_CLRFLAG(x) flags&=~(x)
+#define SL_TSTFLAG(x) (flags&(x))
+
 class cStructLoader : public cSimpleList<cStructItem> {
 friend class cStructLoaders;
 private:
   cStructLoader *next;
-  //
   cRwLock lock;
+  //
+protected:
+  int flags;
   const char *type, *filename;
   char *path;
   time_t mtime;
-  bool modified, readwrite, missingok, loaded, disabled, watch, verbose;
   //
-  time_t MTime(void);
-protected:
   virtual cStructItem *ParseLine(char *line)=0;
-  void Modified(bool mod=true) { modified=mod; }
-  bool IsModified(void) const { return modified; }
+  void Modified(bool mod=true) { if(mod) SL_SETFLAG(SL_MODIFIED); else SL_CLRFLAG(SL_MODIFIED); }
+  bool IsModified(void) const { return SL_TSTFLAG(SL_MODIFIED); }
   void ListLock(bool rw) { lock.Lock(rw); }
   void ListUnlock(void) { lock.Unlock(); }
   void AutoGenWarn(void);
   virtual void PostLoad(void) {}
+  time_t MTime(void);
 public:
-  cStructLoader(const char *Type, const char *Filename, bool rw, bool miok, bool wat, bool verb);
+  cStructLoader(const char *Type, const char *Filename, int Flags);
   virtual ~cStructLoader();
   void AddItem(cStructItem *n, const char *com, cStructItem *ref);
   void DelItem(cStructItem *d, bool keep=false);
   //
   void SetCfgDir(const char *cfgdir);
-  bool Load(bool reload);
-  void Save(void);
-  void Purge(void);
-  void Disable(void) { disabled=true; }
+  virtual void Load(bool reload);
+  virtual void Save(void);
+  virtual void Purge(void);
+  void Disable(void) { SL_SETFLAG(SL_DISABLED); }
   };
 
 //--------------------------------------------------------------
 
 template<class T> class cStructList : public cStructLoader {
 public:
-  cStructList<T>(const char *Type, const char *Filename, bool rw, bool miok, bool wat, bool verb):cStructLoader(Type,Filename,rw,miok,wat,verb) {}
+  cStructList<T>(const char *Type, const char *Filename, int Flags):cStructLoader(Type,Filename,Flags) {}
   T *First(void) const { return (T *)cStructLoader::First(); }
   T *Last(void) const { return (T *)cStructLoader::Last(); }
   T *Next(const T *item) const { return (T *)cStructLoader::Next(item); }
@@ -136,6 +149,27 @@ public:
 
 //--------------------------------------------------------------
 
+class cStructLoaderPlain : public cStructLoader {
+protected:
+public:
+  cStructLoaderPlain(const char *Type, const char *Filename, int Flags);
+  virtual void Load(bool reload);
+  virtual void Save(void);
+  virtual void Purge(void);
+  };
+
+//--------------------------------------------------------------
+
+template<class T> class cStructListPlain : public cStructLoaderPlain {
+public:
+  cStructListPlain<T>(const char *Type, const char *Filename, int Flags):cStructLoaderPlain(Type,Filename,Flags) {}
+  T *First(void) const { return (T *)cStructLoaderPlain::First(); }
+  T *Last(void) const { return (T *)cStructLoaderPlain::Last(); }
+  T *Next(const T *item) const { return (T *)cStructLoaderPlain::Next(item); }
+  };
+
+//--------------------------------------------------------------
+
 class cStructLoaders {
 friend class cStructLoader;
 private:
index c79ecd63226de27f9c3d57025106f850077d7947..3d85d6152e1bb43623fd6a3447a48f5311d12c31 100644 (file)
@@ -90,7 +90,7 @@ public:
 
 template<class T> class cCardInfos : public cStructList<T> {
 public:
-  cCardInfos(const char *Type, const char *Filename, bool rw):cStructList<T>(Type,Filename,rw,true,true,false) {}
+  cCardInfos(const char *Type, const char *Filename, int fl):cStructList<T>(Type,Filename,fl|SL_MISSINGOK|SL_WATCH) {}
   virtual cStructItem *ParseLine(char *line)
     {
       T *k=new T;
index 0de55da42d5dbf5fee500b06a2fd53d5cca5cc9d..fdc31438c83e09514f70c09f78a8ccc6b6c2f84c 100644 (file)
@@ -85,7 +85,7 @@ public:
 static cIrdCardInfos Icards;
 
 cIrdCardInfos::cIrdCardInfos(void)
-:cCardInfos<cIrdCardInfo>("Irdeto cards","Ird-Beta.KID",true)
+:cCardInfos<cIrdCardInfo>("Irdeto cards","Ird-Beta.KID",SL_READWRITE)
 {}
 
 bool cIrdCardInfos::Update(cIrdCardInfo *ci, const unsigned char *pmk, const unsigned char *id)
index b22f7f00f553c6cc2963fc9cf81b7c1bc7cfe2b7..06dd038949cb3eb70499b1c45b23e640f32a05eb 100644 (file)
@@ -190,7 +190,7 @@ bool cSecaCardInfo::Parse(const char *line)
 
 class cSecaCardInfos : public cCardInfos<cSecaCardInfo> {
 public:
-  cSecaCardInfos(void):cCardInfos<cSecaCardInfo>("Seca cards","Seca.KID",false) {}
+  cSecaCardInfos(void):cCardInfos<cSecaCardInfo>("Seca cards","Seca.KID",0) {}
   };
 
 static cSecaCardInfos Scards;
index 28e7475c1f9a46de1b360969b708b6fb3e2b17b6..5278a941491bb0b0ddaf8517e9494736a13ba208 100644 (file)
@@ -146,7 +146,7 @@ bool cViaccessCardInfo::Parse(const char *line)
 
 class cViaccessCardInfos : public cCardInfos<cViaccessCardInfo> {
 public:
-  cViaccessCardInfos(void):cCardInfos<cViaccessCardInfo>("Viaccess cards","Viaccess.KID",false) {}
+  cViaccessCardInfos(void):cCardInfos<cViaccessCardInfo>("Viaccess cards","Viaccess.KID",0) {}
   };
 
 static cViaccessCardInfos Vcards;