diff options
Diffstat (limited to 'lib/win32/emu.cpp')
-rw-r--r-- | lib/win32/emu.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/lib/win32/emu.cpp b/lib/win32/emu.cpp index d69d8197..4224d62e 100644 --- a/lib/win32/emu.cpp +++ b/lib/win32/emu.cpp @@ -460,23 +460,28 @@ std::string ConvertPathToAbsoluteUnicode(const char *pFileName) // Is the path relative or absolute? // Absolute paths on Windows are always a drive letter // followed by ':' + + char wd[PATH_MAX]; + if (::getcwd(wd, PATH_MAX) == 0) + { + ::syslog(LOG_WARNING, + "Failed to open '%s': path too long", + pFileName); + errno = ENAMETOOLONG; + tmpStr = ""; + return tmpStr; + } - if (filename.length() >= 2 && filename[1] != ':') + if (filename.length() >= 1 && filename[0] == '\\') + { + // root directory of current drive. + tmpStr = wd; + tmpStr.resize(2); // drive letter and colon + } + else if (filename.length() >= 2 && filename[1] != ':') { // Must be relative. We need to get the // current directory to make it absolute. - - char wd[PATH_MAX]; - if (::getcwd(wd, PATH_MAX) == 0) - { - ::syslog(LOG_WARNING, - "Failed to open '%s': path too long", - pFileName); - errno = ENAMETOOLONG; - tmpStr = ""; - return tmpStr; - } - tmpStr += wd; if (tmpStr[tmpStr.length()] != '\\') { |