aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2021-09-13 19:40:53 +0200
committersfan5 <sfan5@live.de>2021-09-14 20:45:41 +0200
commit4feb799b7e33c1a544036a830faf00eb33d3eaf5 (patch)
tree7ac0c1f029688cbd538c3b13db4d877df9b36de3
parentb480a3e9fd7036208068c4fad410f0cae8fc9c4f (diff)
downloadminetest-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.cpp40
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