Avoid copying string arguments to log functions (always pass by ref)
authorDavin McCall <davmac@davmac.org>
Fri, 13 Dec 2019 10:05:47 +0000 (20:05 +1000)
committerDavin McCall <davmac@davmac.org>
Fri, 13 Dec 2019 10:17:40 +0000 (20:17 +1000)
src/dinit-log.cc
src/includes/dinit-log.h

index fd15e224dce14ad9a5560c07ff399fe349ba4521..990ffefd38ee1085c2744585964c5b0a85cc646a 100644 (file)
@@ -424,7 +424,7 @@ void log(loglevel_t lvl, bool to_cons, const char *msg) noexcept
 }
 
 // Log part of a message. A series of calls to do_log_part must be followed by a call to do_log_commit.
-template <typename T> static void do_log_part(int idx, T arg) noexcept
+static void do_log_part(int idx, const char *arg) noexcept
 {
     if (log_current_line[idx]) {
         int amount = sum_length(arg);
index ccff5e77ad18c301e8a71754705d5b9426aa46bf..534a0b7364ebf37f94e0f0a12c7fc9e3ad4b774b 100644 (file)
@@ -118,12 +118,12 @@ static inline void log_service_stopped(const std::string &str) noexcept
 
 // It's not intended that methods in this namespace be called directly:
 namespace dinit_log {
-    template <typename A> static inline void log_parts(a) noexcept
+    template <typename A> static inline void log_parts(const A &a) noexcept
     {
         log_msg_end(a);
     }
 
-    template <typename A, typename ...B> static inline void log_parts(A a, B... b) noexcept
+    template <typename A, typename ...B> static inline void log_parts(const A &a, const B & ...b) noexcept
     {
         log_msg_part(a);
         log_parts(b...);
@@ -131,13 +131,7 @@ namespace dinit_log {
 }
 
 // Variadic 'log' method.
-template <typename A, typename ...B> static inline void log(loglevel_t lvl, bool log_cons, A a, B ...b) noexcept
-{
-    log_msg_begin(lvl, a);
-    dinit_log::log_parts(b...);
-}
-
-template <typename A, typename ...B> static inline void log(loglevel_t lvl, A a, B ...b) noexcept
+template <typename A, typename ...B> static inline void log(loglevel_t lvl, const A &a, const B & ...b) noexcept
 {
     log_msg_begin(lvl, a);
     dinit_log::log_parts(b...);