diff options
author | Vladimir Glazunov <vg@openoffice.org> | 2010-02-15 15:07:47 +0100 |
---|---|---|
committer | Vladimir Glazunov <vg@openoffice.org> | 2010-02-15 15:07:47 +0100 |
commit | 4c5ed8017b3d4235b75e9998b4892c65dd352efa (patch) | |
tree | 6333d0bf3bdad1bc255265ead3f30b132b6bd4bd /shell/source/win32/shlxthandler/ooofilt/ooofilt.cxx | |
parent | 28bf0d7b7731420c7c237dfb39553c52f380b1d9 (diff) | |
parent | 7c411e2bf9d8e3648506ee2478943098d23e4b9e (diff) |
CWS-TOOLING: integrate CWS dv17
Diffstat (limited to 'shell/source/win32/shlxthandler/ooofilt/ooofilt.cxx')
-rwxr-xr-x[-rw-r--r--] | shell/source/win32/shlxthandler/ooofilt/ooofilt.cxx | 114 |
1 files changed, 2 insertions, 112 deletions
diff --git a/shell/source/win32/shlxthandler/ooofilt/ooofilt.cxx b/shell/source/win32/shlxthandler/ooofilt/ooofilt.cxx index a20192748d..669685b06f 100644..100755 --- a/shell/source/win32/shlxthandler/ooofilt/ooofilt.cxx +++ b/shell/source/win32/shlxthandler/ooofilt/ooofilt.cxx @@ -86,6 +86,7 @@ using ::std::min; #endif +#include "internal/stream_helper.hxx" //C------------------------------------------------------------------------- // @@ -738,23 +739,9 @@ SCODE STDMETHODCALLTYPE COooFilter::SaveCompleted(LPCWSTR /*pszFileName*/) //-------------------------------------------------------------------------- SCODE STDMETHODCALLTYPE COooFilter::Load(IStream *pStm) { - - // These next few lines work around the "Seek pointer" bug found on Vista. - - char buf[20]; - unsigned long count; - HRESULT hr; - ULARGE_INTEGER NewPosition; - LARGE_INTEGER Move; - Move.QuadPart = 0; - hr = pStm->Seek (Move, STREAM_SEEK_SET, &NewPosition); - hr = pStm->Read (buf, 20, &count); - zlib_filefunc_def z_filefunc; - fill_stream_filefunc (&z_filefunc); - z_filefunc.opaque = (void*)pStm; - m_pStream = pStm; + m_pStream = PrepareIStream( pStm, z_filefunc ); try { @@ -1504,100 +1491,3 @@ STDAPI DllUnregisterServer() */ return S_OK; } - -extern "C" { - - // IStream callback - voidpf ZCALLBACK cb_sopen (voidpf opaque, const char* /*filename*/, int /*mode*/) { - return opaque; - } - - uLong ZCALLBACK cb_sread (voidpf /*opaque*/, voidpf stream, void* buf, uLong size) { - unsigned long newsize; - HRESULT hr; - - hr = ((IStream *)stream)->Read (buf, size, &newsize); - if (hr == S_OK){ - return (unsigned long)newsize; - } - else { - return (uLong)0; - } - } - - long ZCALLBACK cb_sseek (voidpf /*opaque*/, voidpf stream, uLong offset, int origin) { - // IStream::Seek parameters - HRESULT hr; - LARGE_INTEGER Move; - DWORD dwOrigin; - Move.QuadPart = (__int64)offset; - - switch (origin) { - case SEEK_CUR: - dwOrigin = STREAM_SEEK_CUR; - break; - case SEEK_END: - dwOrigin = STREAM_SEEK_END; - break; - case SEEK_SET: - dwOrigin = STREAM_SEEK_SET; - break; - default: - return -1; - } - - hr = ((IStream*)stream)->Seek (Move, dwOrigin, NULL); - if (hr == S_OK){ - return 0; - } - else { - return -1; - } - } - - long ZCALLBACK cb_stell (voidpf /*opaque*/, voidpf stream) { - // IStream::Seek parameters - HRESULT hr; - LARGE_INTEGER Move; - ULARGE_INTEGER NewPosition; - Move.QuadPart = 0; - NewPosition.QuadPart = 0; - - hr = ((IStream*)stream)->Seek (Move, STREAM_SEEK_CUR, &NewPosition); - if (hr == S_OK){ - return (long) NewPosition.QuadPart; - } - else { - return -1; - } - } - - int ZCALLBACK cb_sclose (voidpf /*opaque*/, voidpf /*stream*/) { - return 0; - } - - int ZCALLBACK cb_serror (voidpf /*opaque*/, voidpf /*stream*/) { - return 0; //RJK - for now - } - - uLong ZCALLBACK cb_swrite (voidpf /*opaque*/, voidpf stream, const void* buf, uLong size) { - HRESULT hr; - unsigned long writecount; - hr = ((IStream*)stream)->Write (buf, size, &writecount); - if (hr == S_OK) - return (unsigned int)writecount; - else - return (uLong)0; - } - - void fill_stream_filefunc (zlib_filefunc_def* pzlib_filefunc_def) { - pzlib_filefunc_def->zopen_file = cb_sopen; - pzlib_filefunc_def->zread_file = cb_sread; - pzlib_filefunc_def->zwrite_file = cb_swrite; - pzlib_filefunc_def->ztell_file = cb_stell; - pzlib_filefunc_def->zseek_file = cb_sseek; - pzlib_filefunc_def->zclose_file = cb_sclose; - pzlib_filefunc_def->zerror_file = cb_serror; - } -} - |