#endif
// standard
-#if defined(__WINDOWS__) && !defined(__GNUWIN32__)
+#if defined(__WXMSW__) && !defined(__GNUWIN32__)
#include <io.h>
#elif (defined(__UNIX__) || defined(__GNUWIN32__))
#include <unistd.h>
// read
off_t wxFile::Read(void *pBuf, off_t nCount)
{
- wxCHECK_RET( (pBuf != NULL) && IsOpened(), 0 );
+ wxCHECK( (pBuf != NULL) && IsOpened(), 0 );
int iRc = ::read(m_fd, pBuf, nCount);
if ( iRc == -1 ) {
// write
bool wxFile::Write(const void *pBuf, uint nCount)
{
- wxCHECK_RET( (pBuf != NULL) && IsOpened(), 0 );
+ wxCHECK( (pBuf != NULL) && IsOpened(), 0 );
int iRc = ::write(m_fd, pBuf, nCount);
if ( iRc == -1 ) {
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);
}