Commit d5094e1a authored by unknown's avatar unknown

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.
parent 745d52bb
...@@ -68,6 +68,7 @@ static void usage(my_bool version) ...@@ -68,6 +68,7 @@ static void usage(my_bool version)
puts("Prints all arguments that is give to some program using the default files"); puts("Prints all arguments that is give to some program using the default files");
printf("Usage: %s [OPTIONS] groups\n", my_progname); printf("Usage: %s [OPTIONS] groups\n", my_progname);
my_print_help(my_long_options); my_print_help(my_long_options);
my_print_default_files(config_file);
my_print_variables(my_long_options); my_print_variables(my_long_options);
printf("\nExample usage:\n%s --config-file=my client mysql\n", my_progname); 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, ...@@ -781,6 +781,7 @@ extern int my_search_option_files(const char *conf_file, int *argc,
char ***argv, uint *args_used, char ***argv, uint *args_used,
Process_option_func func, void *func_ctx); Process_option_func func, void *func_ctx);
extern void free_defaults(char **argv); 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 void print_defaults(const char *conf_file, const char **groups);
extern my_bool my_compress(byte *, ulong *, ulong *); extern my_bool my_compress(byte *, ulong *, ulong *);
extern my_bool my_uncompress(byte *, ulong *, ulong *); extern my_bool my_uncompress(byte *, ulong *, ulong *);
......
...@@ -45,11 +45,12 @@ char *defaults_extra_file=0; ...@@ -45,11 +45,12 @@ char *defaults_extra_file=0;
/* Which directories are searched for options (and in which order) */ /* 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]; const char *default_directories[MAX_DEFAULT_DIRS + 1];
#ifdef __WIN__ #ifdef __WIN__
static const char *f_extensions[]= { ".ini", ".cnf", 0 }; static const char *f_extensions[]= { ".ini", ".cnf", 0 };
static char system_dir[FN_REFLEN], shared_system_dir[FN_REFLEN];
#else #else
static const char *f_extensions[]= { ".cnf", 0 }; static const char *f_extensions[]= { ".cnf", 0 };
#endif #endif
...@@ -140,20 +141,6 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv, ...@@ -140,20 +141,6 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv,
} }
else 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++) for (dirs= default_directories ; *dirs; dirs++)
{ {
if (**dirs) if (**dirs)
...@@ -396,8 +383,11 @@ static int search_default_file(Process_option_func opt_handler, ...@@ -396,8 +383,11 @@ static int search_default_file(Process_option_func opt_handler,
const char *config_file) const char *config_file)
{ {
char **ext; 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; int error;
if ((error= search_default_file_with_ext(opt_handler, handler_ctx, if ((error= search_default_file_with_ext(opt_handler, handler_ctx,
...@@ -734,11 +724,11 @@ static char *remove_end_comment(char *ptr) ...@@ -734,11 +724,11 @@ static char *remove_end_comment(char *ptr)
#include <help_start.h> #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; 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; char name[FN_REFLEN], **ext;
const char **dirs; const char **dirs;
...@@ -749,30 +739,9 @@ void print_defaults(const char *conf_file, const char **groups) ...@@ -749,30 +739,9 @@ void print_defaults(const char *conf_file, const char **groups)
fputs(conf_file,stdout); fputs(conf_file,stdout);
else 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 (dirs=default_directories ; *dirs; dirs++)
{ {
for (ext= (char**) f_extensions; *ext; *ext++) for (ext= (char**) exts_to_use; *ext; *ext++)
{ {
const char *pos; const char *pos;
char *end; char *end;
...@@ -791,6 +760,12 @@ void print_defaults(const char *conf_file, const char **groups) ...@@ -791,6 +760,12 @@ void print_defaults(const char *conf_file, const char **groups)
} }
puts(""); puts("");
} }
}
void print_defaults(const char *conf_file, const char **groups)
{
my_print_default_files(conf_file);
fputs("The following groups are read:",stdout); fputs("The following groups are read:",stdout);
for ( ; *groups ; groups++) for ( ; *groups ; groups++)
{ {
...@@ -806,15 +781,58 @@ void print_defaults(const char *conf_file, const char **groups) ...@@ -806,15 +781,58 @@ void print_defaults(const char *conf_file, const char **groups)
#include <help_end.h> #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() static void init_default_directories()
{ {
const char *env, **ptr= default_directories; const char *env, **ptr= default_directories;
#ifdef __WIN__ #ifdef __WIN__
*ptr++= "C:/"; *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__) #elif defined(__NETWARE__)
*ptr++= "sys:/etc/"; *ptr++= "sys:/etc/";
#else #else
#if defined(__EMX__) || defined(OS2)
if ((env= getenv("ETC")))
*ptr++= env;
#endif
*ptr++= "/etc/"; *ptr++= "/etc/";
#endif #endif
if ((env= getenv(STRINGIFY_ARG(DEFAULT_HOME_ENV)))) 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