diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Un7Zip/makefile p7zip_4.65-new/CPP/7zip/Bundles/Un7Zip/makefile --- p7zip_4.65/CPP/7zip/Bundles/Un7Zip/makefile 1970-01-01 01:00:00.000000000 +0100 +++ p7zip_4.65-new/CPP/7zip/Bundles/Un7Zip/makefile 2009-06-14 23:15:12.000000000 +0200 @@ -0,0 +1,137 @@ +PROG=libun7zip.so + +LOCAL_FLAGS= \ + -DEXTRACT_ONLY \ + -DNO_READ_FROM_CODER \ + -D_SFX + +include ../../../../makefile.crc32 +include ../../../../makefile.machine + +LOCAL_SHARED=$(LINK_SHARED) +LIBS=$(LOCAL_LIBS_DLL) + +SFX_CONSOLE_OBJS = \ + Un7Zip.o + +CONSOLE_OBJS = \ + ConsoleClose.o \ + ExtractCallbackConsole.o \ + ExtractCallbackNULL.o \ + List.o \ + OpenCallbackConsole.o \ + UserInputUtils.o \ + +# NewHandler.o +COMMON_OBJS = \ + CommandLineParser.o \ + CRC.o \ + IntToString.o \ + StdInStream.o \ + StdOutStream.o \ + MyString.o \ + MyWindows.o\ + StringConvert.o \ + MyVector.o \ + Wildcard.o \ + +# DLL.o +WIN_OBJS = \ + Error.o \ + FileDir.o \ + FileFind.o \ + FileIO.o \ + FileName.o \ + PropVariant.o \ + PropVariantConversions.o \ + Synchronization.o \ + System.o + +7ZIP_COMMON_OBJS = \ + CreateCoder.o \ + FilePathAutoRename.o \ + FileStreams.o \ + InBuffer.o \ + FilterCoder.o \ + LimitedStreams.o \ + LockedStream.o \ + OutBuffer.o \ + ProgressUtils.o \ + StreamBinder.o \ + StreamObjects.o \ + StreamUtils.o \ + VirtThread.o \ + +UI_COMMON_OBJS = \ + ArchiveExtractCallback.o \ + ArchiveOpenCallback.o \ + DefaultName.o \ + LoadCodecs.o \ + Extract.o \ + ExtractingFilePath.o \ + OpenArchive.o \ + PropIDUtils.o \ + +AR_COMMON_OBJS = \ + CoderMixer2.o \ + CoderMixer2MT.o \ + CrossThreadProgress.o \ + ItemNameUtils.o \ + OutStreamWithCRC.o \ + + +7Z_OBJS = \ + 7zDecode.o \ + 7zExtract.o \ + 7zFolderOutStream.o \ + 7zHandler.o \ + 7zHeader.o \ + 7zIn.o \ + 7zRegister.o \ + +COMPRESS_OBJS = \ + BranchCoder.o \ + Bcj2Coder.o \ + Bcj2Register.o \ + BcjCoder.o \ + BcjRegister.o \ + CopyCoder.o \ + CopyRegister.o \ + LzmaDecoder.o \ + LzmaRegister.o \ + PpmdDecoder.o \ + PpmdRegister.o \ + +CRYPTO_OBJS = \ + 7zAes.o \ + 7zAesRegister.o \ + MyAes.o \ + +# Alloc.o +C_OBJS = \ + Bra86.o \ + LzmaDec.o \ + Threads.o \ + Aes.o \ + Sha256.o \ + +OBJS = \ + myGetTickCount.o\ + wine_date_and_time.o\ + mySplitCommandLine.o\ + $(SFX_CONSOLE_OBJS) \ + $(CONSOLE_OBJS) \ + $(COMMON_OBJS) \ + $(WIN_OBJS) \ + $(7ZIP_COMMON_OBJS) \ + $(UI_COMMON_OBJS) \ + $(AR_COMMON_OBJS) \ + $(7Z_OBJS) \ + $(COMPRESS_OBJS) \ + $(CRYPTO_OBJS) \ + $(C_OBJS) \ + $(OBJ_CRC32) + + +include ../../../../makefile.glb + diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Un7Zip/makefile.depend p7zip_4.65-new/CPP/7zip/Bundles/Un7Zip/makefile.depend --- p7zip_4.65/CPP/7zip/Bundles/Un7Zip/makefile.depend 1970-01-01 01:00:00.000000000 +0100 +++ p7zip_4.65-new/CPP/7zip/Bundles/Un7Zip/makefile.depend 2009-06-14 23:15:12.000000000 +0200 @@ -0,0 +1 @@ + \ No newline at end of file diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Un7Zip/makefile.list p7zip_4.65-new/CPP/7zip/Bundles/Un7Zip/makefile.list --- p7zip_4.65/CPP/7zip/Bundles/Un7Zip/makefile.list 1970-01-01 01:00:00.000000000 +0100 +++ p7zip_4.65-new/CPP/7zip/Bundles/Un7Zip/makefile.list 2009-06-14 23:16:37.000000000 +0200 @@ -0,0 +1,10 @@ +CXXFLAGS += $(CC_SHARED) +CFLAGS += $(CC_SHARED) + +include ../../../../makefile.rules + +ExtractCallbackNULL.o : ../../UI/Console/ExtractCallbackNULL.cpp + $(CXX) $(CFLAGS) ../../UI/Console/ExtractCallbackNULL.cpp + +Un7Zip.o : ./Un7Zip.cpp + $(CXX) $(CFLAGS) ./Un7Zip.cpp diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Un7Zip/testlib.c p7zip_4.65-new/CPP/7zip/Bundles/Un7Zip/testlib.c --- p7zip_4.65/CPP/7zip/Bundles/Un7Zip/testlib.c 1970-01-01 01:00:00.000000000 +0100 +++ p7zip_4.65-new/CPP/7zip/Bundles/Un7Zip/testlib.c 2009-06-14 23:15:12.000000000 +0200 @@ -0,0 +1,7 @@ + +#include "u7zip.h" + +int main(int argc, char *argv[]) +{ + return un7zip(argv[1], "/tmp", 0); +} diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Un7Zip/u7zip.h p7zip_4.65-new/CPP/7zip/Bundles/Un7Zip/u7zip.h --- p7zip_4.65/CPP/7zip/Bundles/Un7Zip/u7zip.h 1970-01-01 01:00:00.000000000 +0100 +++ p7zip_4.65-new/CPP/7zip/Bundles/Un7Zip/u7zip.h 2009-06-14 23:15:12.000000000 +0200 @@ -0,0 +1,19 @@ +#ifndef __UN7ZIP_H +#define __UN7ZIP_H + +#define LIST_7Z 0 +#define TEST_7Z 1 +#define EXTRACT_7Z 2 + +#define S_OK 0x00000000L +#define S_FALSE 0x00000001L +#define E_NOTIMPL 0x80004001L +#define E_NOINTERFACE 0x80004002L +#define E_ABORT 0x80004004L +#define E_FAIL 0x80004005L +#define E_OUTOFMEMORY 0x8007000EL +#define E_INVALIDARG 0x80070057L + +int un7zip(char *name, char *dir, int command); + +#endif diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Un7Zip/Un7Zip.cpp p7zip_4.65-new/CPP/7zip/Bundles/Un7Zip/Un7Zip.cpp --- p7zip_4.65/CPP/7zip/Bundles/Un7Zip/Un7Zip.cpp 1970-01-01 01:00:00.000000000 +0100 +++ p7zip_4.65-new/CPP/7zip/Bundles/Un7Zip/Un7Zip.cpp 2009-06-14 23:15:12.000000000 +0200 @@ -0,0 +1,148 @@ +// Un7Zip.cpp + +#include "StdAfx.h" + +#include "Common/MyInitGuid.h" + +#include "Common/StdOutStream.h" +#include "Common/Wildcard.h" +#include "Common/StringConvert.h" +#include "Common/MyCom.h" +#include "Common/MyException.h" + +#include "Windows/FileDir.h" +#include "Windows/FileName.h" +#include "Windows/Defs.h" + +#include "../../IPassword.h" +#include "../../ICoder.h" + +#include "../../UI/Common/OpenArchive.h" +#include "../../UI/Common/DefaultName.h" +#include "../../UI/Common/ExitCode.h" +#include "../../UI/Common/Extract.h" + +#include "../../UI/Console/List.h" +#include "../../UI/Console/OpenCallbackConsole.h" +#include "../../UI/Console/ExtractCallbackNULL.h" + + +static int Un7Zip(char *name, char *dir, int command); + +extern "C" { + +int un7zip(char *name, char *dir, int command) +{ + return Un7Zip(name, dir, command); +} + +} + +using namespace NWindows; +using namespace NFile; + +static const wchar_t *kUniversalWildcard = L"*"; +static bool AddNameToCensor(NWildcard::CCensor &wildcardCensor) +{ + wildcardCensor.AddItem(true, kUniversalWildcard, false); + return true; +} + +static int Un7Zip(char *name, char *dir, int commands) +{ + + CStdOutStream *g_StdStream = &g_StdOut; + + NWildcard::CCensor wildcardCensor; + AddNameToCensor(wildcardCensor); + bool passwordEnabled = 1; + UString password = L"null"; + + UString outputDir= MultiByteToUnicodeString(dir); + UString archiveName = MultiByteToUnicodeString(name); + + NFind::CFileInfoW archiveFileInfo; + + if (!NFind::FindFile(archiveName, archiveFileInfo)) + return S_FALSE; + if (archiveFileInfo.IsDir()) + return S_FALSE; + + { + + UStringVector v1, v2; + v1.Add(archiveName); + v2.Add(archiveName); + + + CCodecs *codecs = new CCodecs; + CMyComPtr< + #ifdef EXTERNAL_CODECS + ICompressCodecsInfo + #else + IUnknown + #endif + > compressCodecsInfo = codecs; + HRESULT result = codecs->Load(); + if (result != S_OK) + throw CSystemException(result); + + const NWildcard::CCensorNode &wildcardCensorHead = + wildcardCensor.Pairs.Front().Head; + + if(commands > 0) + { + CExtractCallbackNULL *ecs = new CExtractCallbackNULL; + CMyComPtr extractCallback = ecs; + ecs->OutStream = g_StdStream; + ecs->PasswordIsDefined = passwordEnabled; + ecs->Password = password; + ecs->Init(); + + COpenCallbackConsole openCallback; + openCallback.OutStream = g_StdStream; + openCallback.PasswordIsDefined = passwordEnabled; + openCallback.Password = password; + + CExtractOptions eo; + eo.StdOutMode = false; + eo.PathMode = NExtract::NPathMode::kFullPathnames; + if(commands == 1) + eo.TestMode = 1; + else + eo.TestMode = 0; + eo.OverwriteMode = NExtract::NOverwriteMode::kWithoutPrompt; + eo.OutputDir = outputDir; + eo.YesToAll = 1; + + UString errorMessage; + CDecompressStat stat; + + HRESULT result = DecompressArchives( + codecs, CIntVector(), + v1, v2, + wildcardCensorHead, + eo, &openCallback, ecs, errorMessage, stat); + + if (ecs->NumArchiveErrors != 0 || ecs->NumFileErrors != 0) + return S_FALSE; + if (result != S_OK) + return S_FALSE; + } + else + { + UInt64 numErrors = 0; + HRESULT result = ListArchives( + codecs, CIntVector(), + v1, v2, + wildcardCensorHead, + true, false, + passwordEnabled, + password, numErrors); + + if (result != S_OK) + return S_FALSE;; + } + } + return S_OK; +} diff -dPNur p7zip_4.65/CPP/7zip/UI/Console/ExtractCallbackNULL.cpp p7zip_4.65-new/CPP/7zip/UI/Console/ExtractCallbackNULL.cpp --- p7zip_4.65/CPP/7zip/UI/Console/ExtractCallbackNULL.cpp 1970-01-01 01:00:00.000000000 +0100 +++ p7zip_4.65-new/CPP/7zip/UI/Console/ExtractCallbackNULL.cpp 2009-06-14 23:15:12.000000000 +0200 @@ -0,0 +1,130 @@ +// ExtractCallbackNULL.cpp + +#include "StdAfx.h" + +#include "ExtractCallbackNULL.h" +#include "UserInputUtils.h" +#include "ConsoleClose.h" + +#include "Common/Wildcard.h" + +#include "Windows/FileDir.h" +#include "Windows/FileFind.h" +#include "Windows/Time.h" +#include "Windows/Defs.h" +#include "Windows/PropVariant.h" +#include "Windows/Error.h" +#include "Windows/PropVariantConversions.h" + +#include "../../Common/FilePathAutoRename.h" + +#include "../Common/ExtractingFilePath.h" + +using namespace NWindows; +using namespace NFile; +using namespace NDirectory; + +STDMETHODIMP CExtractCallbackNULL::SetTotal(UInt64 size) +{ + if (NConsoleClose::TestBreakSignal()) + return E_ABORT; + return S_OK; +} + +STDMETHODIMP CExtractCallbackNULL::SetCompleted(const UInt64 *completeValue) +{ + if (NConsoleClose::TestBreakSignal()) + return E_ABORT; + return S_OK; +} + +STDMETHODIMP CExtractCallbackNULL::AskOverwrite( + const wchar_t *existName, const FILETIME *existTime, const UInt64 *existSize, + const wchar_t *newName, const FILETIME *newTime, const UInt64 *newSize, + Int32 *answer) +{ + + NUserAnswerMode::EEnum overwriteAnswer = ScanUserYesNoAllQuit(OutStream); + + switch(overwriteAnswer) + { + case NUserAnswerMode::kQuit: + return E_ABORT; + case NUserAnswerMode::kNo: + *answer = NOverwriteAnswer::kNo; + break; + case NUserAnswerMode::kNoAll: + *answer = NOverwriteAnswer::kNoToAll; + break; + case NUserAnswerMode::kYesAll: + *answer = NOverwriteAnswer::kYesToAll; + break; + case NUserAnswerMode::kYes: + *answer = NOverwriteAnswer::kYes; + break; + case NUserAnswerMode::kAutoRenameAll: + *answer = NOverwriteAnswer::kAutoRename; + break; + default: + return E_FAIL; + } + return S_OK; +} + +STDMETHODIMP CExtractCallbackNULL::PrepareOperation(const wchar_t *name, bool /* isFolder */, Int32 askExtractMode, const UInt64 *position) +{ + return S_OK; +} + +STDMETHODIMP CExtractCallbackNULL::MessageError(const wchar_t *message) +{ + return S_OK; +} + +STDMETHODIMP CExtractCallbackNULL::SetOperationResult(Int32 operationResult, bool encrypted) +{ + return S_OK; +} + +STDMETHODIMP CExtractCallbackNULL::CryptoGetTextPassword(BSTR *password) +{ + if (!PasswordIsDefined) + { + Password = GetPassword(OutStream); + PasswordIsDefined = true; + } + return StringToBstr(Password, password); +} + +HRESULT CExtractCallbackNULL::BeforeOpen(const wchar_t *name) +{ + return S_OK; +} + +HRESULT CExtractCallbackNULL::OpenResult(const wchar_t *name, HRESULT result, bool encrypted) +{ + return S_OK; +} + +HRESULT CExtractCallbackNULL::ThereAreNoFiles() +{ + return S_OK; +} + +HRESULT CExtractCallbackNULL::ExtractResult(HRESULT result) +{ + if (result == S_OK) + return result; + if (result == E_ABORT) + return result; + if (result == E_OUTOFMEMORY) + return result; + return S_OK; +} + +HRESULT CExtractCallbackNULL::SetPassword(const UString &password) +{ + PasswordIsDefined = true; + Password = password; + return S_OK; +} diff -dPNur p7zip_4.65/CPP/7zip/UI/Console/ExtractCallbackNULL.h p7zip_4.65-new/CPP/7zip/UI/Console/ExtractCallbackNULL.h --- p7zip_4.65/CPP/7zip/UI/Console/ExtractCallbackNULL.h 1970-01-01 01:00:00.000000000 +0100 +++ p7zip_4.65-new/CPP/7zip/UI/Console/ExtractCallbackNULL.h 2009-06-14 23:15:12.000000000 +0200 @@ -0,0 +1,65 @@ +// ExtractCallbackNULL.h + +#ifndef __EXTRACTCALLBACKCONSOLE_H +#define __EXTRACTCALLBACKCONSOLE_H + +#include "Common/MyString.h" +#include "Common/StdOutStream.h" +#include "../../Common/FileStreams.h" +#include "../../IPassword.h" +#include "../../Archive/IArchive.h" +#include "../Common/ArchiveExtractCallback.h" + +class CExtractCallbackNULL: + public IExtractCallbackUI, + public ICryptoGetTextPassword, + public CMyUnknownImp +{ +public: + MY_UNKNOWN_IMP2(IFolderArchiveExtractCallback, ICryptoGetTextPassword) + + STDMETHOD(SetTotal)(UInt64 total); + STDMETHOD(SetCompleted)(const UInt64 *completeValue); + + // IFolderArchiveExtractCallback + STDMETHOD(AskOverwrite)( + const wchar_t *existName, const FILETIME *existTime, const UInt64 *existSize, + const wchar_t *newName, const FILETIME *newTime, const UInt64 *newSize, + Int32 *answer); + STDMETHOD (PrepareOperation)(const wchar_t *name, bool isFolder, Int32 askExtractMode, const UInt64 *position); + + STDMETHOD(MessageError)(const wchar_t *message); + STDMETHOD(SetOperationResult)(Int32 operationResult, bool encrypted); + + // ICryptoGetTextPassword + STDMETHOD(CryptoGetTextPassword)(BSTR *password); + + HRESULT BeforeOpen(const wchar_t *name); + HRESULT OpenResult(const wchar_t *name, HRESULT result, bool encrypted); + HRESULT ThereAreNoFiles(); + HRESULT ExtractResult(HRESULT result); + + HRESULT SetPassword(const UString &password); + +public: + bool PasswordIsDefined; + UString Password; + + UInt64 NumArchives; + UInt64 NumArchiveErrors; + UInt64 NumFileErrors; + UInt64 NumFileErrorsInCurrentArchive; + + CStdOutStream *OutStream; + + void Init() + { + NumArchives = 0; + NumArchiveErrors = 0; + NumFileErrors = 0; + NumFileErrorsInCurrentArchive = 0; + } + +}; + +#endif