From 254fbfd92d4088c97ddde79a37b4e08e80c8eff3 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Mon, 21 Nov 2011 16:28:47 -0800 Subject: cluster/distribute: Assert checks at known locations and new function dict_get_ptr_and_len(). Change-Id: I653a1cc8123baa36d750250d02721aa98b196f38 BUG: 3158 Signed-off-by: Harshavardhana Reviewed-on: http://review.gluster.com/744 Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- libglusterfs/src/dict.c | 30 ++++++++++++++++++++++++++++++ libglusterfs/src/dict.h | 1 + 2 files changed, 31 insertions(+) (limited to 'libglusterfs') diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c index 35a6c94f069..40f575d52d0 100644 --- a/libglusterfs/src/dict.c +++ b/libglusterfs/src/dict.c @@ -1978,6 +1978,36 @@ err: return ret; } +int +dict_get_ptr_and_len (dict_t *this, char *key, void **ptr, int *len) +{ + data_t * data = NULL; + int ret = 0; + + if (!this || !key || !ptr) { + ret = -EINVAL; + goto err; + } + + ret = dict_get_with_ref (this, key, &data); + if (ret != 0) { + goto err; + } + + *len = data->len; + + ret = _data_to_ptr (data, ptr); + if (ret != 0) { + goto err; + } + +err: + if (data) + data_unref (data); + + return ret; +} + int dict_set_ptr (dict_t *this, char *key, void *ptr) { diff --git a/libglusterfs/src/dict.h b/libglusterfs/src/dict.h index c51c7d8f785..121f84be5a6 100644 --- a/libglusterfs/src/dict.h +++ b/libglusterfs/src/dict.h @@ -175,6 +175,7 @@ GF_MUST_CHECK int dict_set_double (dict_t *this, char *key, double val); GF_MUST_CHECK int dict_set_static_ptr (dict_t *this, char *key, void *ptr); GF_MUST_CHECK int dict_get_ptr (dict_t *this, char *key, void **ptr); +GF_MUST_CHECK int dict_get_ptr_and_len (dict_t *this, char *key, void **ptr, int *len); GF_MUST_CHECK int dict_set_ptr (dict_t *this, char *key, void *ptr); GF_MUST_CHECK int dict_set_dynptr (dict_t *this, char *key, void *ptr, size_t size); -- cgit