Use g_rename() instead of ::rename() in Session::cleanup_sources
authorTim Mayberry <mojofunk@gmail.com>
Wed, 14 Sep 2016 11:23:02 +0000 (21:23 +1000)
committerTim Mayberry <mojofunk@gmail.com>
Thu, 15 Sep 2016 11:27:55 +0000 (21:27 +1000)
The paths are in UTF-8 encoding and ::rename expects paths in the system
codepage encoding so ::rename will fail for any paths that contain characters
that aren't in the system codepage.

This fixes Flush Wastebasket on Windows where paths contain characters that
aren't in the system codepage(usually most non-ascii characters).

libs/ardour/session_state.cc

index 68ab485db702d0caf3e6c85e9fdb8e6cba32fd3c..f518d4e50258f073591a1528e7a425e677af4fec 100644 (file)
@@ -3306,7 +3306,7 @@ Session::cleanup_sources (CleanupReport& rep)
 
                if (0 == g_stat ((*x).c_str(), &statbuf)) {
 
-                       if (::rename ((*x).c_str(), newpath.c_str()) != 0) {
+                       if (::g_rename ((*x).c_str(), newpath.c_str()) != 0) {
                                error << string_compose (_("cannot rename unused file source from %1 to %2 (%3)"), (*x), newpath, strerror (errno)) << endmsg;
                                continue;
                        }
@@ -3327,7 +3327,7 @@ Session::cleanup_sources (CleanupReport& rep)
                                                                                                                         peakpath, _path, strerror (errno))
                                                  << endmsg;
                                        /* try to back out */
-                                       ::rename (newpath.c_str(), _path.c_str());
+                                       ::g_rename (newpath.c_str(), _path.c_str());
                                        goto out;
                                }
                        }