]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
lib/log: typing improvements
authorVladimír Čunát <vladimir.cunat@nic.cz>
Mon, 12 Jul 2021 09:27:17 +0000 (11:27 +0200)
committerTomas Krizek <tomas.krizek@nic.cz>
Thu, 29 Jul 2021 09:42:33 +0000 (11:42 +0200)
- 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

daemon/engine.c
daemon/lua/kres-gen-29.lua
daemon/lua/kres-gen.sh
lib/log.c
lib/log.h

index 189e62285a346a7d39c36516210de1f3df25eb28..079af5c2ae1b11974a1cd562614cb48de09d893c 100644 (file)
@@ -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)) {
index a60e115bfc699f730e315ce2c10ce4c6099144e9..a136d6cc2e1617947481ccdab88b9f3d6006d5bc 100644 (file)
@@ -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);
index 5e8c3b67700398908fe52d7c4bfe424b3a9d3846..6bcc23110f9a1fe0df5a5b91faeb33a130b99c55 100755 (executable)
@@ -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
index 7b3abb25dc5c497069b02e97767f10e1cb9c2ede..f8859d26bbb8a059104860eb647becb423453bba 100644 (file)
--- 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)
index d0d514bfd6302c1c1a8dbc137a8694b091fcfe93..51ccfd359e5d0602f9452fafdde41f0e58b60b11 100644 (file)
--- 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