diff options
Diffstat (limited to 'libglusterfs/src/dict.c')
-rw-r--r-- | libglusterfs/src/dict.c | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c index 7a47a57b8..b1c1a5d94 100644 --- a/libglusterfs/src/dict.c +++ b/libglusterfs/src/dict.c @@ -140,8 +140,12 @@ data_destroy (data_t *data) LOCK_DESTROY (&data->lock); if (!data->is_static) { - if (data->data) - GF_FREE (data->data); + if (data->data) { + if (data->is_stdalloc) + free (data->data); + else + GF_FREE (data->data); + } if (data->vec) GF_FREE (data->vec); } @@ -413,6 +417,8 @@ dict_destroy (dict_t *this) if (this->extra_free) GF_FREE (this->extra_free); + if (this->extra_stdfree) + free (this->extra_stdfree); if (!this->is_static) GF_FREE (this); @@ -1032,6 +1038,24 @@ data_from_dynstr (char *value) } data_t * +data_from_dynmstr (char *value) +{ + if (!value) { + gf_log ("dict", GF_LOG_CRITICAL, + "@value=%p", value); + return NULL; + } + + data_t *data = get_new_data (); + + data->len = strlen (value) + 1; + data->data = value; + data->is_stdalloc = 1; + + return data; +} + +data_t * data_from_dynptr (void *value, int32_t len) { data_t *data = get_new_data (); @@ -2041,6 +2065,27 @@ err: return ret; } +/* + for malloced strings we should do a free instead of GF_FREE +*/ +int +dict_set_dynmstr (dict_t *this, char *key, char *str) +{ + data_t * data = NULL; + int ret = 0; + + data = data_from_dynmstr (str); + if (!data) { + ret = -EINVAL; + goto err; + } + + ret = dict_set (this, key, data); + +err: + return ret; +} + int dict_get_bin (dict_t *this, char *key, void **bin) |