From 377a2860cc4a28bfcc6cf0f067dc2571cceb97c0 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@musicpd.org>
Date: Tue, 16 May 2017 07:00:53 +0200
Subject: [PATCH] Log: add "noexcept"

---
 src/Log.cxx                  | 37 +++++++++++++++---------------
 src/Log.hxx                  | 44 ++++++++++++++++++------------------
 src/LogBackend.cxx           | 24 +++++++++++---------
 src/LogBackend.hxx           |  8 +++----
 src/LogV.hxx                 |  3 ++-
 test/test_translate_song.cxx |  2 +-
 6 files changed, 61 insertions(+), 57 deletions(-)

diff --git a/src/Log.cxx b/src/Log.cxx
index 10bc42a16..d51889c97 100644
--- a/src/Log.cxx
+++ b/src/Log.cxx
@@ -30,7 +30,8 @@
 static constexpr Domain exception_domain("exception");
 
 void
-LogFormatV(const Domain &domain, LogLevel level, const char *fmt, va_list ap)
+LogFormatV(const Domain &domain, LogLevel level,
+	   const char *fmt, va_list ap) noexcept
 {
 	char msg[1024];
 	vsnprintf(msg, sizeof(msg), fmt, ap);
@@ -38,7 +39,7 @@ LogFormatV(const Domain &domain, LogLevel level, const char *fmt, va_list ap)
 }
 
 void
-LogFormat(const Domain &domain, LogLevel level, const char *fmt, ...)
+LogFormat(const Domain &domain, LogLevel level, const char *fmt, ...) noexcept
 {
 	va_list ap;
 	va_start(ap, fmt);
@@ -47,7 +48,7 @@ LogFormat(const Domain &domain, LogLevel level, const char *fmt, ...)
 }
 
 void
-FormatDebug(const Domain &domain, const char *fmt, ...)
+FormatDebug(const Domain &domain, const char *fmt, ...) noexcept
 {
 	va_list ap;
 	va_start(ap, fmt);
@@ -56,7 +57,7 @@ FormatDebug(const Domain &domain, const char *fmt, ...)
 }
 
 void
-FormatInfo(const Domain &domain, const char *fmt, ...)
+FormatInfo(const Domain &domain, const char *fmt, ...) noexcept
 {
 	va_list ap;
 	va_start(ap, fmt);
@@ -65,7 +66,7 @@ FormatInfo(const Domain &domain, const char *fmt, ...)
 }
 
 void
-FormatDefault(const Domain &domain, const char *fmt, ...)
+FormatDefault(const Domain &domain, const char *fmt, ...) noexcept
 {
 	va_list ap;
 	va_start(ap, fmt);
@@ -74,7 +75,7 @@ FormatDefault(const Domain &domain, const char *fmt, ...)
 }
 
 void
-FormatWarning(const Domain &domain, const char *fmt, ...)
+FormatWarning(const Domain &domain, const char *fmt, ...) noexcept
 {
 	va_list ap;
 	va_start(ap, fmt);
@@ -83,7 +84,7 @@ FormatWarning(const Domain &domain, const char *fmt, ...)
 }
 
 void
-FormatError(const Domain &domain, const char *fmt, ...)
+FormatError(const Domain &domain, const char *fmt, ...) noexcept
 {
 	va_list ap;
 	va_start(ap, fmt);
@@ -92,7 +93,7 @@ FormatError(const Domain &domain, const char *fmt, ...)
 }
 
 void
-LogError(const std::exception &e)
+LogError(const std::exception &e) noexcept
 {
 	Log(exception_domain, LogLevel::ERROR, e.what());
 
@@ -107,7 +108,7 @@ LogError(const std::exception &e)
 }
 
 void
-LogError(const std::exception &e, const char *msg)
+LogError(const std::exception &e, const char *msg) noexcept
 {
 	FormatError(exception_domain, "%s: %s", msg, e.what());
 
@@ -122,7 +123,7 @@ LogError(const std::exception &e, const char *msg)
 }
 
 void
