1
0
mirror of https://github.com/MariaDB/server.git synced 2025-04-18 21:44:20 +03:00

Tag the sql/log.h family with ATTRIBUTE_FORMAT

Let GCC `-Wformat` check formats sent to
these users of `my_vsnprintf_ex` users (heh)
This commit is contained in:
ParadoxV5 2025-01-12 22:03:23 -07:00 committed by Sergei Golubchik
parent 21dfef474c
commit 2392bd02d8
16 changed files with 36 additions and 24 deletions

View File

@ -1213,6 +1213,7 @@ public:
const char *user_host, size_t user_host_len, ulonglong query_utime,
ulonglong lock_utime, bool is_command,
const char *sql_text, size_t sql_text_len)= 0;
ATTRIBUTE_FORMAT(printf, 3, 0)
virtual bool log_error(enum loglevel level, const char *format,
va_list args)= 0;
virtual bool log_general(THD *thd, my_hrtime_t event_time, const char *user_host, size_t user_host_len, my_thread_id thread_id,
@ -1240,6 +1241,7 @@ public:
const char *user_host, size_t user_host_len, ulonglong query_utime,
ulonglong lock_utime, bool is_command,
const char *sql_text, size_t sql_text_len) override;
ATTRIBUTE_FORMAT(printf, 3, 0)
bool log_error(enum loglevel level, const char *format,
va_list args) override;
bool log_general(THD *thd, my_hrtime_t event_time, const char *user_host, size_t user_host_len, my_thread_id thread_id,
@ -1270,6 +1272,7 @@ public:
const char *user_host, size_t user_host_len, ulonglong query_utime,
ulonglong lock_utime, bool is_command,
const char *sql_text, size_t sql_text_len) override;
ATTRIBUTE_FORMAT(printf, 3, 0)
bool log_error(enum loglevel level, const char *format,
va_list args) override;
bool log_general(THD *thd, my_hrtime_t event_time, const char *user_host, size_t user_host_len, my_thread_id thread_id,
@ -1326,10 +1329,12 @@ public:
void cleanup_base();
/* Free memory. Nothing could be logged after this function is called */
void cleanup_end();
ATTRIBUTE_FORMAT(printf, 3, 0) // 1st arg is the implicit `this`
bool error_log_print(enum loglevel level, const char *format,
va_list args);
bool slow_log_print(THD *thd, const char *query, size_t query_length,
ulonglong current_utime);
ATTRIBUTE_FORMAT(printf, 4, 0)
bool general_log_print(THD *thd,enum enum_server_command command,
const char *format, va_list args);
bool general_log_write(THD *thd, enum enum_server_command command,
@ -1367,22 +1372,26 @@ enum enum_binlog_format {
int query_error_code(THD *thd, bool not_killed);
uint purge_log_get_error_code(int res);
int vprint_msg_to_log(enum loglevel level, const char *format, va_list args);
void sql_print_error(const char *format, ...);
void sql_print_warning(const char *format, ...);
void sql_print_information(const char *format, ...);
void sql_print_information_v(const char *format, va_list ap);
typedef void (*sql_print_message_func)(const char *format, ...);
int vprint_msg_to_log(enum loglevel level, const char *format, va_list args)
ATTRIBUTE_FORMAT(printf, 2, 0);
void sql_print_error(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2);
void sql_print_warning(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2);
void sql_print_information(const char *format, ...)
ATTRIBUTE_FORMAT(printf, 1, 2);
void sql_print_information_v(const char *format, va_list ap)
ATTRIBUTE_FORMAT(printf, 1, 0);
typedef void (*sql_print_message_func)(const char *format, ...)
ATTRIBUTE_FORMAT_FPTR(printf, 1, 2);
extern sql_print_message_func sql_print_message_handlers[];
int error_log_print(enum loglevel level, const char *format,
va_list args);
va_list args) ATTRIBUTE_FORMAT(printf, 2, 0);
bool slow_log_print(THD *thd, const char *query, uint query_length,
ulonglong current_utime);
bool general_log_print(THD *thd, enum enum_server_command command,
const char *format,...);
const char *format,...) ATTRIBUTE_FORMAT(printf, 3, 4);
bool general_log_write(THD *thd, enum enum_server_command command,
const char *query, size_t query_length);

View File

@ -9252,7 +9252,7 @@ static int test_if_case_insensitive(const char *dir_name)
buff, 0666, O_RDWR, MYF(0))) < 0)
{
if (!opt_abort)
sql_print_warning("Can't create test file '%s' (Errcode: %M)", buff, my_errno);
sql_print_warning("Can't create test file '%s' (Errcode: %iE)", buff, my_errno);
DBUG_RETURN(-1);
}
mysql_file_close(file, MYF(0));

