summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsven@riska.(none) <>2008-02-06 20:55:12 +0100
committersven@riska.(none) <>2008-02-06 20:55:12 +0100
commitad316c259e83a0f4d1c142c935c7c0d60f4e187c (patch)
treed648da1ab3310cc8f12d3eeeca27990540f50310
parent51b33ea35d065541c80829b73ee3f8a94c4826b8 (diff)
downloadmariadb-git-ad316c259e83a0f4d1c142c935c7c0d60f4e187c.tar.gz
Replace windows path separator backslash by unix path separator forward
slash in filenames also for Create_file_log_event.
-rw-r--r--client/mysqlbinlog.cc38
1 files changed, 31 insertions, 7 deletions
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc
index 0553240894e..b4086b59c01 100644
--- a/client/mysqlbinlog.cc
+++ b/client/mysqlbinlog.cc
@@ -465,6 +465,31 @@ Create_file event for file_id: %u\n",ae->file_id);
Load_log_processor load_processor;
+/**
+ Replace windows-style backslashes by forward slashes so it can be
+ consumed by the mysql client, which requires Unix path.
+
+ @todo This is only useful under windows, so may be ifdef'ed out on
+ other systems. /Sven
+
+ @todo If a Create_file_log_event contains a filename with a
+ backslash (valid under unix), then we have problems under windows.
+ /Sven
+
+ @param[in,out] fname Filename to modify. The filename is modified
+ in-place.
+*/
+static void convert_path_to_forward_slashes(char *fname)
+{
+ while (*fname)
+ {
+ if (*fname == '\\')
+ *fname= '/';
+ fname++;
+ }
+}
+
+
static bool check_database(const char *log_dbname)
{
return one_database &&
@@ -582,6 +607,11 @@ int process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
*/
if (ce)
{
+ /*
+ We must not convert earlier, since the file is used by
+ my_open() in Load_log_processor::append().
+ */
+ convert_path_to_forward_slashes((char*) ce->fname);
ce->print(result_file, print_event_info, TRUE);
my_free((char*)ce->fname,MYF(MY_WME));
delete ce;
@@ -622,13 +652,7 @@ Create_file event for file_id: %u\n",exv->file_id);
if (fname)
{
- /*
- Fix the path so it can be consumed by mysql client (requires Unix path).
- */
- int stop= strlen(fname);
- for (int i= 0; i < stop; i++)
- if (fname[i] == '\\')
- fname[i]= '/';
+ convert_path_to_forward_slashes(fname);
exlq->print(result_file, print_event_info, fname);
my_free(fname, MYF(MY_WME));
}