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
bool wxTempFile::Open(const wxString& strName)
{
m_strName = 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);
}
return m_file.Open(m_strTemp, wxFile::write);
}