View File

@ -1522,7 +1522,7 @@ bool Master_info_index::remove_master_info(Master_info *mi, bool clear_log_files
my_close(index_file_nr,MYF(0));
sql_print_error("Create of Master Info Index file '%s' failed with "
"error: %M",
"error: %iE",
index_file_name, error);
DBUG_RETURN(TRUE);
}

View File

@ -247,7 +247,7 @@ a file name for --relay-log-index option", opt_relaylog_index_name);
{
mysql_mutex_unlock(log_lock);
mysql_mutex_unlock(&data_lock);
sql_print_error("Failed when trying to open logs for '%s' in Relay_log_info::init(). Error: %M", ln, my_errno);
sql_print_error("Failed when trying to open logs for '%s' in Relay_log_info::init(). Error: %iE", ln, my_errno);
DBUG_RETURN(1);
}
mysql_mutex_unlock(log_lock);

View File

@ -245,7 +245,7 @@ void Ack_receiver::run()
if (listener.got_error())
{
sql_print_error("Got error %M starting ack receiver thread",
sql_print_error("Got error %iE starting ack receiver thread",
listener.got_error());
return;
}

View File

@ -148,7 +148,7 @@ void start_handle_manager()
if ((err= mysql_thread_create(key_thread_handle_manager, &hThread,
&connection_attrib, handle_manager, 0)))
{
sql_print_warning("Can't create handle_manager thread (errno: %M)", err);
sql_print_warning("Can't create handle_manager thread (errno: %iE)", err);
DBUG_VOID_RETURN;
}

View File

@ -4108,7 +4108,7 @@ bool verify_data_with_partition(TABLE *table, TABLE *part_table,
if (table->in_use->lex->without_validation)
{
sql_print_warning("Table %`s.%`s was altered WITHOUT VALIDATION: "
sql_print_warning("Table %sQ.%sQ was altered WITHOUT VALIDATION: "
"the table might be corrupted",
part_table->s->db.str, part_table->s->table_name.str);
DBUG_RETURN(false);

View File

@ -932,7 +932,7 @@ int mariadb_fix_view(THD *thd, TABLE_LIST *view, bool wrong_checksum,
view->db.str, view->table_name.str);
DBUG_RETURN(HA_ADMIN_INTERNAL_ERROR);
}
sql_print_information("View %`s.%`s: the version is set to %llu%s%s",
sql_print_information("View %sQ.%sQ: the version is set to %llu%s%s",
view->db.str, view->table_name.str,
view->mariadb_version,
(wrong_checksum ? ", checksum corrected" : ""),

View File

@ -10747,12 +10747,12 @@ void TR_table::warn_schema_incorrect(const char *reason)
{
if (MYSQL_VERSION_ID == table->s->mysql_version)
{
sql_print_error("%`s.%`s schema is incorrect: %s.",
sql_print_error("%sQ.%sQ schema is incorrect: %s.",
db.str, table_name.str, reason);
}
else
{
sql_print_error("%`s.%`s schema is incorrect: %s. Created with MariaDB %d, "
sql_print_error("%sQ.%sQ schema is incorrect: %s. Created with MariaDB %d, "
"now running %d.",
db.str, table_name.str, reason, MYSQL_VERSION_ID,
static_cast<int>(table->s->mysql_version));
@ -10763,7 +10763,7 @@ bool TR_table::check(bool error)
{
if (error)
{
sql_print_warning("%`s.%`s does not exist (open failed).", db.str,
sql_print_warning("%sQ.%sQ does not exist (open failed).", db.str,
table_name.str);
return true;
}

View File

@ -577,6 +577,7 @@ class Table_check_intact
{
protected:
bool has_keys;
ATTRIBUTE_FORMAT(printf, 3, 4) // 1st arg is the implicit `this`
virtual void report_error(uint code, const char *fmt, ...)= 0;
public:
@ -594,6 +595,7 @@ public:
class Table_check_intact_log_error : public Table_check_intact
{
protected:
ATTRIBUTE_FORMAT(printf, 3, 4)
void report_error(uint, const char *fmt, ...) override;
public:
Table_check_intact_log_error() : Table_check_intact(true) {}

View File

@ -54,7 +54,7 @@ extern "C" {
/* Skip writing to the error log to avoid mtr complaints */
DBUG_EXECUTE_IF("simulate_out_of_memory", return;);
sql_print_error(ER_DEFAULT(ER_OUT_OF_RESOURCES));
sql_print_error("%s", ER_DEFAULT(ER_OUT_OF_RESOURCES));
}
}

View File

@ -1932,7 +1932,7 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
Most probably user has mistyped time zone name, so no need to bark here
unless we need it for debugging.
*/
sql_print_error("Can't find description of time zone '%.*b'",
sql_print_error("Can't find description of time zone '%.*sB'",
tz_name->length(), tz_name->ptr());
#endif
goto end;

View File

@ -1242,7 +1242,7 @@ uint64_t btr_read_autoinc_with_fallback(const dict_table_t *table,
{
sql_print_information("InnoDB: Resetting PAGE_ROOT_AUTO_INC from "
UINT64PF " to " UINT64PF
" on table %`.*s.%`s (created with version %lu)",
" on table %.*sQ.%sQ (created with version %lu)",
autoinc, max_autoinc,
int(table->name.dblen()), table->name.m_name,
table->name.basename(), mysql_version);

View File

@ -4626,7 +4626,7 @@ static void row_import_autoinc(dict_table_t *table, row_prebuilt_t *prebuilt,
btr_write_autoinc(dict_table_get_first_index(table), autoinc - 1);
autoinc_set:
table->autoinc= autoinc;
sql_print_information("InnoDB: %`.*s.%`s autoinc value set to " UINT64PF,
sql_print_information("InnoDB: %.*sQ.%sQ autoinc value set to " UINT64PF,
int(table->name.dblen()), table->name.m_name,
table->name.basename(), autoinc);
}

View File

@ -1208,7 +1208,7 @@ static dberr_t row_mysql_get_table_error(trx_t *trx, dict_table_t *table)
}
const int dblen= int(table->name.dblen());
sql_print_error("InnoDB .ibd file is missing for table %`.*s.%`s",
sql_print_error("InnoDB .ibd file is missing for table %.*sQ.%sQ",
dblen, table->name.m_name, table->name.m_name + dblen + 1);
return DB_TABLESPACE_NOT_FOUND;
}

View File

@ -1064,7 +1064,8 @@ const int MYROCKS_MARIADB_PLUGIN_MATURITY_LEVEL= MariaDB_PLUGIN_MATURITY_STABLE;
extern uint32_t rocksdb_ignore_datadic_errors;
void sql_print_verbose_info(const char *format, ...);
void sql_print_verbose_info(const char *format, ...)
ATTRIBUTE_FORMAT(printf, 1, 2);
} // namespace myrocks