mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-17 04:50:19 +01:00
hash_table: Make string_to_uint_map make a copy of the name
The hash table needs a copy of the key that it can keep for comparisons during searches. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=41499 Cc: Stéphane Marchesin <stephane.marchesin@gmail.com> Tested-by: Luzipher <luziphermcleod@yahoo.ie> Tested-by: Michał Lipski <tallica@o2.pl> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
9e66b25880
commit
f3650b05cf
1 changed files with 17 additions and 1 deletions
|
|
@ -32,6 +32,7 @@
|
|||
#define HASH_TABLE_H
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <limits.h>
|
||||
#include <assert.h>
|
||||
|
|
@ -100,6 +101,10 @@ extern void *hash_table_find(struct hash_table *ht, const void *key);
|
|||
* calls to \c hash_table_find and \c hash_table_remove will return or remove,
|
||||
* repsectively, the most recently added instance of \c key.
|
||||
*
|
||||
* \warning
|
||||
* The value passed by \c key is kept in the hash table and is used by later
|
||||
* calls to \c hash_table_find.
|
||||
*
|
||||
* \sa hash_table_replace
|
||||
*/
|
||||
extern void hash_table_insert(struct hash_table *ht, void *data,
|
||||
|
|
@ -204,6 +209,7 @@ public:
|
|||
|
||||
~string_to_uint_map()
|
||||
{
|
||||
hash_table_call_foreach(this->ht, delete_key, NULL);
|
||||
hash_table_dtor(this->ht);
|
||||
}
|
||||
|
||||
|
|
@ -243,10 +249,20 @@ public:
|
|||
* because UINT_MAX+1 = 0.
|
||||
*/
|
||||
assert(value != UINT_MAX);
|
||||
hash_table_replace(ht, (void *) (intptr_t) (value + 1), key);
|
||||
hash_table_replace(this->ht,
|
||||
(void *) (intptr_t) (value + 1),
|
||||
strdup(key));
|
||||
}
|
||||
|
||||
private:
|
||||
static void delete_key(const void *key, void *data, void *closure)
|
||||
{
|
||||
(void) data;
|
||||
(void) closure;
|
||||
|
||||
free((char *)key);
|
||||
}
|
||||
|
||||
struct hash_table *ht;
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue