Commit 0125760f authored by unknown's avatar unknown
Browse files

fix some issues with IM and long pathnames (with spaces)


server-tools/instance-manager/instance_options.cc:
  small cleanup
  -and-
  convert mysqld_path to the proper syntax after reading
server-tools/instance-manager/parse_output.cc:
  stop using get_word since it stops at spaces.  Now we just read the entire line and trim spaces.
parent 11632315
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -47,14 +47,12 @@ static inline int create_mysqld_command(Buffer *buf,
  if (buf->get_size()) /* malloc succeeded */
  {
#ifdef __WIN__
    buf->append(position, "\"", 1);
    position++;
    buf->append(position++, "\"", 1);
#endif
    buf->append(position, mysqld_path_str, mysqld_path_len);
    position+= mysqld_path_len;
#ifdef __WIN__
    buf->append(position, "\"", 1);
    position++;
    buf->append(position++, "\"", 1);
#endif
    /* here the '\0' character is copied from the option string */
    buf->append(position, option, option_len);
@@ -340,6 +338,10 @@ int Instance_options::complete_initialization(const char *default_path,
  if (!mysqld_path && !(mysqld_path= strdup_root(&alloc, default_path)))
    goto err;

  // it's safe to cast this to char* since this is a buffer we are allocating
  char* end= convert_dirname((char*)mysqld_path, mysqld_path, NullS);
  end[-1] = 0;

  mysqld_path_len= strlen(mysqld_path);

  if (mysqld_port)
+15 −2
Original line number Diff line number Diff line
@@ -24,6 +24,20 @@
#include "portability.h"


void trim_space(const char **text, uint *word_len)
{
	const char* start = *text;
	while (*start != 0 && *start == ' ')
		start++;
	*text = start;

	int len= strlen(start);
	const char* end= start + len - 1;
	while (end > start && (*end == ' ' || *end == '\r' || *end == '\n'))
		end--;
	*word_len= (end - start)+1;
}

/*
  Parse output of the given command

@@ -85,14 +99,13 @@ int parse_output_and_get_value(const char *command, const char *word,
      Get the word, which might contain non-alphanumeric characters. (Usually
      these are '/', '-' and '.' in the path expressions and filenames)
    */
    get_word((const char **) &linep, &found_word_len, NONSPACE);
    if (!strncmp(word, linep, wordlen))
    {
      /*
        If we have found the word, return the next one (this is usually
        an option value) or the whole line (if flag)
      */
      linep+= found_word_len;                     /* swallow the previous one */
      linep+= wordlen;                      /* swallow the previous one */
      if (flag & GET_VALUE)
      {
        get_word((const char **) &linep, &found_word_len, NONSPACE);