From ec5f4af9bdabc124bbe09abfefdb38c50f2aa823 Mon Sep 17 00:00:00 2001 From: Siep Kroonenberg Date: Sat, 8 Jan 2022 21:20:29 +0000 Subject: Slightly modified patch for dvisvgm from Naveen for gcc 11 git-svn-id: svn://tug.org/texlive/trunk@61533 c570f23f-e606-0410-a88d-b1316a301751 --- .../texk/dvisvgm/dvisvgm-src/src/FileSystem.cpp | 28 +++++++++++++++++++--- .../texk/dvisvgm/dvisvgm-src/src/FileSystem.hpp | 3 +++ 2 files changed, 28 insertions(+), 3 deletions(-) (limited to 'Build') diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.cpp index 476c0c8e58e..92960138e71 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.cpp @@ -34,8 +34,6 @@ #endif -using namespace std; - #ifdef _WIN32 #include #include "windows.hpp" @@ -52,6 +50,8 @@ using namespace std; #endif +using namespace std; + string FileSystem::TMPDIR; FileSystem::TemporaryDirectory FileSystem::_tmpdir; @@ -135,16 +135,38 @@ string FileSystem::ensureForwardSlashes (string path) { } +/** Returns the absolute path of the current working directory. */ string FileSystem::getcwd () { char buf[1024]; #ifdef _WIN32 - return ensureForwardSlashes(_getcwd(buf, 1024)); + GetCurrentDirectoryA(1024, buf); + return ensureForwardSlashes(buf); #else return ::getcwd(buf, 1024); #endif } +#ifdef _WIN32 +/** Returns the absolute path of the current directory of a given drive. + * Windows keeps a current directory for every drive, i.e. when accessing a drive + * without specifying a path (e.g. with "cd z:"), the current directory of that + * drive is used. + * @param[in] drive letter of drive to get the current directory from + * @return absolute path of the directory */ +string FileSystem::getcwd (char drive) { + string cwd = getcwd(); + if (cwd.length() > 1 && cwd[1] == ':' && tolower(cwd[0]) != tolower(drive)) { + chdir(string(1, drive)+":"); + string cwd2 = cwd; + cwd = getcwd(); + chdir(string(1, cwd2[0])+":"); + } + return cwd; +} +#endif + + /** Changes the work directory. * @param[in] dir path to new work directory * @return true on success */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.hpp index ad0e70f9737..0c13f178e96 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.hpp @@ -48,6 +48,9 @@ class FileSystem { static uint64_t filesize (const std::string &fname); static std::string ensureForwardSlashes (std::string path); static std::string getcwd (); +#ifdef _WIN32 + static std::string getcwd (char drive); +#endif static std::string tmpdir (); static bool chdir (const std::string &dir); static bool exists (const std::string &fname); -- cgit v1.2.3