X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1464929fd022621d935446ba7b8a04aa1657add7..9a17ee50f5ac1e197040595cbf31dedb6dda5ab6:/src/xbt/dict_elm.c diff --git a/src/xbt/dict_elm.c b/src/xbt/dict_elm.c index 2284403c83..91d245efaf 100644 --- a/src/xbt/dict_elm.c +++ b/src/xbt/dict_elm.c @@ -31,8 +31,9 @@ xbt_dictelm_t xbt_dictelm_new(const char *key, { xbt_dictelm_t element = xbt_mallocator_get(dict_elm_mallocator); + element->dictielem = 0; /* please free the key on free */ element->key = xbt_new(char, key_len + 1); - strncpy(element->key, key, key_len); + memcpy((void *)element->key, (void *)key, key_len); element->key[key_len] = '\0'; element->key_len = key_len; @@ -45,10 +46,27 @@ xbt_dictelm_t xbt_dictelm_new(const char *key, return element; } +xbt_dictelm_t xbt_dictielm_new(uintptr_t key, unsigned int hash_code, uintptr_t content) { + xbt_dictelm_t element = xbt_mallocator_get(dict_elm_mallocator); + + element->key = (void*)key; + + element->dictielem = 1; /* please DONT free the key on free */ + element->key_len = sizeof(uintptr_t); + element->hash_code = hash_code; + + element->content = (void*)content; + element->free_f = NULL; + element->next = NULL; + + return element; +} + void xbt_dictelm_free(xbt_dictelm_t element) { if (element != NULL) { - xbt_free(element->key); + if (!element->dictielem) + xbt_free(element->key); if (element->free_f != NULL && element->content != NULL) { element->free_f(element->content);