123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- /*
- * This file is part of the zlog Library.
- *
- * Copyright (C) 2011 by Hardy Simpson <HardySimpson1984@gmail.com>
- *
- * Licensed under the LGPL v2.1, see the file COPYING in base directory.
- */
- #include <stdlib.h>
- #include <stdio.h>
- #include <errno.h>
- #include "mdc.h"
- #include "zc_defs.h"
- void zlog_mdc_profile(zlog_mdc_t *a_mdc, int flag)
- {
- zc_hashtable_entry_t *a_entry;
- zlog_mdc_kv_t *a_mdc_kv;
- zc_assert(a_mdc,);
- zc_profile(flag, "---mdc[%p]---", a_mdc);
- zc_hashtable_foreach(a_mdc->tab, a_entry) {
- a_mdc_kv = a_entry->value;
- zc_profile(flag, "----mdc_kv[%p][%s]-[%s]----",
- a_mdc_kv,
- a_mdc_kv->key, a_mdc_kv->value);
- }
- return;
- }
- /*******************************************************************************/
- void zlog_mdc_del(zlog_mdc_t * a_mdc)
- {
- zc_assert(a_mdc,);
- if (a_mdc->tab) zc_hashtable_del(a_mdc->tab);
- zc_debug("zlog_mdc_del[%p]", a_mdc);
- free(a_mdc);
- return;
- }
- static void zlog_mdc_kv_del(zlog_mdc_kv_t * a_mdc_kv)
- {
- zc_debug("zlog_mdc_kv_del[%p]", a_mdc_kv);
- free(a_mdc_kv);
- }
- static zlog_mdc_kv_t *zlog_mdc_kv_new(const char *key, const char *value)
- {
- zlog_mdc_kv_t *a_mdc_kv;
- a_mdc_kv = calloc(1, sizeof(zlog_mdc_kv_t));
- if (!a_mdc_kv) {
- zc_error("calloc fail, errno[%d]", errno);
- return NULL;
- }
- snprintf(a_mdc_kv->key, sizeof(a_mdc_kv->key), "%s", key);
- a_mdc_kv->value_len = snprintf(a_mdc_kv->value, sizeof(a_mdc_kv->value), "%s", value);
- return a_mdc_kv;
- }
- zlog_mdc_t *zlog_mdc_new(void)
- {
- zlog_mdc_t *a_mdc;
- a_mdc = calloc(1, sizeof(zlog_mdc_t));
- if (!a_mdc) {
- zc_error("calloc fail, errno[%d]", errno);
- return NULL;
- }
- a_mdc->tab = zc_hashtable_new(20,
- zc_hashtable_str_hash,
- zc_hashtable_str_equal, NULL,
- (zc_hashtable_del_fn) zlog_mdc_kv_del);
- if (!a_mdc->tab) {
- zc_error("zc_hashtable_new fail");
- goto err;
- }
- //zlog_mdc_profile(a_mdc, ZC_DEBUG);
- return a_mdc;
- err:
- zlog_mdc_del(a_mdc);
- return NULL;
- }
- /*******************************************************************************/
- int zlog_mdc_put(zlog_mdc_t * a_mdc, const char *key, const char *value)
- {
- zlog_mdc_kv_t *a_mdc_kv;
- a_mdc_kv = zlog_mdc_kv_new(key, value);
- if (!a_mdc_kv) {
- zc_error("zlog_mdc_kv_new failed");
- return -1;
- }
- if (zc_hashtable_put(a_mdc->tab, a_mdc_kv->key, a_mdc_kv)) {
- zc_error("zc_hashtable_put fail");
- zlog_mdc_kv_del(a_mdc_kv);
- return -1;
- }
- return 0;
- }
- void zlog_mdc_clean(zlog_mdc_t * a_mdc)
- {
- zc_hashtable_clean(a_mdc->tab);
- return;
- }
- char *zlog_mdc_get(zlog_mdc_t * a_mdc, const char *key)
- {
- zlog_mdc_kv_t *a_mdc_kv;
- a_mdc_kv = zc_hashtable_get(a_mdc->tab, key);
- if (!a_mdc_kv) {
- zc_error("zc_hashtable_get fail");
- return NULL;
- } else {
- return a_mdc_kv->value;
- }
- }
- zlog_mdc_kv_t *zlog_mdc_get_kv(zlog_mdc_t * a_mdc, const char *key)
- {
- zlog_mdc_kv_t *a_mdc_kv;
- a_mdc_kv = zc_hashtable_get(a_mdc->tab, key);
- if (!a_mdc_kv) {
- zc_error("zc_hashtable_get fail");
- return NULL;
- } else {
- return a_mdc_kv;
- }
- }
- void zlog_mdc_remove(zlog_mdc_t * a_mdc, const char *key)
- {
- zc_hashtable_remove(a_mdc->tab, key);
- return;
- }
|