From f5fcf2a30bd9f6eb16f9ec89d250c859f60ae233 Mon Sep 17 00:00:00 2001 From: Angus Salkeld Date: Thu, 8 Sep 2011 16:40:02 +1000 Subject: [PATCH] LOG: add a way of getting the target state This is so we can do the following: for (t = 0; t < QB_LOG_TARGET_MAX; t++) { if (qb_log_ctl(t, QB_LOG_CONF_STATE_GET, 0) == QB_LOG_STATE_ENABLED) { // bla bla } } Signed-off-by: Angus Salkeld --- include/qb/qblog.h | 17 ++++++++++++++--- lib/log.c | 26 +++++++++++++++++--------- lib/log_int.h | 8 +------- tests/check_log.c | 10 ++++++++++ 4 files changed, 42 insertions(+), 19 deletions(-) diff --git a/include/qb/qblog.h b/include/qb/qblog.h index 8d7276c..2736aa3 100644 --- a/include/qb/qblog.h +++ b/include/qb/qblog.h @@ -349,6 +349,14 @@ void qb_log_from_external_source_va(const char *function, #define QB_LOG_STDERR 1 #define QB_LOG_BLACKBOX 2 +#define QB_LOG_TARGET_MAX 32 + +enum qb_log_target_state { + QB_LOG_STATE_UNUSED = 1, + QB_LOG_STATE_DISABLED = 2, + QB_LOG_STATE_ENABLED = 3, +}; + enum qb_log_conf { QB_LOG_CONF_ENABLED, QB_LOG_CONF_FACILITY, @@ -356,6 +364,7 @@ enum qb_log_conf { QB_LOG_CONF_SIZE, QB_LOG_CONF_THREADED, QB_LOG_CONF_PRIORITY_BUMP, + QB_LOG_CONF_STATE_GET, }; enum qb_log_filter_type { @@ -426,14 +435,16 @@ void qb_log_callsites_dump(void); /** * Main logging control function. * - * @param t QB_LOG_SYSLOG, QB_LOG_STDERR or result from qb_log_file_open() - * @param c what to configure + * @param target QB_LOG_SYSLOG, QB_LOG_STDERR or result from qb_log_file_open() + * @param conf_type what to configure * @param arg the new value * @see qb_log_conf + * * @retval -errno on error * @retval 0 on success + * @retval qb_log_target_state for QB_LOG_CONF_STATE_GET */ -int32_t qb_log_ctl(int32_t t, enum qb_log_conf c, int32_t arg); +int32_t qb_log_ctl(int32_t target, enum qb_log_conf conf_type, int32_t arg); /** * This allows you modify the 'tags' and 'targets' callsite fields at runtime. diff --git a/lib/log.c b/lib/log.c index 998ad6e..6129614 100644 --- a/lib/log.c +++ b/lib/log.c @@ -34,7 +34,7 @@ #include "log_int.h" #include "util_int.h" -static struct qb_log_target conf[32]; +static struct qb_log_target conf[QB_LOG_TARGET_MAX]; static uint32_t conf_used_max = 0; static uint32_t conf_active_max = 0; static int32_t in_logger = QB_FALSE; @@ -526,7 +526,8 @@ qb_log_filter_ctl(int32_t t, enum qb_log_filter_conf c, if (!logger_inited) { return -EINVAL; } - if (t < 0 || t >= 32 || conf[t].state == QB_LOG_STATE_UNUSED) { + if (t < 0 || t >= QB_LOG_TARGET_MAX || + conf[t].state == QB_LOG_STATE_UNUSED) { return -EBADF; } if (text == NULL || @@ -590,7 +591,7 @@ done: #endif /* QB_HAVE_ATTRIBUTE_SECTION */ static void -_log_target_state_set(struct qb_log_target *t, enum qb_log_state s) +_log_target_state_set(struct qb_log_target *t, enum qb_log_target_state s) { int32_t i; int32_t a_set = QB_FALSE; @@ -618,7 +619,7 @@ qb_log_init(const char *name, int32_t facility, uint8_t priority) i = pthread_rwlock_init(&_listlock, NULL); assert(i == 0); - for (i = 0; i < 32; i++) { + for (i = 0; i < QB_LOG_TARGET_MAX; i++) { conf[i].pos = i; conf[i].debug = QB_FALSE; conf[i].state = QB_LOG_STATE_UNUSED; @@ -697,7 +698,7 @@ struct qb_log_target * qb_log_target_alloc(void) { int32_t i; - for (i = 0; i < 32; i++) { + for (i = 0; i < QB_LOG_TARGET_MAX; i++) { if (conf[i].state == QB_LOG_STATE_UNUSED) { _log_target_state_set(&conf[i], QB_LOG_STATE_DISABLED); return &conf[i]; @@ -730,7 +731,8 @@ qb_log_target_user_data_get(int32_t t) errno = -EINVAL; return NULL; } - if (t < 0 || t >= 32 || conf[t].state == QB_LOG_STATE_UNUSED) { + if (t < 0 || t >= QB_LOG_TARGET_MAX || + conf[t].state == QB_LOG_STATE_UNUSED) { errno = -EBADF; return NULL; } @@ -744,7 +746,8 @@ qb_log_target_user_data_set(int32_t t, void *user_data) if (!logger_inited) { return -EINVAL; } - if (t < 0 || t >= 32 || conf[t].state == QB_LOG_STATE_UNUSED) { + if (t < 0 || t >= QB_LOG_TARGET_MAX || + conf[t].state == QB_LOG_STATE_UNUSED) { return -EBADF; } @@ -783,7 +786,8 @@ qb_log_custom_close(int32_t t) if (!logger_inited) { return; } - if (t < 0 || t >= 32 || conf[t].state == QB_LOG_STATE_UNUSED) { + if (t < 0 || t >= QB_LOG_TARGET_MAX || + conf[t].state == QB_LOG_STATE_UNUSED) { return; } @@ -839,7 +843,8 @@ qb_log_ctl(int32_t t, enum qb_log_conf c, int32_t arg) if (!logger_inited) { return -EINVAL; } - if (t < 0 || t >= 32 || conf[t].state == QB_LOG_STATE_UNUSED) { + if (t < 0 || t >= QB_LOG_TARGET_MAX || + conf[t].state == QB_LOG_STATE_UNUSED) { return -EBADF; } switch (c) { @@ -850,6 +855,9 @@ qb_log_ctl(int32_t t, enum qb_log_conf c, int32_t arg) _log_target_disable(&conf[t]); } break; + case QB_LOG_CONF_STATE_GET: + rc = conf[t].state; + break; case QB_LOG_CONF_FACILITY: conf[t].facility = arg; if (t == QB_LOG_SYSLOG) { diff --git a/lib/log_int.h b/lib/log_int.h index f8cb033..25bc52c 100644 --- a/lib/log_int.h +++ b/lib/log_int.h @@ -25,17 +25,11 @@ #include #include -enum qb_log_state { - QB_LOG_STATE_UNUSED, - QB_LOG_STATE_DISABLED, - QB_LOG_STATE_ENABLED, -}; - struct qb_log_target; struct qb_log_target { uint32_t pos; - enum qb_log_state state; + enum qb_log_target_state state; char name[PATH_MAX]; struct qb_list_head filter_head; int32_t facility; diff --git a/tests/check_log.c b/tests/check_log.c index 153f254..c7bd678 100644 --- a/tests/check_log.c +++ b/tests/check_log.c @@ -311,9 +311,19 @@ END_TEST START_TEST(test_log_enable) { int32_t t; + int32_t state; qb_log_init("test", LOG_USER, LOG_DEBUG); + state = qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_STATE_GET, 0); + ck_assert_int_eq(state, QB_LOG_STATE_ENABLED); + state = qb_log_ctl(QB_LOG_STDERR, QB_LOG_CONF_STATE_GET, 0); + ck_assert_int_eq(state, QB_LOG_STATE_DISABLED); + state = qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_STATE_GET, 0); + ck_assert_int_eq(state, QB_LOG_STATE_DISABLED); + qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_ENABLED, QB_FALSE); + state = qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_STATE_GET, 0); + ck_assert_int_eq(state, QB_LOG_STATE_DISABLED); t = qb_log_custom_open(_test_logger, NULL, NULL, NULL); qb_log_ctl(t, QB_LOG_CONF_ENABLED, QB_TRUE);