mirror of
https://github.com/MariaDB/server.git
synced 2025-01-27 09:14:17 +01:00
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.
This commit is contained in:
parent
745d52bb3d
commit
d5094e1a6e
3 changed files with 61 additions and 41 deletions
|
@ -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,
|
||||||
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 *);
|
||||||
|
|
100
mysys/default.c
100
mysys/default.c
|
@ -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,
|
||||||
}
|
}
|
||||||
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,
|
||||||
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)
|
||||||
|
|
||||||
#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)
|
||||||
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)
|
||||||
}
|
}
|
||||||
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)
|
||||||
|
|
||||||
#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))))
|
||||||
|
|
Loading…
Add table
Reference in a new issue