-FormatError(const std::exception &e, const char *fmt, ...)
+FormatError(const std::exception &e, const char *fmt, ...) noexcept
 {
 	char msg[1024];
 	va_list ap;
@@ -134,7 +135,7 @@ FormatError(const std::exception &e, const char *fmt, ...)
 }
 
 void
-LogError(const std::exception_ptr &ep)
+LogError(const std::exception_ptr &ep) noexcept
 {
 	try {
 		std::rethrow_exception(ep);
@@ -147,7 +148,7 @@ LogError(const std::exception_ptr &ep)
 }
 
 void
-LogError(const std::exception_ptr &ep, const char *msg)
+LogError(const std::exception_ptr &ep, const char *msg) noexcept
 {
 	try {
 		std::rethrow_exception(ep);
@@ -160,7 +161,7 @@ LogError(const std::exception_ptr &ep, const char *msg)
 }
 
 void
-FormatError(const std::exception_ptr &ep, const char *fmt, ...)
+FormatError(const std::exception_ptr &ep, const char *fmt, ...) noexcept
 {
 	char msg[1024];
 	va_list ap;
@@ -172,19 +173,19 @@ FormatError(const std::exception_ptr &ep, const char *fmt, ...)
 }
 
 void
-LogErrno(const Domain &domain, int e, const char *msg)
+LogErrno(const Domain &domain, int e, const char *msg) noexcept
 {
 	LogFormat(domain, LogLevel::ERROR, "%s: %s", msg, strerror(e));
 }
 
 void
-LogErrno(const Domain &domain, const char *msg)
+LogErrno(const Domain &domain, const char *msg) noexcept
 {
 	LogErrno(domain, errno, msg);
 }
 
 static void
-FormatErrnoV(const Domain &domain, int e, const char *fmt, va_list ap)
+FormatErrnoV(const Domain &domain, int e, const char *fmt, va_list ap) noexcept
 {
 	char msg[1024];
 	vsnprintf(msg, sizeof(msg), fmt, ap);
@@ -193,7 +194,7 @@ FormatErrnoV(const Domain &domain, int e, const char *fmt, va_list ap)
 }
 
 void
-FormatErrno(const Domain &domain, int e, const char *fmt, ...)
+FormatErrno(const Domain &domain, int e, const char *fmt, ...) noexcept
 {
 	va_list ap;
 	va_start(ap, fmt);
@@ -202,7 +203,7 @@ FormatErrno(const Domain &domain, int e, const char *fmt, ...)
 }
 
 void
-FormatErrno(const Domain &domain, const char *fmt, ...)
+FormatErrno(const Domain &domain, const char *fmt, ...) noexcept
 {
 	const int e = errno;
 
diff --git a/src/Log.hxx b/src/Log.hxx
index 63a3b18f0..a57fccd65 100644
--- a/src/Log.hxx
+++ b/src/Log.hxx
@@ -28,94 +28,94 @@
 class Domain;
 
 void
-Log(const Domain &domain, LogLevel level, const char *msg);
+Log(const Domain &domain, LogLevel level, const char *msg) noexcept;
 
 gcc_printf(3,4)
 void
-LogFormat(const Domain &domain, LogLevel level, const char *fmt, ...);
+LogFormat(const Domain &domain, LogLevel level, const char *fmt, ...) noexcept;
 
 static inline void
-LogDebug(const Domain &domain, const char *msg)
+LogDebug(const Domain &domain, const char *msg) noexcept
 {
 	Log(domain, LogLevel::DEBUG, msg);
 }
 
 gcc_printf(2,3)
 void
-FormatDebug(const Domain &domain, const char *fmt, ...);
+FormatDebug(const Domain &domain, const char *fmt, ...) noexcept;
 
 static inline void
-LogInfo(const Domain &domain, const char *msg)
+LogInfo(const Domain &domain, const char *msg) noexcept
 {
 	Log(domain, LogLevel::INFO, msg);
 }
 
 gcc_printf(2,3)
 void
-FormatInfo(const Domain &domain, const char *fmt, ...);
+FormatInfo(const Domain &domain, const char *fmt, ...) noexcept;
 
 static inline void
-LogDefault(const Domain &domain, const char *msg)
+LogDefault(const Domain &domain, const char *msg) noexcept
 {
 	Log(domain, LogLevel::DEFAULT, msg);
 }
 
 gcc_printf(2,3)
 void
-FormatDefault(const Domain &domain, const char *fmt, ...);
+FormatDefault(const Domain &domain, const char *fmt, ...) noexcept;
 
 static inline void
-LogWarning(const Domain &domain, const char *msg)
+LogWarning(const Domain &domain, const char *msg) noexcept
 {
 	Log(domain, LogLevel::WARNING, msg);
 }
 
 gcc_printf(2,3)
 void
-FormatWarning(const Domain &domain, const char *fmt, ...);
+FormatWarning(const Domain &domain, const char *fmt, ...) noexcept;
 
 static inline void
-LogError(const Domain &domain, const char *msg)
+LogError(const Domain &domain, const char *msg) noexcept
 {
 	Log(domain, LogLevel::ERROR, msg);
 }
 
 void
-LogError(const std::exception &e);
+LogError(const std::exception &e) noexcept;
 
 void
-LogError(const std::exception &e, const char *msg);
+LogError(const std::exception &e, const char *msg) noexcept;
 
 gcc_printf(2,3)
 void
-FormatError(const std::exception &e, const char *fmt, ...);
+FormatError(const std::exception &e, const char *fmt, ...) noexcept;
 
 void
-LogError(const std::exception_ptr &ep);
+LogError(const std::exception_ptr &ep) noexcept;
 
 void
-LogError(const std::exception_ptr &ep, const char *msg);
+LogError(const std::exception_ptr &ep, const char *msg) noexcept;
 
 gcc_printf(2,3)
 void
-FormatError(const std::exception_ptr &ep, const char *fmt, ...);
+FormatError(const std::exception_ptr &ep, const char *fmt, ...) noexcept;
 
 gcc_printf(2,3)
 void
-FormatError(const Domain &domain, const char *fmt, ...);
+FormatError(const Domain &domain, const char *fmt, ...) noexcept;
 
 void
-LogErrno(const Domain &domain, int e, const char *msg);
+LogErrno(const Domain &domain, int e, const char *msg) noexcept;
 
 void
-LogErrno(const Domain &domain, const char *msg);
+LogErrno(const Domain &domain, const char *msg) noexcept;
 
 gcc_printf(3,4)
 void
-FormatErrno(const Domain &domain, int e, const char *fmt, ...);
+FormatErrno(const Domain &domain, int e, const char *fmt, ...) noexcept;
 
 gcc_printf(2,3)
 void
-FormatErrno(const Domain &domain, const char *fmt, ...);
+FormatErrno(const Domain &domain, const char *fmt, ...) noexcept;
 
 #endif /* LOG_H */
diff --git a/src/LogBackend.cxx b/src/LogBackend.cxx
index b2e2dab0c..940d28c1b 100644
--- a/src/LogBackend.cxx
+++ b/src/LogBackend.cxx
@@ -36,7 +36,7 @@
 #include <android/log.h>
 
 static int
-ToAndroidLogLevel(LogLevel log_level)
+ToAndroidLogLevel(LogLevel log_level) noexcept
 {
 	switch (log_level) {
 	case LogLevel::DEBUG:
@@ -68,13 +68,13 @@ static bool enable_syslog;
 #endif
 
 void
-SetLogThreshold(LogLevel _threshold)
+SetLogThreshold(LogLevel _threshold) noexcept
 {
 	log_threshold = _threshold;
 }
 
 void
-EnableLogTimestamp()
+EnableLogTimestamp() noexcept
 {
 #ifdef HAVE_SYSLOG
 	assert(!enable_syslog);
@@ -84,7 +84,8 @@ EnableLogTimestamp()
 	enable_timestamp = true;
 }
 
-static const char *log_date(void)
+static const char *
+log_date() noexcept
 {
 	static constexpr size_t LOG_DATE_BUF_SIZE = 16;
 	static char buf[LOG_DATE_BUF_SIZE];
@@ -98,7 +99,7 @@ static const char *log_date(void)
  * characters.
  */
 static int
-chomp_length(const char *p)
+chomp_length(const char *p) noexcept
 {
 	size_t length = strlen(p);
 	return StripRight(p, length);
@@ -106,8 +107,9 @@ chomp_length(const char *p)
 
 #ifdef HAVE_SYSLOG
 
+gcc_const
 static int
-ToSysLogLevel(LogLevel log_level)
+ToSysLogLevel(LogLevel log_level) noexcept
 {
 	switch (log_level) {
 	case LogLevel::DEBUG:
@@ -131,7 +133,7 @@ ToSysLogLevel(LogLevel log_level)
 }
 
 static void
-SysLog(const Domain &domain, LogLevel log_level, const char *message)
+SysLog(const Domain &domain, LogLevel log_level, const char *message) noexcept
 {
 	syslog(ToSysLogLevel(log_level), "%s: %.*s",
 	       domain.GetName(),
@@ -139,14 +141,14 @@ SysLog(const Domain &domain, LogLevel log_level, const char *message)
 }
 
 void
-LogInitSysLog()
+LogInitSysLog() noexcept
 {
 	openlog(PACKAGE, 0, LOG_DAEMON);
 	enable_syslog = true;
 }
 
 void
-LogFinishSysLog()
+LogFinishSysLog() noexcept
 {
 	if (enable_syslog)
 		closelog();
@@ -155,7 +157,7 @@ LogFinishSysLog()
 #endif
 
 static void
-FileLog(const Domain &domain, const char *message)
+FileLog(const Domain &domain, const char *message) noexcept
 {
 	fprintf(stderr, "%s%s: %.*s\n",
 		enable_timestamp ? log_date() : "",
@@ -172,7 +174,7 @@ FileLog(const Domain &domain, const char *message)
 #endif /* !ANDROID */
 
 void
-Log(const Domain &domain, LogLevel level, const char *msg)
+Log(const Domain &domain, LogLevel level, const char *msg) noexcept
 {
 #ifdef ANDROID
 	__android_log_print(ToAndroidLogLevel(level), "MPD",
diff --git a/src/LogBackend.hxx b/src/LogBackend.hxx
index 4493fbea4..681511d00 100644
--- a/src/LogBackend.hxx
+++ b/src/LogBackend.hxx
@@ -24,15 +24,15 @@
 #include "LogLevel.hxx"
 
 void
-SetLogThreshold(LogLevel _threshold);
+SetLogThreshold(LogLevel _threshold) noexcept;
 
 void
-EnableLogTimestamp();
+EnableLogTimestamp() noexcept;
 
 void
-LogInitSysLog();
+LogInitSysLog() noexcept;
 
 void
-LogFinishSysLog();
+LogFinishSysLog() noexcept;
 
 #endif /* LOG_H */
diff --git a/src/LogV.hxx b/src/LogV.hxx
index 5f4dad795..bfb51205d 100644
--- a/src/LogV.hxx
+++ b/src/LogV.hxx
@@ -25,6 +25,7 @@
 #include <stdarg.h>
 
 void
-LogFormatV(const Domain &domain, LogLevel level, const char *fmt, va_list ap);
+LogFormatV(const Domain &domain, LogLevel level,
+	   const char *fmt, va_list ap) noexcept;
 
 #endif /* LOG_H */
diff --git a/test/test_translate_song.cxx b/test/test_translate_song.cxx
index a8c83fbb2..3b5df1c45 100644
--- a/test/test_translate_song.cxx
+++ b/test/test_translate_song.cxx
@@ -26,7 +26,7 @@
 #include <stdio.h>
 
 void
-Log(const Domain &domain, gcc_unused LogLevel level, const char *msg)
+Log(const Domain &domain, gcc_unused LogLevel level, const char *msg) noexcept
 {
 	fprintf(stderr, "[%s] %s\n", domain.GetName(), msg);
 }