mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 01:05:48 +01:00 
			
		
		
		
	Add Windows-specific CreateTempFile() implementation
Once again MSVC is the only compiler not supporting basic POSIX functionality.
This commit is contained in:
		@@ -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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user