1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

Fixed a crash with negative hash ids (made them unsigned)

This commit is contained in:
Klaus Schmidinger 2005-05-29 10:24:54 +02:00
parent 1e63fa4174
commit 1f631bf667
2 changed files with 15 additions and 15 deletions

12
tools.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: tools.c 1.94 2005/05/28 11:46:44 kls Exp $ * $Id: tools.c 1.95 2005/05/29 10:18:26 kls Exp $
*/ */
#include "tools.h" #include "tools.h"
@ -1075,15 +1075,15 @@ cHashBase::~cHashBase(void)
free(hashTable); free(hashTable);
} }
void cHashBase::Add(cListObject *Object, int Id) void cHashBase::Add(cListObject *Object, unsigned int Id)
{ {
int hash = hashfn(Id); unsigned int hash = hashfn(Id);
if (!hashTable[hash]) if (!hashTable[hash])
hashTable[hash] = new cList<cHashObject>; hashTable[hash] = new cList<cHashObject>;
hashTable[hash]->Add(new cHashObject(Object, Id)); hashTable[hash]->Add(new cHashObject(Object, Id));
} }
void cHashBase::Del(cListObject *Object, int Id) void cHashBase::Del(cListObject *Object, unsigned int Id)
{ {
cList<cHashObject> *list = hashTable[hashfn(Id)]; cList<cHashObject> *list = hashTable[hashfn(Id)];
if (list) { if (list) {
@ -1096,7 +1096,7 @@ void cHashBase::Del(cListObject *Object, int Id)
} }
} }
cListObject *cHashBase::Get(int Id) const cListObject *cHashBase::Get(unsigned int Id) const
{ {
cList<cHashObject> *list = hashTable[hashfn(Id)]; cList<cHashObject> *list = hashTable[hashfn(Id)];
if (list) { if (list) {
@ -1108,7 +1108,7 @@ cListObject *cHashBase::Get(int Id) const
return NULL; return NULL;
} }
cList<cHashObject> *cHashBase::GetList(int Id) const cList<cHashObject> *cHashBase::GetList(unsigned int Id) const
{ {
return hashTable[hashfn(Id)]; return hashTable[hashfn(Id)];
} }

18
tools.h
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: tools.h 1.71 2005/05/28 11:24:49 kls Exp $ * $Id: tools.h 1.72 2005/05/29 10:24:54 kls Exp $
*/ */
#ifndef __TOOLS_H #ifndef __TOOLS_H
@ -239,25 +239,25 @@ public:
class cHashObject : public cListObject { class cHashObject : public cListObject {
friend class cHashBase; friend class cHashBase;
private: private:
int id; unsigned int id;
cListObject *object; cListObject *object;
public: public:
cHashObject(cListObject *Object, int Id) { object = Object; id = Id; } cHashObject(cListObject *Object, unsigned int Id) { object = Object; id = Id; }
}; };
class cHashBase { class cHashBase {
private: private:
cList<cHashObject> **hashTable; cList<cHashObject> **hashTable;
int size; int size;
int hashfn(int Id) const { return Id % size; } unsigned int hashfn(unsigned int Id) const { return Id % size; }
protected: protected:
cHashBase(int Size); cHashBase(int Size);
public: public:
virtual ~cHashBase(); virtual ~cHashBase();
void Add(cListObject *Object, int Id); void Add(cListObject *Object, unsigned int Id);
void Del(cListObject *Object, int Id); void Del(cListObject *Object, unsigned int Id);
cListObject *Get(int Id) const; cListObject *Get(unsigned int Id) const;
cList<cHashObject> *GetList(int Id) const; cList<cHashObject> *GetList(unsigned int Id) const;
}; };
#define HASHSIZE 512 #define HASHSIZE 512
@ -265,7 +265,7 @@ public:
template<class T> class cHash : public cHashBase { template<class T> class cHash : public cHashBase {
public: public:
cHash(int Size = HASHSIZE) : cHashBase(Size) {} cHash(int Size = HASHSIZE) : cHashBase(Size) {}
T *Get(int Id) const { return (T *)cHashBase::Get(Id); } T *Get(unsigned int Id) const { return (T *)cHashBase::Get(Id); }
}; };
#endif //__TOOLS_H #endif //__TOOLS_H