diff --git a/common/msg.h b/common/msg.h index b0cec7b88a..a32dffaa33 100644 --- a/common/msg.h +++ b/common/msg.h @@ -51,7 +51,8 @@ struct mp_log *mp_log_new(void *talloc_ctx, struct mp_log *parent, void mp_msg(struct mp_log *log, int lev, const char *format, ...) PRINTF_ATTRIBUTE(3, 4); -void mp_msg_va(struct mp_log *log, int lev, const char *format, va_list va); +void mp_msg_va(struct mp_log *log, int lev, const char *format, va_list va) + PRINTF_ATTRIBUTE(3, 0); int mp_msg_level(struct mp_log *log); diff --git a/misc/bstr.h b/misc/bstr.h index aaae7d695c..5cc124ec36 100644 --- a/misc/bstr.h +++ b/misc/bstr.h @@ -79,7 +79,7 @@ struct bstr bstr_splice(struct bstr str, int start, int end); long long bstrtoll(struct bstr str, struct bstr *rest, int base); double bstrtod(struct bstr str, struct bstr *rest); void bstr_lower(struct bstr str); -int bstr_sscanf(struct bstr str, const char *format, ...); +int bstr_sscanf(struct bstr str, const char *format, ...) SCANF_ATTRIBUTE(2, 3); // Decode a string containing hexadecimal data. All whitespace will be silently // ignored. When successful, this allocates a new array to store the output. diff --git a/osdep/compiler.h b/osdep/compiler.h index a4d7bf3753..55d76116a1 100644 --- a/osdep/compiler.h +++ b/osdep/compiler.h @@ -5,11 +5,13 @@ #if defined(__GNUC__) || defined(__clang__) #define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format(printf, a1, a2))) +#define SCANF_ATTRIBUTE(a1, a2) __attribute__ ((format(scanf, a1, a2))) #define MP_NORETURN __attribute__((noreturn)) #define MP_FALLTHROUGH __attribute__((fallthrough)) #define MP_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) #else #define PRINTF_ATTRIBUTE(a1, a2) +#define SCANF_ATTRIBUTE(a1, a2) #define MP_NORETURN #define MP_FALLTHROUGH do {} while (0) #define MP_WARN_UNUSED_RESULT diff --git a/osdep/io.c b/osdep/io.c index 1e8171de59..a8210dc89f 100644 --- a/osdep/io.c +++ b/osdep/io.c @@ -332,12 +332,14 @@ size_t mp_fwrite(const void *restrict buffer, size_t size, size_t count, } #if HAVE_UWP +PRINTF_ATTRIBUTE(2, 0) static int mp_vfprintf(FILE *stream, const char *format, va_list args) { return vfprintf(stream, format, args); } #else +PRINTF_ATTRIBUTE(2, 0) static int mp_vfprintf(FILE *stream, const char *format, va_list args) { HANDLE wstream = get_handle(stream); diff --git a/osdep/terminal-dummy.c b/osdep/terminal-dummy.c index 8ae6c64827..a2cfe741a8 100644 --- a/osdep/terminal-dummy.c +++ b/osdep/terminal-dummy.c @@ -27,6 +27,7 @@ void terminal_get_size2(int *rows, int *cols, int *px_width, int *px_height) { } +PRINTF_ATTRIBUTE(2, 0) int mp_console_vfprintf(void *wstream, const char *format, va_list args) { return 0; diff --git a/osdep/terminal.h b/osdep/terminal.h index 4174cf2d3b..83a5423c5a 100644 --- a/osdep/terminal.h +++ b/osdep/terminal.h @@ -62,7 +62,8 @@ void terminal_get_size2(int *rows, int *cols, int *px_width, int *px_height); void terminal_set_mouse_input(bool enable); // Windows only. -int mp_console_vfprintf(void *wstream, const char *format, va_list args); +int mp_console_vfprintf(void *wstream, const char *format, va_list args) + PRINTF_ATTRIBUTE(2, 0); int mp_console_write(void *wstream, bstr str); bool mp_check_console(void *handle); diff --git a/player/osd.c b/player/osd.c index f218f47ce9..6381b70d6e 100644 --- a/player/osd.c +++ b/player/osd.c @@ -296,6 +296,7 @@ static void term_osd_print_status_lazy(struct MPContext *mpctx) talloc_free(line); } +PRINTF_ATTRIBUTE(4, 0) static bool set_osd_msg_va(struct MPContext *mpctx, int level, int time, const char *fmt, va_list ap) { diff --git a/sub/ass_mp.c b/sub/ass_mp.c index 3e9f83313f..579fd7788d 100644 --- a/sub/ass_mp.c +++ b/sub/ass_mp.c @@ -121,6 +121,7 @@ static const int map_ass_level[] = { MSGL_TRACE, // 7 "verbose DEBUG" }; +PRINTF_ATTRIBUTE(2, 0) static void message_callback(int level, const char *format, va_list va, void *ctx) { struct mp_log *log = ctx; diff --git a/ta/ta_utils.c b/ta/ta_utils.c index 294ad8d7f2..698a9b28eb 100644 --- a/ta/ta_utils.c +++ b/ta/ta_utils.c @@ -168,6 +168,7 @@ bool ta_strndup_append_buffer(char **str, const char *a, size_t n) return strndup_append_at(str, size, a, n); } +TA_PRF(3, 0) static bool ta_vasprintf_append_at(char **str, size_t at, const char *fmt, va_list ap) {