/////////////////////////////////////////////////////////////////////////////
-// Name: chm.cpp
+// Name: src/html/chm.cpp
// Purpose: CHM (Help) support for wxHTML
// Author: Markus Sinner
// Copyright: (c) 2003 Herd Software Development
#include "wx/wxprec.h"
#ifdef __BORLANDC__
-#pragma hdrstop
+ #pragma hdrstop
#endif
#if wxUSE_LIBMSPACK
#include <mspack.h>
-#ifndef WXPRECOMP
-#include "wx/intl.h"
-#include "wx/log.h"
+#ifndef WX_PRECOMP
+ #include "wx/intl.h"
+ #include "wx/log.h"
+ #include "wx/module.h"
#endif
-#include "wx/module.h"
#include "wx/filesys.h"
#include "wx/mstream.h"
#include "wx/wfstream.h"
/// check archive for a file
bool Contains(const wxString& pattern);
- /// get a string for the last error occured
+ /// get a string for the last error which occurred
const wxString GetLastErrorMessage();
/// Last Error
wxChmInputStream(const wxString& archive,
const wxString& file, bool simulate = false);
/// Destructor
- ~wxChmInputStream();
+ virtual ~wxChmInputStream();
/// Return the size of the accessed file in archive
virtual size_t GetSize() const { return m_size; }
* be local file accesible via fopen, fread functions!
* @param filename The Name of the file to be extracted from archive
* @param simulate if true than class should simulate .HHP-File based on #SYSTEM
- * if false than class does nothing if it doesnt find .hhp
+ * if false than class does nothing if it doesn't find .hhp
*/
wxChmInputStream::wxChmInputStream(const wxString& archive,
const wxString& filename, bool simulate)
m_lasterror = wxSTREAM_NO_ERROR;
// If the rest to read from the stream is less
- // than the buffer size, than only read the rest
+ // than the buffer size, then only read the rest
if ( m_pos + bufsize > m_size )
bufsize = m_size - m_pos;
- m_contentStream->SeekI(m_pos);
- m_contentStream->Read(buffer, bufsize);
- m_pos +=bufsize;
- m_contentStream->SeekI(m_pos);
- return bufsize;
+ if (m_contentStream->SeekI(m_pos) == wxInvalidOffset)
+ {
+ m_lasterror = wxSTREAM_EOF;
+ return 0;
+ }
+
+ size_t read = m_contentStream->Read(buffer, bufsize).LastRead();
+ m_pos += read;
+
+ if (m_contentStream->SeekI(m_pos) == wxInvalidOffset)
+ {
+ m_lasterror = wxSTREAM_READ_ERROR;
+ return 0;
+ }
+
+ if (read != bufsize)
+ m_lasterror = m_contentStream->GetLastError();
+
+ return read;
}
/**
* Help Browser tries to read the contents of the
* file by interpreting a .hhp file in the Archiv.
- * For .chm doesnt include such a file, we need
+ * For .chm doesn't include such a file, we need
* to rebuild the information based on stored
* system-files.
*/
if ( ! m_chm->Contains(_T("/#SYSTEM")) )
{
#ifdef DEBUG
- wxLogDebug(_("Archive doesnt contain #SYSTEM file"));
+ wxLogDebug("Archive doesn't contain #SYSTEM file");
#endif
return;
}
wxUint32 lcid = wxUINT32_SWAP_ON_BE( dummy ) ;
wxString msg ;
msg.Printf(_T("Language=0x%X\r\n"),lcid) ;
- out->Write(msg.c_str() , msg.Length() ) ;
+ out->Write(msg.c_str() , msg.length() ) ;
}
break ;
default:
tmp = "Index File=*.hhk\r\n";
out->Write((const void *) tmp, strlen(tmp));
}
-
+
// Now copy the Data from the memory
out->SeekO(0, wxFromEnd);
m_size = out->TellO();
bool wxChmInputStream::CreateFileStream(const wxString& pattern)
{
wxFileInputStream * fin;
- wxString tmpfile = wxFileName::CreateTempFileName(_T("chmstrm"), NULL);
+ wxString tmpfile = wxFileName::CreateTempFileName(_T("chmstrm"));
if ( tmpfile.empty() )
{
{
// Open a filestream to extracted file
fin = new wxFileInputStream(tmpfile);
+ if (!fin->IsOk())
+ return false;
+
m_size = fin->GetSize();
m_content = (char *) malloc(m_size+1);
fin->Read(m_content, m_size);
public:
/// Constructor and Destructor
wxChmFSHandler();
- ~wxChmFSHandler();
+ virtual ~wxChmFSHandler();
/// Is able to open location?
virtual bool CanOpen(const wxString& location);
/// Open a file
virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);
- /// Find first occurence of spec
+ /// Find first occurrence of spec
virtual wxString FindFirst(const wxString& spec, int flags = 0);
- /// Find next occurence of spec
+ /// Find next occurrence of spec
virtual wxString FindNext();
private:
// Open a stream to read the content of the chm-file
s = new wxChmInputStream(leftFilename.GetFullPath(), right, true);
- wxString mime = GetMimeTypeFromExt(location);
-
if ( s )
{
return new wxFSFile(s,
left + _T("#chm:") + right,
- mime,
+ wxEmptyString,
GetAnchor(location),
wxDateTime(wxFileModificationTime(left)));
}