1fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt 2fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt#ifndef _NINE_PDATA_H_ 3fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt#define _NINE_PDATA_H_ 4fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt 5fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtstruct pheader 6fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt{ 7fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt boolean unknown; 8827fee059e702b22c6f5e4a61fb1aff3e926899dPatrick Rudolph GUID guid; 9fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt DWORD size; 10fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt}; 11fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt 12fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtstatic int 13fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtht_guid_compare( void *a, 14fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt void *b ) 15fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt{ 16fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt return GUID_equal(a, b) ? 0 : 1; 17fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt} 18fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt 19fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtstatic unsigned 20fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtht_guid_hash( void *key ) 21fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt{ 22fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt unsigned i, hash = 0; 23fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt const unsigned char *str = key; 24fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt 25fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt for (i = 0; i < sizeof(GUID); i++) { 26fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt hash = (unsigned)(str[i]) + (hash << 6) + (hash << 16) - hash; 27fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt } 28fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt 29fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt return hash; 30fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt} 31fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt 32fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtstatic enum pipe_error 33fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtht_guid_delete( void *key, 34fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt void *value, 35fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt void *data ) 36fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt{ 37fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt struct pheader *header = value; 387afab4ad39b5c479d5c986483511c68b92c31219Patrick Rudolph void *header_data = (void *)header + sizeof(*header); 39fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt 407afab4ad39b5c479d5c986483511c68b92c31219Patrick Rudolph if (header->unknown) { IUnknown_Release(*(IUnknown **)header_data); } 41fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt FREE(header); 42fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt 43fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt return PIPE_OK; 44fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt} 45fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt 46fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt#endif /* _NINE_PDATA_H_ */ 47