X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fos_win32.cpp;h=82e57d2eb69adfe1a72074505bae21856b58016b;hb=cf14e814124ccbc8155fa1dde98d03be319c0e87;hp=145d5065923c7ce80deac55f66a82cf03d539775;hpb=ed61ce74b727cc9f6f3b87e3c30a21657fe7df38;p=lyx.git diff --git a/src/support/os_win32.cpp b/src/support/os_win32.cpp index 145d506592..82e57d2eb6 100644 --- a/src/support/os_win32.cpp +++ b/src/support/os_win32.cpp @@ -38,6 +38,7 @@ #include #include // _getdrive +#include // GetFinalPathNameByHandle #include // SHGetFolderPath #include #include @@ -158,6 +159,11 @@ void init(int argc, char ** argv[]) */ + // Remove PYTHONPATH from the environment as it may point to an + // external python installation and cause reconfigure failures. + unsetEnv("PYTHONPATH"); + + #if defined(_MSC_VER) && (_MSC_VER >= 1900) // Removing an argument from argv leads to an assertion on Windows // when compiling with MSVC 2015 in debug mode (see bug #10440). @@ -589,45 +595,18 @@ string real_path(string const & path) // See http://msdn.microsoft.com/en-us/library/aa366789(VS.85).aspx QString const qpath = get_long_path(toqstr(path)); HANDLE hpath = CreateFileW((wchar_t *) qpath.utf16(), GENERIC_READ, - FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); + FILE_SHARE_READ, NULL, OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, NULL); if (hpath == INVALID_HANDLE_VALUE) { // The file cannot be accessed. return path; } - // Get the file size. - DWORD size_hi = 0; - DWORD size_lo = GetFileSize(hpath, &size_hi); - - if (size_lo == 0 && size_hi == 0) { - // A zero-length file cannot be mapped. - CloseHandle(hpath); - return path; - } - - // Create a file mapping object. - HANDLE hmap = CreateFileMapping(hpath, NULL, PAGE_READONLY, 0, 1, NULL); - - if (!hmap) { - CloseHandle(hpath); - return path; - } - - // Create a file mapping to get the file name. - void * pmem = MapViewOfFile(hmap, FILE_MAP_READ, 0, 0, 1); - - if (!pmem) { - CloseHandle(hmap); - CloseHandle(hpath); - return path; - } - TCHAR realpath[MAX_PATH + 1]; - if (!GetMappedFileName(GetCurrentProcess(), pmem, realpath, MAX_PATH)) { - UnmapViewOfFile(pmem); - CloseHandle(hmap); + DWORD size = GetFinalPathNameByHandle(hpath, realpath, MAX_PATH, VOLUME_NAME_NT); + if (size > MAX_PATH) { CloseHandle(hpath); return path; } @@ -673,8 +652,6 @@ string real_path(string const & path) while (*p++) ; } while (!found && *p); } - UnmapViewOfFile(pmem); - CloseHandle(hmap); CloseHandle(hpath); string const retpath = subst(string(realpath), '\\', '/'); return FileName::fromFilesystemEncoding(retpath).absFileName();