#ifndef _NINE_PDATA_H_ #define _NINE_PDATA_H_ #include "util/hash_table.h" struct pheader { boolean unknown; GUID guid; DWORD size; }; static bool ht_guid_compare( const void *a, const void *b ) { return GUID_equal(a, b); } static uint32_t ht_guid_hash( const void *key ) { unsigned i, hash = 0; const unsigned char *str = key; for (i = 0; i < sizeof(GUID); i++) { hash = (unsigned)(str[i]) + (hash << 6) + (hash << 16) - hash; } return hash; } static void ht_guid_delete( struct hash_entry *entry ) { struct pheader *header = entry->data; void *header_data = (void *)header + sizeof(*header); if (header->unknown) { IUnknown_Release(*(IUnknown **)header_data); } FREE(header); } #endif /* _NINE_PDATA_H_ */