Hashlist: add function to flush the contents of a hashlist.
authorWilfried Goesgens <dothebart@citadel.org>
Mon, 27 Dec 2010 15:38:30 +0000 (16:38 +0100)
committerWilfried Goesgens <dothebart@citadel.org>
Mon, 27 Dec 2010 15:38:30 +0000 (16:38 +0100)
libcitadel/lib/hash.c
libcitadel/lib/libcitadel.h

index 29f145894218e6b8b5d85713db4ea7bdbba6df27..26a20e53fbf1db772fcffab756a4f5f070eb4c28 100644 (file)
@@ -209,11 +209,11 @@ void HDeleteHash(void *vHash)
 }
 
 /**
- * @brief destroy a hashlist and all of its members
+ * @brief flush the members of a hashlist 
  * Crashing? do 'print *FreeMe->LookupTable[i]'
  * @param Hash Hash to destroy. Is NULL'ed so you are shure its done.
  */
-void DeleteHash(HashList **Hash)
+void DeleteHashContent(HashList **Hash)
 {
        int i;
        HashList *FreeMe;
@@ -237,12 +237,34 @@ void DeleteHash(HashList **Hash)
                        free(FreeMe->LookupTable[i]);
                }
        }
-       /** now, free our arrays... */
-       free(FreeMe->LookupTable);
-       free(FreeMe->Members);
+       FreeMe->nMembersUsed = 0;
+       FreeMe->tainted = 0;
+       FreeMe->nLookupTableItems = 0;
+       memset(FreeMe->Members, 0, sizeof(Payload*) * FreeMe->MemberSize);
+       memset(FreeMe->LookupTable, 0, sizeof(HashKey*) * FreeMe->MemberSize);
+
        /** did s.b. want an array of our keys? free them. */
        if (FreeMe->MyKeys != NULL)
                free(FreeMe->MyKeys);
+}
+
+/**
+ * @brief destroy a hashlist and all of its members
+ * Crashing? do 'print *FreeMe->LookupTable[i]'
+ * @param Hash Hash to destroy. Is NULL'ed so you are shure its done.
+ */
+void DeleteHash(HashList **Hash)
+{
+       HashList *FreeMe;
+
+       FreeMe = *Hash;
+       if (FreeMe == NULL)
+               return;
+       DeleteHashContent(Hash);
+       /** now, free our arrays... */
+       free(FreeMe->LookupTable);
+       free(FreeMe->Members);
+
        /** buye bye cruel world. */    
        free (FreeMe);
        *Hash = NULL;
index f0c8ab735d7ec2074d3b50f966e40b7f934f1825..d74b9f12d8449cebb8f3991e1d2e9b936de6975f 100644 (file)
@@ -454,6 +454,7 @@ long lFlathash(const char *str, long len);
 
 HashList *NewHash(int Uniq, HashFunc F);
 void DeleteHash(HashList **Hash);
+void DeleteHashContent(HashList **Hash);
 void HDeleteHash(void *vHash);
 int GetHash(HashList *Hash, const char *HKey, long HKLen, void **Data);
 void Put(HashList *Hash, const char *HKey, long HKLen, void *Data, DeleteHashDataFunc DeleteIt);