From 09198e203ece6925791a8a3a6121c5f808e4e873 Mon Sep 17 00:00:00 2001 From: Yaniv Kaul Date: Mon, 3 Sep 2018 13:55:01 +0300 Subject: Some (mgmt) xlators: use dict_{setn|getn|deln|get_int32n|set_int32n|set_strn} In a previous patch (https://review.gluster.org/20769) we've added the key length to be passed to dict_* funcs, to remove the need to strlen() it. This patch moves some xlators to use it. - It also adds dict_get_int32n which was missing. - It also reduces the size of some key variables. They were set to 1024b or PATH_MAX, where sometimes 64 bytes were really enough. Please review carefully: 1. That I did not reduce some the size of the key variables too much. 2. That I did not mix up some keys. Compile-tested only! Change-Id: Ic729baf179f40e8d02bc2350491d4bb9b6934266 updates: bz#1193929 Signed-off-by: Yaniv Kaul --- libglusterfs/src/dict.c | 45 +++++++++++++++++++++++++++++++++++++++ libglusterfs/src/dict.h | 19 ++++++++++++----- libglusterfs/src/libglusterfs.sym | 9 ++++++++ 3 files changed, 68 insertions(+), 5 deletions(-) (limited to 'libglusterfs') diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c index a3998c463eb..b7cf2b0c8fe 100644 --- a/libglusterfs/src/dict.c +++ b/libglusterfs/src/dict.c @@ -1809,6 +1809,32 @@ err: return ret; } +int +dict_get_int32n (dict_t *this, char *key, const int keylen, int32_t *val) +{ + data_t * data = NULL; + int ret = 0; + + if (!this || !key || !val) { + ret = -EINVAL; + goto err; + } + + ret = dict_get_with_refn (this, key, keylen, &data); + if (ret != 0) { + goto err; + } + + VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, key, -EINVAL); + + ret = data_to_int32_ptr (data, val); + +err: + if (data) + data_unref (data); + return ret; +} + int dict_get_int32 (dict_t *this, char *key, int32_t *val) { @@ -1835,6 +1861,25 @@ err: return ret; } +int +dict_set_int32n (dict_t *this, char *key, const int keylen, int32_t val) +{ + data_t * data = NULL; + int ret = 0; + + data = data_from_int32 (val); + if (!data) { + ret = -EINVAL; + goto err; + } + + ret = dict_setn (this, key, keylen, data); + if (ret < 0) + data_destroy (data); + +err: + return ret; +} int dict_set_int32 (dict_t *this, char *key, int32_t val) diff --git a/libglusterfs/src/dict.h b/libglusterfs/src/dict.h index 009663aec2e..a8945d017b7 100644 --- a/libglusterfs/src/dict.h +++ b/libglusterfs/src/dict.h @@ -113,7 +113,8 @@ int32_t dict_setn (dict_t *this, char *key, const int keylen, data_t *value); int32_t dict_add (dict_t *this, char *key, data_t *value); int32_t dict_addn (dict_t *this, char *key, const int keylen, data_t *value); int dict_get_with_ref (dict_t *this, char *key, data_t **data); -int dict_get_with_refn (dict_t *this, char *key, const int keylen, data_t **data); +int dict_get_with_refn (dict_t *this, char *key, const int keylen, + data_t **data); data_t *dict_get (dict_t *this, char *key); data_t *dict_getn (dict_t *this, char *key, const int keylen); void dict_del (dict_t *this, char *key); @@ -219,7 +220,11 @@ GF_MUST_CHECK int dict_get_int16 (dict_t *this, char *key, int16_t *val); GF_MUST_CHECK int dict_set_int16 (dict_t *this, char *key, int16_t val); GF_MUST_CHECK int dict_get_int32 (dict_t *this, char *key, int32_t *val); +GF_MUST_CHECK int dict_get_int32n (dict_t *this, char *key, const int keylen, + int32_t *val); GF_MUST_CHECK int dict_set_int32 (dict_t *this, char *key, int32_t val); +GF_MUST_CHECK int dict_set_int32n (dict_t *this, char *key, const int keylen, + int32_t val); GF_MUST_CHECK int dict_get_int64 (dict_t *this, char *key, int64_t *val); GF_MUST_CHECK int dict_set_int64 (dict_t *this, char *key, int64_t val); @@ -251,14 +256,18 @@ GF_MUST_CHECK int dict_set_static_bin (dict_t *this, char *key, void *ptr, size_ GF_MUST_CHECK int dict_set_option (dict_t *this, char *key, char *str); GF_MUST_CHECK int dict_set_str (dict_t *this, char *key, char *str); -GF_MUST_CHECK int dict_set_strn (dict_t *this, char *key, const int keylen, char *str); -GF_MUST_CHECK int dict_set_nstrn (dict_t *this, char *key, const int keylen, char *str, const int vallen); +GF_MUST_CHECK int dict_set_strn (dict_t *this, char *key, const int keylen, + char *str); +GF_MUST_CHECK int dict_set_nstrn (dict_t *this, char *key, const int keylen, + char *str, const int vallen); GF_MUST_CHECK int dict_set_dynstr (dict_t *this, char *key, char *str); -GF_MUST_CHECK int dict_set_dynstrn (dict_t *this, char *key, const int keylen, char *str); +GF_MUST_CHECK int dict_set_dynstrn (dict_t *this, char *key, const int keylen, + char *str); GF_MUST_CHECK int dict_set_dynstr_with_alloc (dict_t *this, char *key, const char *str); GF_MUST_CHECK int dict_add_dynstr_with_alloc (dict_t *this, char *key, char *str); GF_MUST_CHECK int dict_get_str (dict_t *this, char *key, char **str); -GF_MUST_CHECK int dict_get_strn (dict_t *this, char *key, const int keylen, char **str); +GF_MUST_CHECK int dict_get_strn (dict_t *this, char *key, const int keylen, + char **str); GF_MUST_CHECK int dict_get_str_boolean (dict_t *this, char *key, int default_val); GF_MUST_CHECK int dict_rename_key (dict_t *this, char *key, char *replace_key); diff --git a/libglusterfs/src/libglusterfs.sym b/libglusterfs/src/libglusterfs.sym index 61a866a3d27..c5b322a9bdf 100644 --- a/libglusterfs/src/libglusterfs.sym +++ b/libglusterfs/src/libglusterfs.sym @@ -354,11 +354,13 @@ default_put_resume __dentry_grep dht_is_linkfile dict_add +dict_addn dict_add_dynstr_with_alloc dict_allocate_and_serialize dict_copy dict_copy_with_ref dict_del +dict_deln dict_dump_to_statedump dict_dump_to_str dict_dump_to_log @@ -367,17 +369,20 @@ dict_foreach_fnmatch dict_foreach_match dict_for_key_value dict_get +dict_getn dict_get_bin dict_get_double dict_get_gfuuid dict_get_iatt dict_get_int16 dict_get_int32 +dict_get_int32n dict_get_int64 dict_get_int8 dict_get_ptr dict_get_ptr_and_len dict_get_str +dict_get_strn dict_get_str_boolean dict_get_uint32 dict_get_uint64 @@ -396,21 +401,25 @@ dict_serialize dict_serialized_length dict_serialize_value_with_delim dict_set +dict_setn dict_set_bin dict_set_double dict_set_dynptr dict_set_dynstr +dict_set_dynstrn dict_set_dynstr_with_alloc dict_set_gfuuid dict_set_iatt dict_set_int16 dict_set_int32 +dict_set_int32n dict_set_int64 dict_set_int8 dict_set_static_bin dict_set_static_ptr dict_set_str dict_set_strn +dict_setn_nstrn dict_set_nstrn dict_set_uint32 dict_set_uint64 -- cgit