97 lines
4.0 KiB
Diff
97 lines
4.0 KiB
Diff
--- giflib-4.1.3/lib/gif_hash.c.64 2005-09-20 13:39:32.000000000 -0700
|
|
+++ giflib-4.1.3/lib/gif_hash.c 2005-09-20 13:41:40.000000000 -0700
|
|
@@ -45,7 +45,7 @@
|
|
NumberOfMisses = 0;
|
|
#endif /* DEBUG_HIT_RATE */
|
|
|
|
-static int KeyItem(unsigned long Item);
|
|
+static int KeyItem(unsigned int Item);
|
|
|
|
/******************************************************************************
|
|
* Initialize HashTable - allocate the memory needed and clear it. *
|
|
@@ -69,17 +69,17 @@
|
|
******************************************************************************/
|
|
void _ClearHashTable(GifHashTableType *HashTable)
|
|
{
|
|
- memset(HashTable -> HTable, 0xFF, HT_SIZE * sizeof(long));
|
|
+ memset(HashTable -> HTable, 0xFF, HT_SIZE * sizeof(int));
|
|
}
|
|
|
|
/******************************************************************************
|
|
* Routine to insert a new Item into the HashTable. The data is assumed to be *
|
|
* new one. *
|
|
******************************************************************************/
|
|
-void _InsertHashTable(GifHashTableType *HashTable, unsigned long Key, int Code)
|
|
+void _InsertHashTable(GifHashTableType *HashTable, unsigned int Key, int Code)
|
|
{
|
|
int HKey = KeyItem(Key);
|
|
- unsigned long *HTable = HashTable -> HTable;
|
|
+ unsigned int *HTable = HashTable -> HTable;
|
|
|
|
#ifdef DEBUG_HIT_RATE
|
|
NumberOfTests++;
|
|
@@ -99,10 +99,10 @@
|
|
* Routine to test if given Key exists in HashTable and if so returns its code *
|
|
* Returns the Code if key was found, -1 if not. *
|
|
******************************************************************************/
|
|
-int _ExistsHashTable(GifHashTableType *HashTable, unsigned long Key)
|
|
+int _ExistsHashTable(GifHashTableType *HashTable, unsigned int Key)
|
|
{
|
|
int HKey = KeyItem(Key);
|
|
- unsigned long *HTable = HashTable -> HTable, HTKey;
|
|
+ unsigned int *HTable = HashTable -> HTable, HTKey;
|
|
|
|
#ifdef DEBUG_HIT_RATE
|
|
NumberOfTests++;
|
|
@@ -127,7 +127,7 @@
|
|
* Because the average hit ratio is only 2 (2 hash references per entry), *
|
|
* evaluating more complex keys (such as twin prime keys) does not worth it! *
|
|
******************************************************************************/
|
|
-static int KeyItem(unsigned long Item)
|
|
+static int KeyItem(unsigned int Item)
|
|
{
|
|
return ((Item >> 12) ^ Item) & HT_KEY_MASK;
|
|
}
|
|
--- giflib-4.1.3/lib/gif_hash.h.64 2005-09-20 13:39:42.000000000 -0700
|
|
+++ giflib-4.1.3/lib/gif_hash.h 2005-09-20 13:42:08.000000000 -0700
|
|
@@ -25,12 +25,12 @@
|
|
#define HT_PUT_CODE(l) (l & 0x0FFF)
|
|
|
|
typedef struct GifHashTableType {
|
|
- unsigned long HTable[HT_SIZE];
|
|
+ unsigned int HTable[HT_SIZE];
|
|
} GifHashTableType;
|
|
|
|
GifHashTableType *_InitHashTable(void);
|
|
void _ClearHashTable(GifHashTableType *HashTable);
|
|
-void _InsertHashTable(GifHashTableType *HashTable, unsigned long Key, int Code);
|
|
-int _ExistsHashTable(GifHashTableType *HashTable, unsigned long Key);
|
|
+void _InsertHashTable(GifHashTableType *HashTable, unsigned int Key, int Code);
|
|
+int _ExistsHashTable(GifHashTableType *HashTable, unsigned int Key);
|
|
|
|
#endif /* _GIF_HASH_H_ */
|
|
--- giflib-4.1.3/lib/egif_lib.c.64 2005-09-20 13:45:28.000000000 -0700
|
|
+++ giflib-4.1.3/lib/egif_lib.c 2005-09-20 13:43:39.000000000 -0700
|
|
@@ -188,6 +188,12 @@
|
|
_GifError = E_GIF_ERR_NOT_ENOUGH_MEM;
|
|
return NULL;
|
|
}
|
|
+ if ((Private->HashTable = _InitHashTable()) == NULL) {
|
|
+ free(GifFile);
|
|
+ free(Private);
|
|
+ _GifError = E_GIF_ERR_NOT_ENOUGH_MEM;
|
|
+ return NULL;
|
|
+ }
|
|
|
|
GifFile->Private = (VoidPtr) Private;
|
|
Private->FileHandle = 0;
|
|
@@ -832,7 +838,7 @@
|
|
/* Form a new unique key to search hash table for the code combines
|
|
* CrntCode as Prefix string with Pixel as postfix char.
|
|
*/
|
|
- NewKey = (((unsigned long) CrntCode) << 8) + Pixel;
|
|
+ NewKey = (((unsigned int) CrntCode) << 8) + Pixel;
|
|
if ((NewCode = _ExistsHashTable(HashTable, NewKey)) >= 0) {
|
|
/* This Key is already there, or the string is old one, so
|
|
* simple take new code as our CrntCode:
|