Commit 2722a286 authored by unknown's avatar unknown
Browse files

Bug #6660 mysqldump creates bad pathnames on Windows

This really should not happen on Windows and part of the problem not fixed here is why show create table includes data directory when being run on Windows.  However, this patch fixes the bug in mysqldump.c

mysqldump.c:
  Added fixPaths function to convert \ to / in data directory and index directory entries only on Windows


client/mysqldump.c:
  Added fixPaths function to convert \ to / in data directory and index directory entries only on Windows
BitKeeper/etc/logging_ok:
  Logging to logging@openlogging.org accepted
parent 90697f24
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -190,6 +190,7 @@ ramil@mysql.com
ranger@regul.home.lan
rburnett@build.mysql.com
reggie@bob.(none)
reggie@mdk10.(none)
root@home.(none)
root@mc04.(none)
root@x3.internalnet
+22 −0
Original line number Diff line number Diff line
@@ -1080,6 +1080,27 @@ static void print_xml_row(FILE *xml_file, const char *row_name,
  check_io(xml_file);
}


/*  fixPaths -- on Windows only, this function will iterate through the output
  of show create table and change any \ characters that appear in the data directory
  or index directory elements to be /  

  RETURN    
     void
*/
static void fixPaths(char *buf, int buflen) 
{
#ifdef __WIN__
   int i = 0;
   for (i=0; i < buflen; i++)
   {
      if (buf[i] != '\\') continue;
      if (i != 0 && buf[i-1] == '\\') continue;
      if (i != (buflen-1) && buf[i+1] == '\\') continue;
      buf[i] = '/';}
#endif
}

/*
  getStructure -- retrievs database structure, prints out corresponding
  CREATE statement and fills out insert_pat.
@@ -1159,6 +1180,7 @@ static uint getTableStructure(char *table, char* db)

      tableRes=mysql_store_result(sock);
      row=mysql_fetch_row(tableRes);
      fixPaths(row[1], strlen(row[1]));    // this really only does something on Windows
      fprintf(sql_file, "%s;\n", row[1]);
      check_io(sql_file);
      mysql_free_result(tableRes);