{
cEcmData *dat;
for(dat=First(); dat; dat=Next(dat))
- if(dat->Valid() && dat->Compare(e)) break;
+ if(dat->Compare(e)) break;
return dat;
}
list->Clear();
ListLock(false);
for(cEcmData *dat=First(); dat; dat=Next(dat)) {
- if(dat->Valid() && dat->prgId==sid && dat->source==Source && dat->transponder==Transponder) {
+ if(dat->prgId==sid && dat->source==Source && dat->transponder==Transponder) {
cEcmInfo *e=new cEcmInfo(dat);
if(e) {
PRINTF(L_CORE_ECM,"from cache: system %s (%04x) id %04x with ecm %x/%x",e->name,e->caId,e->provId,e->ecm_pid,e->ecm_table);
}
}
+cStructItem *cStructLoader::NextValid(cStructItem *it) const
+{
+ while(it && !it->Valid()) it=Next(it);
+ return it;
+}
+
void cStructLoader::SetCfgDir(const char *cfgdir)
{
free(path);
{
ListLock(false);
for(key=key?Next(key):First(); key; key=Next(key))
- if(key->Valid() && key->type==Type && key->id==Id && key->keynr==Keynr && (Size<0 || key->Size()==Size))
+ if(key->type==Type && key->id==Id && key->keynr==Keynr && (Size<0 || key->Size()==Size))
break;
ListUnlock();
return key;
{
if(Count() && LOG(L_CORE_KEYS))
for(cPlainKey *dat=First(); dat; dat=Next(dat))
- if(dat->Valid()) PRINTF(L_CORE_KEYS,"keys %s",*dat->ToString(false));
+ PRINTF(L_CORE_KEYS,"keys %s",*dat->ToString(false));
}
void cPlainKeys::HouseKeeping(void)
virtual ~cStructLoader();
void AddItem(cStructItem *n, const char *com, cStructItem *ref);
void DelItem(cStructItem *d, bool keep=false);
+ cStructItem *NextValid(cStructItem *it) const;
//
void SetCfgDir(const char *cfgdir);
virtual void Load(bool reload);
template<class T> class cStructList : public cStructLoader {
public:
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); }
+ T *First(void) const { return (T *)NextValid(cStructLoader::First()); }
+ T *Next(const T *item) const { return (T *)NextValid(cStructLoader::Next(item)); }
};
//--------------------------------------------------------------
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); }
+ T *First(void) const { return (T *)NextValid(cStructLoaderPlain::First()); }
+ T *Next(const T *item) const { return (T *)NextValid(cStructLoaderPlain::Next(item)); }
};
//--------------------------------------------------------------