build/win32/libmspub.dsp | 8 +++ build/win32/libmspub.vcproj | 8 +++ build/win32/libmspub.vcxproj | 2 src/lib/MSPUBInternalStream.cpp | 102 ++++++++++++++++++++++++++++++++++++++++ src/lib/MSPUBInternalStream.h | 76 +++++++++++++++++++++++++++++ src/lib/MSPUBParser.cpp | 9 ++- src/lib/Makefile.am | 2 src/lib/libmspub_utils.cpp | 16 ------ src/lib/libmspub_utils.h | 3 - 9 files changed, 204 insertions(+), 22 deletions(-)
New commits: commit b7371ac25d7a5df50ad7c60964c98256d3a0b7b1 Author: Fridrich Å trba <[email protected]> Date: Fri May 10 12:58:41 2013 +0200 Don't depend on a particular external WPXInputStream implementation diff --git a/build/win32/libmspub.dsp b/build/win32/libmspub.dsp index 4421e1b..5654ab4 100644 --- a/build/win32/libmspub.dsp +++ b/build/win32/libmspub.dsp @@ -111,6 +111,10 @@ SOURCE=..\..\src\lib\MSPUBDocument.cpp # End Source File # Begin Source File +SOURCE=..\..\src\lib\MSPUBInternalStream.cpp +# End Source File +# Begin Source File + SOURCE=..\..\src\lib\MSPUBParser.cpp # End Source File # Begin Source File @@ -235,6 +239,10 @@ SOURCE=..\..\src\lib\MSPUBDocument.h # End Source File # Begin Source File +SOURCE=..\..\src\lib\MSPUBInteernalStream.h +# End Source File +# Begin Source File + SOURCE=..\..\src\lib\MSPUBParser.h # End Source File # Begin Source File diff --git a/build/win32/libmspub.vcproj b/build/win32/libmspub.vcproj index b88d14c..4196582 100644 --- a/build/win32/libmspub.vcproj +++ b/build/win32/libmspub.vcproj @@ -197,6 +197,10 @@ > </File> <File + RelativePath="..\..\src\lib\MSPUBInternalStream.cpp" + > + </File> + <File RelativePath="..\..\src\lib\MSPUBParser.cpp" > </File> @@ -322,6 +326,10 @@ > </File> <File + RelativePath="..\..\src\lib\MSPUBInternalStream.h" + > + </File> + <File RelativePath="..\..\src\lib\MSPUBParser.h" > </File> diff --git a/build/win32/libmspub.vcxproj b/build/win32/libmspub.vcxproj index c233331..3076a81 100644 --- a/build/win32/libmspub.vcxproj +++ b/build/win32/libmspub.vcxproj @@ -32,6 +32,7 @@ <ClInclude Include="..\..\src\lib\MSPUBConstants.h" /> <ClInclude Include="..\..\src\lib\MSPUBContentChunkType.h" /> <ClInclude Include="..\..\src\lib\MSPUBDocument.h" /> + <ClInclude Include="..\..\src\lib\MSPUBInternalStream.h" /> <ClInclude Include="..\..\src\lib\MSPUBParser.h" /> <ClInclude Include="..\..\src\lib\MSPUBParser2k.h" /> <ClInclude Include="..\..\src\lib\MSPUBParser97.h" /> @@ -58,6 +59,7 @@ <ClCompile Include="..\..\src\lib\libmspub_utils.cpp" /> <ClCompile Include="..\..\src\lib\MSPUBCollector.cpp" /> <ClCompile Include="..\..\src\lib\MSPUBDocument.cpp" /> + <ClCompile Include="..\..\src\lib\MSPUBInternalStream.cpp" /> <ClCompile Include="..\..\src\lib\MSPUBParser.cpp" /> <ClCompile Include="..\..\src\lib\MSPUBParser2k.cpp" /> <ClCompile Include="..\..\src\lib\MSPUBParser97.cpp" /> diff --git a/src/lib/MSPUBInternalStream.cpp b/src/lib/MSPUBInternalStream.cpp new file mode 100644 index 0000000..594e184 --- /dev/null +++ b/src/lib/MSPUBInternalStream.cpp @@ -0,0 +1,102 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* libvisio + * Version: MPL 1.1 / GPLv2+ / LGPLv2+ + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License or as specified alternatively below. You may obtain a copy of + * the License at http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * Major Contributor(s): + * Copyright (C) 2011 Fridrich Strba <[email protected]> + * Copyright (C) 2011 Eilidh McAdam <[email protected]> + * + * + * All Rights Reserved. + * + * For minor contributions see the git repository. + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPLv2+"), or + * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"), + * in which case the provisions of the GPLv2+ or the LGPLv2+ are applicable + * instead of those above. + */ + + +#include <string.h> +#include "MSPUBInternalStream.h" + + +libmspub::MSPUBInternalStream::MSPUBInternalStream(const unsigned char *buffer, size_t bufferLength) : + WPXInputStream(), + m_offset(0), + m_buffer(bufferLength) +{ + memcpy(&m_buffer[0], buffer, bufferLength); +} + +const unsigned char *libmspub::MSPUBInternalStream::read(unsigned long numBytes, unsigned long &numBytesRead) +{ + numBytesRead = 0; + + if (numBytes == 0) + return 0; + + int numBytesToRead; + + if ((m_offset+numBytes) < m_buffer.size()) + numBytesToRead = numBytes; + else + numBytesToRead = m_buffer.size() - m_offset; + + numBytesRead = numBytesToRead; + + if (numBytesToRead == 0) + return 0; + + long oldOffset = m_offset; + m_offset += numBytesToRead; + + return &m_buffer[oldOffset]; +} + +int libmspub::MSPUBInternalStream::seek(long offset, WPX_SEEK_TYPE seekType) +{ + if (seekType == WPX_SEEK_CUR) + m_offset += offset; + else if (seekType == WPX_SEEK_SET) + m_offset = offset; + + if (m_offset < 0) + { + m_offset = 0; + return 1; + } + if ((long)m_offset > (long)m_buffer.size()) + { + m_offset = m_buffer.size(); + return 1; + } + + return 0; +} + +long libmspub::MSPUBInternalStream::tell() +{ + return m_offset; +} + +bool libmspub::MSPUBInternalStream::atEOS() +{ + if ((long)m_offset >= (long)m_buffer.size()) + return true; + + return false; +} +/* vim:set shiftwidth=2 softtabstop=2 expandtab: */ diff --git a/src/lib/MSPUBInternalStream.h b/src/lib/MSPUBInternalStream.h new file mode 100644 index 0000000..2f648cd --- /dev/null +++ b/src/lib/MSPUBInternalStream.h @@ -0,0 +1,76 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* libvisio + * Version: MPL 1.1 / GPLv2+ / LGPLv2+ + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License or as specified alternatively below. You may obtain a copy of + * the License at http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * Major Contributor(s): + * Copyright (C) 2011 Fridrich Strba <[email protected]> + * Copyright (C) 2011 Eilidh McAdam <[email protected]> + * + * + * All Rights Reserved. + * + * For minor contributions see the git repository. + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPLv2+"), or + * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"), + * in which case the provisions of the GPLv2+ or the LGPLv2+ are applicable + * instead of those above. + */ + + +#ifndef __MSPUBINTERNALSTREAM_H__ +#define __MSPUBINTERNALSTREAM_H__ + +#include <stddef.h> +#include <vector> +#include <libwpd-stream/libwpd-stream.h> + +namespace libmspub +{ + +class MSPUBInternalStream : public WPXInputStream +{ +public: + MSPUBInternalStream(const unsigned char *buffer, size_t bufferLength); + ~MSPUBInternalStream() {} + + bool isOLEStream() + { + return false; + } + WPXInputStream *getDocumentOLEStream(const char *) + { + return 0; + } + + const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead); + int seek(long offset, WPX_SEEK_TYPE seekType); + long tell(); + bool atEOS(); + unsigned long getSize() const + { + return m_buffer.size(); + }; + +private: + volatile long m_offset; + std::vector<unsigned char> m_buffer; + MSPUBInternalStream(const MSPUBInternalStream &); + MSPUBInternalStream &operator=(const MSPUBInternalStream &); +}; + +} // namespace libmspub + +#endif +/* vim:set shiftwidth=2 softtabstop=2 expandtab: */ diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp index ff2a135..77437d4 100644 --- a/src/lib/MSPUBParser.cpp +++ b/src/lib/MSPUBParser.cpp @@ -39,6 +39,7 @@ #include "MSPUBBlockType.h" #include "MSPUBContentChunkType.h" #include "MSPUBConstants.h" +#include "MSPUBInternalStream.h" #include "EscherContainerType.h" #include "EscherFieldIds.h" #include "libmspub_utils.h" @@ -270,7 +271,7 @@ bool libmspub::MSPUBParser::parseEscherDelay(WPXInputStream *input) { // Reconstruct BMP header // cf. http://en.wikipedia.org/wiki/BMP_file_format , accessed 2012-5-31 - WPXStringStream buf(img.getDataBuffer(), img.size()); + MSPUBInternalStream buf(img.getDataBuffer(), img.size()); if (img.size() < 0x2E + 4) { ++m_lastAddedImage; diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index a7f6be6..4913493 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -18,6 +18,7 @@ libmspub_@MSPUB_MAJOR_VERSION@_@MSPUB_MINOR_VERSION@_la_DEPENDENCIES = @LIBMSPUB libmspub_@MSPUB_MAJOR_VERSION@_@MSPUB_MINOR_VERSION@_la_LDFLAGS = $(version_info) -export-dynamic -no-undefined libmspub_@MSPUB_MAJOR_VERSION@_@MSPUB_MINOR_VERSION@_la_SOURCES = \ MSPUBCollector.cpp \ + MSPUBInternalStream.cpp \ MSPUBDocument.cpp \ MSPUBParser.cpp \ MSPUBParser2k.cpp \ @@ -40,6 +41,7 @@ libmspub_@MSPUB_MAJOR_VERSION@_@MSPUB_MINOR_VERSION@_la_SOURCES = \ MSPUBCollector.h \ MSPUBConstants.h \ MSPUBContentChunkType.h \ + MSPUBInternalStream.h \ MSPUBParser.h \ MSPUBParser2k.h \ MSPUBSVGGenerator.h \ commit a92bbba4d1995752eb71532b5e7a24094732ede5 Author: David Tardon <[email protected]> Date: Fri May 10 12:42:49 2013 +0200 rhbz#960037 drop string-based readU* functions diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp index 6404db8..ff2a135 100644 --- a/src/lib/MSPUBParser.cpp +++ b/src/lib/MSPUBParser.cpp @@ -270,7 +270,7 @@ bool libmspub::MSPUBParser::parseEscherDelay(WPXInputStream *input) { // Reconstruct BMP header // cf. http://en.wikipedia.org/wiki/BMP_file_format , accessed 2012-5-31 - const unsigned char *buf = img.getDataBuffer(); + WPXStringStream buf(img.getDataBuffer(), img.size()); if (img.size() < 0x2E + 4) { ++m_lastAddedImage; @@ -278,8 +278,10 @@ bool libmspub::MSPUBParser::parseEscherDelay(WPXInputStream *input) input->seek(info.contentsOffset + info.contentsLength, WPX_SEEK_SET); continue; } - unsigned short bitsPerPixel = readU16(buf, 0x0E); - unsigned numPaletteColors = readU32(buf, 0x20); + buf.seek(0x0E, WPX_SEEK_SET); + unsigned short bitsPerPixel = readU16(&buf); + buf.seek(0x20, WPX_SEEK_SET); + unsigned numPaletteColors = readU32(&buf); if (numPaletteColors == 0 && bitsPerPixel <= 8) { numPaletteColors = 1; diff --git a/src/lib/libmspub_utils.cpp b/src/lib/libmspub_utils.cpp index d61db1d..d217139 100644 --- a/src/lib/libmspub_utils.cpp +++ b/src/lib/libmspub_utils.cpp @@ -288,22 +288,6 @@ uint8_t libmspub::readU8(WPXInputStream *input) throw EndOfStreamException(); } -uint16_t libmspub::readU16(const unsigned char *input, unsigned offset) -{ - uint16_t p0 = (uint16_t)(*(input + offset)); - uint16_t p1 = (uint16_t)(*(input + offset + 1)); - return (uint16_t)(p0|(p1<<8)); -} - -uint32_t libmspub::readU32(const unsigned char *input, unsigned offset) -{ - uint32_t p0 = (uint32_t)(*(input + offset)); - uint32_t p1 = (uint32_t)(*(input + offset + 1)); - uint32_t p2 = (uint32_t)(*(input + offset + 2)); - uint32_t p3 = (uint32_t)(*(input + offset + 3)); - return (uint32_t)(p0|(p1<<8)|(p2<<16)|(p3<<24)); -} - uint16_t libmspub::readU16(WPXInputStream *input) { uint16_t p0 = (uint16_t)readU8(input); diff --git a/src/lib/libmspub_utils.h b/src/lib/libmspub_utils.h index c0ba308..37db8bf 100644 --- a/src/lib/libmspub_utils.h +++ b/src/lib/libmspub_utils.h @@ -94,9 +94,6 @@ namespace libmspub const char *mimeByImgType(ImgType type); const char *windowsCharsetNameByOriginalCharset(const char *name); -uint16_t readU16(const unsigned char *input, unsigned offset); -uint32_t readU32(const unsigned char *input, unsigned offset); - uint8_t readU8(WPXInputStream *input); uint16_t readU16(WPXInputStream *input); uint32_t readU32(WPXInputStream *input);
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
