debug: Optimise to avoid walking the header string
authorMartin Schwenke <martin@meltin.net>
Wed, 13 Oct 2021 01:06:13 +0000 (12:06 +1100)
committerVolker Lendecke <vl@samba.org>
Thu, 14 Oct 2021 10:21:30 +0000 (10:21 +0000)
strlcat() needs to walk to the end of its first argument.  However,
but the length of state.header_str is already known, so optimise by
manually appending the extra characters if they will fit.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Volker Lendecke <vl@samba.org>
lib/util/debug.c

index d48a56ee70dab1b7d49903c8c2406c0b4256670a..c18726759e710ad6db72a4c721195bb543f2c949 100644 (file)
@@ -1740,13 +1740,16 @@ bool dbghdrclass(int level, int cls, const char *location, const char *func)
                }
        }
 
-       /*
-        * No +=, see man man strlcat
-        */
-       state.hs_len = strlcat(state.header_str, "] ", sizeof(state.header_str));
-       if (state.hs_len >= sizeof(state.header_str)) {
+       if (state.hs_len >= sizeof(state.header_str) - 1) {
                goto full;
        }
+       state.header_str[state.hs_len] = ']';
+       state.hs_len++;
+       if (state.hs_len < sizeof(state.header_str) - 1) {
+               state.header_str[state.hs_len] = ' ';
+               state.hs_len++;
+       }
+       state.header_str[state.hs_len] = '\0';
 
        if (!state.settings.debug_prefix_timestamp) {
                state.hs_len += snprintf(state.header_str + state.hs_len,