From: Vladimír Čunát Date: Mon, 12 Jul 2021 09:27:17 +0000 (+0200) Subject: lib/log: typing improvements X-Git-Tag: v5.4.0~2^2~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bdf304b5f26a4b5e196ac986e145157141a1533b;p=thirdparty%2Fknot-resolver.git lib/log: typing improvements - const for names of log groups - enum kr_log_group for a single log group - the kr_log_groups bitmap doesn't need to be exposed or even exported - return bool instead of int --- diff --git a/daemon/engine.c b/daemon/engine.c index 189e62285..079af5c2a 100644 --- a/daemon/engine.c +++ b/daemon/engine.c @@ -173,13 +173,13 @@ static int l_get_log_level(lua_State *L) return 1; } -static int handle_log_groups(lua_State *L, void (*action)(log_groups_t grp)) +static int handle_log_groups(lua_State *L, void (*action)(enum kr_log_group grp)) { if (lua_gettop(L) != 1 || (!lua_isstring(L, 1) && !lua_istable(L, 1))) lua_error_p(L, "takes string or table of strings"); if (lua_isstring(L, 1)) { - log_groups_t grp = kr_log_name2grp(lua_tostring(L, 1)); + enum kr_log_group grp = kr_log_name2grp(lua_tostring(L, 1)); if (grp == 0) lua_error_p(L, "unknown group \"%s\"", lua_tostring(L, -1)); action(grp); @@ -187,12 +187,11 @@ static int handle_log_groups(lua_State *L, void (*action)(log_groups_t grp)) if (lua_istable(L, 1)) { int idx = 1; - log_groups_t grp; lua_pushnil(L); while (lua_next(L, 1) != 0) { if (!lua_isstring(L, -1)) lua_error_p(L, "wrong value at index %d, must be string", idx); - grp = kr_log_name2grp(lua_tostring(L, -1)); + enum kr_log_group grp = kr_log_name2grp(lua_tostring(L, -1)); if (grp == 0) lua_error_p(L, "unknown group \"%s\"", lua_tostring(L, -1)); @@ -217,11 +216,9 @@ static int l_del_log_groups(lua_State *L) static int l_get_log_groups(lua_State *L) { - char* name; - lua_newtable(L); for (int grp = LOG_GRP_SYSTEM; grp <= LOG_GRP_DEVEL; grp++) { - name = kr_log_grp2name(grp); + const char *name = kr_log_grp2name(grp); if (kr_fails_assert(name)) continue; if (kr_log_group_is_set(grp)) { diff --git a/daemon/lua/kres-gen-29.lua b/daemon/lua/kres-gen-29.lua index a60e115bf..a136d6cc2 100644 --- a/daemon/lua/kres-gen-29.lua +++ b/daemon/lua/kres-gen-29.lua @@ -306,9 +306,8 @@ struct kr_server_selection { void (*error)(struct kr_query *, const struct kr_transport *, enum kr_selection_error); struct local_state *local_state; }; -typedef unsigned long log_groups_t; typedef int log_level_t; -enum kr_log_groups_type {LOG_GRP_SYSTEM = 1, LOG_GRP_CACHE, LOG_GRP_IO, LOG_GRP_NETWORK, LOG_GRP_TA, LOG_GRP_TLS, LOG_GRP_GNUTLS, LOG_GRP_TLSCLIENT, LOG_GRP_XDP, LOG_GRP_ZIMPORT, LOG_GRP_ZSCANNER, LOG_GRP_DOH, LOG_GRP_DNSSEC, LOG_GRP_HINT, LOG_GRP_PLAN, LOG_GRP_ITERATOR, LOG_GRP_VALIDATOR, LOG_GRP_RESOLVER, LOG_GRP_SELECTION, LOG_GRP_ZCUT, LOG_GRP_COOKIES, LOG_GRP_STATISTICS, LOG_GRP_REBIND, LOG_GRP_WORKER, LOG_GRP_POLICY, LOG_GRP_TASENTINEL, LOG_GRP_TASIGNALING, LOG_GRP_TAUPDATE, LOG_GRP_DAF, LOG_GRP_DETECTTIMEJUMP, LOG_GRP_DETECTTIMESKEW, LOG_GRP_GRAPHITE, LOG_GRP_PREFILL, LOG_GRP_PRIMING, LOG_GRP_SRVSTALE, LOG_GRP_WATCHDOG, LOG_GRP_NSID, LOG_GRP_DNSTAP, LOG_GRP_TESTS, LOG_GRP_DOTAUTH, LOG_GRP_HTTP, LOG_GRP_DEVEL}; +enum kr_log_group {LOG_GRP_SYSTEM = 1, LOG_GRP_CACHE, LOG_GRP_IO, LOG_GRP_NETWORK, LOG_GRP_TA, LOG_GRP_TLS, LOG_GRP_GNUTLS, LOG_GRP_TLSCLIENT, LOG_GRP_XDP, LOG_GRP_ZIMPORT, LOG_GRP_ZSCANNER, LOG_GRP_DOH, LOG_GRP_DNSSEC, LOG_GRP_HINT, LOG_GRP_PLAN, LOG_GRP_ITERATOR, LOG_GRP_VALIDATOR, LOG_GRP_RESOLVER, LOG_GRP_SELECTION, LOG_GRP_ZCUT, LOG_GRP_COOKIES, LOG_GRP_STATISTICS, LOG_GRP_REBIND, LOG_GRP_WORKER, LOG_GRP_POLICY, LOG_GRP_TASENTINEL, LOG_GRP_TASIGNALING, LOG_GRP_TAUPDATE, LOG_GRP_DAF, LOG_GRP_DETECTTIMEJUMP, LOG_GRP_DETECTTIMESKEW, LOG_GRP_GRAPHITE, LOG_GRP_PREFILL, LOG_GRP_PRIMING, LOG_GRP_SRVSTALE, LOG_GRP_WATCHDOG, LOG_GRP_NSID, LOG_GRP_DNSTAP, LOG_GRP_TESTS, LOG_GRP_DOTAUTH, LOG_GRP_HTTP, LOG_GRP_DEVEL}; kr_layer_t kr_layer_t_static; _Bool kr_dbg_assertion_abort; @@ -386,10 +385,10 @@ int kr_rplan_pop(struct kr_rplan *, struct kr_query *); struct kr_query *kr_rplan_resolved(struct kr_rplan *); struct kr_query *kr_rplan_last(struct kr_rplan *); int kr_forward_add_target(struct kr_request *, const struct sockaddr *); -void kr_log_req1(const struct kr_request * const, uint32_t, const unsigned int, log_groups_t, const char *, const char *, ...); -void kr_log_q1(const struct kr_query * const, log_groups_t, const char *, const char *, ...); -char *kr_log_grp2name(log_groups_t); -void kr_log_fmt(log_groups_t, log_level_t, const char *, const char *, const char *, const char *, ...); +void kr_log_req1(const struct kr_request * const, uint32_t, const unsigned int, enum kr_log_group, const char *, const char *, ...); +void kr_log_q1(const struct kr_query * const, enum kr_log_group, const char *, const char *, ...); +const char *kr_log_grp2name(enum kr_log_group); +void kr_log_fmt(enum kr_log_group, log_level_t, const char *, const char *, const char *, const char *, ...); int kr_make_query(struct kr_query *, knot_pkt_t *); void kr_pkt_make_auth_header(knot_pkt_t *); int kr_pkt_put(knot_pkt_t *, const knot_dname_t *, uint32_t, uint16_t, uint16_t, const uint8_t *, uint16_t); diff --git a/daemon/lua/kres-gen.sh b/daemon/lua/kres-gen.sh index 5e8c3b677..6bcc23110 100755 --- a/daemon/lua/kres-gen.sh +++ b/daemon/lua/kres-gen.sh @@ -138,9 +138,8 @@ ${CDEFS} ${LIBKRES} types <<-EOF struct kr_prop struct kr_module struct kr_server_selection - log_groups_t log_level_t - enum kr_log_groups_type + enum kr_log_group EOF # static variables; these lines might not be simple to generate diff --git a/lib/log.c b/lib/log.c index 7b3abb25d..f8859d26b 100644 --- a/lib/log.c +++ b/lib/log.c @@ -20,7 +20,11 @@ int use_journal = 0; log_level_t kr_log_level = LOG_CRIT; log_target_t kr_log_target = LOG_TARGET_STDOUT; -log_groups_t kr_log_groups = 0; + +/** Set of log-groups that are on debug level. It's a bitmap over 1 << enum kr_log_group. */ +static uint64_t kr_log_groups = 0; + +static_assert(LOG_GRP_DEVEL <= 8 * sizeof(kr_log_groups), "Too many log groups."); #define GRP_NAME_ITEM(grp) { grp ## _TAG, grp } @@ -84,12 +88,12 @@ syslog_code_t prioritynames[] = { }; #endif -log_groups_t kr_log_group_is_set(log_groups_t group) +bool kr_log_group_is_set(enum kr_log_group group) { return kr_log_groups & (1ULL << group); } -void kr_log_fmt(log_groups_t group, log_level_t level, const char *file, +void kr_log_fmt(enum kr_log_group group, log_level_t level, const char *file, const char *line, const char *func, const char *fmt, ...) { va_list args; @@ -160,7 +164,7 @@ log_level_t kr_log_name2level(const char *name) return -1; } -char *kr_log_grp2name(log_groups_t group) +const char *kr_log_grp2name(enum kr_log_group group) { for (int i = 0; log_group_names[i].g_val != -1; ++i) { @@ -171,7 +175,7 @@ char *kr_log_grp2name(log_groups_t group) return NULL; } -log_groups_t kr_log_name2grp(const char *name) +enum kr_log_group kr_log_name2grp(const char *name) { if (kr_fails_assert(name)) return 0; @@ -220,14 +224,14 @@ log_level_t kr_log_level_get(void) return kr_log_level; } -void kr_log_add_group(log_groups_t group) +void kr_log_add_group(enum kr_log_group group) { kr_log_groups |= (1ULL << group); if (group == LOG_GRP_GNUTLS) kr_gnutls_log_level_set(); } -void kr_log_del_group(log_groups_t group) +void kr_log_del_group(enum kr_log_group group) { kr_log_groups &= (~(1ULL << group)); if (group == LOG_GRP_GNUTLS) @@ -252,7 +256,7 @@ void kr_log_init(log_level_t level, log_target_t target) */ static void kr_vlog_req( const struct kr_request * const req, uint32_t qry_uid, - const unsigned int indent, log_groups_t group, const char *tag, const char *fmt, + const unsigned int indent, enum kr_log_group group, const char *tag, const char *fmt, va_list args) { struct mempool *mp = mp_new(512); @@ -272,7 +276,7 @@ static void kr_vlog_req( } void kr_log_req1(const struct kr_request * const req, uint32_t qry_uid, - const unsigned int indent, log_groups_t group, const char *tag, const char *fmt, ...) + const unsigned int indent, enum kr_log_group group, const char *tag, const char *fmt, ...) { va_list args; va_start(args, fmt); @@ -281,7 +285,7 @@ void kr_log_req1(const struct kr_request * const req, uint32_t qry_uid, } void kr_log_q1(const struct kr_query * const qry, - log_groups_t group, const char *tag, const char *fmt, ...) + enum kr_log_group group, const char *tag, const char *fmt, ...) { unsigned ind = 0; for (const struct kr_query *q = qry; q; q = q->parent) diff --git a/lib/log.h b/lib/log.h index d0d514bfd..51ccfd359 100644 --- a/lib/log.h +++ b/lib/log.h @@ -22,15 +22,9 @@ typedef enum { /* Groups */ -typedef uint64_t log_groups_t; -typedef struct { - char *g_name; - log_groups_t g_val; -} log_group_names_t; - /* Don't forget add *_TAG below, log_group_names[] item (log.c) and generate * new kres-gen.lua */ -enum kr_log_groups_type { +enum kr_log_group { LOG_GRP_SYSTEM = 1, /* Must be first in enum. */ LOG_GRP_CACHE, LOG_GRP_IO, @@ -76,6 +70,10 @@ enum kr_log_groups_type { LOG_GRP_DEVEL, /* Must be last entry in enum! */ }; +typedef struct { + const char *g_name; + enum kr_log_group g_val; +} log_group_names_t; #define LOG_GRP_SYSTEM_TAG "system" #define LOG_GRP_CACHE_TAG "cache" @@ -121,17 +119,15 @@ enum kr_log_groups_type { #define LOG_GRP_DEVEL_TAG "devel" KR_EXPORT -extern log_groups_t kr_log_groups; -KR_EXPORT -log_groups_t kr_log_group_is_set(log_groups_t group); +bool kr_log_group_is_set(enum kr_log_group group); KR_EXPORT -void kr_log_add_group(log_groups_t group); +void kr_log_add_group(enum kr_log_group group); KR_EXPORT -void kr_log_del_group(log_groups_t group); +void kr_log_del_group(enum kr_log_group group); KR_EXPORT -char *kr_log_grp2name(log_groups_t group); +const char *kr_log_grp2name(enum kr_log_group group); KR_EXPORT -log_groups_t kr_log_name2grp(const char *name); +enum kr_log_group kr_log_name2grp(const char *name); /* Log */ @@ -142,7 +138,7 @@ extern log_level_t kr_log_level; KR_EXPORT extern log_target_t kr_log_target; KR_EXPORT KR_PRINTF(6) -void kr_log_fmt(log_groups_t group, log_level_t level, const char *file, const char *line, +void kr_log_fmt(enum kr_log_group group, log_level_t level, const char *file, const char *line, const char *func, const char *fmt, ...); KR_EXPORT int kr_log_level_set(log_level_t level); @@ -216,7 +212,7 @@ struct kr_query; kr_log_req1(req, qry_id, indent, LOG_GRP_ ## grp, LOG_GRP_ ## grp ## _TAG, fmt, ## __VA_ARGS__) KR_EXPORT KR_PRINTF(6) void kr_log_req1(const struct kr_request * const req, uint32_t qry_uid, - const unsigned int indent, log_groups_t group, const char *tag, const char *fmt, ...); + const unsigned int indent, enum kr_log_group group, const char *tag, const char *fmt, ...); /** * Log a message through the request log handler or stdout. @@ -227,7 +223,7 @@ void kr_log_req1(const struct kr_request * const req, uint32_t qry_uid, */ #define kr_log_q(qry, grp, fmt, ...) kr_log_q1(qry, LOG_GRP_ ## grp, LOG_GRP_ ## grp ## _TAG, fmt, ## __VA_ARGS__) KR_EXPORT KR_PRINTF(4) -void kr_log_q1(const struct kr_query *qry, log_groups_t group, const char *tag, const char *fmt, ...); +void kr_log_q1(const struct kr_query *qry, enum kr_log_group group, const char *tag, const char *fmt, ...); /** Block run in --verbose mode; optimized when not run. */ #define VERBOSE_STATUS __builtin_expect(KR_LOG_LEVEL_IS(LOG_DEBUG), false) // TODO vyhodit