From 04e09010773caf0b302b2933fff3fe95381a5e13 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 2 May 2026 20:19:12 +0200 Subject: [PATCH] MDEV-32745 followup for 7828fb475b0 * add a test for new --cat_file feature * fix off-by-one error in --cat_file lines limit * fix broken INCLUDE_DIRECTORIES in extra/ * fix typos * remove mtr-specific workaround from the tool, solve it in the test * remove dead code * fixed memory leak in mariadb-migration-config-file [client-server] section * fixed memory leak in mariadbd --character_set_server=xxx (execution time for main.mariadb-migrate-config-file went down from 150s to 2s) * moved tool header to the tool dir * avoid tripple-initialization of plugins * disable tool builds in ASAN builds (because of RocksDB) * compilation failure on x86 (signedness) --- .gitignore | 2 +- client/mysqltest.cc | 2 +- extra/CMakeLists.txt | 11 ++- extra/mariadb_migrate_config_file.c | 5 +- .../main/mariadb-migrate-config-file.test | 74 +++++++++---------- mysql-test/main/mysqltest.result | 4 + mysql-test/main/mysqltest.test | 3 + mysql-test/mariadb-test-run.pl | 2 +- mysys/my_default.c | 27 ++++--- mysys/my_delete.c | 7 +- mysys/my_lib.c | 14 +--- sql/mysqld.cc | 15 ++-- sql/sql_plugin.cc | 12 +-- 13 files changed, 87 insertions(+), 91 deletions(-) diff --git a/.gitignore b/.gitignore index 07516b9d2a2..39d14fc7a99 100644 --- a/.gitignore +++ b/.gitignore @@ -64,6 +64,7 @@ extra/generate_option_list extra/mariabackup/mariabackup extra/mariabackup/mbstream extra/mariadb-migrate-config-file +extra/mariadbd_options.h extra/my_print_defaults extra/mysql_waitpid extra/mysqld_safe_helper @@ -75,7 +76,6 @@ extra/wolfssl/user_settings.h import_executables.cmake include/*.h.tmp include/config.h -include/mariadbd_options.h include/my_config.h include/mysql_version.h include/mysqld_ername.h diff --git a/client/mysqltest.cc b/client/mysqltest.cc index c1e73ba4181..1c975f6b498 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -2187,7 +2187,7 @@ int cat_file(DYNAMIC_STRING* ds, const char* filename, uint max_lines) max_lines= 10000; // Enough for mtr char *p= buff, *start= buff, *end=buff+len; - while (p < end && line <= max_lines) + while (p < end && line < max_lines) { /* Convert cr/lf to lf */ if (*p == '\r' && p+1 < end && *(p+1)== '\n') diff --git a/extra/CMakeLists.txt b/extra/CMakeLists.txt index 22fbcbc1924..2fcba582315 100644 --- a/extra/CMakeLists.txt +++ b/extra/CMakeLists.txt @@ -13,7 +13,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${ZLIB_INCLUDE_DIRS} ${PCRE_INCLUDE_DIRS} pcre2-8}) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${ZLIB_INCLUDE_DIRS} ${PCRE_INCLUDE_DIRS}) # Default install component for the files is Server here SET(MYSQL_INSTALL_COMPONENT Server) @@ -46,10 +46,12 @@ ADD_CUSTOM_TARGET(GenError DEPENDS ${CMAKE_BINARY_DIR}/include/mysqld_error.h.tmp) -IF(NOT CMAKE_CROSSCOMPILING AND TARGET mariadbd) +# this approach doesn't work with cross-compiing (runs mariadbd) +# and doesn't work with ASAN, because LSAN complains about RocksDB (MDEV-36345). +IF(NOT CMAKE_CROSSCOMPILING AND NOT WITH_ASAN AND TARGET mariadbd) ADD_EXECUTABLE(generate_option_list generate_option_list.cc) TARGET_LINK_LIBRARIES(generate_option_list mysys pcre2-8) - TARGET_INCLUDE_DIRECTORIES(generate_option_list PRIVATE ${PCRE_INCLUDE_DIRS} pcre2-8) + TARGET_INCLUDE_DIRECTORIES(generate_option_list PRIVATE ${PCRE_INCLUDE_DIRS}) GET_PROPERTY(dynamic_plugins GLOBAL PROPERTY SERVER_DYNAMIC_PLUGINS) GET_PROPERTY(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) IF(is_multi_config) @@ -83,7 +85,7 @@ IF(NOT CMAKE_CROSSCOMPILING AND TARGET mariadbd) ENDIF() STRING(REPLACE ";" ":" escaped_plugin_load "${plugin_load}") - SET(genhdr ${CMAKE_BINARY_DIR}/include/mariadbd_options.h) + SET(genhdr ${CMAKE_BINARY_DIR}/extra/mariadbd_options.h) ADD_CUSTOM_COMMAND(OUTPUT ${genhdr} # COMMAND ${CMAKE_COMMAND} -E echo "Executing ${populate_plugin_dir}" ${populate_plugin_dir} @@ -105,6 +107,7 @@ IF(NOT CMAKE_CROSSCOMPILING AND TARGET mariadbd) # Make sure consumers cannot compile before the header exists: SET_SOURCE_FILES_PROPERTIES("${genhdr}" PROPERTIES GENERATED TRUE) TARGET_LINK_LIBRARIES(mariadb-migrate-config-file PRIVATE mysys) + TARGET_INCLUDE_DIRECTORIES(mariadb-migrate-config-file PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) ENDIF() MYSQL_ADD_EXECUTABLE(my_print_defaults my_print_defaults.c COMPONENT Client) diff --git a/extra/mariadb_migrate_config_file.c b/extra/mariadb_migrate_config_file.c index 2e5c4d52cd5..a69e8fdfa41 100644 --- a/extra/mariadb_migrate_config_file.c +++ b/extra/mariadb_migrate_config_file.c @@ -792,6 +792,7 @@ static void generator_free(struct generator *generator) delete_dynamic(&generator->old_version); delete_dynamic(&generator->unsupported_version); delete_dynamic(&generator->mariadbd_additions); + delete_dynamic(&generator->client_server); my_free(generator->output_group); } @@ -2267,7 +2268,7 @@ static void print_to_width(const char *line, uint width) for (start= line ; *line ; line++) { - if ((line-start) >= width) + if ((uint)(line-start) >= width) { if (!space) space= line; /* No space */ @@ -2520,8 +2521,6 @@ int main(int argc, char **argv) { /* Write 'add options' only to the first found config file */ add_new_options_once= 1; - /* Ensure that symbolic links are not expanded. Needed for mtr */ - my_defaults_use_original_paths= 1; if ((error= my_load_defaults(config_file, groups_to_use, &count, &arguments, &default_directories))) goto handle_error; diff --git a/mysql-test/main/mariadb-migrate-config-file.test b/mysql-test/main/mariadb-migrate-config-file.test index ac3d35863ca..98c9bfe2a56 100644 --- a/mysql-test/main/mariadb-migrate-config-file.test +++ b/mysql-test/main/mariadb-migrate-config-file.test @@ -23,7 +23,7 @@ default_regex_flags=invalid EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp2.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --edit=remove --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -56,7 +56,7 @@ log-bin=1 log_error_verbosity = 3 EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp2.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --edit=last --echo # Changed files @@ -65,7 +65,7 @@ EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp2.cnf --echo # Verify no more changes ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --edit=last --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -81,7 +81,7 @@ invalid=true alter_algorithm=invalid EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --edit=comment --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -122,7 +122,7 @@ port=33 key_buffer_size=20M EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=inline --from=mariadb --echo # Changed file --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -158,7 +158,7 @@ port=33 key_buffer_size=20M EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=last --from=mariadb --echo # Changed file --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -219,7 +219,7 @@ key_buffer_size=20M alter_algorithm=invalid EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=unknown --edit=last --from=mariadb --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -232,7 +232,7 @@ EOF key_buffer_size=20M EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=last --from=mysql --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -245,7 +245,7 @@ EOF key_buffer_size=20M EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=last --from=mysql --no-myisam --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -258,7 +258,7 @@ EOF key_buffer_size=20M EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=last --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -271,7 +271,7 @@ EOF key_buffer_size=20M EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=last --no-myisam --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -284,7 +284,7 @@ EOF default_week_format=1 EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=last --add-skip-slave-start --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -297,7 +297,7 @@ EOF skip_slave_start EOF #--cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=last --add-skip-slave-start --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -313,7 +313,7 @@ audit_log-disabled audit_log=on EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=last --add-skip-slave-start --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -327,7 +327,7 @@ audit_log=ON audit_log_file=name EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=last --add-skip-slave-start --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -341,7 +341,7 @@ audit_log-disabled EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=last --add-skip-slave-start --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -357,7 +357,7 @@ log_error_verbosity = 3 EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=last --add-skip-slave-start --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -371,7 +371,7 @@ innodb_data_file_path=/var/mysql/test2 key_buffer_size=20M EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=last --fix-all --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -385,7 +385,7 @@ innodb_data_file_path=/var/mysql/test2 key_buffer_size=20M EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --update --verify --error-group=mysqld-5.7 --edit=last --fix-all --update-paths --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -406,10 +406,10 @@ dummy2=2 innodb_data_file_path=/var/mysql/test2 EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --error 2 --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --update-paths --add-mariadb-replication-compatibility ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd="not_found_here" --update --verify --edit=last --silent --update-paths --verify=0 --echo # Changed file --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -424,9 +424,9 @@ innodb_stats_sample_pages=1 EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --replace_regex /### File[^\n]*/### File [name hidden]/ ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --print --edit=last ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --error 2 --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -441,16 +441,16 @@ innodb_log_file_size=2G EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --echo # Checking file ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --error 2 --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --echo # Updating file ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --update --verify --edit=last --mariadbd=$MYSQLD --verify --echo # Changed file --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --echo # Checking if file is ok now ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --verify=0 --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -478,11 +478,11 @@ character-set-server=utf8mb4 EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --echo # MySQL -> MariaDB compatibility ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --print --edit=last --verify=0 --add-mariadb-replication-compatibility --echo # MariaDB -> MySQL compatibility ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --print --edit=last --verify=0 --add-mysql-replication-compatibility --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -505,7 +505,7 @@ socket="/tmp/mysql8.sock" EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --echo # --add-client-server-group ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --print --edit=last --verify=0 --add-client-server-group --update-paths --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -522,7 +522,7 @@ port=99 socket="/tmp/mysql8.sock" EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --update --edit=last --add-client-server-group --mariadbd=$MYSQLD --verify --echo # Changed file --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -538,13 +538,13 @@ socket="/tmp/mysql.sock" EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --echo # Testing with --copy-mysqld-groups=0 ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --update --edit=last --copy-mysqld-groups=0 --mariadbd=$MYSQLD --verify --echo # Testing with --copy-mysqld-groups=1 --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --error 2 --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --copy-mysqld-groups=1 ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --update --edit=last --copy-mysqld-groups=1 --mariadbd=$MYSQLD --verify --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf @@ -583,21 +583,21 @@ EOF --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --echo # Output from --print --edit=last --update-paths --replace_regex /### File[^\n]*/### File [name hidden]/ ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd="not_found_here" --print --edit=last --update-paths --echo # --echo # Test that second update of file with 'last' will no do anything --echo # ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --update --edit=last --update-paths --verify=0 # Check file ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --mariadbd=$MYSQLD --copy-mysqld-groups=0 ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --update-paths --mariadbd=$MYSQLD --copy-mysqld-groups=0 --echo "Next command should not change anything" ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $MYSQLTEST_REAL_VARDIR MYSQLTEST_VARDIR --exec $MARIADB_MIGRATE_CONFIG_FILE --defaults-file=$MYSQLTEST_VARDIR/tmp/tmp1.cnf --update --edit=last --update-paths --backup --verify=0 --cat_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf --remove_file $MYSQLTEST_VARDIR/tmp/tmp1.cnf diff --git a/mysql-test/main/mysqltest.result b/mysql-test/main/mysqltest.result index 2091dd1f61b..61925866bf6 100644 --- a/mysql-test/main/mysqltest.result +++ b/mysql-test/main/mysqltest.result @@ -733,6 +733,10 @@ These lines should be repeated, if things work as expected These lines should be repeated, if things work as expected +=== +These lines should be repeated, +if things work as expected +=== Some data for cat_file command of mysqltest diff --git a/mysql-test/main/mysqltest.test b/mysql-test/main/mysqltest.test index 8a6fe59f42e..1945c832e89 100644 --- a/mysql-test/main/mysqltest.test +++ b/mysql-test/main/mysqltest.test @@ -2274,6 +2274,9 @@ EOF } cat_file $MYSQLTEST_VARDIR/tmp/app_while.tmp; +echo ===; +cat_file $MYSQLTEST_VARDIR/tmp/app_while.tmp 2; # feature sneaked inside MDEV-32745 +echo ===; remove_file $MYSQLTEST_VARDIR/tmp/app_while.tmp; # ---------------------------------------------------------------------------- diff --git a/mysql-test/mariadb-test-run.pl b/mysql-test/mariadb-test-run.pl index e09ae065080..7b913f159c6 100755 --- a/mysql-test/mariadb-test-run.pl +++ b/mysql-test/mariadb-test-run.pl @@ -1544,7 +1544,7 @@ sub command_line_setup { $opt_vardir= $default_vardir; } - # We make the path asbolute, as the server will do a chdir() before usage + # We make the path absolute, as the server will do a chdir() before usage unless ( $opt_vardir =~ m,^/, or (IS_WINDOWS and $opt_vardir =~ m,^[a-z]:[/\\],i) ) { diff --git a/mysys/my_default.c b/mysys/my_default.c index 9ec19dd1f4f..da4acf2ecec 100644 --- a/mysys/my_default.c +++ b/mysys/my_default.c @@ -52,14 +52,14 @@ */ static char *file_marker= (char*)"----file-marker----"; my_bool my_defaults_mark_files= FALSE; -my_bool my_defaults_use_original_paths= FALSE; my_bool is_file_marker(const char* arg) { return arg == file_marker; } -my_bool my_no_defaults=FALSE, my_print_defaults= FALSE; +static my_bool my_print_defaults= FALSE; +my_bool my_no_defaults=FALSE; const char *my_defaults_file=0; const char *my_defaults_group_suffix=0; const char *my_defaults_extra_file=0; @@ -162,6 +162,7 @@ static int my_search_option_files(const char *conf_file, const char **dirs; int error= 0; DBUG_ENTER("my_search_option_files"); + DBUG_ASSERT(default_directories); if (my_defaults_group_suffix) { @@ -200,8 +201,8 @@ static int my_search_option_files(const char *conf_file, if (my_defaults_file) { - if ((error= search_default_file_with_ext(ctx, "", "", - my_defaults_file, 0)) < 0) + error= search_default_file_with_ext(ctx, "", "", my_defaults_file, 0); + if (error < 0) goto err; if (error > 0) { @@ -210,7 +211,7 @@ static int my_search_option_files(const char *conf_file, goto err; } } - else if (dirname_length(conf_file) || !default_directories) + else if (dirname_length(conf_file)) { if ((error= search_default_file(ctx, NullS, conf_file)) < 0) goto err; @@ -327,15 +328,13 @@ int get_defaults_options(char **argv) if (! my_defaults_group_suffix) my_defaults_group_suffix= getenv("MYSQL_GROUP_SUFFIX"); - if (my_defaults_extra_file && my_defaults_extra_file != extra_file_buffer && - ! my_defaults_use_original_paths) + if (my_defaults_extra_file && my_defaults_extra_file != extra_file_buffer) { my_realpath(extra_file_buffer, my_defaults_extra_file, MYF(0)); my_defaults_extra_file= extra_file_buffer; } - if (my_defaults_file && my_defaults_file != file_buffer && - ! my_defaults_use_original_paths) + if (my_defaults_file && my_defaults_file != file_buffer) { my_realpath(file_buffer, my_defaults_file, MYF(0)); my_defaults_file= file_buffer; @@ -382,8 +381,8 @@ int load_defaults(const char *conf_file, const char **groups, Points to an null terminated array of pointers argc Pointer to argc of original program argv Pointer to argv of original program - default_directories Pointer to a location where a pointer to the list - of default directories will be stored + default_directories Pointer to a location where a pointer to the + list of default directories will be stored IMPLEMENTATION @@ -405,8 +404,8 @@ int load_defaults(const char *conf_file, const char **groups, - 1 is returned if the given conf_file didn't exist. In this case, the value pointed to by default_directories is undefined. - - 4 is returned --print-defaults was used. The caller should just do exit(0) - in this ase + - 4 is returned --print-defaults was used. The caller should just do + exit(0) in this case */ @@ -438,7 +437,7 @@ int my_load_defaults(const char *conf_file, const char **groups, int *argc, if (!my_no_defaults) { - TYPELIB group; // XXX + TYPELIB group; struct handle_option_ctx ctx; group.count=0; diff --git a/mysys/my_delete.c b/mysys/my_delete.c index bc784fdee44..6854033f84b 100644 --- a/mysys/my_delete.c +++ b/mysys/my_delete.c @@ -202,7 +202,6 @@ error: /* Remove directory recursively. - Symlinks are deleted, not followed */ int my_rmtree(const char *dir, myf MyFlags) { @@ -211,9 +210,7 @@ int my_rmtree(const char *dir, myf MyFlags) int err = 0; size_t i; - MY_DIR *dir_info = my_dir(dir, - MYF(MY_DONT_SORT | MY_WANT_STAT | - (MyFlags & (MY_NOSYMLINKS | MY_WME)))); + MY_DIR *dir_info = my_dir(dir, MYF(MY_DONT_SORT | MY_WANT_STAT)); if (!dir_info) return 1; @@ -228,7 +225,7 @@ int my_rmtree(const char *dir, myf MyFlags) if (!MY_S_ISDIR(file->mystat->st_mode)) { - err = my_delete(path, (MyFlags & ~MY_NOSYMLINKS)); + err = my_delete(path, MyFlags); #ifdef _WIN32 /* On Windows, check and possible reset readonly attribute. diff --git a/mysys/my_lib.c b/mysys/my_lib.c index 93ba680f582..d39694a54cc 100644 --- a/mysys/my_lib.c +++ b/mysys/my_lib.c @@ -352,18 +352,8 @@ MY_STAT *my_stat(const char *path, MY_STAT *stat_area, myf my_flags) my_flags))) goto err; #ifndef _WIN32 - { - int error; - if (my_flags & MY_NOSYMLINKS) - error= lstat((char *) path, (struct stat *) stat_area); - else - error= stat((char *) path, (struct stat *) stat_area); - - if (!error) - { - DBUG_RETURN(stat_area); - } - } + if (!stat((char *) path, (struct stat *) stat_area)) + DBUG_RETURN(stat_area); #else if (!my_win_stat(path, stat_area)) DBUG_RETURN(stat_area); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 734f912ea0f..e0d2ba0071f 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -7936,14 +7936,15 @@ static void print_help() static void usage(void) { DBUG_ENTER("usage"); - myf utf8_flag= global_system_variables.old_behavior & - OLD_MODE_UTF8_IS_UTF8MB3 ? MY_UTF8_IS_UTF8MB3 : 0; - if (!(default_charset_info= get_charset_by_csname(default_character_set_name, - MY_CS_PRIMARY, - MYF(utf8_flag | MY_WME)))) - exit(1); if (!default_collation_name) - default_collation_name= (char*) default_charset_info->coll_name.str; + { + myf utf8_flag= global_system_variables.old_behavior & + OLD_MODE_UTF8_IS_UTF8MB3 ? MY_UTF8_IS_UTF8MB3 : 0; + default_charset_info= get_charset_by_csname(default_character_set_name, + MY_CS_PRIMARY, MYF(utf8_flag | MY_WME)); + if (default_charset_info) + default_collation_name= (char*) default_charset_info->coll_name.str; + } print_version(); puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000")); puts("Starts the MariaDB database server.\n"); diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 6f8c4d0e1f7..0c2b8aea00c 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -1118,8 +1118,7 @@ static st_plugin_int *plugin_insert_or_reuse(struct st_plugin_int *plugin) NOTE Requires that a write-lock is held on LOCK_system_variables_hash */ -static enum install_status -plugin_add(MEM_ROOT *tmp_root, bool if_not_exists, +static enum install_status plugin_add(MEM_ROOT *tmp_root, bool if_not_exists, const LEX_CSTRING *name, LEX_CSTRING *dl, myf MyFlags) { struct st_plugin_int tmp, *maybe_dupe; @@ -1808,7 +1807,8 @@ int plugin_init(int *argc, char **argv, int flags) } /* load and init plugins from the plugin table (unless done already) */ - if (flags & PLUGIN_INIT_SKIP_PLUGIN_TABLE) + if (flags & PLUGIN_INIT_SKIP_PLUGIN_TABLE || + plugin_table_engine_name.length == 0) break; mysql_mutex_unlock(&LOCK_plugin); @@ -4072,13 +4072,13 @@ static int construct_options(MEM_ROOT *mem_root, struct st_plugin_int *tmp, if (opt->flags & PLUGIN_VAR_NOCMDOPT) { - char *val= global_system_variables.dynamic_variables_ptr + offset; + char **val= (char**)(global_system_variables.dynamic_variables_ptr + offset); if (((opt->flags & PLUGIN_VAR_TYPEMASK) == PLUGIN_VAR_STR) && (opt->flags & PLUGIN_VAR_MEMALLOC)) { char *def_val= *(char**)var_def_ptr(opt); - my_free(*(char**)val); - *(char**)val= def_val ? my_strdup(PSI_INSTRUMENT_ME, def_val, MYF(0)) : NULL; + my_free(*val); + *val= def_val ? my_strdup(PSI_INSTRUMENT_ME, def_val, MYF(0)) : NULL; } else memcpy(val, var_def_ptr(opt), var_storage_size(opt->flags));