Below is the list of changes that have just been committed into a local
5.0 repository of jani. When jani does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet
1.1853 05/04/06 00:27:41 jani@stripped +1 -0
Reverted newest changes to default.c for Netware 5.0.3a.
This will only affect Netware local build and will be fixed
in the next NW release (5.0.3b or 5.0.4)
mysys/default.c
1.57 05/04/06 00:27:36 jani@stripped +116 -227
Reverted newest changes to default.c for Netware 5.0.3a.
This will only affect Netware local build and will be fixed
in the next NW release (5.0.3b or 5.0.4)
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: jani
# Host: a193-229-222-105.elisa-laajakaista.fi
# Root: /home/jani/mydev/mysql-5.0.3-build-dev
--- 1.56/mysys/default.c Tue Mar 1 00:59:36 2005
+++ 1.57/mysys/default.c Wed Apr 6 00:27:36 2005
@@ -37,16 +37,28 @@
#include "m_string.h"
#include "m_ctype.h"
#include <my_dir.h>
-#ifdef __WIN__
-#include <winbase.h>
-#endif
char *defaults_extra_file=0;
/* Which directories are searched for options (and in which order) */
-#define MAX_DEFAULT_DIRS 4
-const char *default_directories[MAX_DEFAULT_DIRS + 1];
+const char *default_directories[]= {
+#ifdef __WIN__
+"C:/",
+#elif defined(__NETWARE__)
+"sys:/etc/",
+#else
+"/etc/",
+#endif
+#ifdef DATADIR
+DATADIR,
+#endif
+"", /* Place for defaults_extra_dir */
+#if !defined(__WIN__) && !defined(__NETWARE__)
+"~/",
+#endif
+NullS,
+};
#ifdef __WIN__
static const char *f_extensions[]= { ".ini", ".cnf", 0 };
@@ -54,174 +66,19 @@
static const char *f_extensions[]= { ".cnf", 0 };
#endif
-/*
- This structure defines the context that we pass to callback
- function 'handle_default_option' used in search_default_file
- to process each option. This context is used if search_default_file
- was called from load_defaults.
-*/
-
-struct handle_option_ctx
-{
- MEM_ROOT *alloc;
- DYNAMIC_ARRAY *args;
- TYPELIB *group;
-};
+static int search_default_file(DYNAMIC_ARRAY *args,MEM_ROOT *alloc,
+ const char *dir, const char *config_file,
+ TYPELIB *group);
-static int search_default_file(Process_option_func func, void *func_ctx,
- const char *dir, const char *config_file);
-static int search_default_file_with_ext(Process_option_func func,
- void *func_ctx,
+static int search_default_file_with_ext(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
const char *dir, const char *ext,
- const char *config_file);
-static void init_default_directories();
+ const char *config_file,
+ TYPELIB *group);
static char *remove_end_comment(char *ptr);
/*
- Process config files in default directories.
-
- SYNOPSIS
- my_search_option_files()
- conf_file Basename for configuration file to search for.
- If this is a path, then only this file is read.
- argc Pointer to argc of original program
- argv Pointer to argv of original program
- args_used Pointer to variable for storing the number of
- arguments used.
- func Pointer to the function to process options
- func_ctx It's context. Usually it is the structure to
- store additional options.
- DESCRIPTION
-
- This function looks for config files in default directories. Then it
- travesrses each of the files and calls func to process each option.
-
- RETURN
- 0 ok
- 1 given cinf_file doesn't exist
-*/
-
-int my_search_option_files(const char *conf_file, int *argc, char ***argv,
- uint *args_used, Process_option_func func,
- void *func_ctx)
-{
- const char **dirs, *forced_default_file;
- int error= 0;
- DBUG_ENTER("my_search_option_files");
-
- /* Check if we want to force the use a specific default file */
- get_defaults_files(*argc, *argv,
- (char **)&forced_default_file, &defaults_extra_file);
- if (forced_default_file)
- forced_default_file= strchr(forced_default_file,'=')+1;
- if (defaults_extra_file)
- defaults_extra_file= strchr(defaults_extra_file,'=')+1;
-
- (*args_used)+= (forced_default_file ? 1 : 0) + (defaults_extra_file ? 1 : 0);
-
- if (forced_default_file)
- {
- if ((error= search_default_file_with_ext(func, func_ctx, "", "",
- forced_default_file)) < 0)
- goto err;
- if (error > 0)
- {
- fprintf(stderr, "Could not open required defaults file: %s\n",
- forced_default_file);
- goto err;
- }
- }
- else if (dirname_length(conf_file))
- {
- if ((error= search_default_file(func, func_ctx, NullS, conf_file)) < 0)
- goto err;
- }
- 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)
- {
- if (search_default_file(func, func_ctx, *dirs, conf_file) < 0)
- goto err;
- }
- else if (defaults_extra_file)
- {
- if (search_default_file(func, func_ctx, NullS,
- defaults_extra_file) < 0)
- goto err; /* Fatal error */
-
- }
- }
- }
-
- DBUG_RETURN(error);
-
-err:
- fprintf(stderr,"Fatal error in defaults handling. Program aborted\n");
- exit(1);
- return 0; /* Keep compiler happy */
-}
-
-
-/*
- The option handler for load_defaults.
-
- SYNOPSIS
- handle_deault_option()
- in_ctx Handler context. In this case it is a
- handle_option_ctx structure.
- group_name The name of the group the option belongs to.
- option The very option to be processed. It is already
- prepared to be used in argv (has -- prefix)
-
- DESCRIPTION
- This handler checks whether a group is one of the listed and adds an option
- to the array if yes. Some other handler can record, for instance, all
- groups and their options, not knowing in advance the names and amount of
- groups.
-
- RETURN
- 0 - ok
- 1 - error occured
-*/
-
-static int handle_default_option(void *in_ctx, const char *group_name,
- const char *option)
-{
- char *tmp;
- struct handle_option_ctx *ctx= (struct handle_option_ctx *) in_ctx;
-
- if (find_type((char *)group_name, ctx->group, 3))
- {
- if (!(tmp= alloc_root(ctx->alloc, (uint) strlen(option) + 1)))
- return 1;
- if (insert_dynamic(ctx->args, (gptr) &tmp))
- return 1;
- strmov(tmp, option);
- }
-
- return 0;
-}
-
-
-/*
Gets --defaults-file and --defaults-extra-file options from command line.
SYNOPSIS
@@ -279,6 +136,7 @@
RETURN
0 ok
1 The given conf_file didn't exists
+ 2 The given conf_file was not a normal readable file
*/
@@ -286,16 +144,16 @@
int *argc, char ***argv)
{
DYNAMIC_ARRAY args;
+ const char **dirs, *forced_default_file;
TYPELIB group;
my_bool found_print_defaults=0;
uint args_used=0;
int error= 0;
MEM_ROOT alloc;
- char *ptr,**res;
- struct handle_option_ctx ctx;
+ char *ptr, **res;
+
DBUG_ENTER("load_defaults");
- init_default_directories();
init_alloc_root(&alloc,512,0);
if (*argc >= 2 && !strcmp(argv[0][1],"--no-defaults"))
{
@@ -315,22 +173,75 @@
DBUG_RETURN(0);
}
+ get_defaults_files(*argc, *argv,
+ (char **)&forced_default_file, &defaults_extra_file);
+ if (forced_default_file)
+ forced_default_file= strchr(forced_default_file,'=')+1;
+ if (defaults_extra_file)
+ defaults_extra_file= strchr(defaults_extra_file,'=')+1;
+
+ args_used+= (forced_default_file ? 1 : 0) + (defaults_extra_file ? 1 : 0);
+
group.count=0;
group.name= "defaults";
group.type_names= groups;
-
for (; *groups ; groups++)
group.count++;
if (my_init_dynamic_array(&args, sizeof(char*),*argc, 32))
goto err;
-
- ctx.alloc= &alloc;
- ctx.args= &args;
- ctx.group= &group;
-
- error= my_search_option_files(conf_file, argc, argv, &args_used,
- handle_default_option, (void *) &ctx);
+ if (forced_default_file)
+ {
+ if ((error= search_default_file_with_ext(&args, &alloc, "", "",
+ forced_default_file,
+ &group)) < 0)
+ goto err;
+ if (error > 0)
+ {
+ fprintf(stderr, "Could not open required defaults file: %s\n",
+ forced_default_file);
+ goto err;
+ }
+ }
+ else if (dirname_length(conf_file))
+ {
+ if ((error= search_default_file(&args, &alloc, NullS, conf_file,
+ &group)) < 0)
+ goto err;
+ }
+ else
+ {
+#ifdef __WIN__
+ char system_dir[FN_REFLEN];
+ GetWindowsDirectory(system_dir,sizeof(system_dir));
+ if ((search_default_file(&args, &alloc, system_dir, conf_file, &group)))
+ goto err;
+#endif
+#if defined(__EMX__) || defined(OS2)
+ {
+ const char *etc;
+ if ((etc= getenv("ETC")) &&
+ (search_default_file(&args, &alloc, etc, conf_file,
+ &group)) < 0)
+ goto err;
+ }
+#endif
+ for (dirs=default_directories ; *dirs; dirs++)
+ {
+ if (**dirs)
+ {
+ if (search_default_file(&args, &alloc, *dirs, conf_file,
+ &group) < 0)
+ goto err;
+ }
+ else if (defaults_extra_file)
+ {
+ if (search_default_file(&args, &alloc, NullS, defaults_extra_file,
+ &group) < 0)
+ goto err; /* Fatal error */
+ }
+ }
+ }
/*
Here error contains <> 0 only if we have a fully specified conf_file
or a forced default file
@@ -390,19 +301,17 @@
}
-static int search_default_file(Process_option_func opt_handler,
- void *handler_ctx,
+static int search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
const char *dir,
- const char *config_file)
+ const char *config_file, TYPELIB *group)
{
char **ext;
for (ext= (char**) f_extensions; *ext; *ext++)
{
int error;
- if ((error= search_default_file_with_ext(opt_handler, handler_ctx,
- dir, *ext,
- config_file)) < 0)
+ if ((error= search_default_file_with_ext(args, alloc, dir, *ext,
+ config_file, group)) < 0)
return error;
}
return 0;
@@ -414,32 +323,29 @@
SYNOPSIS
search_default_file_with_ext()
- opt_handler Option handler function. It is used to process
- every separate option.
- handler_ctx Pointer to the structure to store actual
- parameters of the function.
+ args Store pointer to found options here
+ alloc Allocate strings in this object
dir directory to read
- ext Extension for configuration file
config_file Name of configuration file
+ ext Extension for configuration file
group groups to read
RETURN
0 Success
-1 Fatal error, abort
1 File not found (Warning)
+ 2 File is not a regular file (Warning)
*/
-static int search_default_file_with_ext(Process_option_func opt_handler,
- void *handler_ctx,
- const char *dir,
- const char *ext,
- const char *config_file)
+static int search_default_file_with_ext(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
+ const char *dir, const char *ext,
+ const char *config_file,
+ TYPELIB *group)
{
- char name[FN_REFLEN+10], buff[4096], curr_gr[4096], *ptr, *end;
- char *value, option[4096];
+ char name[FN_REFLEN+10],buff[4096],*ptr,*end,*value,*tmp;
FILE *fp;
uint line=0;
- my_bool found_group=0;
+ my_bool read_values=0,found_group=0;
if ((dir ? strlen(dir) : 0 )+strlen(config_file) >= FN_REFLEN-3)
return 0; /* Ignore wrong paths */
@@ -496,8 +402,7 @@
}
for ( ; my_isspace(&my_charset_latin1,end[-1]) ; end--) ;/* Remove end space */
end[0]=0;
-
- strnmov(curr_gr, ptr, min((uint) (end-ptr)+1, 4096));
+ read_values=find_type(ptr,group,3) > 0;
continue;
}
if (!found_group)
@@ -507,17 +412,19 @@
name,line);
goto err;
}
-
-
+ if (!read_values)
+ continue;
end= remove_end_comment(ptr);
if ((value= strchr(ptr, '=')))
end= value; /* Option without argument */
for ( ; my_isspace(&my_charset_latin1,end[-1]) ; end--) ;
if (!value)
{
- strmake(strmov(option,"--"),ptr,(uint) (end-ptr));
- if (opt_handler(handler_ctx, curr_gr, option))
- goto err;
+ if (!(tmp=alloc_root(alloc,(uint) (end-ptr)+3)))
+ goto err;
+ strmake(strmov(tmp,"--"),ptr,(uint) (end-ptr));
+ if (insert_dynamic(args,(gptr) &tmp))
+ goto err;
}
else
{
@@ -539,7 +446,12 @@
value++;
value_end--;
}
- ptr=strnmov(strmov(option,"--"),ptr,(uint) (end-ptr));
+ if (!(tmp=alloc_root(alloc,(uint) (end-ptr)+3 +
+ (uint) (value_end-value)+1)))
+ goto err;
+ if (insert_dynamic(args,(gptr) &tmp))
+ goto err;
+ ptr=strnmov(strmov(tmp,"--"),ptr,(uint) (end-ptr));
*ptr++= '=';
for ( ; value != value_end; value++)
@@ -581,8 +493,6 @@
*ptr++= *value;
}
*ptr=0;
- if (opt_handler(handler_ctx, curr_gr, option))
- goto err;
}
}
my_fclose(fp,MYF(0));
@@ -629,7 +539,6 @@
char name[FN_REFLEN], **ext;
const char **dirs;
- init_default_directories();
puts("\nDefault options are read from the following files in the given order:");
if (dirname_length(conf_file))
@@ -692,23 +601,3 @@
}
#include <help_end.h>
-
-static void init_default_directories()
-{
- const char *env, **ptr= default_directories;
-
-#ifdef __WIN__
- *ptr++= "C:/";
-#elif defined(__NETWARE__)
- *ptr++= "sys:/etc/";
-#else
- *ptr++= "/etc/";
-#endif
- if ((env= getenv(STRINGIFY_ARG(DEFAULT_HOME_ENV))))
- *ptr++= env;
- *ptr++= ""; /* Place for defaults_extra_file */
-#if !defined(__WIN__) && !defined(__NETWARE__)
- *ptr++= "~/";;
-#endif
- *ptr= 0; /* end marker */
-}
| Thread |
|---|
| • bk commit into 5.0 tree (jani:1.1853) | jani | 5 Apr |