Merge branch 'ab/attribute-format'

Many "printf"-like helper functions we have have been annotated
with __attribute__() to catch placeholder/parameter mismatches.

* ab/attribute-format:
  advice.h: add missing __attribute__((format)) & fix usage
  *.h: add a few missing __attribute__((format))
  *.c static functions: add missing __attribute__((format))
  sequencer.c: move static function to avoid forward decl
  *.c static functions: don't forward-declare __attribute__
This commit is contained in:
Junio C Hamano 2021-07-28 13:17:59 -07:00
commit dd6d3c90ee
23 changed files with 47 additions and 29 deletions

View File

@ -280,6 +280,7 @@ static void add_p_state_clear(struct add_p_state *s)
clear_add_i_state(&s->s); clear_add_i_state(&s->s);
} }
__attribute__((format (printf, 2, 3)))
static void err(struct add_p_state *s, const char *fmt, ...) static void err(struct add_p_state *s, const char *fmt, ...)
{ {
va_list args; va_list args;

View File

@ -90,6 +90,7 @@ int advice_enabled(enum advice_type type);
/** /**
* Checks the visibility of the advice before printing. * Checks the visibility of the advice before printing.
*/ */
__attribute__((format (printf, 2, 3)))
void advise_if_enabled(enum advice_type type, const char *advice, ...); void advise_if_enabled(enum advice_type type, const char *advice, ...);
int error_resolve_conflict(const char *me); int error_resolve_conflict(const char *me);

View File

@ -210,6 +210,7 @@ static void write_state_bool(const struct am_state *state,
* If state->quiet is false, calls fprintf(fp, fmt, ...), and appends a newline * If state->quiet is false, calls fprintf(fp, fmt, ...), and appends a newline
* at the end. * at the end.
*/ */
__attribute__((format (printf, 3, 4)))
static void say(const struct am_state *state, FILE *fp, const char *fmt, ...) static void say(const struct am_state *state, FILE *fp, const char *fmt, ...)
{ {
va_list ap; va_list ap;

View File

@ -117,6 +117,7 @@ static int write_in_file(const char *path, const char *mode, const char *format,
return fclose(fp); return fclose(fp);
} }
__attribute__((format (printf, 2, 3)))
static int write_to_file(const char *path, const char *format, ...) static int write_to_file(const char *path, const char *format, ...)
{ {
int res; int res;
@ -129,6 +130,7 @@ static int write_to_file(const char *path, const char *format, ...)
return res; return res;
} }
__attribute__((format (printf, 2, 3)))
static int append_to_file(const char *path, const char *format, ...) static int append_to_file(const char *path, const char *format, ...)
{ {
int res; int res;

View File

@ -369,9 +369,7 @@ static void parse_pack_header(void)
use(sizeof(struct pack_header)); use(sizeof(struct pack_header));
} }
static NORETURN void bad_object(off_t offset, const char *format, __attribute__((format (printf, 2, 3)))
...) __attribute__((format (printf, 2, 3)));
static NORETURN void bad_object(off_t offset, const char *format, ...) static NORETURN void bad_object(off_t offset, const char *format, ...)
{ {
va_list params; va_list params;

View File

@ -425,9 +425,6 @@ static int proc_receive_ref_matches(struct command *cmd)
return 0; return 0;
} }
static void rp_error(const char *err, ...) __attribute__((format (printf, 1, 2)));
static void rp_warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
static void report_message(const char *prefix, const char *err, va_list params) static void report_message(const char *prefix, const char *err, va_list params)
{ {
int sz; int sz;
@ -445,6 +442,7 @@ static void report_message(const char *prefix, const char *err, va_list params)
xwrite(2, msg, sz); xwrite(2, msg, sz);
} }
__attribute__((format (printf, 1, 2)))
static void rp_warning(const char *err, ...) static void rp_warning(const char *err, ...)
{ {
va_list params; va_list params;
@ -453,6 +451,7 @@ static void rp_warning(const char *err, ...)
va_end(params); va_end(params);
} }
__attribute__((format (printf, 1, 2)))
static void rp_error(const char *err, ...) static void rp_error(const char *err, ...)
{ {
va_list params; va_list params;

View File

@ -1385,6 +1385,7 @@ enum get_oid_result {
}; };
int repo_get_oid(struct repository *r, const char *str, struct object_id *oid); int repo_get_oid(struct repository *r, const char *str, struct object_id *oid);
__attribute__((format (printf, 2, 3)))
int get_oidf(struct object_id *oid, const char *fmt, ...); int get_oidf(struct object_id *oid, const char *fmt, ...);
int repo_get_oid_commit(struct repository *r, const char *str, struct object_id *oid); int repo_get_oid_commit(struct repository *r, const char *str, struct object_id *oid);
int repo_get_oid_committish(struct repository *r, const char *str, struct object_id *oid); int repo_get_oid_committish(struct repository *r, const char *str, struct object_id *oid);

View File

@ -2408,6 +2408,7 @@ cleanup:
#define VERIFY_COMMIT_GRAPH_ERROR_HASH 2 #define VERIFY_COMMIT_GRAPH_ERROR_HASH 2
static int verify_commit_graph_error; static int verify_commit_graph_error;
__attribute__((format (printf, 1, 2)))
static void graph_report(const char *fmt, ...) static void graph_report(const char *fmt, ...)
{ {
va_list ap; va_list ap;

View File

@ -10,6 +10,7 @@ static char *username;
static char *password; static char *password;
static UInt16 port; static UInt16 port;
__attribute__((format (printf, 1, 2)))
static void die(const char *err, ...) static void die(const char *err, ...)
{ {
char msg[4096]; char msg[4096];

View File

@ -11,6 +11,7 @@
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
__attribute__((format (printf, 1, 2)))
static void die(const char *err, ...) static void die(const char *err, ...)
{ {
char msg[4096]; char msg[4096];

View File

@ -66,6 +66,7 @@ const char *get_preferred_languages(void)
} }
#ifndef NO_GETTEXT #ifndef NO_GETTEXT
__attribute__((format (printf, 1, 2)))
static int test_vsnprintf(const char *fmt, ...) static int test_vsnprintf(const char *fmt, ...)
{ {
char buf[26]; char buf[26];

View File

@ -451,6 +451,7 @@ static int buffer_gets(struct imap_buffer *b, char **s)
/* not reached */ /* not reached */
} }
__attribute__((format (printf, 1, 2)))
static void imap_info(const char *msg, ...) static void imap_info(const char *msg, ...)
{ {
va_list va; va_list va;
@ -463,6 +464,7 @@ static void imap_info(const char *msg, ...)
} }
} }
__attribute__((format (printf, 1, 2)))
static void imap_warn(const char *msg, ...) static void imap_warn(const char *msg, ...)
{ {
va_list va; va_list va;
@ -504,6 +506,7 @@ static char *next_arg(char **s)
return ret; return ret;
} }
__attribute__((format (printf, 3, 4)))
static int nfsnprintf(char *buf, int blen, const char *fmt, ...) static int nfsnprintf(char *buf, int blen, const char *fmt, ...)
{ {
int ret; int ret;

View File

@ -8,6 +8,7 @@
#define debug_mm(...) fprintf(stderr, __VA_ARGS__) #define debug_mm(...) fprintf(stderr, __VA_ARGS__)
#define debug_str(X) ((X) ? (X) : "(none)") #define debug_str(X) ((X) ? (X) : "(none)")
#else #else
__attribute__((format (printf, 1, 2)))
static inline void debug_mm(const char *format, ...) {} static inline void debug_mm(const char *format, ...) {}
static inline const char *debug_str(const char *s) { return s; } static inline const char *debug_str(const char *s) { return s; }
#endif #endif

View File

@ -530,6 +530,7 @@ static void clear_or_reinit_internal_opts(struct merge_options_internal *opti,
renames->callback_data_nr = renames->callback_data_alloc = 0; renames->callback_data_nr = renames->callback_data_alloc = 0;
} }
__attribute__((format (printf, 2, 3)))
static int err(struct merge_options *opt, const char *err, ...) static int err(struct merge_options *opt, const char *err, ...)
{ {
va_list params; va_list params;

View File

@ -167,6 +167,7 @@ static void flush_output(struct merge_options *opt)
} }
} }
__attribute__((format (printf, 2, 3)))
static int err(struct merge_options *opt, const char *err, ...) static int err(struct merge_options *opt, const char *err, ...)
{ {
va_list params; va_list params;

1
midx.c
View File

@ -1172,6 +1172,7 @@ void clear_midx_file(struct repository *r)
static int verify_midx_error; static int verify_midx_error;
__attribute__((format (printf, 1, 2)))
static void midx_report(const char *fmt, ...) static void midx_report(const char *fmt, ...)
{ {
va_list ap; va_list ap;

View File

@ -31,6 +31,7 @@ struct strbuf;
void sq_quote_buf(struct strbuf *, const char *src); void sq_quote_buf(struct strbuf *, const char *src);
void sq_quote_argv(struct strbuf *, const char **argv); void sq_quote_argv(struct strbuf *, const char **argv);
__attribute__((format (printf, 2, 3)))
void sq_quotef(struct strbuf *, const char *fmt, ...); void sq_quotef(struct strbuf *, const char *fmt, ...);
/* /*

View File

@ -213,6 +213,7 @@ static int used_atom_cnt, need_tagged, need_symref;
* Expand string, append it to strbuf *sb, then return error code ret. * Expand string, append it to strbuf *sb, then return error code ret.
* Allow to save few lines of code. * Allow to save few lines of code.
*/ */
__attribute__((format (printf, 3, 4)))
static int strbuf_addf_ret(struct strbuf *sb, int ret, const char *fmt, ...) static int strbuf_addf_ret(struct strbuf *sb, int ret, const char *fmt, ...)
{ {
va_list ap; va_list ap;

View File

@ -3521,6 +3521,7 @@ static int do_exec(struct repository *r, const char *command_line)
return status; return status;
} }
__attribute__((format (printf, 2, 3)))
static int safe_append(const char *filename, const char *fmt, ...) static int safe_append(const char *filename, const char *fmt, ...)
{ {
va_list ap; va_list ap;
@ -3598,8 +3599,27 @@ static int do_label(struct repository *r, const char *name, int len)
return ret; return ret;
} }
__attribute__((format (printf, 3, 4)))
static const char *reflog_message(struct replay_opts *opts, static const char *reflog_message(struct replay_opts *opts,
const char *sub_action, const char *fmt, ...); const char *sub_action, const char *fmt, ...)
{
va_list ap;
static struct strbuf buf = STRBUF_INIT;
char *reflog_action = getenv(GIT_REFLOG_ACTION);
va_start(ap, fmt);
strbuf_reset(&buf);
strbuf_addstr(&buf, reflog_action ? reflog_action : action_name(opts));
if (sub_action)
strbuf_addf(&buf, " (%s)", sub_action);
if (fmt) {
strbuf_addstr(&buf, ": ");
strbuf_vaddf(&buf, fmt, ap);
}
va_end(ap);
return buf.buf;
}
static int do_reset(struct repository *r, static int do_reset(struct repository *r,
const char *name, int len, const char *name, int len,
@ -4178,27 +4198,6 @@ int apply_autostash_oid(const char *stash_oid)
return apply_save_autostash_oid(stash_oid, 1); return apply_save_autostash_oid(stash_oid, 1);
} }
static const char *reflog_message(struct replay_opts *opts,
const char *sub_action, const char *fmt, ...)
{
va_list ap;
static struct strbuf buf = STRBUF_INIT;
char *reflog_action = getenv(GIT_REFLOG_ACTION);
va_start(ap, fmt);
strbuf_reset(&buf);
strbuf_addstr(&buf, reflog_action ? reflog_action : action_name(opts));
if (sub_action)
strbuf_addf(&buf, " (%s)", sub_action);
if (fmt) {
strbuf_addstr(&buf, ": ");
strbuf_vaddf(&buf, fmt, ap);
}
va_end(ap);
return buf.buf;
}
static int run_git_checkout(struct repository *r, struct replay_opts *opts, static int run_git_checkout(struct repository *r, struct replay_opts *opts,
const char *commit, const char *action) const char *commit, const char *action)
{ {

View File

@ -27,6 +27,7 @@ static int uic_is_stale(const struct update_info_ctx *uic)
return uic->old_fp == NULL; return uic->old_fp == NULL;
} }
__attribute__((format (printf, 2, 3)))
static int uic_printf(struct update_info_ctx *uic, const char *fmt, ...) static int uic_printf(struct update_info_ctx *uic, const char *fmt, ...)
{ {
va_list ap; va_list ap;

View File

@ -263,6 +263,7 @@ static inline void strbuf_insertstr(struct strbuf *sb, size_t pos,
void strbuf_vinsertf(struct strbuf *sb, size_t pos, const char *fmt, void strbuf_vinsertf(struct strbuf *sb, size_t pos, const char *fmt,
va_list ap); va_list ap);
__attribute__((format (printf, 3, 4)))
void strbuf_insertf(struct strbuf *sb, size_t pos, const char *fmt, ...); void strbuf_insertf(struct strbuf *sb, size_t pos, const char *fmt, ...);
/** /**

View File

@ -16,7 +16,7 @@ int cmd__advise_if_enabled(int argc, const char **argv)
* selected here and in t0018 where this command is being * selected here and in t0018 where this command is being
* executed. * executed.
*/ */
advise_if_enabled(ADVICE_NESTED_TAG, argv[1]); advise_if_enabled(ADVICE_NESTED_TAG, "%s", argv[1]);
return 0; return 0;
} }

View File

@ -265,6 +265,7 @@ const char *worktree_prune_reason(struct worktree *wt, timestamp_t expire)
} }
/* convenient wrapper to deal with NULL strbuf */ /* convenient wrapper to deal with NULL strbuf */
__attribute__((format (printf, 2, 3)))
static void strbuf_addf_gently(struct strbuf *buf, const char *fmt, ...) static void strbuf_addf_gently(struct strbuf *buf, const char *fmt, ...)
{ {
va_list params; va_list params;