// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "file.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
};
#endif // W_OK
-// there is no distinction between text and binary files under Unix, so define
-// O_BINARY as 0 if the system headers don't do it already
-#if defined(__UNIX__) && !defined(O_BINARY)
- #define O_BINARY (0)
-#endif //__UNIX__
-
#ifdef __SALFORDC__
#include <unix.h>
#endif
-#ifndef MAX_PATH
- #define MAX_PATH 512
-#endif
-
// some broken compilers don't have 3rd argument in open() and creat()
#ifdef __SALFORDC__
#define ACCESS(access)
#include "wx/file.h"
#include "wx/filefn.h"
+// there is no distinction between text and binary files under Unix, so define
+// O_BINARY as 0 if the system headers don't do it already
+#if defined(__UNIX__) && !defined(O_BINARY)
+ #define O_BINARY (0)
+#endif //__UNIX__
+
#ifdef __WXMSW__
#include "wx/msw/mslu.h"
#endif
#include "wx/msw/private.h"
#endif
+#ifndef MAX_PATH
+ #define MAX_PATH 512
+#endif
// ============================================================================
// implementation of wxFile
// ----------------------------------------------------------------------------
// ctors
-wxFile::wxFile(const wxChar *szFileName, OpenMode mode)
+wxFile::wxFile(const wxString& fileName, OpenMode mode)
{
m_fd = fd_invalid;
m_error = false;
- Open(szFileName, mode);
+ Open(fileName, mode);
}
// create the file, fail if it already exists and bOverwrite
wxLogSysError(_("can't create file '%s'"), szFileName);
return false;
}
- else
- {
- Attach(fd);
- return true;
- }
+
+ Attach(fd);
+ return true;
}
// open the file
wxLogSysError(_("can't open file '%s'"), szFileName);
return false;
}
- else {
- Attach(fd);
- return true;
- }
+
+ Attach(fd);
+ return true;
}
// close
return iRc;
}
+bool wxFile::Write(const wxString& s, const wxMBConv& conv)
+{
+ const wxWX2MBbuf buf = s.mb_str(conv);
+ if ( !buf )
+ return false;
+
+ const size_t size = strlen(buf); // FIXME: use buf.length() when available
+ return Write(buf, size) == size;
+}
+
// flush
bool wxFile::Flush()
{
- if ( IsOpened() ) {
-#if defined(__VISUALC__) || wxHAVE_FSYNC
+#ifdef HAVE_FSYNC
+ // fsync() only works on disk files and returns errors for pipes, don't
+ // call it then
+ if ( IsOpened() && GetKind() == wxFILE_KIND_DISK )
+ {
if ( wxFsync(m_fd) == -1 )
{
wxLogSysError(_("can't flush file descriptor %d"), m_fd);
return false;
}
-#else // no fsync
- // just do nothing
-#endif // fsync
}
+#endif // HAVE_FSYNC
return true;
}
// seek
wxFileOffset wxFile::Seek(wxFileOffset ofs, wxSeekMode mode)
{
- wxASSERT( IsOpened() );
+ wxASSERT_MSG( IsOpened(), _T("can't seek on closed file") );
+ wxCHECK_MSG( ofs != wxInvalidOffset || mode != wxFromStart,
+ wxInvalidOffset,
+ _T("invalid absolute file offset") );
int origin;
switch ( mode ) {
break;
}
- if (ofs == wxInvalidOffset)
- {
- wxLogSysError(_("can't seek on file descriptor %d, large files support is not enabled."), m_fd);
- return wxInvalidOffset;
- }
wxFileOffset iRc = wxSeek(m_fd, ofs, origin);
if ( iRc == wxInvalidOffset )
{