Commit 2441da8c authored by jimw@mysql.com's avatar jimw@mysql.com

Add default configuration files to my_print_defaults usage, and

add handling of configuration file in the Windows shared system
directory. (Bug #5354)
parent b31960f7
......@@ -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);
}
......
......@@ -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 *);
......
......@@ -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))))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment