#endif
// standard
-#if defined(__WINDOWS__) && !defined(__GNUWIN32__)
+#if defined(__WXMSW__) && !defined(__GNUWIN32__)
#include <io.h>
#elif (defined(__UNIX__) || defined(__GNUWIN32__))
#include <unistd.h>
wxFile::wxFile(const char *szFileName, OpenMode mode)
{
m_fd = fd_invalid;
+ m_error = FALSE;
Open(szFileName, mode);
}
// 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)
+uint 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 ) {
wxLogSysError("can't write to file descriptor %d", m_fd);
- return FALSE;
+ m_error = TRUE;
+ return 0;
}
else
- return TRUE;
+ return iRc;
}
// flush
// ----------------------------------------------------------------------------
// seek
-off_t wxFile::Seek(off_t ofs, SeekMode mode)
+off_t wxFile::Seek(off_t ofs, wxSeekMode mode)
{
wxASSERT( IsOpened() );
int flag = -1;
switch ( mode ) {
- case FromStart:
+ case wxFromStart:
flag = SEEK_SET;
break;
- case FromCurrent:
+ case wxFromCurrent:
flag = SEEK_CUR;
break;
- case FromEnd:
+ case wxFromEnd:
flag = SEEK_END;
break;
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);
}