123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /*
- * 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 <string.h>
- #include <stdlib.h>
- #include <errno.h>
- #include "zc_defs.h"
- #include "category_table.h"
- void zlog_category_table_profile(zc_hashtable_t * categories, int flag)
- {
- zc_hashtable_entry_t *a_entry;
- zlog_category_t *a_category;
- zc_assert(categories,);
- zc_profile(flag, "-category_table[%p]-", categories);
- zc_hashtable_foreach(categories, a_entry) {
- a_category = (zlog_category_t *) a_entry->value;
- zlog_category_profile(a_category, flag);
- }
- return;
- }
- /*******************************************************************************/
- void zlog_category_table_del(zc_hashtable_t * categories)
- {
- zc_assert(categories,);
- zc_hashtable_del(categories);
- zc_debug("zlog_category_table_del[%p]", categories);
- return;
- }
- zc_hashtable_t *zlog_category_table_new(void)
- {
- zc_hashtable_t *categories;
- categories = zc_hashtable_new(20,
- (zc_hashtable_hash_fn) zc_hashtable_str_hash,
- (zc_hashtable_equal_fn) zc_hashtable_str_equal,
- NULL, (zc_hashtable_del_fn) zlog_category_del);
- if (!categories) {
- zc_error("zc_hashtable_new fail");
- return NULL;
- } else {
- zlog_category_table_profile(categories, ZC_DEBUG);
- return categories;
- }
- }
- /*******************************************************************************/
- int zlog_category_table_update_rules(zc_hashtable_t * categories, zc_arraylist_t * new_rules)
- {
- zc_hashtable_entry_t *a_entry;
- zlog_category_t *a_category;
- zc_assert(categories, -1);
- zc_hashtable_foreach(categories, a_entry) {
- a_category = (zlog_category_t *) a_entry->value;
- if (zlog_category_update_rules(a_category, new_rules)) {
- zc_error("zlog_category_update_rules fail, try rollback");
- return -1;
- }
- }
- return 0;
- }
- void zlog_category_table_commit_rules(zc_hashtable_t * categories)
- {
- zc_hashtable_entry_t *a_entry;
- zlog_category_t *a_category;
- zc_assert(categories,);
- zc_hashtable_foreach(categories, a_entry) {
- a_category = (zlog_category_t *) a_entry->value;
- zlog_category_commit_rules(a_category);
- }
- return;
- }
- void zlog_category_table_rollback_rules(zc_hashtable_t * categories)
- {
- zc_hashtable_entry_t *a_entry;
- zlog_category_t *a_category;
- zc_assert(categories,);
- zc_hashtable_foreach(categories, a_entry) {
- a_category = (zlog_category_t *) a_entry->value;
- zlog_category_rollback_rules(a_category);
- }
- return;
- }
- /*******************************************************************************/
- zlog_category_t *zlog_category_table_fetch_category(zc_hashtable_t * categories,
- const char *category_name, zc_arraylist_t * rules)
- {
- zlog_category_t *a_category;
- zc_assert(categories, NULL);
- /* 1st find category in global category map */
- a_category = zc_hashtable_get(categories, category_name);
- if (a_category) return a_category;
- /* else not found, create one */
- a_category = zlog_category_new(category_name, rules);
- if (!a_category) {
- zc_error("zc_category_new fail");
- return NULL;
- }
- if(zc_hashtable_put(categories, a_category->name, a_category)) {
- zc_error("zc_hashtable_put fail");
- goto err;
- }
- return a_category;
- err:
- zlog_category_del(a_category);
- return NULL;
- }
- /*******************************************************************************/
|