diff --git a/lib/J7Zip-modified.jar b/lib/J7Zip-modified.jar index 6c9e63a62..591256c7a 100644 Binary files a/lib/J7Zip-modified.jar and b/lib/J7Zip-modified.jar differ diff --git a/libbuild/J7Zip-modified/src/SevenZip/Archive/Common/BindInfo.java b/libbuild/J7Zip-modified/src/SevenZip/Archive/Common/BindInfo.java index 36c449952..09b969f15 100644 --- a/libbuild/J7Zip-modified/src/SevenZip/Archive/Common/BindInfo.java +++ b/libbuild/J7Zip-modified/src/SevenZip/Archive/Common/BindInfo.java @@ -6,8 +6,8 @@ import Common.IntVector; public class BindInfo { - public Vector Coders = new Vector(); - public Vector BindPairs = new Vector(); + public Vector Coders = new Vector(); + public Vector BindPairs = new Vector(); public IntVector InStreams = new IntVector(); public IntVector OutStreams = new IntVector(); diff --git a/libbuild/J7Zip-modified/src/SevenZip/Archive/Common/CoderMixer2ST.java b/libbuild/J7Zip-modified/src/SevenZip/Archive/Common/CoderMixer2ST.java index 3f71735eb..4c2613837 100644 --- a/libbuild/J7Zip-modified/src/SevenZip/Archive/Common/CoderMixer2ST.java +++ b/libbuild/J7Zip-modified/src/SevenZip/Archive/Common/CoderMixer2ST.java @@ -9,13 +9,15 @@ import SevenZip.ICompressCoder2; import SevenZip.ICompressCoder; import SevenZip.ICompressSetOutStreamSize; import Common.LongVector; +import SevenZip.HRESULT; import SevenZip.ICompressProgressInfo; +import SevenZip.ICompressSetInStream; public class CoderMixer2ST implements ICompressCoder2, CoderMixer2 { final BindInfo bindInfo; - Vector coders = new Vector(); + Vector coders = new Vector(); int mainCoderIndex; public CoderMixer2ST(BindInfo bindInfo) { @@ -29,12 +31,12 @@ public class CoderMixer2ST implements ICompressCoder2, CoderMixer2 { public void AddCoder2(ICompressCoder2 coder, boolean isMain) { AddCoderCommon(isMain); - ((STCoderInfo)coders.lastElement()).Coder2 = coder; + coders.lastElement().Coder2 = coder; } public void AddCoder(ICompressCoder coder, boolean isMain) { AddCoderCommon(isMain); - ((STCoderInfo)coders.lastElement()).Coder = coder; + coders.lastElement().Coder = coder; } public void ReInit() { @@ -42,22 +44,70 @@ public class CoderMixer2ST implements ICompressCoder2, CoderMixer2 { public void SetCoderInfo(int coderIndex, LongVector inSizes, LongVector outSizes) { // _coders[coderIndex].SetCoderInfo(inSizes, outSizes); - ((STCoderInfo)coders.get(coderIndex)).SetCoderInfo(inSizes, outSizes); + coders.get(coderIndex).SetCoderInfo(inSizes, outSizes); } - - public OutputStream GetOutStream( - Vector outStreams, - // Object useless_outSizes, // const UInt64 **outSizes, - int streamIndex) { - return null; - } - + + public int GetInStream( + Vector inStreams, + //Object useless_inSizes, // const UInt64 **inSizes, + int streamIndex, + InputStream [] inStreamRes) { + java.io.InputStream seqInStream; + int i; + for(i = 0; i < bindInfo.InStreams.size(); i++) + if (bindInfo.InStreams.get(i) == streamIndex) { + seqInStream = inStreams.get(i); + inStreamRes[0] = seqInStream; // seqInStream.Detach(); + return HRESULT.S_OK; + } + int binderIndex = bindInfo.FindBinderForInStream(streamIndex); + if (binderIndex < 0) + return HRESULT.E_INVALIDARG; + + + int tmp1[] = new int[2]; // TBD + //int tmp2 [] = new int[1]; // TBD + tmp1 = bindInfo.FindOutStream(bindInfo.BindPairs.get(binderIndex).OutIndex); + // , tmp1 /* coderIndex */ , tmp2 /* coderStreamIndex */ ); + int coderIndex = tmp1[0], coderStreamIndex = tmp1[0]; + + CoderInfo coder = coders.get(coderIndex); + if (coder.Coder == null) + return HRESULT.E_NOTIMPL; + + seqInStream = (java.io.InputStream)coder.Coder; // coder.Coder.QueryInterface(IID_ISequentialInStream, &seqInStream); + if (seqInStream == null) + return HRESULT.E_NOTIMPL; + + int startIndex = bindInfo.GetCoderInStreamIndex(coderIndex); + + if (coder.Coder == null) + return HRESULT.E_NOTIMPL; + + ICompressSetInStream setInStream = (ICompressSetInStream)coder.Coder; // coder.Coder.QueryInterface(IID_ICompressSetInStream, &setInStream); + if (setInStream == null) + return HRESULT.E_NOTIMPL; + + if (coder.NumInStreams > 1) + return HRESULT.E_NOTIMPL; + for (i = 0; i < (int)coder.NumInStreams; i++) { + InputStream [] tmp = new java.io.InputStream[1]; + int res = GetInStream(inStreams, /*useless_inSizes,*/ startIndex + i, tmp /* &seqInStream2 */ ); + if (res != HRESULT.S_OK) return res; + InputStream seqInStream2 = tmp[0]; + setInStream.SetInStream(seqInStream2); + //if (res != HRESULT.S_OK) return res; + } + inStreamRes[0] = seqInStream; // seqInStream.Detach(); + return HRESULT.S_OK; + } + public void Code( - Vector inStreams, - Object useless_inSizes, // const UInt64 ** inSizes , + Vector inStreams, + //Object useless_inSizes, // const UInt64 ** inSizes , int numInStreams, - Vector outStreams, - Object useless_outSizes, // const UInt64 ** /* outSizes */, + Vector outStreams, + //Object useless_outSizes, // const UInt64 ** /* outSizes */, int numOutStreams, ICompressProgressInfo progress) throws IOException { if (numInStreams != bindInfo.InStreams.size() || numOutStreams != bindInfo.OutStreams.size()) @@ -66,14 +116,14 @@ public class CoderMixer2ST implements ICompressCoder2, CoderMixer2 { // Find main coder int mainCoderIndex = -1; for (int i=0; i 1) { + if ((coders.get(i)).NumInStreams > 1) { if (mainCoderIndex >= 0) // TODO: description, what exactly is not implemented throw new IOException("not implemented"); mainCoderIndex = i; @@ -84,16 +134,26 @@ public class CoderMixer2ST implements ICompressCoder2, CoderMixer2 { // _mainCoderIndex = 0; // _mainCoderIndex = _coders.Size() - 1; - CoderInfo mainCoder = (STCoderInfo)coders.get(mainCoderIndex); - - Vector seqInStreams = new Vector(); // CObjectVector< CMyComPtr > + CoderInfo mainCoder = coders.get(mainCoderIndex); + + Vector seqInStreams = new Vector(); // CObjectVector< CMyComPtr > int startInIndex = bindInfo.GetCoderInStreamIndex(mainCoderIndex); + + // this original (from J7Zip 4.43a) replaces blows loop, as with LZMA BCJ2 format seqInStreams.size() is incorrect (array out of index) with modified code + for (int i = 0; i < (int)mainCoder.NumInStreams; i++) { + java.io.InputStream tmp [] = new java.io.InputStream[1]; + int res = GetInStream(inStreams, /*useless_inSizes,*/ startInIndex + i, tmp /* &seqInStream */ ); + if (res != HRESULT.S_OK) return; + java.io.InputStream seqInStream = tmp[0]; + seqInStreams.add(seqInStream); + } + /* --- replaced by above --- for (int i=0; i > + */ + Vector seqOutStreams = new Vector(); // CObjectVector< CMyComPtr > int startOutIndex = bindInfo.GetCoderOutStreamIndex(mainCoderIndex); for (int i=0; i Files = new Vector(); + public Vector Folders = new Vector(); public final IntVector FolderStartPackStreamIndex = new IntVector(); public final IntVector FolderStartFileIndex = new IntVector(); public final IntVector FileIndexToFolderIndexMap = new IntVector(); private final InStream inStream; - private final InArchiveInfo ArchiveInfo = new InArchiveInfo(); + private final InArchiveInfo ArchiveInfo = new InArchiveInfo(); private final LongVector PackStreamStartPositions = new LongVector(); public ArchiveDB(InStream inStream) throws IOException { @@ -254,7 +254,7 @@ public class ArchiveDB { } private void ReadSubStreamsInfo( - Vector folders, + Vector folders, IntVector numUnPackStreamsInFolders, LongVector unPackSizes, BoolVector digestsDefined, @@ -360,7 +360,7 @@ public class ArchiveDB { type = this.inStream.ReadID(); assert (type == Header.NID.kUnPackInfo); - Vector folders = ReadUnPackInfo(null); + Vector folders = ReadUnPackInfo(null); type = this.inStream.ReadID(); assert (type == Header.NID.kEnd); @@ -517,14 +517,14 @@ public class ArchiveDB { streamSwitch.close(); } - private Vector ReadUnPackInfo(Vector dataVector) throws IOException { + private Vector ReadUnPackInfo(Vector dataVector) throws IOException { this.inStream.skipToAttribute(Header.NID.kFolder); int numFolders = this.inStream.ReadNum(); StreamSwitch streamSwitch = new StreamSwitch(); streamSwitch.Set(this.inStream, dataVector); - Vector folders = new Vector(numFolders); + Vector folders = new Vector(numFolders); for (int i=0; i Folders = new Vector(); public IntVector NumUnPackStreamsVector = new IntVector(); - public Vector Files = new Vector(); + public Vector Files = new Vector(); void Clear() { PackSizes.clear(); diff --git a/libbuild/J7Zip-modified/src/SevenZip/Archive/SevenZip/Decoder.java b/libbuild/J7Zip-modified/src/SevenZip/Archive/SevenZip/Decoder.java index 69f8d435a..7bcd43b6e 100644 --- a/libbuild/J7Zip-modified/src/SevenZip/Archive/SevenZip/Decoder.java +++ b/libbuild/J7Zip-modified/src/SevenZip/Archive/SevenZip/Decoder.java @@ -1,6 +1,7 @@ package SevenZip.Archive.SevenZip; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.util.Vector; @@ -10,7 +11,6 @@ import SevenZip.ICompressFilter; import SevenZip.ICompressProgressInfo; import SevenZip.IInStream; -import SevenZip.Archive.Common.BindPair; import SevenZip.Archive.Common.CoderMixer2ST; import SevenZip.Archive.Common.FilterCoder; @@ -94,7 +94,7 @@ public class Decoder { } for (i=0; i @@ -145,7 +145,7 @@ public class Decoder { final int bindPairIndex = folderInfo.FindBindPairForInStream(packStreamIndex); final int index; if (bindPairIndex >= 0) { - index = ((BindPair)folderInfo.BindPairs.get(bindPairIndex)).OutIndex; + index = (folderInfo.BindPairs.get(bindPairIndex)).OutIndex; packSizesPointer = folderInfo.UnPackSizes.get(index); } else { index = folderInfo.FindPackStreamArrayIndex(packStreamIndex); @@ -172,7 +172,7 @@ public class Decoder { ICompressProgressInfo compressProgress ) throws IOException { - final Vector inStreams = folderInfo.getInStreams( + final Vector inStreams = folderInfo.getInStreams( inStream, startPos, packSizes, @@ -203,10 +203,10 @@ public class Decoder { this._mixerCoderSTSpec.Code( inStreams, - null, + //null, inStreams.size(), outStreams, - null, + //null, 1, compressProgress); } diff --git a/libbuild/J7Zip-modified/src/SevenZip/Archive/SevenZip/Folder.java b/libbuild/J7Zip-modified/src/SevenZip/Archive/SevenZip/Folder.java index 71ee151e1..0c963ce96 100644 --- a/libbuild/J7Zip-modified/src/SevenZip/Archive/SevenZip/Folder.java +++ b/libbuild/J7Zip-modified/src/SevenZip/Archive/SevenZip/Folder.java @@ -15,8 +15,8 @@ import SevenZip.Archive.Common.CoderStreamsInfo; public class Folder { - public Vector Coders = new Vector(); - public Vector BindPairs = new Vector(); + public Vector Coders = new Vector(); + public Vector BindPairs = new Vector(); public IntVector PackStreams = new IntVector(); public LongVector UnPackSizes = new LongVector(); int UnPackCRC; @@ -37,14 +37,14 @@ public class Folder { public int FindBindPairForInStream(int inStreamIndex) { for(int i = 0; i < BindPairs.size(); i++) - if (((BindPair)BindPairs.get(i)).InIndex == inStreamIndex) + if ((BindPairs.get(i)).InIndex == inStreamIndex) return i; return -1; } public int FindBindPairForOutStream(int outStreamIndex) { for(int i = 0; i < BindPairs.size(); i++) - if (((BindPair)BindPairs.get(i)).OutIndex == outStreamIndex) + if ((BindPairs.get(i)).OutIndex == outStreamIndex) return i; return -1; } @@ -59,7 +59,7 @@ public class Folder { public int GetNumOutStreams() { int result = 0; for (int i = 0; i < Coders.size(); i++) - result += ((CoderInfo)Coders.get(i)).NumOutStreams; + result += (Coders.get(i)).NumOutStreams; return result; } @@ -82,14 +82,14 @@ public class Folder { for (int i = 0; i < this.BindPairs.size(); i++) { BindPair bindPair = new BindPair(); - bindPair.InIndex = ((BindPair)this.BindPairs.get(i)).InIndex; - bindPair.OutIndex = ((BindPair)this.BindPairs.get(i)).OutIndex; + bindPair.InIndex = (this.BindPairs.get(i)).InIndex; + bindPair.OutIndex = (this.BindPairs.get(i)).OutIndex; bindInfo.BindPairs.add(bindPair); } int outStreamIndex = 0; for (int i = 0; i < this.Coders.size(); i++) { CoderStreamsInfo coderStreamsInfo = new CoderStreamsInfo(); - CoderInfo coderInfo = (CoderInfo)this.Coders.get(i); + CoderInfo coderInfo = this.Coders.get(i); coderStreamsInfo.NumInStreams = coderInfo.NumInStreams; coderStreamsInfo.NumOutStreams = coderInfo.NumOutStreams; bindInfo.Coders.add(coderStreamsInfo); diff --git a/libbuild/J7Zip-modified/src/SevenZip/Archive/SevenZip/Handler.java b/libbuild/J7Zip-modified/src/SevenZip/Archive/SevenZip/Handler.java index 8daaf15c5..1f1601ac5 100644 --- a/libbuild/J7Zip-modified/src/SevenZip/Archive/SevenZip/Handler.java +++ b/libbuild/J7Zip-modified/src/SevenZip/Archive/SevenZip/Handler.java @@ -48,7 +48,7 @@ public class Handler implements IInArchive { if (numItems == 0) return; - Vector extractFolderInfoVector = new Vector(); + Vector extractFolderInfoVector = new Vector(); for (int ii = 0; ii < numItems; ii++) { int ref2Index = allFilesMode ? ii : indices[ii]; @@ -61,15 +61,15 @@ public class Handler implements IInArchive { continue; } if (extractFolderInfoVector.isEmpty() || - folderIndex != ((ExtractFolderInfo)extractFolderInfoVector.lastElement()).FolderIndex) { + folderIndex != (extractFolderInfoVector.lastElement()).FolderIndex) { extractFolderInfoVector.add(new ExtractFolderInfo(ArchiveDB.kNumNoIndex, folderIndex)); - Folder folderInfo = (Folder)database.Folders.get(folderIndex); + Folder folderInfo = database.Folders.get(folderIndex); long unPackSize = folderInfo.GetUnPackSize(); importantTotalUnPacked += unPackSize; - ((ExtractFolderInfo)extractFolderInfoVector.lastElement()).UnPackSize = unPackSize; + extractFolderInfoVector.lastElement().UnPackSize = unPackSize; } - ExtractFolderInfo efi = (ExtractFolderInfo)extractFolderInfoVector.lastElement(); + ExtractFolderInfo efi = extractFolderInfoVector.lastElement(); int startIndex = database.FolderStartFileIndex.get(folderIndex); // CNum for (int index = efi.ExtractStatuses.size(); index <= fileIndex - startIndex; index++) @@ -84,7 +84,7 @@ public class Handler implements IInArchive { long totalFolderUnPacked; for (int i = 0; i < extractFolderInfoVector.size(); i++, currentImportantTotalUnPacked += totalFolderUnPacked) { - ExtractFolderInfo efi = (ExtractFolderInfo)extractFolderInfoVector.get(i); + ExtractFolderInfo efi = extractFolderInfoVector.get(i); totalFolderUnPacked = efi.UnPackSize; extractCallback.SetCompleted(currentImportantTotalUnPacked); @@ -103,7 +103,7 @@ public class Handler implements IInArchive { continue; int folderIndex = efi.FolderIndex; // CNum - Folder folderInfo = (Folder)this._database.Folders.get(folderIndex); + Folder folderInfo = this._database.Folders.get(folderIndex); LocalProgress localProgressSpec = new LocalProgress(extractCallback, false); @@ -203,10 +203,10 @@ public class Handler implements IInArchive { private String getMethods(int index2) { int folderIndex = _database.FileIndexToFolderIndexMap.get(index2); if (folderIndex != ArchiveDB.kNumNoIndex) { - Folder folderInfo = (Folder)_database.Folders.get(folderIndex); + Folder folderInfo = _database.Folders.get(folderIndex); StringBuffer methodsString = new StringBuffer(); for (int i = folderInfo.Coders.size() - 1; i >= 0; i--) { - CoderInfo coderInfo = (CoderInfo)folderInfo.Coders.get(i); + CoderInfo coderInfo = folderInfo.Coders.get(i); if (methodsString.length() > 0) methodsString.append(' '); diff --git a/libbuild/J7Zip-modified/src/SevenZip/Compression/Branch/BCJ2_x86_Decoder.java b/libbuild/J7Zip-modified/src/SevenZip/Compression/Branch/BCJ2_x86_Decoder.java index b8c33699e..39c32e0d6 100644 --- a/libbuild/J7Zip-modified/src/SevenZip/Compression/Branch/BCJ2_x86_Decoder.java +++ b/libbuild/J7Zip-modified/src/SevenZip/Compression/Branch/BCJ2_x86_Decoder.java @@ -33,11 +33,11 @@ public class BCJ2_x86_Decoder implements ICompressCoder2 { // } void CodeReal( - Vector inStreams, - Object useless1, // const UInt64 ** /* inSizes */, + Vector inStreams, + //Object useless1, // const UInt64 ** /* inSizes */, int numInStreams, - Vector outStreams, - Object useless2, // const UInt64 ** /* outSizes */, + Vector outStreams, + //Object useless2, // const UInt64 ** /* outSizes */, int numOutStreams, ICompressProgressInfo progress) throws java.io.IOException { @@ -50,11 +50,11 @@ public class BCJ2_x86_Decoder implements ICompressCoder2 { _rangeDecoder.Create(1 << 20); _outStream.Create(1 << 16); - _mainInStream.SetStream((InputStream)inStreams.get(0)); - _callStream.SetStream((InputStream)inStreams.get(1)); - _jumpStream.SetStream((InputStream)inStreams.get(2)); - _rangeDecoder.SetStream((InputStream)inStreams.get(3)); - _outStream.SetStream((OutputStream)outStreams.get(0)); + _mainInStream.SetStream(inStreams.get(0)); + _callStream.SetStream(inStreams.get(1)); + _jumpStream.SetStream(inStreams.get(2)); + _rangeDecoder.SetStream(inStreams.get(3)); + _outStream.SetStream(outStreams.get(0)); _mainInStream.Init(); _callStream.Init(); @@ -154,17 +154,17 @@ public class BCJ2_x86_Decoder implements ICompressCoder2 { } public void Code( - Vector inStreams, // ISequentialInStream **inStreams, - Object useless_inSizes, // const UInt64 ** /* inSizes */, + Vector inStreams, // ISequentialInStream **inStreams, + //Object useless_inSizes, // const UInt64 ** /* inSizes */, int numInStreams, - Vector outStreams, // ISequentialOutStream **outStreams - Object useless_outSizes, // const UInt64 ** /* outSizes */, + Vector outStreams, // ISequentialOutStream **outStreams + //Object useless_outSizes, // const UInt64 ** /* outSizes */, int numOutStreams, ICompressProgressInfo progress) throws java.io.IOException { try { - CodeReal(inStreams, useless_inSizes, numInStreams, - outStreams, useless_outSizes,numOutStreams, progress); + CodeReal(inStreams, /*useless_inSizes,*/ numInStreams, + outStreams, /*useless_outSizes,*/ numOutStreams, progress); } catch(java.io.IOException e) { throw e; } finally { diff --git a/libbuild/J7Zip-modified/src/SevenZip/ICompressCoder2.java b/libbuild/J7Zip-modified/src/SevenZip/ICompressCoder2.java index 08493c032..3deb87e3c 100644 --- a/libbuild/J7Zip-modified/src/SevenZip/ICompressCoder2.java +++ b/libbuild/J7Zip-modified/src/SevenZip/ICompressCoder2.java @@ -1,16 +1,18 @@ package SevenZip; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.Vector; public interface ICompressCoder2 { public void Code( - Vector inStreams, - Object useless1, // const UInt64 ** /* inSizes */, + Vector inStreams, + //Object useless1, // const UInt64 ** /* inSizes */, int numInStreams, - Vector outStreams, - Object useless2, // const UInt64 ** /* outSizes */, + Vector outStreams, + //Object useless2, // const UInt64 ** /* outSizes */, int numOutStreams, ICompressProgressInfo progress) throws IOException; diff --git a/libbuild/J7Zip-modified/src/SevenZip/ICompressSetInStream.java b/libbuild/J7Zip-modified/src/SevenZip/ICompressSetInStream.java index 56a0ddc2d..719fac572 100644 --- a/libbuild/J7Zip-modified/src/SevenZip/ICompressSetInStream.java +++ b/libbuild/J7Zip-modified/src/SevenZip/ICompressSetInStream.java @@ -1,7 +1,9 @@ package SevenZip; +import java.io.InputStream; + public interface ICompressSetInStream { - public void SetInStream(java.io.InputStream inStream); + public void SetInStream(InputStream inStream); public void ReleaseInStream() throws java.io.IOException ; }