git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30952
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
dnl check for large file support
AC_SYS_LARGEFILE
dnl check for large file support
AC_SYS_LARGEFILE
dnl we need to define _FILE_OFFSET_BITS or _LARGE_FILES on the compiler command
dnl line because otherwise the system headers risk being included before
dnl we need to define _FILE_OFFSET_BITS or _LARGE_FILES on the compiler command
dnl line because otherwise the system headers risk being included before
All:
- new classes for reading and writing ZIP files (M.J.Wetherell)
All:
- new classes for reading and writing ZIP files (M.J.Wetherell)
+- large files support for wxFFile (M.J.Wetherell)
- classes in the manual are now cross-referenced (Zbigniew Zagórski)
- Norwegian (Bokmål) translation added (Hans F. Nordhaug)
- wxDynamicLibrary::HasSymbol() added
- classes in the manual are now cross-referenced (Zbigniew Zagórski)
- Norwegian (Bokmål) translation added (Hans F. Nordhaug)
- wxDynamicLibrary::HasSymbol() added
-- support for huge (>2 Gb) files (Tim Kosse)
+- support for large (>2 Gb) files in wxFile (Tim Kosse)
- number of fixes to wxPluginManager (Rick Brice, Hans Van Leemputten)
- fixed memory leak in wxURL when using a proxy (Steven Van Ingelgem)
- fixed bug in wxDateTime::Set(jdn) when DST was in effect
- number of fixes to wxPluginManager (Rick Brice, Hans Van Leemputten)
- fixed memory leak in wxURL when using a proxy (Steven Van Ingelgem)
- fixed bug in wxDateTime::Set(jdn) when DST was in effect
\membersection{wxFFile::Length}\label{wxffilelength}
\membersection{wxFFile::Length}\label{wxffilelength}
-\constfunc{size\_t}{Length}{\void}
+\constfunc{wxFileOffset}{Length}{\void}
Returns the length of the file.
Returns the length of the file.
\membersection{wxFFile::Read}\label{wxffileread}
\membersection{wxFFile::Read}\label{wxffileread}
-\func{size\_t}{Read}{\param{void*}{ buffer}, \param{off\_t}{ count}}
+\func{size\_t}{Read}{\param{void*}{ buffer}, \param{size\_t}{ count}}
Reads the specified number of bytes into a buffer, returning the actual number read.
Reads the specified number of bytes into a buffer, returning the actual number read.
\membersection{wxFFile::Seek}\label{wxffileseek}
\membersection{wxFFile::Seek}\label{wxffileseek}
-\func{bool}{Seek}{\param{long }{ofs}, \param{wxSeekMode }{mode = wxFromStart}}
+\func{bool}{Seek}{\param{wxFileOffset }{ofs}, \param{wxSeekMode }{mode = wxFromStart}}
Seeks to the specified position and returns \true on success.
Seeks to the specified position and returns \true on success.
\membersection{wxFFile::SeekEnd}\label{wxffileseekend}
\membersection{wxFFile::SeekEnd}\label{wxffileseekend}
-\func{bool}{SeekEnd}{\param{long }{ofs = 0}}
+\func{bool}{SeekEnd}{\param{wxFileOffset }{ofs = 0}}
Moves the file pointer to the specified number of bytes before the end of the file
and returns \true on success.
Moves the file pointer to the specified number of bytes before the end of the file
and returns \true on success.
\membersection{wxFFile::Tell}\label{wxffiletell}
\membersection{wxFFile::Tell}\label{wxffiletell}
-\constfunc{size\_t}{Tell}{\void}
+\constfunc{wxFileOffset}{Tell}{\void}
Returns the current position.
Returns the current position.
// file pointer operations (return ofsInvalid on failure)
// move ptr ofs bytes related to start/current pos/end of file
// file pointer operations (return ofsInvalid on failure)
// move ptr ofs bytes related to start/current pos/end of file
- bool Seek(long ofs, wxSeekMode mode = wxFromStart);
+ bool Seek(wxFileOffset ofs, wxSeekMode mode = wxFromStart);
// move ptr to ofs bytes before the end
// move ptr to ofs bytes before the end
- bool SeekEnd(long ofs = 0) { return Seek(ofs, wxFromEnd); }
+ bool SeekEnd(wxFileOffset ofs = 0) { return Seek(ofs, wxFromEnd); }
// get current position in the file
// get current position in the file
+ wxFileOffset Tell() const;
// get current file length
// get current file length
+ wxFileOffset Length() const;
// simple accessors: note that Eof() and Error() may only be called if
// IsOpened()!
// simple accessors: note that Eof() and Error() may only be called if
// IsOpened()!
/* Define this if you have _vsnwprintf */
#undef HAVE__VSNWPRINTF
/* Define this if you have _vsnwprintf */
#undef HAVE__VSNWPRINTF
+/* Define if fseeko and ftello are available. */
+#undef HAVE_FSEEKO
+
/* Define this if you are using gtk and gdk contains support for X11R6 XIM */
#undef HAVE_XIM
/* Define this if you are using gtk and gdk contains support for X11R6 XIM */
#undef HAVE_XIM
/* Define this if you are using gtk and gdk contains support for X11R6 XIM */
#undef HAVE_XIM
/* Define this if you are using gtk and gdk contains support for X11R6 XIM */
#undef HAVE_XIM
+/* Define if fseeko and ftello are available. */
+#undef HAVE_FSEEKO
+
/* ---------------------------------------------------------------------
Win32 adjustments section
---------------------------------------------------------------------
/* ---------------------------------------------------------------------
Win32 adjustments section
---------------------------------------------------------------------
// implementation
// ============================================================================
// implementation
// ============================================================================
+// ----------------------------------------------------------------------------
+// seek and tell with large file support if available
+// ----------------------------------------------------------------------------
+
+#ifdef HAVE_FSEEKO
+# define wxFseek fseeko
+# define wxFtell ftello
+#else
+# define wxFseek fseek
+# define wxFtell ftell
+#endif
+
// ----------------------------------------------------------------------------
// opening the file
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// opening the file
// ----------------------------------------------------------------------------
// seeking
// ----------------------------------------------------------------------------
// seeking
// ----------------------------------------------------------------------------
-bool wxFFile::Seek(long ofs, wxSeekMode mode)
+bool wxFFile::Seek(wxFileOffset ofs, wxSeekMode mode)
{
wxCHECK_MSG( IsOpened(), false, wxT("can't seek on closed file") );
{
wxCHECK_MSG( IsOpened(), false, wxT("can't seek on closed file") );
- if ( fseek(m_fp, ofs, origin) != 0 )
+#ifndef HAVE_FSEEKO
+ if ((long)ofs != ofs)
+ {
+ wxLogError(_("Seek error on file '%s' (large files not supported by stdio)"), m_name.c_str());
+
+ return false;
+ }
+#endif
+
+ if ( wxFseek(m_fp, ofs, origin) != 0 )
{
wxLogSysError(_("Seek error on file '%s'"), m_name.c_str());
{
wxLogSysError(_("Seek error on file '%s'"), m_name.c_str());
-size_t wxFFile::Tell() const
+wxFileOffset wxFFile::Tell() const
- wxCHECK_MSG( IsOpened(), (size_t)-1,
+ wxCHECK_MSG( IsOpened(), wxInvalidOffset,
_T("wxFFile::Tell(): file is closed!") );
_T("wxFFile::Tell(): file is closed!") );
- long rc = ftell(m_fp);
- if ( rc == -1 )
+ wxFileOffset rc = wxFtell(m_fp);
+ if ( rc == wxInvalidOffset )
{
wxLogSysError(_("Can't find current position in file '%s'"),
m_name.c_str());
}
{
wxLogSysError(_("Can't find current position in file '%s'"),
m_name.c_str());
}
-size_t wxFFile::Length() const
+wxFileOffset wxFFile::Length() const
- wxCHECK_MSG( IsOpened(), (size_t)-1,
+ wxCHECK_MSG( IsOpened(), wxInvalidOffset,
_T("wxFFile::Length(): file is closed!") );
wxFFile& self = *(wxFFile *)this; // const_cast
_T("wxFFile::Length(): file is closed!") );
wxFFile& self = *(wxFFile *)this; // const_cast
- size_t posOld = Tell();
- if ( posOld != (size_t)-1 )
+ wxFileOffset posOld = Tell();
+ if ( posOld != wxInvalidOffset )
{
if ( self.SeekEnd() )
{
{
if ( self.SeekEnd() )
{
+ wxFileOffset len = Tell();
+ return wxInvalidOffset;
wxFileOffset wxFFileInputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
{
wxFileOffset wxFFileInputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
{
-#ifdef __VMS
-#pragma message disable intsignchange
-#endif
- wxASSERT_MSG( pos >= LONG_MIN && pos <= LONG_MAX, _T("no huge wxFFile support") );
- return ( m_file->Seek((long)pos, mode) ? (wxFileOffset)m_file->Tell() : wxInvalidOffset );
-#ifdef __VMS
-#pragma message enable intsignchange
-#endif
+ return m_file->Seek(pos, mode) ? m_file->Tell() : wxInvalidOffset;
}
wxFileOffset wxFFileInputStream::OnSysTell() const
}
wxFileOffset wxFFileInputStream::OnSysTell() const
wxFileOffset wxFFileOutputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
{
wxFileOffset wxFFileOutputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
{
-#ifdef __VMS
-#pragma message disable intsignchange
-#endif
- wxASSERT_MSG( pos >= LONG_MIN && pos <= LONG_MAX, _T("no huge wxFFile support") );
- return ( m_file->Seek((long)pos, mode) ? (wxFileOffset)m_file->Tell() : wxInvalidOffset );
-#ifdef __VMS
-#pragma message enable intsignchange
-#endif
+ return m_file->Seek(pos, mode) ? m_file->Tell() : wxInvalidOffset;
}
void wxFFileOutputStream::Sync()
}
void wxFFileOutputStream::Sync()