summaryrefslogtreecommitdiff
path: root/libs/pbd/pathexpand.cc
diff options
context:
space:
mode:
authorTim Mayberry <mojofunk@gmail.com>2016-09-19 10:11:59 +1000
committerTim Mayberry <mojofunk@gmail.com>2016-09-19 14:47:52 +1000
commit569167a603ef812a234d3c02f6a94976571a70ea (patch)
treeecb02ab54ca4852118bed1a0c1005bf567708478 /libs/pbd/pathexpand.cc
parent75ade6b2df3926b965f5af6ec6d7ed8659167b73 (diff)
Move PBD::canonical_path to pbd/file_utils.h/cc and reimplement for Windows
This fixes the libpbd testCanonicalPathUTF8 and libardour open_session_utf8_path unit tests You can now have Sessions with localized names containing characters that aren't in the system codepage on Windows. It also fixes the issue where a Session would not open when it was moved into a path with characters that aren't in the system codepage. The only use case for calling canonical_path/realpath on the session path AFAICT is for resolving relative paths that are passed via the command line/terminal. I'm doubtful that works correctly on Windows because of character encoding issues with the current API we use for that(not glib), so it is slightly ironic that this issue was caused by an incorrect implementation of a function that is not really necessary on Windows at this point in time.
Diffstat (limited to 'libs/pbd/pathexpand.cc')
-rw-r--r--libs/pbd/pathexpand.cc66
1 files changed, 0 insertions, 66 deletions
diff --git a/libs/pbd/pathexpand.cc b/libs/pbd/pathexpand.cc
index a92005a086..63ae348df1 100644
--- a/libs/pbd/pathexpand.cc
+++ b/libs/pbd/pathexpand.cc
@@ -37,72 +37,6 @@
using std::string;
using std::vector;
-#ifdef COMPILER_MINGW
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <glibmm.h>
-
-/****************************************************************
- * Emulate POSIX realpath() using Win32 _fullpath() since realpath()
- * is not available.
- *
- * Returns:
- * On Success: A pointer to the resolved (absolute) path
- * On Failure: 0 (NULL)
- */
-
-static char*
-realpath (const char *original_path, char resolved_path[_MAX_PATH+1])
-{
- char *rpath = 0;
- bool bIsSymLink = false; // We'll probably need to test the incoming path
- // to find out if it points to a Windows shortcut
- // (or a hard link) and set this appropriately.
-
- if (bIsSymLink) {
- // At the moment I'm not sure if Windows '_fullpath()' is directly
- // equivalent to POSIX 'realpath()' - in as much as the latter will
- // resolve the supplied path if it happens to point to a symbolic
- // link ('_fullpath()' probably DOESN'T do this but I'm not really
- // sure if Ardour needs such functionality anyway). Therefore we'll
- // possibly need to add that functionality here at a later date.
- } else {
- char temp[(_MAX_PATH+1)*6]; // Allow for maximum length of a path in wchar characters
-
- // POSIX 'realpath()' requires that the buffer size is at
- // least PATH_MAX+1, so assume that the user knew this !!
-
- rpath = _fullpath (temp, Glib::locale_from_utf8 (original_path).c_str(), _MAX_PATH);
-
- if (0 != rpath) {
- snprintf (resolved_path, _MAX_PATH+1, "%s", Glib::locale_to_utf8 (temp).c_str());
- }
-
- }
-
- return (rpath);
-}
-
-#endif // COMPILER_MINGW
-
-string
-PBD::canonical_path (const std::string& path)
-{
- char buf[PATH_MAX+1];
-
- if (realpath (path.c_str(), buf) == NULL) {
- DEBUG_TRACE (DEBUG::FileUtils,
- string_compose("PBD::canonical_path: Unable to resolve %1: %2\n", path, g_strerror(errno)));
- return path;
- }
-
- DEBUG_TRACE (DEBUG::FileUtils,
- string_compose("PBD::canonical_path %1 resolved to: %2\n", path, string(buf)));
-
- return string (buf);
-}
-
string
PBD::path_expand (string path)
{