From b59650beee150840ba8e9f649193d979d43de0c5 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 9 Jun 1998 13:14:20 +0000 Subject: [PATCH] wxTempFile bug corrected: the temp file is now created in the same dir as the original one, so that rename() always succeeds git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@79 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/file.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/common/file.cpp b/src/common/file.cpp index 9011987266..9f2093cccd 100644 --- a/src/common/file.cpp +++ b/src/common/file.cpp @@ -366,7 +366,20 @@ wxTempFile::wxTempFile(const wxString& strName) bool wxTempFile::Open(const wxString& strName) { m_strName = strName; - m_strTemp = tmpnam(NULL); + + // we want to create the file in the same directory as strName because + // otherwise rename() in Commit() might not work (if the files are on + // different partitions for example). Unfortunately, the only standard + // (POSIX) temp file creation function tmpnam() can't do it. + #ifdef __UNIX__ + static const char *szMktempSuffix = "XXXXXX"; + m_strTemp << strName << szMktempSuffix; + mktemp((char *)m_strTemp.c_str()); // @@@ even if the length doesn't change + //m_strTemp.UngetWriteBuf(); + #else // Windows + m_strTemp = tmpnam(NULL); + #endif // Windows/Unix + return m_file.Open(m_strTemp, wxFile::write); } -- 2.45.2