diff options
author | sfan5 <sfan5@live.de> | 2021-09-13 19:40:53 +0200 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2021-09-14 20:45:41 +0200 |
commit | 4feb799b7e33c1a544036a830faf00eb33d3eaf5 (patch) | |
tree | 7ac0c1f029688cbd538c3b13db4d877df9b36de3 | |
parent | b480a3e9fd7036208068c4fad410f0cae8fc9c4f (diff) | |
download | minetest-4feb799b7e33c1a544036a830faf00eb33d3eaf5.tar.gz minetest-4feb799b7e33c1a544036a830faf00eb33d3eaf5.tar.bz2 minetest-4feb799b7e33c1a544036a830faf00eb33d3eaf5.zip |
Add Windows-specific CreateTempFile() implementation
Once again MSVC is the only compiler not supporting basic POSIX functionality.
-rw-r--r-- | src/filesys.cpp | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/src/filesys.cpp b/src/filesys.cpp index 0941739b8..a07370c0e 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -24,7 +24,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include <cstdlib> #include <cstring> #include <cerrno> -#include <unistd.h> #include <fstream> #include "log.h" #include "config.h" @@ -38,6 +37,7 @@ namespace fs #define _WIN32_WINNT 0x0501 #include <windows.h> #include <shlwapi.h> +#include <io.h> std::vector<DirListNode> GetDirListing(const std::string &pathstring) { @@ -178,13 +178,27 @@ std::string TempPath() errorstream<<"GetTempPath failed, error = "<<GetLastError()<<std::endl; return ""; } - std::vector<char> buf(bufsize); + std::string buf; + buf.resize(bufsize); DWORD len = GetTempPath(bufsize, &buf[0]); if(len == 0 || len > bufsize){ errorstream<<"GetTempPath failed, error = "<<GetLastError()<<std::endl; return ""; } - return std::string(buf.begin(), buf.begin() + len); + buf.resize(len); + return buf; +} + +std::string CreateTempFile() +{ + std::string path = TempPath() + DIR_DELIM "MT_XXXXXX"; + _mktemp_s(&path[0], path.size() + 1); // modifies path + HANDLE file = CreateFile(path.c_str(), GENERIC_WRITE, 0, nullptr, + CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); + if (file == INVALID_HANDLE_VALUE) + return ""; + CloseHandle(file); + return path; } #else // POSIX @@ -366,6 +380,16 @@ std::string TempPath() #endif } +std::string CreateTempFile() +{ + std::string path = TempPath() + DIR_DELIM "MT_XXXXXX"; + int fd = mkstemp(&path[0]); // modifies path + if (fd == -1) + return ""; + close(fd); + return path; +} + #endif void GetRecursiveDirs(std::vector<std::string> &dirs, const std::string &dir) @@ -813,15 +837,5 @@ bool Rename(const std::string &from, const std::string &to) return rename(from.c_str(), to.c_str()) == 0; } -std::string CreateTempFile() -{ - std::string path = TempPath() + DIR_DELIM "MT_XXXXXX"; - int fd = mkstemp(&path[0]); // modifies path - if (fd == -1) - return ""; - close(fd); - return path; -} - } // namespace fs |