summaryrefslogtreecommitdiff
path: root/mysys/default.c
diff options
context:
space:
mode:
authorunknown <jimw@mysql.com>2005-04-28 12:11:48 -0700
committerunknown <jimw@mysql.com>2005-04-28 12:11:48 -0700
commitd5094e1a6e82df8c4930a3cf1c683b45768e783e (patch)
treea391e993c80c4038f9e8cc0297bb19138002f404 /mysys/default.c
parent745d52bb3da3afb018061b4e3ec34420a8475389 (diff)
downloadmariadb-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.c100
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))))