Added a warning to my_print_defaults if --verbose is given

and --defaults-file is a non-existing or non-regular file.
Bug#755
parent 215935d6
......@@ -26,6 +26,7 @@
#include <my_getopt.h>
const char *config_file="my"; /* Default config file */
uint verbose= 0, opt_defaults_file_used= 0;
static struct my_option my_long_options[] =
{
......@@ -47,6 +48,8 @@ static struct my_option my_long_options[] =
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
{"help", '?', "Display this help message and exit.",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
{"verbose", 'v', "Increase the output level",
0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
{"version", 'V', "Output version information and exit.",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
......@@ -55,7 +58,7 @@ static struct my_option my_long_options[] =
static void usage(my_bool version)
{
printf("%s Ver 1.5 for %s at %s\n",my_progname,SYSTEM_TYPE,
printf("%s Ver 1.6 for %s at %s\n",my_progname,SYSTEM_TYPE,
MACHINE_TYPE);
if (version)
return;
......@@ -73,12 +76,18 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
char *argument __attribute__((unused)))
{
switch (optid) {
case 'c':
opt_defaults_file_used= 1;
break;
case 'n':
exit(0);
case 'I':
case '?':
usage(0);
exit(0);
case 'v':
verbose++;
break;
case 'V':
usage(1);
exit(0);
......@@ -104,7 +113,7 @@ static int get_options(int *argc,char ***argv)
int main(int argc, char **argv)
{
int count;
int count, error;
char **load_default_groups, *tmp_arguments[2],
**argument, **arguments;
MY_INIT(argv[0]);
......@@ -126,8 +135,20 @@ int main(int argc, char **argv)
arguments=tmp_arguments;
arguments[0]=my_progname;
arguments[1]=0;
load_defaults(config_file, (const char **) load_default_groups,
&count, &arguments);
if ((error= load_defaults(config_file, (const char **) load_default_groups,
&count, &arguments)) > 1)
{
if (verbose && opt_defaults_file_used)
{
if (error == 2)
fprintf(stderr, "WARNING: Defaults file (%s) not found!\n",
config_file);
if (error == 3)
fprintf(stderr, "WARNING: Defaults file (%s) is not a regular file!\n",
config_file);
}
exit(2); // Non-fatal error
}
for (argument= arguments+1 ; *argument ; argument++)
puts(*argument);
......
......@@ -742,8 +742,8 @@ extern void set_prealloc_root(MEM_ROOT *root, char *ptr);
extern char *strdup_root(MEM_ROOT *root,const char *str);
extern char *strmake_root(MEM_ROOT *root,const char *str,uint len);
extern char *memdup_root(MEM_ROOT *root,const char *str,uint len);
extern void load_defaults(const char *conf_file, const char **groups,
int *argc, char ***argv);
extern int load_defaults(const char *conf_file, const char **groups,
int *argc, char ***argv);
extern void free_defaults(char **argv);
extern void print_defaults(const char *conf_file, const char **groups);
extern my_bool my_compress(byte *, ulong *, ulong *);
......
......@@ -242,8 +242,8 @@ void hash_password(unsigned long *result, const char *password);
/* Some other useful functions */
void my_init(void);
void load_defaults(const char *conf_file, const char **groups,
int *argc, char ***argv);
int load_defaults(const char *conf_file, const char **groups,
int *argc, char ***argv);
my_bool my_thread_init(void);
void my_thread_end(void);
......
......@@ -66,13 +66,13 @@ NullS,
#define windows_ext ".ini"
#endif
static my_bool search_default_file(DYNAMIC_ARRAY *args,MEM_ROOT *alloc,
const char *dir, const char *config_file,
const char *ext, TYPELIB *group);
static int search_default_file(DYNAMIC_ARRAY *args,MEM_ROOT *alloc,
const char *dir, const char *config_file,
const char *ext, TYPELIB *group);
static char *remove_end_comment(char *ptr);
void load_defaults(const char *conf_file, const char **groups,
int load_defaults(const char *conf_file, const char **groups,
int *argc, char ***argv)
{
DYNAMIC_ARRAY args;
......@@ -80,6 +80,7 @@ void load_defaults(const char *conf_file, const char **groups,
TYPELIB group;
my_bool found_print_defaults=0;
uint args_used=0;
int error= 0;
MEM_ROOT alloc;
char *ptr,**res;
DBUG_ENTER("load_defaults");
......@@ -100,7 +101,7 @@ void load_defaults(const char *conf_file, const char **groups,
(*argc)--;
*argv=res;
*(MEM_ROOT*) ptr= alloc; /* Save alloc root for free */
DBUG_VOID_RETURN;
return 0;
}
/* Check if we want to force the use a specific default file */
......@@ -129,14 +130,14 @@ void load_defaults(const char *conf_file, const char **groups,
goto err;
if (forced_default_file)
{
if (search_default_file(&args, &alloc, "", forced_default_file, "",
&group))
if ((error= search_default_file(&args, &alloc, "",
forced_default_file, "", &group)) == 1)
goto err;
}
else if (dirname_length(conf_file))
{
if (search_default_file(&args, &alloc, NullS, conf_file, default_ext,
&group))
if ((error= search_default_file(&args, &alloc, NullS, conf_file,
default_ext, &group)) == 1)
goto err;
}
else
......@@ -144,26 +145,25 @@ void load_defaults(const char *conf_file, const char **groups,
#ifdef __WIN__
char system_dir[FN_REFLEN];
GetWindowsDirectory(system_dir,sizeof(system_dir));
if (search_default_file(&args, &alloc, system_dir, conf_file, windows_ext,
&group))
if ((error= search_default_file(&args, &alloc, system_dir, conf_file,
windows_ext, &group)) == 1)
goto err;
#endif
#if defined(__EMX__) || defined(OS2)
if (getenv("ETC") &&
search_default_file(&args, &alloc, getenv("ETC"), conf_file,
default_ext, &group))
(error= search_default_file(&args, &alloc, getenv("ETC"), conf_file,
default_ext, &group)) == 1)
goto err;
#endif
for (dirs=default_directories ; *dirs; dirs++)
{
int error=0;
if (**dirs)
error=search_default_file(&args, &alloc, *dirs, conf_file,
default_ext, &group);
error= search_default_file(&args, &alloc, *dirs, conf_file,
default_ext, &group);
else if (defaults_extra_file)
error=search_default_file(&args, &alloc, NullS, defaults_extra_file,
default_ext, &group);
if (error)
error= search_default_file(&args, &alloc, NullS, defaults_extra_file,
default_ext, &group);
if (error == 1)
goto err;
}
}
......@@ -204,11 +204,11 @@ void load_defaults(const char *conf_file, const char **groups,
puts("");
exit(1);
}
DBUG_VOID_RETURN;
return error;
err:
fprintf(stderr,"Program aborted\n");
exit(1);
return(error);
}
......@@ -220,9 +220,16 @@ void free_defaults(char **argv)
}
static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
const char *dir, const char *config_file,
const char *ext, TYPELIB *group)
/*
Return values: 0 Success
1 Fatal error, abort
2 File not found, continue
3 File is not a regular file, continue
*/
static int search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
const char *dir, const char *config_file,
const char *ext, TYPELIB *group)
{
char name[FN_REFLEN+10],buff[4096],*ptr,*end,*value,*tmp;
FILE *fp;
......@@ -247,7 +254,7 @@ static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
{
MY_STAT stat_info;
if (!my_stat(name,&stat_info,MYF(0)))
return 0;
return 2;
/*
Ignore world-writable regular files.
This is mainly done to protect us to not read a file created by
......@@ -260,6 +267,8 @@ static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
name);
return 0;
}
else if ((stat_info.st_mode & S_IFMT) != S_IFREG)
return 3;
}
#endif
if (!(fp = my_fopen(fn_format(name,name,"","",4),O_RDONLY,MYF(0))))
......
......@@ -148,7 +148,7 @@ else
fi
args=
parse_arguments `$print_defaults $defaults mysqld server mysqld_safe safe_mysqld`
parse_arguments `$print_defaults --loose-verbose $defaults mysqld server mysqld_safe safe_mysqld`
parse_arguments PICK-ARGS-FROM-ARGV "$@"
if test ! -x $ledir/$MYSQLD
......
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