From 814d631c5541c00c4a286f1c94b8b0da1c10e5c1 Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Wed, 12 Sep 2018 12:02:22 +0300 Subject: [PATCH] Add format checking to Stream methods --- platform/Stream.h | 9 +++++---- platform/mbed_toolchain.h | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/platform/Stream.h b/platform/Stream.h index 7f09916a36..bd705c4966 100644 --- a/platform/Stream.h +++ b/platform/Stream.h @@ -20,6 +20,7 @@ #include "platform/FileLike.h" #include "platform/FileHandle.h" #include "platform/NonCopyable.h" +#include "mbed_toolchain.h" #include #include @@ -47,10 +48,10 @@ public: int puts(const char *s); int getc(); char *gets(char *s, int size); - int printf(const char *format, ...); - int scanf(const char *format, ...); - int vprintf(const char *format, std::va_list args); - int vscanf(const char *format, std::va_list args); + int printf(const char *format, ...) MBED_PRINTF_METHOD(1, 2); + int scanf(const char *format, ...) MBED_SCANF_METHOD(1, 2); + int vprintf(const char *format, std::va_list args) MBED_PRINTF_METHOD(1, 0); + int vscanf(const char *format, std::va_list args) MBED_SCANF_METHOD(1, 0); operator std::FILE *() { diff --git a/platform/mbed_toolchain.h b/platform/mbed_toolchain.h index 99e1cc1178..6263557d26 100644 --- a/platform/mbed_toolchain.h +++ b/platform/mbed_toolchain.h @@ -356,7 +356,7 @@ #ifndef MBED_PRINTF_METHOD #if defined(__GNUC__) || defined(__CC_ARM) -#define MBED_PRINTF_METHOD(format_idx, first_param_idx) __attribute__ ((__format__(__printf__, format_idx+1, first_param_idx+1))) +#define MBED_PRINTF_METHOD(format_idx, first_param_idx) __attribute__ ((__format__(__printf__, format_idx+1, first_param_idx == 0 ? 0 : first_param_idx+1))) #else #define MBED_PRINTF_METHOD(format_idx, first_param_idx) #endif @@ -372,7 +372,7 @@ #ifndef MBED_SCANF_METHOD #if defined(__GNUC__) || defined(__CC_ARM) -#define MBED_SCANF_METHOD(format_idx, first_param_idx) __attribute__ ((__format__(__scanf__, format_idx+1, first_param_idx+1))) +#define MBED_SCANF_METHOD(format_idx, first_param_idx) __attribute__ ((__format__(__scanf__, format_idx+1, first_param_idx == 0 ? 0 : first_param_idx+1))) #else #define MBED_SCANF_METHOD(format_idx, first_param_idx) #endif