List:Commits« Previous MessageNext Message »
From:Petr Chardin Date:November 23 2006 4:27pm
Subject:bk commit into 5.1 tree (petr:1.2381)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of cps. When cps 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@stripped, 2006-11-23 18:26:56+03:00, petr@stripped +1 -0
  Merge pchardin@stripped:/home/bk/mysql-5.1-runtime
  into  outpost.site:/home/cps/mysql/trees/mysql-5.1-runtime
  MERGE: 1.2342.1.1

  server-tools/instance-manager/instance_options.cc@stripped, 2006-11-23 18:26:54+03:00,
petr@stripped +3 -5
    manual merge
    MERGE: 1.38.1.1

# 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:	petr
# Host:	outpost.site
# Root:	/home/cps/mysql/trees/mysql-5.1-runtime/RESYNC

--- 1.40/server-tools/instance-manager/instance_options.cc	2006-11-21 17:47:11 +03:00
+++ 1.41/server-tools/instance-manager/instance_options.cc	2006-11-23 18:26:54 +03:00
@@ -60,6 +60,29 @@
   return TRUE;
 }
 
+static inline bool is_path_separator(char ch)
+{
+#if defined(__WIN__) || defined(__NETWARE__)
+  /* On windows and netware more delimiters are possible */
+  return ch == FN_LIBCHAR || ch == FN_DEVCHAR || ch == '/';
+#else
+  return ch == FN_LIBCHAR;                      /* Unixes */
+#endif
+}
+
+
+static char *find_last_path_separator(char *path, uint length)
+{
+  while (length)
+  {
+    if (is_path_separator(path[length]))
+      return path + length;
+    length--;
+  }
+  return NULL; /* No path separator found */
+}
+
+
 
 bool Instance_options::is_option_im_specific(const char *option_name)
 {
@@ -436,24 +459,50 @@
   int arg_idx;
   const char *tmp;
   char *end;
+  char bin_name_firstchar;
 
   if (!mysqld_path.str)
   {
-    /* Need one extra byte, as convert_dirname() adds a slash at the end. */
-    mysqld_path.str= alloc_root(&alloc,
-                                strlen(Options::Main::default_mysqld_path) + 2);
+    /*
+      Need to copy the path to allocated memory, as convert_dirname() might
+      need to change it
+    */
+    mysqld_path.str=
+      alloc_root(&alloc, strlen(Options::Main::default_mysqld_path) + 1);
 
-    if (! mysqld_path.str)
+    if (!mysqld_path.str)
       return TRUE;
 
     strcpy(mysqld_path.str, Options::Main::default_mysqld_path);
   }
 
-  // it's safe to cast this to char* since this is a buffer we are allocating
-  end= convert_dirname((char*)mysqld_path.str, mysqld_path.str, NullS);
-  end[-1]= 0;
-
   mysqld_path.length= strlen(mysqld_path.str);
+
+  /*
+    If we found path with no slashes (end == NULL), we should not call
+    convert_dirname() at all. As we have got relative path to the binary.
+    That is, user supposes that mysqld resides in the same dir as
+    mysqlmanager.
+  */
+  if ((end= find_last_path_separator(mysqld_path.str, mysqld_path.length)))
+  {
+    bin_name_firstchar= end[1];
+
+    /*
+      Below we will conver the path to mysqld in the case, it was given
+      in a format of another OS (e.g. uses '/' instead of '\' etc).
+      Here we strip the path to get rid of the binary name ("mysqld"),
+      we do it by removing first letter of the binary name (e.g. 'm'
+      in "mysqld"). Later we put it back.
+    */
+    end[1]= 0;
+
+    /* convert dirname to the format of current OS */
+    convert_dirname((char*)mysqld_path.str, mysqld_path.str, NullS);
+
+    /* put back the first character of the binary name*/
+    end[1]= bin_name_firstchar;
+  }
 
   if (mysqld_port)
     mysqld_port_val= atoi(mysqld_port);
Thread
bk commit into 5.1 tree (petr:1.2381)Petr Chardin23 Nov