Commit 75e1b9e7 authored by reggie@mdk10.(none)'s avatar reggie@mdk10.(none)

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
parent 13ec961c
...@@ -190,6 +190,7 @@ ramil@mysql.com ...@@ -190,6 +190,7 @@ ramil@mysql.com
ranger@regul.home.lan ranger@regul.home.lan
rburnett@build.mysql.com rburnett@build.mysql.com
reggie@bob.(none) reggie@bob.(none)
reggie@mdk10.(none)
root@home.(none) root@home.(none)
root@mc04.(none) root@mc04.(none)
root@x3.internalnet root@x3.internalnet
......
...@@ -1080,6 +1080,27 @@ static void print_xml_row(FILE *xml_file, const char *row_name, ...@@ -1080,6 +1080,27 @@ static void print_xml_row(FILE *xml_file, const char *row_name,
check_io(xml_file); 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 getStructure -- retrievs database structure, prints out corresponding
CREATE statement and fills out insert_pat. CREATE statement and fills out insert_pat.
...@@ -1159,6 +1180,7 @@ static uint getTableStructure(char *table, char* db) ...@@ -1159,6 +1180,7 @@ static uint getTableStructure(char *table, char* db)
tableRes=mysql_store_result(sock); tableRes=mysql_store_result(sock);
row=mysql_fetch_row(tableRes); 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]); fprintf(sql_file, "%s;\n", row[1]);
check_io(sql_file); check_io(sql_file);
mysql_free_result(tableRes); mysql_free_result(tableRes);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment