Add wxLZMAInputStream for decompressing data in XZ format

No compression support yet.
This commit is contained in:
Vadim Zeitlin
2018-03-29 23:25:18 +02:00
parent 311b2aee5f
commit af7e2901fe
16 changed files with 428 additions and 0 deletions

View File

@@ -530,6 +530,7 @@ ALL_BASE_HEADERS = \
wx/fswatcher.h \
wx/generic/fswatcher.h \
wx/secretstore.h \
wx/lzmastream.h \
$(BASE_PLATFORM_HDR) \
wx/fs_inet.h \
wx/protocol/file.h \
@@ -713,6 +714,7 @@ ALL_PORTS_BASE_HEADERS = \
wx/fswatcher.h \
wx/generic/fswatcher.h \
wx/secretstore.h \
wx/lzmastream.h \
wx/unix/app.h \
wx/unix/apptbase.h \
wx/unix/apptrait.h \
@@ -851,6 +853,7 @@ ALL_BASE_SOURCES = \
src/common/fswatchercmn.cpp \
src/generic/fswatcherg.cpp \
src/common/secretstore.cpp \
src/common/lzmastream.cpp \
src/common/fdiodispatcher.cpp \
src/common/selectdispatcher.cpp \
src/unix/appunix.cpp \
@@ -1034,6 +1037,7 @@ MONODLL_OBJECTS = \
monodll_fswatchercmn.o \
monodll_fswatcherg.o \
monodll_common_secretstore.o \
monodll_lzmastream.o \
$(__BASE_PLATFORM_SRC_OBJECTS) \
monodll_event.o \
monodll_fs_mem.o \
@@ -1176,6 +1180,7 @@ MONOLIB_OBJECTS = \
monolib_fswatchercmn.o \
monolib_fswatcherg.o \
monolib_common_secretstore.o \
monolib_lzmastream.o \
$(__BASE_PLATFORM_SRC_OBJECTS_1) \
monolib_event.o \
monolib_fs_mem.o \
@@ -1307,6 +1312,7 @@ BASEDLL_OBJECTS = \
basedll_fswatchercmn.o \
basedll_fswatcherg.o \
basedll_common_secretstore.o \
basedll_lzmastream.o \
$(__BASE_PLATFORM_SRC_OBJECTS_2) \
basedll_event.o \
basedll_fs_mem.o \
@@ -1421,6 +1427,7 @@ BASELIB_OBJECTS = \
baselib_fswatchercmn.o \
baselib_fswatcherg.o \
baselib_common_secretstore.o \
baselib_lzmastream.o \
$(__BASE_PLATFORM_SRC_OBJECTS_3) \
baselib_event.o \
baselib_fs_mem.o \
@@ -16270,6 +16277,9 @@ monodll_fswatcherg.o: $(srcdir)/src/generic/fswatcherg.cpp $(MONODLL_ODEP)
monodll_common_secretstore.o: $(srcdir)/src/common/secretstore.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/secretstore.cpp
monodll_lzmastream.o: $(srcdir)/src/common/lzmastream.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/lzmastream.cpp
monodll_unix_mimetype.o: $(srcdir)/src/unix/mimetype.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/mimetype.cpp
@@ -21529,6 +21539,9 @@ monolib_fswatcherg.o: $(srcdir)/src/generic/fswatcherg.cpp $(MONOLIB_ODEP)
monolib_common_secretstore.o: $(srcdir)/src/common/secretstore.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/secretstore.cpp
monolib_lzmastream.o: $(srcdir)/src/common/lzmastream.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/lzmastream.cpp
monolib_unix_mimetype.o: $(srcdir)/src/unix/mimetype.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/mimetype.cpp
@@ -26788,6 +26801,9 @@ basedll_fswatcherg.o: $(srcdir)/src/generic/fswatcherg.cpp $(BASEDLL_ODEP)
basedll_common_secretstore.o: $(srcdir)/src/common/secretstore.cpp $(BASEDLL_ODEP)
$(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/secretstore.cpp
basedll_lzmastream.o: $(srcdir)/src/common/lzmastream.cpp $(BASEDLL_ODEP)
$(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/lzmastream.cpp
basedll_unix_mimetype.o: $(srcdir)/src/unix/mimetype.cpp $(BASEDLL_ODEP)
$(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/mimetype.cpp
@@ -27265,6 +27281,9 @@ baselib_fswatcherg.o: $(srcdir)/src/generic/fswatcherg.cpp $(BASELIB_ODEP)
baselib_common_secretstore.o: $(srcdir)/src/common/secretstore.cpp $(BASELIB_ODEP)
$(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/secretstore.cpp
baselib_lzmastream.o: $(srcdir)/src/common/lzmastream.cpp $(BASELIB_ODEP)
$(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/lzmastream.cpp
baselib_unix_mimetype.o: $(srcdir)/src/unix/mimetype.cpp $(BASELIB_ODEP)
$(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/mimetype.cpp

View File

@@ -546,6 +546,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/common/fswatchercmn.cpp
src/generic/fswatcherg.cpp
src/common/secretstore.cpp
src/common/lzmastream.cpp
</set>
<set var="BASE_AND_GUI_CMN_SRC" hints="files">
src/common/event.cpp
@@ -719,6 +720,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/fswatcher.h
wx/generic/fswatcher.h
wx/secretstore.h
wx/lzmastream.h
</set>

View File

@@ -458,6 +458,7 @@ set(BASE_CMN_SRC
src/common/zstream.cpp
src/common/fswatchercmn.cpp
src/generic/fswatcherg.cpp
src/common/lzmastream.cpp
)
set(BASE_AND_GUI_CMN_SRC
@@ -633,6 +634,7 @@ set(BASE_CMN_HDR
wx/meta/removeref.h
wx/fswatcher.h
wx/generic/fswatcher.h
wx/lzmastream.h
)
set(NET_UNIX_SRC

View File

@@ -433,6 +433,7 @@ BASE_CMN_SRC =
src/common/list.cpp
src/common/log.cpp
src/common/longlong.cpp
src/common/lzmastream.cpp
src/common/memory.cpp
src/common/mimecmn.cpp
src/common/module.cpp
@@ -559,6 +560,7 @@ BASE_CMN_HDR =
wx/listimpl.cpp
wx/log.h
wx/longlong.h
wx/lzmastream.h
wx/math.h
wx/memconf.h
wx/memory.h

View File

@@ -455,6 +455,7 @@ MONODLL_OBJECTS = \
$(OBJS)\monodll_fswatchercmn.obj \
$(OBJS)\monodll_fswatcherg.obj \
$(OBJS)\monodll_common_secretstore.obj \
$(OBJS)\monodll_lzmastream.obj \
$(OBJS)\monodll_basemsw.obj \
$(OBJS)\monodll_crashrpt.obj \
$(OBJS)\monodll_debughlp.obj \
@@ -607,6 +608,7 @@ MONOLIB_OBJECTS = \
$(OBJS)\monolib_fswatchercmn.obj \
$(OBJS)\monolib_fswatcherg.obj \
$(OBJS)\monolib_common_secretstore.obj \
$(OBJS)\monolib_lzmastream.obj \
$(OBJS)\monolib_basemsw.obj \
$(OBJS)\monolib_crashrpt.obj \
$(OBJS)\monolib_debughlp.obj \
@@ -755,6 +757,7 @@ BASEDLL_OBJECTS = \
$(OBJS)\basedll_fswatchercmn.obj \
$(OBJS)\basedll_fswatcherg.obj \
$(OBJS)\basedll_common_secretstore.obj \
$(OBJS)\basedll_lzmastream.obj \
$(OBJS)\basedll_basemsw.obj \
$(OBJS)\basedll_crashrpt.obj \
$(OBJS)\basedll_debughlp.obj \
@@ -888,6 +891,7 @@ BASELIB_OBJECTS = \
$(OBJS)\baselib_fswatchercmn.obj \
$(OBJS)\baselib_fswatcherg.obj \
$(OBJS)\baselib_common_secretstore.obj \
$(OBJS)\baselib_lzmastream.obj \
$(OBJS)\baselib_basemsw.obj \
$(OBJS)\baselib_crashrpt.obj \
$(OBJS)\baselib_debughlp.obj \
@@ -6690,6 +6694,9 @@ $(OBJS)\monodll_fswatcherg.obj: ..\..\src\generic\fswatcherg.cpp
$(OBJS)\monodll_common_secretstore.obj: ..\..\src\common\secretstore.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\secretstore.cpp
$(OBJS)\monodll_lzmastream.obj: ..\..\src\common\lzmastream.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\lzmastream.cpp
$(OBJS)\monodll_basemsw.obj: ..\..\src\msw\basemsw.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\basemsw.cpp
@@ -9236,6 +9243,9 @@ $(OBJS)\monolib_fswatcherg.obj: ..\..\src\generic\fswatcherg.cpp
$(OBJS)\monolib_common_secretstore.obj: ..\..\src\common\secretstore.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\secretstore.cpp
$(OBJS)\monolib_lzmastream.obj: ..\..\src\common\lzmastream.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\lzmastream.cpp
$(OBJS)\monolib_basemsw.obj: ..\..\src\msw\basemsw.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\basemsw.cpp
@@ -11782,6 +11792,9 @@ $(OBJS)\basedll_fswatcherg.obj: ..\..\src\generic\fswatcherg.cpp
$(OBJS)\basedll_common_secretstore.obj: ..\..\src\common\secretstore.cpp
$(CXX) -q -c -P -o$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\secretstore.cpp
$(OBJS)\basedll_lzmastream.obj: ..\..\src\common\lzmastream.cpp
$(CXX) -q -c -P -o$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\lzmastream.cpp
$(OBJS)\basedll_basemsw.obj: ..\..\src\msw\basemsw.cpp
$(CXX) -q -c -P -o$@ $(BASEDLL_CXXFLAGS) ..\..\src\msw\basemsw.cpp
@@ -12127,6 +12140,9 @@ $(OBJS)\baselib_fswatcherg.obj: ..\..\src\generic\fswatcherg.cpp
$(OBJS)\baselib_common_secretstore.obj: ..\..\src\common\secretstore.cpp
$(CXX) -q -c -P -o$@ $(BASELIB_CXXFLAGS) ..\..\src\common\secretstore.cpp
$(OBJS)\baselib_lzmastream.obj: ..\..\src\common\lzmastream.cpp
$(CXX) -q -c -P -o$@ $(BASELIB_CXXFLAGS) ..\..\src\common\lzmastream.cpp
$(OBJS)\baselib_basemsw.obj: ..\..\src\msw\basemsw.cpp
$(CXX) -q -c -P -o$@ $(BASELIB_CXXFLAGS) ..\..\src\msw\basemsw.cpp

View File

@@ -443,6 +443,7 @@ MONODLL_OBJECTS = \
$(OBJS)\monodll_fswatchercmn.o \
$(OBJS)\monodll_fswatcherg.o \
$(OBJS)\monodll_common_secretstore.o \
$(OBJS)\monodll_lzmastream.o \
$(OBJS)\monodll_basemsw.o \
$(OBJS)\monodll_crashrpt.o \
$(OBJS)\monodll_debughlp.o \
@@ -596,6 +597,7 @@ MONOLIB_OBJECTS = \
$(OBJS)\monolib_fswatchercmn.o \
$(OBJS)\monolib_fswatcherg.o \
$(OBJS)\monolib_common_secretstore.o \
$(OBJS)\monolib_lzmastream.o \
$(OBJS)\monolib_basemsw.o \
$(OBJS)\monolib_crashrpt.o \
$(OBJS)\monolib_debughlp.o \
@@ -745,6 +747,7 @@ BASEDLL_OBJECTS = \
$(OBJS)\basedll_fswatchercmn.o \
$(OBJS)\basedll_fswatcherg.o \
$(OBJS)\basedll_common_secretstore.o \
$(OBJS)\basedll_lzmastream.o \
$(OBJS)\basedll_basemsw.o \
$(OBJS)\basedll_crashrpt.o \
$(OBJS)\basedll_debughlp.o \
@@ -878,6 +881,7 @@ BASELIB_OBJECTS = \
$(OBJS)\baselib_fswatchercmn.o \
$(OBJS)\baselib_fswatcherg.o \
$(OBJS)\baselib_common_secretstore.o \
$(OBJS)\baselib_lzmastream.o \
$(OBJS)\baselib_basemsw.o \
$(OBJS)\baselib_crashrpt.o \
$(OBJS)\baselib_debughlp.o \
@@ -6872,6 +6876,9 @@ $(OBJS)\monodll_fswatcherg.o: ../../src/generic/fswatcherg.cpp
$(OBJS)\monodll_common_secretstore.o: ../../src/common/secretstore.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monodll_lzmastream.o: ../../src/common/lzmastream.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monodll_basemsw.o: ../../src/msw/basemsw.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
@@ -9420,6 +9427,9 @@ $(OBJS)\monolib_fswatcherg.o: ../../src/generic/fswatcherg.cpp
$(OBJS)\monolib_common_secretstore.o: ../../src/common/secretstore.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monolib_lzmastream.o: ../../src/common/lzmastream.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monolib_basemsw.o: ../../src/msw/basemsw.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@@ -11968,6 +11978,9 @@ $(OBJS)\basedll_fswatcherg.o: ../../src/generic/fswatcherg.cpp
$(OBJS)\basedll_common_secretstore.o: ../../src/common/secretstore.cpp
$(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\basedll_lzmastream.o: ../../src/common/lzmastream.cpp
$(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\basedll_basemsw.o: ../../src/msw/basemsw.cpp
$(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -12313,6 +12326,9 @@ $(OBJS)\baselib_fswatcherg.o: ../../src/generic/fswatcherg.cpp
$(OBJS)\baselib_common_secretstore.o: ../../src/common/secretstore.cpp
$(CXX) -c -o $@ $(BASELIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\baselib_lzmastream.o: ../../src/common/lzmastream.cpp
$(CXX) -c -o $@ $(BASELIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\baselib_basemsw.o: ../../src/msw/basemsw.cpp
$(CXX) -c -o $@ $(BASELIB_CXXFLAGS) $(CPPDEPS) $<

View File

@@ -475,6 +475,7 @@ MONODLL_OBJECTS = \
$(OBJS)\monodll_fswatchercmn.obj \
$(OBJS)\monodll_fswatcherg.obj \
$(OBJS)\monodll_common_secretstore.obj \
$(OBJS)\monodll_lzmastream.obj \
$(OBJS)\monodll_basemsw.obj \
$(OBJS)\monodll_crashrpt.obj \
$(OBJS)\monodll_debughlp.obj \
@@ -637,6 +638,7 @@ MONOLIB_OBJECTS = \
$(OBJS)\monolib_fswatchercmn.obj \
$(OBJS)\monolib_fswatcherg.obj \
$(OBJS)\monolib_common_secretstore.obj \
$(OBJS)\monolib_lzmastream.obj \
$(OBJS)\monolib_basemsw.obj \
$(OBJS)\monolib_crashrpt.obj \
$(OBJS)\monolib_debughlp.obj \
@@ -793,6 +795,7 @@ BASEDLL_OBJECTS = \
$(OBJS)\basedll_fswatchercmn.obj \
$(OBJS)\basedll_fswatcherg.obj \
$(OBJS)\basedll_common_secretstore.obj \
$(OBJS)\basedll_lzmastream.obj \
$(OBJS)\basedll_basemsw.obj \
$(OBJS)\basedll_crashrpt.obj \
$(OBJS)\basedll_debughlp.obj \
@@ -936,6 +939,7 @@ BASELIB_OBJECTS = \
$(OBJS)\baselib_fswatchercmn.obj \
$(OBJS)\baselib_fswatcherg.obj \
$(OBJS)\baselib_common_secretstore.obj \
$(OBJS)\baselib_lzmastream.obj \
$(OBJS)\baselib_basemsw.obj \
$(OBJS)\baselib_crashrpt.obj \
$(OBJS)\baselib_debughlp.obj \
@@ -7387,6 +7391,9 @@ $(OBJS)\monodll_fswatcherg.obj: ..\..\src\generic\fswatcherg.cpp
$(OBJS)\monodll_common_secretstore.obj: ..\..\src\common\secretstore.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\secretstore.cpp
$(OBJS)\monodll_lzmastream.obj: ..\..\src\common\lzmastream.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\lzmastream.cpp
$(OBJS)\monodll_basemsw.obj: ..\..\src\msw\basemsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\basemsw.cpp
@@ -9933,6 +9940,9 @@ $(OBJS)\monolib_fswatcherg.obj: ..\..\src\generic\fswatcherg.cpp
$(OBJS)\monolib_common_secretstore.obj: ..\..\src\common\secretstore.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\secretstore.cpp
$(OBJS)\monolib_lzmastream.obj: ..\..\src\common\lzmastream.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\lzmastream.cpp
$(OBJS)\monolib_basemsw.obj: ..\..\src\msw\basemsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\basemsw.cpp
@@ -12479,6 +12489,9 @@ $(OBJS)\basedll_fswatcherg.obj: ..\..\src\generic\fswatcherg.cpp
$(OBJS)\basedll_common_secretstore.obj: ..\..\src\common\secretstore.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\secretstore.cpp
$(OBJS)\basedll_lzmastream.obj: ..\..\src\common\lzmastream.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\lzmastream.cpp
$(OBJS)\basedll_basemsw.obj: ..\..\src\msw\basemsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) ..\..\src\msw\basemsw.cpp
@@ -12824,6 +12837,9 @@ $(OBJS)\baselib_fswatcherg.obj: ..\..\src\generic\fswatcherg.cpp
$(OBJS)\baselib_common_secretstore.obj: ..\..\src\common\secretstore.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASELIB_CXXFLAGS) ..\..\src\common\secretstore.cpp
$(OBJS)\baselib_lzmastream.obj: ..\..\src\common\lzmastream.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASELIB_CXXFLAGS) ..\..\src\common\lzmastream.cpp
$(OBJS)\baselib_basemsw.obj: ..\..\src\msw\basemsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASELIB_CXXFLAGS) ..\..\src\msw\basemsw.cpp

View File

@@ -605,6 +605,7 @@
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)common_%(Filename).obj</ObjectFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)common_%(Filename).obj</ObjectFileName>
</ClCompile>
<ClCompile Include="..\..\src\common\lzmastream.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\src\msw\version.rc">
@@ -822,6 +823,7 @@
<ClInclude Include="..\..\include\wx\arrimpl.cpp" />
<ClInclude Include="..\..\include\wx\secretstore.h" />
<ClInclude Include="..\..\include\wx\evtloopsrc.h" />
<ClInclude Include="..\..\include\wx\lzmastream.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

View File

@@ -162,6 +162,9 @@
<ClCompile Include="..\..\src\common\longlong.cpp">
<Filter>Common Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\common\lzmastream.cpp">
<Filter>Common Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\common\memory.cpp">
<Filter>Common Sources</Filter>
</ClCompile>
@@ -604,6 +607,9 @@
<ClInclude Include="..\..\include\wx\longlong.h">
<Filter>Common Headers</Filter>
</ClInclude>
<ClInclude Include="..\..\include\wx\lzmastream.h">
<Filter>Common Headers</Filter>
</ClInclude>
<ClInclude Include="..\..\include\wx\math.h">
<Filter>Common Headers</Filter>
</ClInclude>

View File

@@ -462,6 +462,9 @@
<File
RelativePath="..\..\src\common\longlong.cpp">
</File>
<File
RelativePath="..\..\src\common\lzmastream.cpp">
</File>
<File
RelativePath="..\..\src\common\memory.cpp">
</File>
@@ -1135,6 +1138,9 @@
<File
RelativePath="..\..\include\wx\longlong.h">
</File>
<File
RelativePath="..\..\include\wx\lzmastream.h">
</File>
<File
RelativePath="..\..\include\wx\math.h">
</File>

View File

@@ -1053,6 +1053,10 @@
RelativePath="..\..\src\common\longlong.cpp"
>
</File>
<File
RelativePath="..\..\src\common\lzmastream.cpp"
>
</File>
<File
RelativePath="..\..\src\common\memory.cpp"
>
@@ -2111,6 +2115,10 @@
RelativePath="..\..\include\wx\longlong.h"
>
</File>
<File
RelativePath="..\..\include\wx\lzmastream.h"
>
</File>
<File
RelativePath="..\..\include\wx\math.h"
>

View File

@@ -1049,6 +1049,10 @@
RelativePath="..\..\src\common\longlong.cpp"
>
</File>
<File
RelativePath="..\..\src\common\lzmastream.cpp"
>
</File>
<File
RelativePath="..\..\src\common\memory.cpp"
>
@@ -2107,6 +2111,10 @@
RelativePath="..\..\include\wx\longlong.h"
>
</File>
<File
RelativePath="..\..\include\wx\lzmastream.h"
>
</File>
<File
RelativePath="..\..\include\wx\math.h"
>

View File

@@ -703,6 +703,7 @@ Related overview: @ref overview_stream
@li wxTempFileOutputStream: Stream to safely replace an existing file
@li wxStringInputStream: String input stream class
@li wxStringOutputStream: String output stream class
@li wxLZMAInputStream: LZMA decompression stream class
@li wxZlibInputStream: Zlib and gzip (compression) input stream class
@li wxZlibOutputStream: Zlib and gzip (compression) output stream class
@li wxZipInputStream: Input stream for reading from ZIP archives

54
include/wx/lzmastream.h Normal file
View File

@@ -0,0 +1,54 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/lzmastream.h
// Purpose: Filters streams using LZMA(2) compression
// Author: Vadim Zeitlin
// Created: 2018-03-29
// Copyright: (c) 2018 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_LZMASTREAM_H_
#define _WX_LZMASTREAM_H_
#include "wx/defs.h"
#if wxUSE_LIBLZMA && wxUSE_STREAMS
#include "wx/stream.h"
#include "wx/versioninfo.h"
struct wxLZMAStream;
// ----------------------------------------------------------------------------
// Filter for decompressing data compressed using LZMA
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_BASE wxLZMAInputStream : public wxFilterInputStream
{
public:
explicit wxLZMAInputStream(wxInputStream& stream);
explicit wxLZMAInputStream(wxInputStream* stream);
virtual ~wxLZMAInputStream();
char Peek() wxOVERRIDE { return wxInputStream::Peek(); }
wxFileOffset GetLength() const wxOVERRIDE { return wxInputStream::GetLength(); }
protected:
size_t OnSysRead(void *buffer, size_t size) wxOVERRIDE;
wxFileOffset OnSysTell() const wxOVERRIDE { return m_pos; }
private:
void Init();
wxLZMAStream* m_stream;
wxUint8* m_inbuf;
wxFileOffset m_pos;
wxDECLARE_NO_COPY_CLASS(wxLZMAInputStream);
};
WXDLLIMPEXP_BASE wxVersionInfo wxGetLibLZMAVersionInfo();
#endif // wxUSE_LIBLZMA && wxUSE_STREAMS
#endif // _WX_LZMASTREAM_H_

60
interface/wx/lzmastream.h Normal file
View File

@@ -0,0 +1,60 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/lzmastream.h
// Purpose: LZMA [de]compression classes documentation
// Author: Vadim Zeitlin
// Created: 2018-03-29
// Copyright: (c) 2018 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
/**
@class wxLZMAInputStream
This filter stream decompresses data in XZ format.
XZ format uses LZMA2 algorithm for compression used for .xz files and is
similar to GZip or BZip2 format. Notice that it is different from, and
incompatible with, 7z archive format even although it uses the same
compression algorithm.
To decompress contents of standard input to standard output, the following
(not optimally efficient) code could be used:
@code
wxFFileInputStream fin(stdin);
wxLZMAInputStream zin(fin);
wxFFileOutputStream fout(stdout);
zin.Read(fout);
if ( zin.GetLastError() != wxSTREAM_EOF ) {
... handle error ...
}
@endcode
@library{wxbase}
@category{archive,streams}
@see wxInputStream, wxZlibInputStream
@since 3.1.2
*/
class wxLZMAInputStream : public wxFilterInputStream
{
public:
/**
Create decompressing stream associated with the given underlying
stream.
This overload does not take ownership of the @a stream.
*/
wxLZMAInputStream(wxInputStream& stream);
/**
Create decompressing stream associated with the given underlying
stream and takes ownership of it.
As with the base wxFilterInputStream class, passing @a stream by
pointer indicates that this object takes ownership of it and will
delete it when it is itself destroyed.
*/
wxLZMAInputStream(wxInputStream* stream);
};

210
src/common/lzmastream.cpp Normal file
View File

@@ -0,0 +1,210 @@
///////////////////////////////////////////////////////////////////////////////
// Name: src/common/lzmastream.cpp
// Purpose: Implementation of LZMA stream classes
// Author: Vadim Zeitlin
// Created: 2018-03-29
// Copyright: (c) 2018 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// for compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_LIBLZMA && wxUSE_STREAMS
#include "wx/lzmastream.h"
#ifndef WX_PRECOMP
#include "wx/log.h"
#include "wx/translation.h"
#endif // WX_PRECOMP
#include <lzma.h>
// ----------------------------------------------------------------------------
// Constants
// ----------------------------------------------------------------------------
static const size_t wxLZMA_BUF_SIZE = 4096;
// ----------------------------------------------------------------------------
// Private helpers
// ----------------------------------------------------------------------------
// Simpler wrapper around lzma_stream, taking care of initializing and
// finalizing it.
struct wxLZMAStream : lzma_stream
{
wxLZMAStream()
{
memset(this, 0, sizeof(lzma_stream));
}
~wxLZMAStream()
{
lzma_end(this);
}
};
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// Functions
// ----------------------------------------------------------------------------
wxVersionInfo wxGetLibLZMAVersionInfo()
{
const uint32_t ver = lzma_version_number();
// For now ignore the "stability" part of the version.
return wxVersionInfo
(
"liblzma",
ver / 10000000,
(ver % 10000000) / 10000,
(ver % 10000) / 10
);
}
// ----------------------------------------------------------------------------
// wxLZMAInputStream: decompression
// ----------------------------------------------------------------------------
wxLZMAInputStream::wxLZMAInputStream(wxInputStream& stream)
: wxFilterInputStream(stream)
{
Init();
}
wxLZMAInputStream::wxLZMAInputStream(wxInputStream* stream)
: wxFilterInputStream(stream)
{
Init();
}
void wxLZMAInputStream::Init()
{
m_stream = new wxLZMAStream;
m_inbuf = new wxUint8[wxLZMA_BUF_SIZE];
m_pos = 0;
// We don't specify any memory usage limit nor any flags, not even
// LZMA_CONCATENATED recommended by liblzma documentation, because we don't
// foresee the need to support concatenated compressed files for now.
const lzma_ret rc = lzma_stream_decoder(m_stream, UINT64_MAX, 0);
switch ( rc )
{
case LZMA_OK:
// Skip setting m_lasterror below.
return;
case LZMA_MEM_ERROR:
wxLogError(_("Failed to allocate memory for LZMA decompression."));
break;
default:
wxLogError(_("Failed to initialize LZMA decompression: "
"unexpected error %u."),
rc);
break;
}
m_lasterror = wxSTREAM_READ_ERROR;
}
wxLZMAInputStream::~wxLZMAInputStream()
{
delete [] m_inbuf;
delete m_stream;
}
size_t wxLZMAInputStream::OnSysRead(void* outbuf, size_t size)
{
m_stream->next_out = static_cast<uint8_t*>(outbuf);
m_stream->avail_out = size;
// Decompress input as long as we don't have any errors (including EOF, as
// it doesn't make sense to continue after it neither) and have space to
// decompress it to.
while ( m_lasterror == wxSTREAM_NO_ERROR && m_stream->avail_out > 0 )
{
// Get more input data if needed.
if ( !m_stream->avail_in )
{
m_parent_i_stream->Read(m_inbuf, wxLZMA_BUF_SIZE);
m_stream->next_in = m_inbuf;
m_stream->avail_in = m_parent_i_stream->LastRead();
if ( !m_stream->avail_in )
{
if ( m_parent_i_stream->GetLastError() == wxSTREAM_EOF )
{
// We have reached end of the underlying stream.
m_lasterror = wxSTREAM_EOF;
break;
}
m_lasterror = wxSTREAM_READ_ERROR;
return 0;
}
}
// Do decompress.
const lzma_ret rc = lzma_code(m_stream, LZMA_RUN);
wxString err;
switch ( rc )
{
case LZMA_OK:
continue;
case LZMA_STREAM_END:
m_lasterror = wxSTREAM_EOF;
continue;
case LZMA_FORMAT_ERROR:
err = wxTRANSLATE("input is not in XZ format");
break;
case LZMA_OPTIONS_ERROR:
err = wxTRANSLATE("input compressed using unknown XZ option");
break;
case LZMA_DATA_ERROR:
case LZMA_BUF_ERROR:
err = wxTRANSLATE("input is corrupted");
break;
default:
err = wxTRANSLATE("unknown decompression error");
break;
}
wxLogError(_("LZMA decompression error: %s"), wxGetTranslation(err));
m_lasterror = wxSTREAM_READ_ERROR;
return 0;
}
// Return the number of bytes actually read, this may be less than the
// requested size if we hit EOF.
size -= m_stream->avail_out;
m_pos += size;
return size;
}
#endif // wxUSE_LIBLZMA && wxUSE_STREAMS