summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src/dict.c
diff options
context:
space:
mode:
authorPranith Kumar K <pranithk@gluster.com>2010-09-14 00:54:22 +0000
committerVijay Bellur <vijay@dev.gluster.com>2010-09-14 00:47:19 -0700
commitb0003a7e789e0618656dd4214195578f53d1e84e (patch)
tree49ea5c372d6609b5781a7d1f789c3294469b1cba /libglusterfs/src/dict.c
parent174f963c846331c6dafda169451790b6039ef3fb (diff)
mgmt/glusterd: free xdr allocations
Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 1186 () URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1186
Diffstat (limited to 'libglusterfs/src/dict.c')
-rw-r--r--libglusterfs/src/dict.c49
1 files changed, 47 insertions, 2 deletions
diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c
index 7a47a57b893..b1c1a5d9495 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)