| |
| #ifndef _NINE_PDATA_H_ |
| #define _NINE_PDATA_H_ |
| |
| struct pheader |
| { |
| boolean unknown; |
| GUID guid; |
| DWORD size; |
| }; |
| |
| static int |
| ht_guid_compare( void *a, |
| void *b ) |
| { |
| return GUID_equal(a, b) ? 0 : 1; |
| } |
| |
| static unsigned |
| ht_guid_hash( 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 enum pipe_error |
| ht_guid_delete( void *key, |
| void *value, |
| void *data ) |
| { |
| struct pheader *header = value; |
| void *header_data = (void *)header + sizeof(*header); |
| |
| if (header->unknown) { IUnknown_Release(*(IUnknown **)header_data); } |
| FREE(header); |
| |
| return PIPE_OK; |
| } |
| |
| #endif /* _NINE_PDATA_H_ */ |