]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/file.cpp
added wxSplitFile() to decompose a file name into path + name + ext
[wxWidgets.git] / src / common / file.cpp
index 9011987266cddbd02b31c31203af830bf85230bf..05e18e8866ae12e87d9a910effc6d7a5aa3cc356 100644 (file)
@@ -27,7 +27,7 @@
 #endif
 
 // standard
-#if    defined(__WINDOWS__) && !defined(__GNUWIN32__)
+#if    defined(__WXMSW__) && !defined(__GNUWIN32__)
   #include  <io.h>
 #elif (defined(__UNIX__) || defined(__GNUWIN32__))
   #include  <unistd.h>
@@ -105,6 +105,7 @@ bool wxFile::Exists(const char *sz)
 wxFile::wxFile(const char *szFileName, OpenMode mode)
 {
   m_fd = fd_invalid;
+  m_error = FALSE;
 
   Open(szFileName, mode);
 }
@@ -190,7 +191,7 @@ bool wxFile::Close()
 // 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 ) {
@@ -202,17 +203,18 @@ off_t wxFile::Read(void *pBuf, off_t nCount)
 }
 
 // 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
@@ -235,21 +237,21 @@ bool wxFile::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;
 
@@ -366,7 +368,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);
 }