From: VMware, Inc <> Date: Thu, 22 Dec 2011 00:35:50 +0000 (-0800) Subject: Changes in shared code that don't affect open-vm-tools functionality. X-Git-Tag: 2011.12.20-562307~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e7d607dd42915dfe793861f26cebf2d1efbe0109;p=thirdparty%2Fopen-vm-tools.git Changes in shared code that don't affect open-vm-tools functionality. Signed-off-by: Marcelo Vanzin --- diff --git a/open-vm-tools/lib/include/hashTable.h b/open-vm-tools/lib/include/hashTable.h index 2ff542107..69354594f 100644 --- a/open-vm-tools/lib/include/hashTable.h +++ b/open-vm-tools/lib/include/hashTable.h @@ -105,7 +105,7 @@ HashTable_Delete(HashTable *hashTable, Bool HashTable_LookupAndDelete(HashTable *hashTable, const void *keyStr, - void **clientData); + void **clientData); void HashTable_Clear(HashTable *ht); @@ -128,4 +128,44 @@ HashTable_ForEach(const HashTable *ht, HashTableForEachCallback cb, void *clientData); +/* + * Specialize hash table that uses the callers data structure as its + * hash entry as well, the hash key being an address that must be unique. + */ + +typedef struct PtrHashEntry +{ + struct PtrHashEntry *next; + void *ptr; +} PtrHashEntry; + +/* + * PTRHASH_CONTAINER - get the struct for this entry (like PtrHashEntry) + * @ptr: the &struct PtrHashEntry pointer. + * @type: the type of the struct this is embedded in. + * @member: the name of the list struct within the struct. + */ + +#define PTRHASH_CONTAINER(ptr, type, member) \ + ((type *)((char *)(ptr) - offsetof(type, member))) + +typedef int (*PtrHashForEachCallback)(PtrHashEntry *entry, + const void *clientData); + +HashTable *PtrHash_Alloc(uint32 numBuckets); + +void PtrHash_Free(HashTable *hashTable); + +size_t PtrHash_GetNumElements(const HashTable *ht); + +int PtrHash_ForEach(const HashTable *ht, + PtrHashForEachCallback cb, + const void *clientData); + +PtrHashEntry *PtrHash_LookupAndDelete(HashTable *hashTable, + const void *ptr); + +Bool PtrHash_Insert(HashTable *hashTable, + PtrHashEntry *entry); + #endif