diff --git a/extra/my_print_defaults.c b/extra/my_print_defaults.c index d5836cb0dc8..9cc24b4ae4e 100644 --- a/extra/my_print_defaults.c +++ b/extra/my_print_defaults.c @@ -68,6 +68,7 @@ static void usage(my_bool version) puts("Prints all arguments that is give to some program using the default files"); printf("Usage: %s [OPTIONS] groups\n", my_progname); my_print_help(my_long_options); + my_print_default_files(config_file); my_print_variables(my_long_options); printf("\nExample usage:\n%s --config-file=my client mysql\n", my_progname); } diff --git a/include/my_sys.h b/include/my_sys.h index f63743a4c6c..f052a073339 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -781,6 +781,7 @@ extern int my_search_option_files(const char *conf_file, int *argc, char ***argv, uint *args_used, Process_option_func func, void *func_ctx); extern void free_defaults(char **argv); +extern void my_print_default_files(const char *conf_file); extern void print_defaults(const char *conf_file, const char **groups); extern my_bool my_compress(byte *, ulong *, ulong *); extern my_bool my_uncompress(byte *, ulong *, ulong *); diff --git a/mysys/default.c b/mysys/default.c index 0f33c94d17e..c898f4a6532 100644 --- a/mysys/default.c +++ b/mysys/default.c @@ -45,11 +45,12 @@ char *defaults_extra_file=0; /* Which directories are searched for options (and in which order) */ -#define MAX_DEFAULT_DIRS 4 +#define MAX_DEFAULT_DIRS 5 const char *default_directories[MAX_DEFAULT_DIRS + 1]; #ifdef __WIN__ static const char *f_extensions[]= { ".ini", ".cnf", 0 }; +static char system_dir[FN_REFLEN], shared_system_dir[FN_REFLEN]; #else static const char *f_extensions[]= { ".cnf", 0 }; #endif @@ -140,20 +141,6 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv, } else { -#ifdef __WIN__ - char system_dir[FN_REFLEN]; - GetWindowsDirectory(system_dir,sizeof(system_dir)); - if ((search_default_file(func, func_ctx, system_dir, conf_file))) - goto err; -#endif -#if defined(__EMX__) || defined(OS2) - { - const char *etc; - if ((etc= getenv("ETC")) && - (search_default_file(func, func_ctx, etc, conf_file)) < 0) - goto err; - } -#endif for (dirs= default_directories ; *dirs; dirs++) { if (**dirs) @@ -396,8 +383,11 @@ static int search_default_file(Process_option_func opt_handler, const char *config_file) { char **ext; + const char *empty_list[]= { "", 0 }; + my_bool have_ext= fn_ext(config_file)[0] != 0; + const char **exts_to_use= have_ext ? empty_list : f_extensions; - for (ext= (char**) f_extensions; *ext; *ext++) + for (ext= (char**) exts_to_use; *ext; *ext++) { int error; if ((error= search_default_file_with_ext(opt_handler, handler_ctx, @@ -734,11 +724,11 @@ static char *remove_end_comment(char *ptr) #include -void print_defaults(const char *conf_file, const char **groups) +void my_print_default_files(const char *conf_file) { -#ifdef __WIN__ + const char *empty_list[]= { "", 0 }; my_bool have_ext= fn_ext(conf_file)[0] != 0; -#endif + const char **exts_to_use= have_ext ? empty_list : f_extensions; char name[FN_REFLEN], **ext; const char **dirs; @@ -749,30 +739,9 @@ void print_defaults(const char *conf_file, const char **groups) fputs(conf_file,stdout); else { -#ifdef __WIN__ - GetWindowsDirectory(name,sizeof(name)); - if (!have_ext) - { - for (ext= (char**) f_extensions; *ext; *ext++) - printf("%s\\%s%s ", name, conf_file, *ext); - } - else - printf("%s\\%s ", name, conf_file); -#endif -#if defined(__EMX__) || defined(OS2) - { - const char *etc; - - if ((etc= getenv("ETC"))) - { - for (ext= (char**) f_extensions; *ext; *ext++) - printf("%s\\%s%s ", etc, conf_file, *ext); - } - } -#endif for (dirs=default_directories ; *dirs; dirs++) { - for (ext= (char**) f_extensions; *ext; *ext++) + for (ext= (char**) exts_to_use; *ext; *ext++) { const char *pos; char *end; @@ -791,6 +760,12 @@ void print_defaults(const char *conf_file, const char **groups) } puts(""); } +} + +void print_defaults(const char *conf_file, const char **groups) +{ + my_print_default_files(conf_file); + fputs("The following groups are read:",stdout); for ( ; *groups ; groups++) { @@ -806,15 +781,58 @@ void print_defaults(const char *conf_file, const char **groups) #include + +/* + Create the list of default directories. + + On Microsoft Windows, this is: + 1. C:/ + 2. GetWindowsDirectory() + 3. GetSystemWindowsDirectory() + 4. getenv(DEFAULT_HOME_ENV) + 5. "" + + On Novell NetWare, this is: + 1. sys:/etc/ + 2. getenv(DEFAULT_HOME_ENV) + 3. "" + + On OS/2, this is: + 1. getenv(ETC) + 2. /etc/ + 3. getenv(DEFAULT_HOME_ENV) + 4. "" + 5. "~/" + + Everywhere else, this is: + 1. /etc/ + 2. getenv(DEFAULT_HOME_ENV) + 3. "" + 4. "~/" + + */ + static void init_default_directories() { const char *env, **ptr= default_directories; #ifdef __WIN__ *ptr++= "C:/"; + + if (GetWindowsDirectory(system_dir,sizeof(system_dir))) + *ptr++= &system_dir; + /* Only add shared system directory if different from default. */ + if (GetSystemWindowsDirectory(shared_system_dir,sizeof(shared_system_dir)) && + strcmp(system_dir, shared_system_dir)) + *ptr++= &shared_system_dir; + #elif defined(__NETWARE__) *ptr++= "sys:/etc/"; #else +#if defined(__EMX__) || defined(OS2) + if ((env= getenv("ETC"))) + *ptr++= env; +#endif *ptr++= "/etc/"; #endif if ((env= getenv(STRINGIFY_ARG(DEFAULT_HOME_ENV))))