diff options
author | unknown <jimw@mysql.com> | 2005-04-28 12:11:48 -0700 |
---|---|---|
committer | unknown <jimw@mysql.com> | 2005-04-28 12:11:48 -0700 |
commit | d5094e1a6e82df8c4930a3cf1c683b45768e783e (patch) | |
tree | a391e993c80c4038f9e8cc0297bb19138002f404 /mysys/default.c | |
parent | 745d52bb3da3afb018061b4e3ec34420a8475389 (diff) | |
download | mariadb-git-d5094e1a6e82df8c4930a3cf1c683b45768e783e.tar.gz |
Add default configuration files to my_print_defaults usage, and
add handling of configuration file in the Windows shared system
directory. (Bug #5354)
extra/my_print_defaults.c:
Print out list of default files that will be used.
include/my_sys.h:
Add new my_print_default_files() function.
mysys/default.c:
Increase MAX_DEFAULT_DIRS to handle shared Windows directory,
move the logic for handling the Windows (and OS/2) system directories
into init_default_directories(), and generalize handling of
configuration file extensions.
Diffstat (limited to 'mysys/default.c')
-rw-r--r-- | mysys/default.c | 100 |
1 files changed, 59 insertions, 41 deletions
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 <help_start.h> -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 <help_end.h> + +/* + 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)))) |