List:Commits« Previous MessageNext Message »
From:Timothy Smith Date:July 17 2008 7:45pm
Subject:bzr commit into mysql-5.1 branch (timothy.smith:2703) Bug#38180
View as plain text  
#At file:///home/tsmith/m/bzr/5.1/

 2703 Timothy Smith	2008-07-17 [merge]
      Up-merge 5.0.66a-release changes (via 5.0) into 5.1.
      
      Includes fix for Bug #38180, "options are read from ~/my.cnf instead of ~/.my.cnf"
modified:
  include/my_sys.h
  mysys/default.c
  mysys/mf_pack.c

=== modified file 'include/my_sys.h'
--- a/include/my_sys.h	2008-05-17 21:51:18 +0000
+++ b/include/my_sys.h	2008-07-17 17:45:08 +0000
@@ -693,6 +693,7 @@ extern char * fn_format(char * to,const 
 			   const char *form, uint flag);
 extern size_t strlength(const char *str);
 extern void pack_dirname(char * to,const char *from);
+extern size_t normalize_dirname(char * to, const char *from);
 extern size_t unpack_dirname(char * to,const char *from);
 extern size_t cleanup_dirname(char * to,const char *from);
 extern size_t system_filename(char * to,const char *from);

=== modified file 'mysys/default.c'
--- a/mysys/default.c	2008-07-02 15:54:54 +0000
+++ b/mysys/default.c	2008-07-17 17:45:08 +0000
@@ -974,8 +974,7 @@ static int add_directory(MEM_ROOT *alloc
   char *p;
   my_bool err __attribute__((unused));
 
-  /* Normalize directory name */
-  len= unpack_dirname(buf, dir);
+  len= normalize_dirname(buf, dir);
   if (!(p= strmake_root(alloc, buf, len)))
     return 1;  /* Failure */
   /* Should never fail if DEFAULT_DIRS_SIZE is correct size */
@@ -1026,7 +1025,7 @@ static const char *my_get_module_parent(
 {
   char *last= NULL;
   char *end;
-  if (!GetModuleFileName(NULL, buf, size))
+  if (!GetModuleFileName(NULL, buf, (DWORD) size))
     return NULL;
   end= strend(buf);
 

=== modified file 'mysys/mf_pack.c'
--- a/mysys/mf_pack.c	2007-12-17 08:16:47 +0000
+++ b/mysys/mf_pack.c	2008-07-17 17:45:08 +0000
@@ -277,22 +277,64 @@ void symdirget(char *dir)
 #endif /* USE_SYMDIR */
 
 
-/*
-  Fixes a directroy name so that can be used by open()
+/**
+  Convert a directory name to a format which can be compared as strings
 
-  SYNOPSIS
-    unpack_dirname()
-    to			result-buffer, FN_REFLEN characters. may be == from
-    from		'Packed' directory name (may contain ~)
-
- IMPLEMENTATION
-  Make that last char of to is '/' if from not empty and
-  from doesn't end in FN_DEVCHAR
-  Uses cleanup_dirname and changes ~/.. to home_dir/..
+  @param to     result buffer, FN_REFLEN chars in length; may be == from
+  @param from   'packed' directory name, in whatever format
+  @returns      size of the normalized name
+
+  @details
+  - Ensures that last char is FN_LIBCHAR, unless it is FN_DEVCHAR
+  - Uses cleanup_dirname
+
+  It does *not* expand ~/ (although, see cleanup_dirname).  Nor does it do
+  any case folding.  All case-insensitive normalization should be done by
+  the caller.
+*/
 
-  Changes a UNIX filename to system filename (replaces / with \ on windows)
+size_t normalize_dirname(char *to, const char *from)
+{
+  size_t length;
+  char buff[FN_REFLEN];
+  DBUG_ENTER("normalize_dirname");
 
-  RETURN
+  /*
+    Despite the name, this actually converts the name to the system's
+    format (TODO: rip out the non-working VMS stuff and name this
+    properly).
+  */
+  (void) intern_filename(buff, from);
+  length= strlen(buff);			/* Fix that '/' is last */
+  if (length &&
+#ifdef FN_DEVCHAR
+      buff[length - 1] != FN_DEVCHAR &&
+#endif
+      buff[length - 1] != FN_LIBCHAR && buff[length - 1] != '/')
+  {
+    buff[length]= FN_LIBCHAR;
+    buff[length + 1]= '\0';
+  }
+
+  length=cleanup_dirname(to, buff);
+
+  DBUG_RETURN(length);
+}
+
+
+/**
+  Fixes a directory name so that can be used by open()
+
+  @param to     Result buffer, FN_REFLEN characters. May be == from
+  @param from   'Packed' directory name (may contain ~)
+
+  @details
+  - Uses normalize_dirname()
+  - Expands ~/... to home_dir/...
+  - Resolves MySQL's fake "foo.sym" symbolic directory names (if USE_SYMDIR)
+  - Changes a UNIX filename to system filename (replaces / with \ on windows)
+
+  @returns
    Length of new directory name (= length of to)
 */
 
@@ -302,19 +344,8 @@ size_t unpack_dirname(char * to, const c
   char buff[FN_REFLEN+1+4],*suffix,*tilde_expansion;
   DBUG_ENTER("unpack_dirname");
 
-  (void) intern_filename(buff,from);	    /* Change to intern name */
-  length= strlen(buff);                     /* Fix that '/' is last */
-  if (length &&
-#ifdef FN_DEVCHAR
-      buff[length-1] != FN_DEVCHAR &&
-#endif
-      buff[length-1] != FN_LIBCHAR && buff[length-1] != '/')
-  {
-    buff[length]=FN_LIBCHAR;
-    buff[length+1]= '\0';
-  }
+  length= normalize_dirname(buff, from);
 
-  length=cleanup_dirname(buff,buff);
   if (buff[0] == FN_HOMELIB)
   {
     suffix=buff+1; tilde_expansion=expand_tilde(&suffix);

Thread
bzr commit into mysql-5.1 branch (timothy.smith:2703) Bug#38180Timothy Smith17 Jul