Commit 43b5a4e7 authored by Deomid Ryabkov's avatar Deomid Ryabkov Committed by Cesanta Bot

Add a special attribute to printf-like funcs

Enables extra compile-time checks

CL: none

PUBLISHED_FROM=9f7d658fbda5c721cf40293bf29967bb056d0437
parent 43191db6
...@@ -547,11 +547,7 @@ void cs_log_set_file(FILE *file); ...@@ -547,11 +547,7 @@ void cs_log_set_file(FILE *file);
* Prints log to the current log file, appends "\n" in the end and flushes the * Prints log to the current log file, appends "\n" in the end and flushes the
* stream. * stream.
*/ */
void cs_log_printf(const char *fmt, ...) void cs_log_printf(const char *fmt, ...) PRINTF_LIKE(1, 2);
#ifdef __GNUC__
__attribute__((format(printf, 1, 2)))
#endif
;
/* /*
* Format and print message `x` with the given level `l`. Example: * Format and print message `x` with the given level `l`. Example:
......
...@@ -128,8 +128,18 @@ ...@@ -128,8 +128,18 @@
/* Common stuff */ /* Common stuff */
#if !defined(PRINTF_LIKE)
#if defined(__GNUC__) || defined(__clang__) || defined(__TI_COMPILER_VERSION__)
#define PRINTF_LIKE(f, a) __attribute__((format(printf, f, a)))
#else
#define PRINTF_LIKE(f, a)
#endif
#endif
#if !defined(WEAK) #if !defined(WEAK)
#if (defined(__GNUC__) || defined(__TI_COMPILER_VERSION__)) && !defined(_WIN32) #if (defined(__GNUC__) || defined(__clang__) || \
defined(__TI_COMPILER_VERSION__)) && \
!defined(_WIN32)
#define WEAK __attribute__((weak)) #define WEAK __attribute__((weak))
#else #else
#define WEAK #define WEAK
...@@ -2397,7 +2407,8 @@ size_t c_strnlen(const char *s, size_t maxlen); ...@@ -2397,7 +2407,8 @@ size_t c_strnlen(const char *s, size_t maxlen);
/* /*
* Equivalent of standard `snprintf()`. * Equivalent of standard `snprintf()`.
*/ */
int c_snprintf(char *buf, size_t buf_size, const char *format, ...); int c_snprintf(char *buf, size_t buf_size, const char *format, ...)
PRINTF_LIKE(3, 4);
/* /*
* Equivalent of standard `vsnprintf()`. * Equivalent of standard `vsnprintf()`.
...@@ -2465,7 +2476,8 @@ int mg_casecmp(const char *s1, const char *s2); ...@@ -2465,7 +2476,8 @@ int mg_casecmp(const char *s1, const char *s2);
* *
* The purpose of this is to avoid malloc-ing if generated strings are small. * The purpose of this is to avoid malloc-ing if generated strings are small.
*/ */
int mg_asprintf(char **buf, size_t size, const char *fmt, ...); int mg_asprintf(char **buf, size_t size, const char *fmt, ...)
PRINTF_LIKE(3, 4);
/* Same as mg_asprintf, but takes varargs list. */ /* Same as mg_asprintf, but takes varargs list. */
int mg_avprintf(char **buf, size_t size, const char *fmt, va_list ap); int mg_avprintf(char **buf, size_t size, const char *fmt, va_list ap);
......
...@@ -115,11 +115,7 @@ void cs_log_set_file(FILE *file); ...@@ -115,11 +115,7 @@ void cs_log_set_file(FILE *file);
* Prints log to the current log file, appends "\n" in the end and flushes the * Prints log to the current log file, appends "\n" in the end and flushes the
* stream. * stream.
*/ */
void cs_log_printf(const char *fmt, ...) void cs_log_printf(const char *fmt, ...) PRINTF_LIKE(1, 2);
#ifdef __GNUC__
__attribute__((format(printf, 1, 2)))
#endif
;
/* /*
* Format and print message `x` with the given level `l`. Example: * Format and print message `x` with the given level `l`. Example:
......
...@@ -92,8 +92,18 @@ ...@@ -92,8 +92,18 @@
/* Common stuff */ /* Common stuff */
#if !defined(PRINTF_LIKE)
#if defined(__GNUC__) || defined(__clang__) || defined(__TI_COMPILER_VERSION__)
#define PRINTF_LIKE(f, a) __attribute__((format(printf, f, a)))
#else
#define PRINTF_LIKE(f, a)
#endif
#endif
#if !defined(WEAK) #if !defined(WEAK)
#if (defined(__GNUC__) || defined(__TI_COMPILER_VERSION__)) && !defined(_WIN32) #if (defined(__GNUC__) || defined(__clang__) || \
defined(__TI_COMPILER_VERSION__)) && \
!defined(_WIN32)
#define WEAK __attribute__((weak)) #define WEAK __attribute__((weak))
#else #else
#define WEAK #define WEAK
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment