keymaster:log: Add format checking attributes.
Bug: 279488041
Test: build.py qemu-generic-arm32-test-debug
Test: build.py qemu-generic-arm64-test-debug
Change-Id: I7ee2808125084c793aeb31c6e659a2be56e28e5b
diff --git a/include/keymaster/logger.h b/include/keymaster/logger.h
index a9b005b..51ee23e 100644
--- a/include/keymaster/logger.h
+++ b/include/keymaster/logger.h
@@ -37,12 +37,13 @@
virtual int log_msg(LogLevel level, const char* fmt, va_list args) const = 0;
static int Log(LogLevel level, const char* fmt, va_list args);
- static int Log(LogLevel level, const char* fmt, ...);
- static int Debug(const char* fmt, ...);
- static int Info(const char* fmt, ...);
- static int Warning(const char* fmt, ...);
- static int Error(const char* fmt, ...);
- static int Severe(const char* fmt, ...);
+
+ __attribute__((format(printf, 2, 3))) static int Log(LogLevel level, const char* fmt, ...);
+ __attribute__((format(printf, 1, 2))) static int Debug(const char* fmt, ...);
+ __attribute__((format(printf, 1, 2))) static int Info(const char* fmt, ...);
+ __attribute__((format(printf, 1, 2))) static int Warning(const char* fmt, ...);
+ __attribute__((format(printf, 1, 2))) static int Error(const char* fmt, ...);
+ __attribute__((format(printf, 1, 2))) static int Severe(const char* fmt, ...);
protected:
static void set_instance(Logger* logger) { instance_ = logger; }
@@ -59,11 +60,11 @@
#define __KM_STRINGIFY(x) __KM_STR(x)
#define __KM_FILE_LINE __FILE__ ", Line " __KM_STRINGIFY(__LINE__) ": "
-#define LOG_D(fmt, ...) Logger::Debug(__KM_FILE_LINE fmt, __VA_ARGS__)
-#define LOG_I(fmt, ...) Logger::Info(__KM_FILE_LINE fmt, __VA_ARGS__)
-#define LOG_W(fmt, ...) Logger::Warning(__KM_FILE_LINE fmt, __VA_ARGS__)
-#define LOG_E(fmt, ...) Logger::Error(__KM_FILE_LINE fmt, __VA_ARGS__)
-#define LOG_S(fmt, ...) Logger::Severe(__KM_FILE_LINE fmt, __VA_ARGS__)
+#define LOG_D(fmt, ...) Logger::Debug(__KM_FILE_LINE fmt, ##__VA_ARGS__)
+#define LOG_I(fmt, ...) Logger::Info(__KM_FILE_LINE fmt, ##__VA_ARGS__)
+#define LOG_W(fmt, ...) Logger::Warning(__KM_FILE_LINE fmt, ##__VA_ARGS__)
+#define LOG_E(fmt, ...) Logger::Error(__KM_FILE_LINE fmt, ##__VA_ARGS__)
+#define LOG_S(fmt, ...) Logger::Severe(__KM_FILE_LINE fmt, ##__VA_ARGS__)
} // namespace keymaster