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 <asalkeld(a)redhat.com>
---
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 <qb/qblog.h>
#include <qb/qbrb.h>
-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);
--
1.7.6