From e7d39c929204f631d11e2f87b2f8e972b1abbf6e Mon Sep 17 00:00:00 2001 From: Harald Fernengel Date: Thu, 27 Jun 2013 09:41:46 +0200 Subject: Introduce Q_ATTRIBUTE_FORMAT_PRINTF Removes a lot of copy-paste code for flagging printf style functions. Change-Id: Iecc1e312d1f28b5cbb6b297039f1cdbbc888f843 Reviewed-by: Oswald Buddenhagen Reviewed-by: Thiago Macieira --- src/corelib/global/qglobal.h | 13 ++++++++++++ src/corelib/global/qlogging.h | 49 +++++-------------------------------------- src/corelib/tools/qstring.h | 20 ++---------------- 3 files changed, 20 insertions(+), 62 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 3c3d35e373..9e2dce6d8c 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -462,6 +462,19 @@ typedef qptrdiff qintptr; # define QT_FASTCALL #endif +// enable gcc warnings for printf-style functions +#if defined(Q_CC_GNU) && !defined(__INSURE__) +# if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG) +# define Q_ATTRIBUTE_FORMAT_PRINTF(A, B) \ + __attribute__((format(gnu_printf, (A), (B)))) +# else +# define Q_ATTRIBUTE_FORMAT_PRINTF(A, B) \ + __attribute__((format(printf, (A), (B)))) +# endif +#else +# define Q_ATTRIBUTE_FORMAT_PRINTF(A, B) +#endif + //defines the type for the WNDPROC on windows //the alignment needs to be forced for sse2 to not crash with mingw #if defined(Q_OS_WIN) diff --git a/src/corelib/global/qlogging.h b/src/corelib/global/qlogging.h index 2b798f9ea0..5ae1fb3205 100644 --- a/src/corelib/global/qlogging.h +++ b/src/corelib/global/qlogging.h @@ -92,55 +92,16 @@ public: Q_DECL_CONSTEXPR QMessageLogger(const char *file, int line, const char *function, const char *category) : context(file, line, function, category) {} - void debug(const char *msg, ...) const -#if defined(Q_CC_GNU) && !defined(__INSURE__) -# if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG) - __attribute__ ((format (gnu_printf, 2, 3))) -# else - __attribute__ ((format (printf, 2, 3))) -# endif -#endif - ; - void noDebug(const char *, ...) const -#if defined(Q_CC_GNU) && !defined(__INSURE__) -# if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG) - __attribute__ ((format (gnu_printf, 2, 3))) -# else - __attribute__ ((format (printf, 2, 3))) -# endif -#endif + void debug(const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3); + void noDebug(const char *, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3) {} - void warning(const char *msg, ...) const -#if defined(Q_CC_GNU) && !defined(__INSURE__) -# if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG) - __attribute__ ((format (gnu_printf, 2, 3))) -# else - __attribute__ ((format (printf, 2, 3))) -# endif -#endif - ; - void critical(const char *msg, ...) const -#if defined(Q_CC_GNU) && !defined(__INSURE__) -# if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG) - __attribute__ ((format (gnu_printf, 2, 3))) -# else - __attribute__ ((format (printf, 2, 3))) -# endif -#endif - ; + void warning(const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3); + void critical(const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3); #ifndef Q_CC_MSVC Q_NORETURN #endif - void fatal(const char *msg, ...) const Q_DECL_NOTHROW -#if defined(Q_CC_GNU) && !defined(__INSURE__) -# if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG) - __attribute__ ((format (gnu_printf, 2, 3))) -# else - __attribute__ ((format (printf, 2, 3))) -# endif -#endif - ; + void fatal(const char *msg, ...) const Q_DECL_NOTHROW Q_ATTRIBUTE_FORMAT_PRINTF(2, 3); #ifndef QT_NO_DEBUG_STREAM QDebug debug() const; diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h index 3140af084b..0a0a609728 100644 --- a/src/corelib/tools/qstring.h +++ b/src/corelib/tools/qstring.h @@ -302,24 +302,8 @@ public: const QString &a4, const QString &a5, const QString &a6, const QString &a7, const QString &a8, const QString &a9) const Q_REQUIRED_RESULT; - QString &vsprintf(const char *format, va_list ap) -#if defined(Q_CC_GNU) && !defined(__INSURE__) -# if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG) - __attribute__ ((format (gnu_printf, 2, 0))) -# else - __attribute__ ((format (printf, 2, 0))) -# endif -#endif - ; - QString &sprintf(const char *format, ...) -#if defined(Q_CC_GNU) && !defined(__INSURE__) -# if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG) - __attribute__ ((format (gnu_printf, 2, 3))) -# else - __attribute__ ((format (printf, 2, 3))) -# endif -#endif - ; + QString &vsprintf(const char *format, va_list ap) Q_ATTRIBUTE_FORMAT_PRINTF(2, 0); + QString &sprintf(const char *format, ...) Q_ATTRIBUTE_FORMAT_PRINTF(2, 3); int indexOf(QChar c, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; int indexOf(const QString &s, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; -- cgit v1.2.3