diff --git a/libmariadb/mariadb_lib.c b/libmariadb/mariadb_lib.c index f063a932..54ee2068 100644 --- a/libmariadb/mariadb_lib.c +++ b/libmariadb/mariadb_lib.c @@ -698,6 +698,11 @@ my_bool _mariadb_set_conf_option(MYSQL *mysql, const char *config_option, const if (config_option) { int i; + char *c; + + /* CONC-395: replace underscore "_" by dash "-" */ + while ((c= strchr(config_option, '_'))) + *c= '-'; for (i=0; mariadb_defaults[i].conf_key; i++) { diff --git a/unittest/libmariadb/misc.c b/unittest/libmariadb/misc.c index f2b7a9fc..babcb1dc 100644 --- a/unittest/libmariadb/misc.c +++ b/unittest/libmariadb/misc.c @@ -1345,10 +1345,51 @@ static int test_conc384(MYSQL *my __attribute__((unused))) return OK; } +#ifndef _WIN32 +static int test_conc395(MYSQL *unused __attribute__((unused))) +{ + MYSQL *mysql; + FILE *fp= NULL; + const char *env= getenv("MYSQL_TMP_DIR"); + char cnf_file1[FN_REFLEN + 1]; + + if (travis_test) + return SKIP; + + if (!env) + env= "/tmp"; + + setenv("HOME", env, 1); + + snprintf(cnf_file1, FN_REFLEN, "%s%c.my.cnf", env, FN_LIBCHAR); + + FAIL_IF(!access(cnf_file1, R_OK), "access"); + + mysql= mysql_init(NULL); + fp= fopen(cnf_file1, "w"); + FAIL_IF(!fp, "fopen"); + + /* Mix dash and underscore */ + fprintf(fp, "[client]\ndefault_character-set=latin2\n"); + fclose(fp); + + mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, ""); + my_test_connect(mysql, hostname, username, password, + schema, 0, socketname, 0); + + remove(cnf_file1); + + FAIL_IF(strcmp(mysql_character_set_name(mysql), "latin2"), "expected charset latin2"); + mysql_close(mysql); + return OK; +} +#endif + struct my_tests_st my_tests[] = { {"test_conc384", test_conc384, TEST_CONNECTION_NONE, 0, NULL, NULL}, #ifndef _WIN32 {"test_mdev12965", test_mdev12965, TEST_CONNECTION_DEFAULT, 0, NULL, NULL}, + {"test_conc395", test_conc395, TEST_CONNECTION_DEFAULT, 0, NULL, NULL}, #endif {"test_wl6797", test_wl6797, TEST_CONNECTION_DEFAULT, 0, NULL, NULL}, {"test_server_status", test_server_status, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},