diff --git a/Makefile.in b/Makefile.in index 583620372a..d2b234ea11 100644 --- a/Makefile.in +++ b/Makefile.in @@ -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 diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl index 0f38e0952f..d529b6d731 100644 --- a/build/bakefiles/files.bkl +++ b/build/bakefiles/files.bkl @@ -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 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 diff --git a/build/cmake/files.cmake b/build/cmake/files.cmake index d6d9c6becb..0acb0dc7df 100644 --- a/build/cmake/files.cmake +++ b/build/cmake/files.cmake @@ -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 diff --git a/build/files b/build/files index e81c72ebdc..166aab50a1 100644 --- a/build/files +++ b/build/files @@ -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 diff --git a/build/msw/makefile.bcc b/build/msw/makefile.bcc index 0c23f0a938..334895a139 100644 --- a/build/msw/makefile.bcc +++ b/build/msw/makefile.bcc @@ -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 diff --git a/build/msw/makefile.gcc b/build/msw/makefile.gcc index 4272f38c1a..7a686f28c3 100644 --- a/build/msw/makefile.gcc +++ b/build/msw/makefile.gcc @@ -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) $< diff --git a/build/msw/makefile.vc b/build/msw/makefile.vc index b2965f5f63..1015011203 100644 --- a/build/msw/makefile.vc +++ b/build/msw/makefile.vc @@ -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 diff --git a/build/msw/wx_base.vcxproj b/build/msw/wx_base.vcxproj index bdf09a2b7d..920df8bae3 100644 --- a/build/msw/wx_base.vcxproj +++ b/build/msw/wx_base.vcxproj @@ -605,6 +605,7 @@ $(IntDir)common_%(Filename).obj $(IntDir)common_%(Filename).obj + @@ -822,6 +823,7 @@ + diff --git a/build/msw/wx_base.vcxproj.filters b/build/msw/wx_base.vcxproj.filters index 6e1b1cace5..30fff49b7e 100644 --- a/build/msw/wx_base.vcxproj.filters +++ b/build/msw/wx_base.vcxproj.filters @@ -162,6 +162,9 @@ Common Sources + + Common Sources + Common Sources @@ -604,6 +607,9 @@ Common Headers + + Common Headers + Common Headers diff --git a/build/msw/wx_vc7_base.vcproj b/build/msw/wx_vc7_base.vcproj index 509f9cba53..007b65e75f 100644 --- a/build/msw/wx_vc7_base.vcproj +++ b/build/msw/wx_vc7_base.vcproj @@ -462,6 +462,9 @@ + + @@ -1135,6 +1138,9 @@ + + diff --git a/build/msw/wx_vc8_base.vcproj b/build/msw/wx_vc8_base.vcproj index 3a22b0bd71..a2014a225b 100644 --- a/build/msw/wx_vc8_base.vcproj +++ b/build/msw/wx_vc8_base.vcproj @@ -1053,6 +1053,10 @@ RelativePath="..\..\src\common\longlong.cpp" > + + @@ -2111,6 +2115,10 @@ RelativePath="..\..\include\wx\longlong.h" > + + diff --git a/build/msw/wx_vc9_base.vcproj b/build/msw/wx_vc9_base.vcproj index 2c435c44bb..7b04347201 100644 --- a/build/msw/wx_vc9_base.vcproj +++ b/build/msw/wx_vc9_base.vcproj @@ -1049,6 +1049,10 @@ RelativePath="..\..\src\common\longlong.cpp" > + + @@ -2107,6 +2111,10 @@ RelativePath="..\..\include\wx\longlong.h" > + + diff --git a/docs/doxygen/mainpages/cat_classes.h b/docs/doxygen/mainpages/cat_classes.h index 50a6485224..66bad14a00 100644 --- a/docs/doxygen/mainpages/cat_classes.h +++ b/docs/doxygen/mainpages/cat_classes.h @@ -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 diff --git a/include/wx/lzmastream.h b/include/wx/lzmastream.h new file mode 100644 index 0000000000..3c2a77808f --- /dev/null +++ b/include/wx/lzmastream.h @@ -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 +// 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_ diff --git a/interface/wx/lzmastream.h b/interface/wx/lzmastream.h new file mode 100644 index 0000000000..7ca8fb5d32 --- /dev/null +++ b/interface/wx/lzmastream.h @@ -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 +// 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); +}; diff --git a/src/common/lzmastream.cpp b/src/common/lzmastream.cpp new file mode 100644 index 0000000000..b8aae286f1 --- /dev/null +++ b/src/common/lzmastream.cpp @@ -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 +// 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 + +// ---------------------------------------------------------------------------- +// 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(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