diff options
Diffstat (limited to 'libglusterfs')
-rw-r--r-- | libglusterfs/src/dict.c | 209 |
1 files changed, 0 insertions, 209 deletions
diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c index 8a6fbb21d4b..d1a64c4a3a2 100644 --- a/libglusterfs/src/dict.c +++ b/libglusterfs/src/dict.c @@ -29,8 +29,6 @@ #include "libglusterfs-messages.h" #include "glusterfs-fops.h" -#include "rpc-common-xdr.h" -#include "glusterfs3.h" struct dict_cmp { dict_t *dict; @@ -3251,210 +3249,3 @@ unlock: UNLOCK (&dict->lock); return 0; } - -/* dict_to_xdr () */ -int -dict_to_xdr (dict_t *this, gfx_dict *dict) -{ - int ret = -1; - int i = 0; - int index = 0; - data_pair_t *dpair = NULL; - gfx_dict_pair *xpair = NULL; - - /* This is a failure as we expect destination to be valid */ - if (!dict) - goto out; - - /* This is OK as dictionary can be null, in which case, destination - will be set as 0 sized dictionary */ - if (!this) { - ret = 0; - dict->count = 0; - dict->pairs.pairs_len = 0; - goto out; - } - - dict->pairs.pairs_val = GF_CALLOC (1, (this->count * - sizeof (gfx_dict_pair)), - gf_common_mt_char); - if (!dict->pairs.pairs_val) - goto out; - - dpair = this->members_list; - for (i = 0; i < this->count; i++) { - xpair = &dict->pairs.pairs_val[index]; - - xpair->value.type = dpair->value->data_type; - xpair->key.key_val = dpair->key; - xpair->key.key_len = strlen (dpair->key) + 1; - - switch (dpair->value->data_type) { - /* Add more type here */ - case GF_DATA_TYPE_INT: - index++; - data_to_int64_ptr (dpair->value, &xpair->value.gfx_value_u.value_int); - break; - case GF_DATA_TYPE_UINT: - index++; - data_to_uint64_ptr (dpair->value, &xpair->value.gfx_value_u.value_uint); - break; - case GF_DATA_TYPE_DOUBLE: - index++; - data_to_double_ptr (dpair->value, - &xpair->value.gfx_value_u.value_dbl); - break; - case GF_DATA_TYPE_STR: - index++; - xpair->value.gfx_value_u.val_string.val_string_val = dpair->value->data; - xpair->value.gfx_value_u.val_string.val_string_len = dpair->value->len; - break; - case GF_DATA_TYPE_IATT: - index++; - gf_stat_from_iatt (&xpair->value.gfx_value_u.iatt, - (struct iatt *)dpair->value->data); - break; - case GF_DATA_TYPE_GFUUID: - index++; - memcpy (&xpair->value.gfx_value_u.uuid, - dpair->value->data, sizeof (uuid_t)); - break; - - case GF_DATA_TYPE_PTR: - index++; - /* Ideally, each type of data stored in dictionary - should have type. A pointer type shouldn't be - sent on wire */ - - /* This is done for backward compatibility as dict is - heavily used for transporting data over wire. - Ideally, whereever there is an issue, fix and move on */ - xpair->value.gfx_value_u.other.other_val = - dpair->value->data; - xpair->value.gfx_value_u.other.other_len = - dpair->value->len; - - /* Change this to INFO, after taking the above down */ - gf_msg ("dict", GF_LOG_INFO, EINVAL, - LG_MSG_DICT_SERIAL_FAILED, - "key '%s' is would not be sent on wire in future", - dpair->key); - break; - default: - /* Unknown type and ptr type is not sent on wire */ - gf_msg ("dict", GF_LOG_WARNING, EINVAL, LG_MSG_DICT_SERIAL_FAILED, - "key '%s' is not sent on wire", dpair->key); - break; - } - - dpair = dpair->next; - } - - dict->pairs.pairs_len = index; - dict->count = index; - ret = 0; -out: - return ret; -} - -int -xdr_to_dict (gfx_dict *dict, dict_t **to) -{ - int ret = -1; - int index = 0; - char *key = NULL; - char *value = NULL; - gfx_dict_pair *xpair = NULL; - dict_t *this = NULL; - unsigned char *uuid = NULL; - struct iatt *iatt = NULL; - - if (!to || !dict) - goto out; - - this = dict_new(); - if (!this) - goto out; - - for (index = 0; index < dict->pairs.pairs_len; index++) { - ret = -1; - xpair = &dict->pairs.pairs_val[index]; - - key = xpair->key.key_val; - switch (xpair->value.type) { - /* Add more type here */ - case GF_DATA_TYPE_INT: - ret = dict_set_int64 (this, key, - xpair->value.gfx_value_u.value_int); - break; - case GF_DATA_TYPE_UINT: - ret = dict_set_uint64 (this, key, - xpair->value.gfx_value_u.value_uint); - break; - case GF_DATA_TYPE_DOUBLE: - ret = dict_set_double (this, key, - xpair->value.gfx_value_u.value_dbl); - break; - case GF_DATA_TYPE_STR: - value = gf_strdup (xpair->value.gfx_value_u.val_string.val_string_val); - if (!value) { - errno = ENOMEM; - goto out; - } - free (xpair->value.gfx_value_u.val_string.val_string_val); - ret = dict_set_dynstr (this, key, value); - break; - case GF_DATA_TYPE_GFUUID: - uuid = GF_CALLOC (1, 20, gf_common_mt_uuid_t); - if (!uuid) { - errno = ENOMEM; - goto out; - } - memcpy (uuid, xpair->value.gfx_value_u.uuid, 16); - ret = dict_set_gfuuid (this, key, uuid, false); - break; - case GF_DATA_TYPE_IATT: - iatt = GF_CALLOC (1, sizeof (struct iatt), gf_common_mt_char); - if (!iatt) { - errno = ENOMEM; - goto out; - } - gf_stat_to_iatt (&xpair->value.gfx_value_u.iatt, iatt); - ret = dict_set_iatt (this, key, iatt, false); - break; - case GF_DATA_TYPE_PTR: - value = gf_memdup (xpair->value.gfx_value_u.other.other_val, - xpair->value.gfx_value_u.other.other_len); - if (!value) { - errno = ENOMEM; - goto out; - } - free (xpair->value.gfx_value_u.other.other_val); - ret = dict_set_dynptr (this, key, value, - xpair->value.gfx_value_u.other.other_len); - break; - default: - ret = 0; - /* Unknown type and ptr type is not sent on wire */ - break; - } - if (ret) { - gf_msg_debug ("dict", ENOMEM, - "failed to set the key (%s) into dict", - key); - } - free (xpair->key.key_val); - } - - free (dict->pairs.pairs_val); - ret = 0; - - /* If everything is fine, assign the dictionary to target */ - *to = this; - this = NULL; -out: - if (this) - dict_unref (this); - - return ret; -} |