List:Internals« Previous MessageNext Message »
From:jani Date:April 5 2005 9:27pm
Subject:bk commit into 5.0 tree (jani:1.1853)
View as plain text  
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)jani5 Apr