From 3d7fa22164cdf63ca3f88b8ddd84242fb15c9ba0 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 9 Jan 2018 11:16:55 -0800 Subject: [PATCH] Add __attribute__((__format__)) to fastboot's die(). Also make the macro less likely to collide. Bug: N/A Test: builds Change-Id: I868a0a0002c9c53c1ec0670153df2af5f48fd969 --- base/include/android-base/stringprintf.h | 14 +++++++------- fastboot/fastboot.h | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/base/include/android-base/stringprintf.h b/base/include/android-base/stringprintf.h index cf666abe0..1fd6297fd 100644 --- a/base/include/android-base/stringprintf.h +++ b/base/include/android-base/stringprintf.h @@ -28,27 +28,27 @@ namespace base { // if the mingw version of vsnprintf is used, use `gnu_printf' which allows z // in %zd and PRIu64 (and related) to be recognized by the compile-time // checking. -#define FORMAT_ARCHETYPE __printf__ +#define ANDROID_BASE_FORMAT_ARCHETYPE __printf__ #ifdef __USE_MINGW_ANSI_STDIO #if __USE_MINGW_ANSI_STDIO -#undef FORMAT_ARCHETYPE -#define FORMAT_ARCHETYPE gnu_printf +#undef ANDROID_BASE_FORMAT_ARCHETYPE +#define ANDROID_BASE_FORMAT_ARCHETYPE gnu_printf #endif #endif // Returns a string corresponding to printf-like formatting of the arguments. std::string StringPrintf(const char* fmt, ...) - __attribute__((__format__(FORMAT_ARCHETYPE, 1, 2))); + __attribute__((__format__(ANDROID_BASE_FORMAT_ARCHETYPE, 1, 2))); // Appends a printf-like formatting of the arguments to 'dst'. void StringAppendF(std::string* dst, const char* fmt, ...) - __attribute__((__format__(FORMAT_ARCHETYPE, 2, 3))); + __attribute__((__format__(ANDROID_BASE_FORMAT_ARCHETYPE, 2, 3))); // Appends a printf-like formatting of the arguments to 'dst'. void StringAppendV(std::string* dst, const char* format, va_list ap) - __attribute__((__format__(FORMAT_ARCHETYPE, 2, 0))); + __attribute__((__format__(ANDROID_BASE_FORMAT_ARCHETYPE, 2, 0))); -#undef FORMAT_ARCHETYPE +#undef ANDROID_BASE_FORMAT_ARCHETYPE } // namespace base } // namespace android diff --git a/fastboot/fastboot.h b/fastboot/fastboot.h index e3c60ae16..f4faa213c 100644 --- a/fastboot/fastboot.h +++ b/fastboot/fastboot.h @@ -75,7 +75,22 @@ void fb_set_active(const char *slot); /* util stuff */ double now(); char *mkmsg(const char *fmt, ...); -__attribute__((__noreturn__)) void die(const char *fmt, ...); + +// These printf-like functions are implemented in terms of vsnprintf, so they +// use the same attribute for compile-time format string checking. On Windows, +// if the mingw version of vsnprintf is used, use `gnu_printf' which allows z +// in %zd and PRIu64 (and related) to be recognized by the compile-time +// checking. +#define FASTBOOT_FORMAT_ARCHETYPE __printf__ +#ifdef __USE_MINGW_ANSI_STDIO +#if __USE_MINGW_ANSI_STDIO +#undef FASTBOOT_FORMAT_ARCHETYPE +#define FASTBOOT_FORMAT_ARCHETYPE gnu_printf +#endif +#endif +void die(const char* fmt, ...) __attribute__((__noreturn__)) +__attribute__((__format__(FASTBOOT_FORMAT_ARCHETYPE, 1, 2))); +#undef FASTBOOT_FORMAT_ARCHETYPE /* Current product */ extern char cur_product[FB_RESPONSE_SZ + 1];