diff options
author | Suren A. Chilingaryan <csa@suren.me> | 2021-03-12 03:55:34 +0100 |
---|---|---|
committer | Suren A. Chilingaryan <csa@suren.me> | 2021-03-12 03:55:34 +0100 |
commit | 60bd665e74cfeeaf70882173a0dd56c883e2014a (patch) | |
tree | 8a0066bb9f0259becac5605641e8e1eed1ae0e89 /patches/p7zip | |
download | rusxmms2-60bd665e74cfeeaf70882173a0dd56c883e2014a.tar.gz rusxmms2-60bd665e74cfeeaf70882173a0dd56c883e2014a.tar.bz2 rusxmms2-60bd665e74cfeeaf70882173a0dd56c883e2014a.tar.xz rusxmms2-60bd665e74cfeeaf70882173a0dd56c883e2014a.zip |
Added to git tree
Diffstat (limited to 'patches/p7zip')
-rw-r--r-- | patches/p7zip/README | 13 | ||||
-rw-r--r-- | patches/p7zip/p7zip_4.44-ds-rusxmms-full.patch | 314 | ||||
-rw-r--r-- | patches/p7zip/p7zip_4.57-ds-rusxmms-full.patch | 419 | ||||
-rw-r--r-- | patches/p7zip/p7zip_4.57-ds-rusxmms.patch | 336 | ||||
-rw-r--r-- | patches/p7zip/p7zip_4.65-ds-rusxmms-full.patch | 425 | ||||
-rw-r--r-- | patches/p7zip/p7zip_4.65-ds-rusxmms.patch | 305 | ||||
-rw-r--r-- | patches/p7zip/p7zip_9.04-ds-rusxmms-full.patch | 414 | ||||
-rw-r--r-- | patches/p7zip/p7zip_9.04-ds-rusxmms.patch | 294 |
8 files changed, 2520 insertions, 0 deletions
diff --git a/patches/p7zip/README b/patches/p7zip/README new file mode 100644 index 0000000..fe8ae08 --- /dev/null +++ b/patches/p7zip/README @@ -0,0 +1,13 @@ +Difference between 'rusxmms' and 'rusxmms-full' patches is following. The full patche besides makefile.machine fixes all +other architecure-oss specific make files. The 'rusxmms' patch does not. However, you could execute following commands +to have all makefiles adjusted. + +find . -maxdepth 1 -name "makefile.linux*" -print0 | xargs -0 sed -i -e "s/LOCAL_LIBS=-lpthread/LOCAL_LIBS=-lpthread -lrcc/" +find . -maxdepth 1 -name "makefile.machine" -print0 | xargs -0 sed -i -e "s/LOCAL_LIBS=-lpthread/LOCAL_LIBS=-lpthread -lrcc/" + + +Configuration +============= + - The patch uses "zip" configuration of RCC. This means settings could be + altered using "rcc-gtk2-config zip". + - ZIP OEM / Output - encodings are important for patch. diff --git a/patches/p7zip/p7zip_4.44-ds-rusxmms-full.patch b/patches/p7zip/p7zip_4.44-ds-rusxmms-full.patch new file mode 100644 index 0000000..98e7855 --- /dev/null +++ b/patches/p7zip/p7zip_4.44-ds-rusxmms-full.patch @@ -0,0 +1,314 @@ +diff -dPNur p7zip_4.44-old/C/rccrecode.c p7zip_4.44/C/rccrecode.c +--- p7zip_4.44-old/C/rccrecode.c 1970-01-01 01:00:00.000000000 +0100 ++++ p7zip_4.44/C/rccrecode.c 2007-04-14 19:47:03.000000000 +0200 +@@ -0,0 +1,69 @@ ++#include <pthread.h> ++#include <librcc.h> ++ ++static rcc_class_default_charset default_oem[] = { ++ { "ru", "IBM866" }, ++ { NULL, NULL } ++}; ++ ++static rcc_class_default_charset default_iso[] = { ++ { "ru", "CP1251" }, ++ { NULL, NULL } ++}; ++ ++#define ARC_CLASS 0 ++#define OUT_CLASS 1 ++#define ARCOUT_CLASS 0 ++static rcc_class classes[] = { ++ { "oem", RCC_CLASS_STANDARD, NULL, default_oem, "OEM Encoding", 0 }, ++ { "out", RCC_CLASS_STANDARD, "LC_CTYPE", NULL, "Output", 0 }, ++ { NULL } ++}; ++ ++static int initialized = 0; ++static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; ++ ++void *rcc_init() { ++ rcc_context ctx; ++ ++ pthread_mutex_lock(&mutex); ++ if (!initialized) { ++ rccInit(); ++ rccInitDefaultContext(NULL, 0, 0, classes, 0); ++ rccInitDb4(NULL, NULL, 0); ++ } ++ initialized++; ++ pthread_mutex_unlock(&mutex); ++ ++ ctx = rccCreateContext(NULL, 0, 0, classes, 0); ++ if (ctx) rccInitDb4(ctx, NULL, 0); ++ ++ return ctx; ++} ++ ++ ++void rcc_free(void *ctx) { ++ if (ctx) rccFreeContext((rcc_context)ctx); ++ ++ pthread_mutex_lock(&mutex); ++ if (initialized == 1) rccFree(); ++ initialized--; ++ pthread_mutex_unlock(&mutex); ++} ++ ++ ++char *rcc_read(void *ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, ARC_CLASS, OUT_CLASS, string, size, NULL); ++} ++ ++char *rcc_write(rcc_context ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, OUT_CLASS, ARCOUT_CLASS, string, size, NULL); ++} +diff -dPNur p7zip_4.44-old/C/rccrecode.h p7zip_4.44/C/rccrecode.h +--- p7zip_4.44-old/C/rccrecode.h 1970-01-01 01:00:00.000000000 +0100 ++++ p7zip_4.44/C/rccrecode.h 2007-04-14 19:34:20.000000000 +0200 +@@ -0,0 +1,17 @@ ++#ifndef _RCC_RECODE_H ++#define _RCC_RECODE_H ++ ++# ifdef __cplusplus ++extern "C" { ++# endif ++ ++ void *rcc_init(); ++ void rcc_free(void *ctx); ++ char *rcc_read(void *ctx, const char *string, size_t size); ++ char *rcc_write(void *ctx, const char *string, size_t size); ++ ++# ifdef __cplusplus ++} ++# endif ++ ++#endif /* _RCC_RECODE_H */ +diff -dPNur p7zip_4.44-old/CPP/7zip/Archive/Zip/makefile p7zip_4.44/CPP/7zip/Archive/Zip/makefile +--- p7zip_4.44-old/CPP/7zip/Archive/Zip/makefile 2007-01-23 21:29:41.000000000 +0100 ++++ p7zip_4.44/CPP/7zip/Archive/Zip/makefile 2007-04-14 18:36:44.000000000 +0200 +@@ -13,6 +13,7 @@ + LIBS=$(LOCAL_LIBS_DLL) + + OBJS = \ ++../../../../C/rccrecode.o \ + ../../../Common/MyWindows.o \ + ../../../Common/Vector.o\ + ../../../Common/Alloc.o\ +diff -dPNur p7zip_4.44-old/CPP/7zip/Archive/Zip/ZipIn.cpp p7zip_4.44/CPP/7zip/Archive/Zip/ZipIn.cpp +--- p7zip_4.44-old/CPP/7zip/Archive/Zip/ZipIn.cpp 2007-01-20 18:06:58.000000000 +0100 ++++ p7zip_4.44/CPP/7zip/Archive/Zip/ZipIn.cpp 2007-04-14 19:34:59.000000000 +0200 +@@ -9,11 +9,22 @@ + #include "../../Common/LimitedStreams.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + namespace NArchive { + namespace NZip { ++ ++CInArchive::CInArchive() { ++ rccctx = rcc_init(); ++} ++ ++CInArchive::~CInArchive() { ++ rcc_free(rccctx); ++} ++ + + // static const char kEndOfString = '\0'; +- ++ + bool CInArchive::Open(IInStream *inStream, const UInt64 *searchHeaderSizeLimit) + { + m_Stream = inStream; +@@ -179,10 +190,18 @@ + + AString CInArchive::ReadFileName(UInt32 nameSize) + { ++ char *rccrec; + if (nameSize == 0) + return AString(); + SafeReadBytes(m_NameBuffer.GetBuffer(nameSize), nameSize); + m_NameBuffer.ReleaseBuffer(nameSize); ++ ++ rccrec = rcc_read(rccctx, (LPCSTR)m_NameBuffer, 0); ++ if (rccrec) { ++ m_NameBuffer = rccrec; ++ free(rccrec); ++ } ++ + return m_NameBuffer; + } + +diff -dPNur p7zip_4.44-old/CPP/7zip/Archive/Zip/ZipIn.h p7zip_4.44/CPP/7zip/Archive/Zip/ZipIn.h +--- p7zip_4.44-old/CPP/7zip/Archive/Zip/ZipIn.h 2007-01-20 18:06:28.000000000 +0100 ++++ p7zip_4.44/CPP/7zip/Archive/Zip/ZipIn.h 2007-04-14 19:05:31.000000000 +0200 +@@ -104,6 +104,10 @@ + bool SeekInArchive(UInt64 position); + ISequentialInStream *CreateLimitedStream(UInt64 position, UInt64 size); + IInStream* CreateStream(); ++ ++ void *rccctx; ++ CInArchive(); ++ ~CInArchive(); + }; + + }} +diff -dPNur p7zip_4.44-old/CPP/7zip/Archive/Zip/ZipOut.cpp p7zip_4.44/CPP/7zip/Archive/Zip/ZipOut.cpp +--- p7zip_4.44-old/CPP/7zip/Archive/Zip/ZipOut.cpp 2007-01-20 18:06:57.000000000 +0100 ++++ p7zip_4.44/CPP/7zip/Archive/Zip/ZipOut.cpp 2007-04-14 19:44:44.000000000 +0200 +@@ -8,9 +8,19 @@ + #include "../../Common/OffsetStream.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + namespace NArchive { + namespace NZip { + ++COutArchive::COutArchive() { ++ rccctx = rcc_init(); ++} ++ ++COutArchive::~COutArchive() { ++ rcc_free(rccctx); ++} ++ + void COutArchive::Create(IOutStream *outStream) + { + m_Stream = outStream; +@@ -104,6 +114,8 @@ + + HRESULT COutArchive::WriteLocalHeader(const CLocalItem &item) + { ++ char *rccrec; ++ + m_Stream->Seek(m_BasePosition, STREAM_SEEK_SET, NULL); + + bool isZip64 = m_IsZip64 || item.PackSize >= 0xFFFFFFFF || item.UnPackSize >= 0xFFFFFFFF; +@@ -124,6 +136,12 @@ + return E_FAIL; + } + WriteUInt16((UInt16)m_ExtraSize); // test it; ++ rccrec = rcc_write(rccctx, (const char *)item.Name, item.Name.Length()); ++ if (rccrec) { ++ printf("%u, %s.\n", item.Name.Length(), rccrec); ++ WriteBytes(rccrec, strlen(rccrec)); ++ free(rccrec); ++ } else + WriteBytes((const char *)item.Name, item.Name.Length()); + + UInt32 extraPos = 0; +@@ -147,6 +165,8 @@ + + void COutArchive::WriteCentralHeader(const CItem &item) + { ++ char *rccrec; ++ + m_Stream->Seek(m_BasePosition, STREAM_SEEK_SET, NULL); + + bool isUnPack64 = item.UnPackSize >= 0xFFFFFFFF; +@@ -175,6 +195,13 @@ + WriteUInt16(item.InternalAttributes); + WriteUInt32(item.ExternalAttributes); + WriteUInt32(isPosition64 ? 0xFFFFFFFF: (UInt32)item.LocalHeaderPosition); ++ ++ rccrec = rcc_write(rccctx, (const char *)item.Name, item.Name.Length()); ++ if (rccrec) { ++ printf("C: %u, %s.\n", item.Name.Length(), rccrec); ++ WriteBytes(rccrec, strlen(rccrec)); ++ free(rccrec); ++ } else + WriteBytes((const char *)item.Name, item.Name.Length()); + if (isZip64) + { +diff -dPNur p7zip_4.44-old/CPP/7zip/Archive/Zip/ZipOut.h p7zip_4.44/CPP/7zip/Archive/Zip/ZipOut.h +--- p7zip_4.44-old/CPP/7zip/Archive/Zip/ZipOut.h 2007-01-20 18:06:29.000000000 +0100 ++++ p7zip_4.44/CPP/7zip/Archive/Zip/ZipOut.h 2007-04-14 19:10:12.000000000 +0200 +@@ -44,6 +44,11 @@ + void CreateStreamForCompressing(IOutStream **outStream); + void CreateStreamForCopying(ISequentialOutStream **outStream); + void SeekToPackedDataPosition(); ++ ++ void *rccctx; ++ COutArchive(); ++ ~COutArchive(); ++ + }; + + }} +diff -dPNur p7zip_4.44-old/CPP/7zip/Bundles/Alone/makefile p7zip_4.44/CPP/7zip/Bundles/Alone/makefile +--- p7zip_4.44-old/CPP/7zip/Bundles/Alone/makefile 2007-01-23 21:29:43.000000000 +0100 ++++ p7zip_4.44/CPP/7zip/Bundles/Alone/makefile 2007-04-14 18:52:31.000000000 +0200 +@@ -41,6 +41,7 @@ + $(MY_HOME)/mySplitCommandLine.o + + OBJS=\ ++../../../../C/rccrecode.o \ + ../../../Common/MyWindows.o \ + 7zAES.o \ + 7zCompressionMode.o \ +diff -dPNur p7zip_4.44-old/makefile.linux_amd64 p7zip_4.44/makefile.linux_amd64 +--- p7zip_4.44-old/makefile.linux_amd64 2007-04-14 15:37:39.000000000 +0200 ++++ p7zip_4.44/makefile.linux_amd64 2007-04-14 18:50:13.000000000 +0200 +@@ -11,6 +11,6 @@ + CC=x86_64-pc-linux-gnu-gcc $(ALLFLAGS) + LINK_SHARED=-shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + +diff -dPNur p7zip_4.44-old/makefile.linux_gcc_2.95_no_need_for_libstdc p7zip_4.44/makefile.linux_gcc_2.95_no_need_for_libstdc +--- p7zip_4.44-old/makefile.linux_gcc_2.95_no_need_for_libstdc 2007-04-14 15:37:39.000000000 +0200 ++++ p7zip_4.44/makefile.linux_gcc_2.95_no_need_for_libstdc 2007-04-14 18:51:02.000000000 +0200 +@@ -10,6 +10,6 @@ + CC=x86_64-pc-linux-gnu-gcc $(ALLFLAGS) + LINK_SHARED=-shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + +diff -dPNur p7zip_4.44-old/makefile.linux_x86_ppc_alpha p7zip_4.44/makefile.linux_x86_ppc_alpha +--- p7zip_4.44-old/makefile.linux_x86_ppc_alpha 2007-04-14 15:37:39.000000000 +0200 ++++ p7zip_4.44/makefile.linux_x86_ppc_alpha 2007-04-14 18:51:15.000000000 +0200 +@@ -14,6 +14,6 @@ + CC=x86_64-pc-linux-gnu-gcc $(ALLFLAGS) + LINK_SHARED=-shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + +diff -dPNur p7zip_4.44-old/makefile.linux_x86_ppc_alpha__gcc_4.X p7zip_4.44/makefile.linux_x86_ppc_alpha__gcc_4.X +--- p7zip_4.44-old/makefile.linux_x86_ppc_alpha__gcc_4.X 2007-04-14 15:37:39.000000000 +0200 ++++ p7zip_4.44/makefile.linux_x86_ppc_alpha__gcc_4.X 2007-04-14 18:51:19.000000000 +0200 +@@ -14,6 +14,6 @@ + CC=x86_64-pc-linux-gnu-gcc $(ALLFLAGS) + LINK_SHARED=-shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + +diff -dPNur p7zip_4.44-old/makefile.machine p7zip_4.44/makefile.machine +--- p7zip_4.44-old/makefile.machine 2007-04-14 15:37:39.000000000 +0200 ++++ p7zip_4.44/makefile.machine 2007-04-14 18:49:24.000000000 +0200 +@@ -11,6 +11,6 @@ + CC=x86_64-pc-linux-gnu-gcc $(ALLFLAGS) + LINK_SHARED=-shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + diff --git a/patches/p7zip/p7zip_4.57-ds-rusxmms-full.patch b/patches/p7zip/p7zip_4.57-ds-rusxmms-full.patch new file mode 100644 index 0000000..24fa504 --- /dev/null +++ b/patches/p7zip/p7zip_4.57-ds-rusxmms-full.patch @@ -0,0 +1,419 @@ +diff -dPNur p7zip_4.57/C/rccrecode.c p7zip_4.57-new/C/rccrecode.c +--- p7zip_4.57/C/rccrecode.c 1970-01-01 01:00:00.000000000 +0100 ++++ p7zip_4.57-new/C/rccrecode.c 2008-04-11 22:02:20.000000000 +0200 +@@ -0,0 +1,71 @@ ++#include <pthread.h> ++#include <librcc.h> ++ ++static rcc_class_default_charset default_oem[] = { ++ { "ru", "IBM866" }, ++ { NULL, NULL } ++}; ++ ++static rcc_class_default_charset default_iso[] = { ++ { "ru", "CP1251" }, ++ { NULL, NULL } ++}; ++ ++#define ARC_CLASS 0 ++#define OUT_CLASS 1 ++#define ARCOUT_CLASS 0 ++static rcc_class classes[] = { ++ { "oem", RCC_CLASS_STANDARD, NULL, default_oem, "OEM Encoding", 0 }, ++ { "out", RCC_CLASS_STANDARD, "LC_CTYPE", NULL, "Output", 0 }, ++ { NULL, RCC_CLASS_STANDARD, NULL, NULL, NULL, 0 } ++}; ++ ++static int initialized = 0; ++static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; ++ ++void *rcc_init() { ++ rcc_context ctx; ++ ++ pthread_mutex_lock(&mutex); ++ if (!initialized) { ++ rccInit(); ++ rccInitDefaultContext(NULL, 0, 0, classes, 0); ++ rccLoad(NULL, "zip"); ++ rccInitDb4(NULL, NULL, 0); ++ } ++ initialized++; ++ pthread_mutex_unlock(&mutex); ++ ++ ctx = rccCreateContext(NULL, 0, 0, classes, 0); ++ if (ctx) rccInitDb4(ctx, NULL, 0); ++ if (ctx) rccLoad(ctx, "zip"); ++ ++ return ctx; ++} ++ ++ ++void rcc_free(void *ctx) { ++ if (ctx) rccFreeContext((rcc_context)ctx); ++ ++ pthread_mutex_lock(&mutex); ++ if (initialized == 1) rccFree(); ++ initialized--; ++ pthread_mutex_unlock(&mutex); ++} ++ ++ ++char *rcc_read(void *ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, ARC_CLASS, OUT_CLASS, string, size, NULL); ++} ++ ++char *rcc_write(rcc_context ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, OUT_CLASS, ARCOUT_CLASS, string, size, NULL); ++} +diff -dPNur p7zip_4.57/C/rccrecode.h p7zip_4.57-new/C/rccrecode.h +--- p7zip_4.57/C/rccrecode.h 1970-01-01 01:00:00.000000000 +0100 ++++ p7zip_4.57-new/C/rccrecode.h 2008-04-11 22:02:20.000000000 +0200 +@@ -0,0 +1,17 @@ ++#ifndef _RCC_RECODE_H ++#define _RCC_RECODE_H ++ ++# ifdef __cplusplus ++extern "C" { ++# endif ++ ++ void *rcc_init(); ++ void rcc_free(void *ctx); ++ char *rcc_read(void *ctx, const char *string, size_t size); ++ char *rcc_write(void *ctx, const char *string, size_t size); ++ ++# ifdef __cplusplus ++} ++# endif ++ ++#endif /* _RCC_RECODE_H */ +diff -dPNur p7zip_4.57/CPP/7zip/Archive/Zip/ZipIn.cpp p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipIn.cpp +--- p7zip_4.57/CPP/7zip/Archive/Zip/ZipIn.cpp 2007-12-08 11:19:00.000000000 +0100 ++++ p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipIn.cpp 2008-04-11 22:02:20.000000000 +0200 +@@ -9,11 +9,22 @@ + #include "../../Common/LimitedStreams.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + namespace NArchive { + namespace NZip { ++ ++CInArchive::CInArchive() { ++ rccctx = rcc_init(); ++} ++ ++CInArchive::~CInArchive() { ++ rcc_free(rccctx); ++} ++ + + // static const char kEndOfString = '\0'; +- ++ + bool CInArchive::Open(IInStream *inStream, const UInt64 *searchHeaderSizeLimit) + { + m_Stream = inStream; +@@ -196,10 +207,18 @@ + + AString CInArchive::ReadFileName(UInt32 nameSize) + { ++ char *rccrec; + if (nameSize == 0) + return AString(); + SafeReadBytes(m_NameBuffer.GetBuffer(nameSize), nameSize); + m_NameBuffer.ReleaseBuffer(nameSize); ++ ++ rccrec = rcc_read(rccctx, (LPCSTR)m_NameBuffer, 0); ++ if (rccrec) { ++ m_NameBuffer = rccrec; ++ free(rccrec); ++ } ++ + return m_NameBuffer; + } + +diff -dPNur p7zip_4.57/CPP/7zip/Archive/Zip/ZipIn.h p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipIn.h +--- p7zip_4.57/CPP/7zip/Archive/Zip/ZipIn.h 2007-12-08 11:19:00.000000000 +0100 ++++ p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipIn.h 2008-04-11 22:02:20.000000000 +0200 +@@ -106,6 +106,10 @@ + bool SeekInArchive(UInt64 position); + ISequentialInStream *CreateLimitedStream(UInt64 position, UInt64 size); + IInStream* CreateStream(); ++ ++ void *rccctx; ++ CInArchive(); ++ ~CInArchive(); + }; + + }} +diff -dPNur p7zip_4.57/CPP/7zip/Archive/Zip/ZipOut.cpp p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipOut.cpp +--- p7zip_4.57/CPP/7zip/Archive/Zip/ZipOut.cpp 2007-06-26 20:06:23.000000000 +0200 ++++ p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipOut.cpp 2008-04-11 22:02:20.000000000 +0200 +@@ -7,9 +7,19 @@ + #include "../../Common/OffsetStream.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + namespace NArchive { + namespace NZip { + ++COutArchive::COutArchive() { ++ rccctx = rcc_init(); ++} ++ ++COutArchive::~COutArchive() { ++ rcc_free(rccctx); ++} ++ + void COutArchive::Create(IOutStream *outStream) + { + if (!m_OutBuffer.Create(1 << 16)) +@@ -112,6 +122,7 @@ + { + SeekTo(m_BasePosition); + ++ char *rccrec; + bool isZip64 = m_IsZip64 || item.PackSize >= 0xFFFFFFFF || item.UnPackSize >= 0xFFFFFFFF; + + WriteUInt32(NSignature::kLocalFileHeader); +@@ -130,6 +141,12 @@ + throw CSystemException(E_FAIL); + } + WriteUInt16((UInt16)m_ExtraSize); // test it; ++ rccrec = rcc_write(rccctx, (const char *)item.Name, item.Name.Length()); ++ if (rccrec) { ++ printf("%u, %s.\n", item.Name.Length(), rccrec); ++ WriteBytes(rccrec, strlen(rccrec)); ++ free(rccrec); ++ } else + WriteBytes((const char *)item.Name, item.Name.Length()); + + UInt32 extraPos = 0; +@@ -154,6 +171,7 @@ + + void COutArchive::WriteCentralHeader(const CItem &item) + { ++ char *rccrec; + bool isUnPack64 = item.UnPackSize >= 0xFFFFFFFF; + bool isPack64 = item.PackSize >= 0xFFFFFFFF; + bool isPosition64 = item.LocalHeaderPosition >= 0xFFFFFFFF; +@@ -180,6 +198,13 @@ + WriteUInt16(item.InternalAttributes); + WriteUInt32(item.ExternalAttributes); + WriteUInt32(isPosition64 ? 0xFFFFFFFF: (UInt32)item.LocalHeaderPosition); ++ ++ rccrec = rcc_write(rccctx, (const char *)item.Name, item.Name.Length()); ++ if (rccrec) { ++ printf("C: %u, %s.\n", item.Name.Length(), rccrec); ++ WriteBytes(rccrec, strlen(rccrec)); ++ free(rccrec); ++ } else + WriteBytes((const char *)item.Name, item.Name.Length()); + if (isZip64) + { +diff -dPNur p7zip_4.57/CPP/7zip/Archive/Zip/ZipOut.h p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipOut.h +--- p7zip_4.57/CPP/7zip/Archive/Zip/ZipOut.h 2007-06-26 20:06:22.000000000 +0200 ++++ p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipOut.h 2008-04-11 22:02:20.000000000 +0200 +@@ -49,6 +49,11 @@ + void CreateStreamForCompressing(IOutStream **outStream); + void CreateStreamForCopying(ISequentialOutStream **outStream); + void SeekToPackedDataPosition(); ++ ++ void *rccctx; ++ COutArchive(); ++ ~COutArchive(); ++ + }; + + }} +diff -dPNur p7zip_4.57/CPP/7zip/Bundles/Alone/makefile p7zip_4.57-new/CPP/7zip/Bundles/Alone/makefile +--- p7zip_4.57/CPP/7zip/Bundles/Alone/makefile 2007-07-24 20:55:33.000000000 +0200 ++++ p7zip_4.57-new/CPP/7zip/Bundles/Alone/makefile 2008-04-11 22:02:20.000000000 +0200 +@@ -15,6 +15,7 @@ + LIBS=$(LOCAL_LIBS) + + OBJS=\ ++rccrecode.o \ + myGetTickCount.o \ + wine_date_and_time.o \ + myAddExeFlag.o \ +diff -dPNur p7zip_4.57/CPP/7zip/Bundles/Alone/makefile.list p7zip_4.57-new/CPP/7zip/Bundles/Alone/makefile.list +--- p7zip_4.57/CPP/7zip/Bundles/Alone/makefile.list 2007-07-24 20:56:10.000000000 +0200 ++++ p7zip_4.57-new/CPP/7zip/Bundles/Alone/makefile.list 2008-04-11 22:02:20.000000000 +0200 +@@ -196,6 +196,7 @@ + ../../../../C/Compress/Branch/BranchPPC.c \ + ../../../../C/Compress/Branch/BranchSPARC.c \ + ../../../../C/Compress/Branch/BranchX86.c \ ++ ../../../../C/rccrecode.c \ + ../../../../C/7zCrc.c \ + ../../../../C/Sort.c \ + ../../../../C/Threads.c \ +@@ -237,6 +238,8 @@ + $(CXX) $(CFLAGS) ../../../Common/IntToString.cpp + ListFileUtils.o : ../../../Common/ListFileUtils.cpp + $(CXX) $(CFLAGS) ../../../Common/ListFileUtils.cpp ++rccrecode.o : ../../../../C/rccrecode.c ++ $(CC) $(CFLAGS) ../../../../C/rccrecode.c + MyWindows.o : ../../../Common/MyWindows.cpp + $(CXX) $(CFLAGS) ../../../Common/MyWindows.cpp + Random.o : ../../../Common/Random.cpp +diff -dPNur p7zip_4.57/CPP/7zip/Bundles/Format7zFree/makefile p7zip_4.57-new/CPP/7zip/Bundles/Format7zFree/makefile +--- p7zip_4.57/CPP/7zip/Bundles/Format7zFree/makefile 2007-08-03 20:16:04.000000000 +0200 ++++ p7zip_4.57-new/CPP/7zip/Bundles/Format7zFree/makefile 2008-04-11 22:02:20.000000000 +0200 +@@ -14,6 +14,7 @@ + LIBS=$(LOCAL_LIBS_DLL) + + OBJS = \ ++rccrecode.o \ + wine_date_and_time.o \ + myGetTickCount.o \ + CRC.o \ +diff -dPNur p7zip_4.57/CPP/7zip/Bundles/Format7zFree/makefile.list p7zip_4.57-new/CPP/7zip/Bundles/Format7zFree/makefile.list +--- p7zip_4.57/CPP/7zip/Bundles/Format7zFree/makefile.list 2007-08-03 20:17:57.000000000 +0200 ++++ p7zip_4.57-new/CPP/7zip/Bundles/Format7zFree/makefile.list 2008-04-11 22:02:20.000000000 +0200 +@@ -218,6 +218,7 @@ + ../../../../C/Compress/Branch/BranchPPC.c \ + ../../../../C/Compress/Branch/BranchSPARC.c \ + ../../../../C/Compress/Branch/BranchX86.c \ ++ ../../../../C/rccrecode.c \ + ../../../../C/7zCrc.c \ + ../../../../C/Sort.c \ + ../../../../C/Threads.c \ +@@ -237,6 +238,8 @@ + $(CXX) $(CC_SHARED) $(CFLAGS) ../../../Common/ListFileUtils.cpp + MyWindows.o : ../../../Common/MyWindows.cpp + $(CXX) $(CC_SHARED) $(CFLAGS) ../../../Common/MyWindows.cpp ++rccrecode.o : ../../../../C/rccrecode.c ++ $(CC) $(CC_SHARED) $(CFLAGS) ../../../../C/rccrecode.c + Random.o : ../../../Common/Random.cpp + $(CXX) $(CC_SHARED) $(CFLAGS) ../../../Common/Random.cpp + StdInStream.o : ../../../Common/StdInStream.cpp +diff -dPNur p7zip_4.57/makefile.linux_amd64 p7zip_4.57-new/makefile.linux_amd64 +--- p7zip_4.57/makefile.linux_amd64 2007-06-28 09:32:20.000000000 +0200 ++++ p7zip_4.57-new/makefile.linux_amd64 2008-04-11 22:02:45.000000000 +0200 +@@ -12,7 +12,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip_4.57/makefile.linux_amd64_asm p7zip_4.57-new/makefile.linux_amd64_asm +--- p7zip_4.57/makefile.linux_amd64_asm 2007-06-28 09:32:30.000000000 +0200 ++++ p7zip_4.57-new/makefile.linux_amd64_asm 2008-04-11 22:02:45.000000000 +0200 +@@ -13,7 +13,7 @@ + LINK_SHARED=-fPIC -shared + ASM=yasm -f elf -m amd64 + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x64 +diff -dPNur p7zip_4.57/makefile.linux_gcc_2.95_no_need_for_libstdc p7zip_4.57-new/makefile.linux_gcc_2.95_no_need_for_libstdc +--- p7zip_4.57/makefile.linux_gcc_2.95_no_need_for_libstdc 2007-06-24 20:49:31.000000000 +0200 ++++ p7zip_4.57-new/makefile.linux_gcc_2.95_no_need_for_libstdc 2008-04-11 22:02:45.000000000 +0200 +@@ -11,7 +11,7 @@ + LINK_SHARED=-shared + ASM=nasm -f elf + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x86 +diff -dPNur p7zip_4.57/makefile.linux_s390x p7zip_4.57-new/makefile.linux_s390x +--- p7zip_4.57/makefile.linux_s390x 2007-08-07 18:36:01.000000000 +0200 ++++ p7zip_4.57-new/makefile.linux_s390x 2008-04-11 22:02:45.000000000 +0200 +@@ -15,7 +15,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip_4.57/makefile.linux_x86_asm_gcc_4.X p7zip_4.57-new/makefile.linux_x86_asm_gcc_4.X +--- p7zip_4.57/makefile.linux_x86_asm_gcc_4.X 2007-08-08 11:15:07.000000000 +0200 ++++ p7zip_4.57-new/makefile.linux_x86_asm_gcc_4.X 2008-04-11 22:02:45.000000000 +0200 +@@ -15,7 +15,7 @@ + LINK_SHARED=-fPIC -shared + ASM=nasm -f elf + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x86 +diff -dPNur p7zip_4.57/makefile.linux_x86_asm_gcc_4.X_fltk p7zip_4.57-new/makefile.linux_x86_asm_gcc_4.X_fltk +--- p7zip_4.57/makefile.linux_x86_asm_gcc_4.X_fltk 2007-08-08 11:15:10.000000000 +0200 ++++ p7zip_4.57-new/makefile.linux_x86_asm_gcc_4.X_fltk 2008-04-11 22:02:45.000000000 +0200 +@@ -15,7 +15,7 @@ + LINK_SHARED=-fPIC -shared + ASM=nasm -f elf + +-LOCAL_LIBS=-lpthread `fltk-config --ldflags` ++LOCAL_LIBS=-lpthread -lrcc `fltk-config --ldflags` + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x86 +diff -dPNur p7zip_4.57/makefile.linux_x86_asm_icc p7zip_4.57-new/makefile.linux_x86_asm_icc +--- p7zip_4.57/makefile.linux_x86_asm_icc 2007-08-08 11:15:15.000000000 +0200 ++++ p7zip_4.57-new/makefile.linux_x86_asm_icc 2008-04-11 22:02:45.000000000 +0200 +@@ -16,7 +16,7 @@ + LINK_SHARED=-fPIC -shared + ASM=nasm -f elf + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x86 +diff -dPNur p7zip_4.57/makefile.linux_x86_ppc_alpha p7zip_4.57-new/makefile.linux_x86_ppc_alpha +--- p7zip_4.57/makefile.linux_x86_ppc_alpha 2007-08-08 11:15:18.000000000 +0200 ++++ p7zip_4.57-new/makefile.linux_x86_ppc_alpha 2008-04-11 22:02:45.000000000 +0200 +@@ -14,7 +14,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip_4.57/makefile.linux_x86_ppc_alpha_gcc_4.X p7zip_4.57-new/makefile.linux_x86_ppc_alpha_gcc_4.X +--- p7zip_4.57/makefile.linux_x86_ppc_alpha_gcc_4.X 2007-08-08 11:15:20.000000000 +0200 ++++ p7zip_4.57-new/makefile.linux_x86_ppc_alpha_gcc_4.X 2008-04-11 22:02:45.000000000 +0200 +@@ -14,7 +14,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip_4.57/makefile.machine p7zip_4.57-new/makefile.machine +--- p7zip_4.57/makefile.machine 2007-12-15 18:19:48.000000000 +0100 ++++ p7zip_4.57-new/makefile.machine 2008-04-11 22:02:20.000000000 +0200 +@@ -14,7 +14,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) diff --git a/patches/p7zip/p7zip_4.57-ds-rusxmms.patch b/patches/p7zip/p7zip_4.57-ds-rusxmms.patch new file mode 100644 index 0000000..0913c13 --- /dev/null +++ b/patches/p7zip/p7zip_4.57-ds-rusxmms.patch @@ -0,0 +1,336 @@ +diff -dPNur p7zip_4.57/C/rccrecode.c p7zip_4.57-new/C/rccrecode.c +--- p7zip_4.57/C/rccrecode.c 1970-01-01 01:00:00.000000000 +0100 ++++ p7zip_4.57-new/C/rccrecode.c 2008-04-11 20:23:42.000000000 +0200 +@@ -0,0 +1,71 @@ ++#include <pthread.h> ++#include <librcc.h> ++ ++static rcc_class_default_charset default_oem[] = { ++ { "ru", "IBM866" }, ++ { NULL, NULL } ++}; ++ ++static rcc_class_default_charset default_iso[] = { ++ { "ru", "CP1251" }, ++ { NULL, NULL } ++}; ++ ++#define ARC_CLASS 0 ++#define OUT_CLASS 1 ++#define ARCOUT_CLASS 0 ++static rcc_class classes[] = { ++ { "oem", RCC_CLASS_STANDARD, NULL, default_oem, "OEM Encoding", 0 }, ++ { "out", RCC_CLASS_STANDARD, "LC_CTYPE", NULL, "Output", 0 }, ++ { NULL, RCC_CLASS_STANDARD, NULL, NULL, NULL, 0 } ++}; ++ ++static int initialized = 0; ++static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; ++ ++void *rcc_init() { ++ rcc_context ctx; ++ ++ pthread_mutex_lock(&mutex); ++ if (!initialized) { ++ rccInit(); ++ rccInitDefaultContext(NULL, 0, 0, classes, 0); ++ rccLoad(NULL, "zip"); ++ rccInitDb4(NULL, NULL, 0); ++ } ++ initialized++; ++ pthread_mutex_unlock(&mutex); ++ ++ ctx = rccCreateContext(NULL, 0, 0, classes, 0); ++ if (ctx) rccInitDb4(ctx, NULL, 0); ++ if (ctx) rccLoad(ctx, "zip"); ++ ++ return ctx; ++} ++ ++ ++void rcc_free(void *ctx) { ++ if (ctx) rccFreeContext((rcc_context)ctx); ++ ++ pthread_mutex_lock(&mutex); ++ if (initialized == 1) rccFree(); ++ initialized--; ++ pthread_mutex_unlock(&mutex); ++} ++ ++ ++char *rcc_read(void *ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, ARC_CLASS, OUT_CLASS, string, size, NULL); ++} ++ ++char *rcc_write(rcc_context ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, OUT_CLASS, ARCOUT_CLASS, string, size, NULL); ++} +diff -dPNur p7zip_4.57/C/rccrecode.h p7zip_4.57-new/C/rccrecode.h +--- p7zip_4.57/C/rccrecode.h 1970-01-01 01:00:00.000000000 +0100 ++++ p7zip_4.57-new/C/rccrecode.h 2008-04-11 20:23:42.000000000 +0200 +@@ -0,0 +1,17 @@ ++#ifndef _RCC_RECODE_H ++#define _RCC_RECODE_H ++ ++# ifdef __cplusplus ++extern "C" { ++# endif ++ ++ void *rcc_init(); ++ void rcc_free(void *ctx); ++ char *rcc_read(void *ctx, const char *string, size_t size); ++ char *rcc_write(void *ctx, const char *string, size_t size); ++ ++# ifdef __cplusplus ++} ++# endif ++ ++#endif /* _RCC_RECODE_H */ +diff -dPNur p7zip_4.57/CPP/7zip/Archive/Zip/ZipIn.cpp p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipIn.cpp +--- p7zip_4.57/CPP/7zip/Archive/Zip/ZipIn.cpp 2007-12-08 11:19:00.000000000 +0100 ++++ p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipIn.cpp 2008-04-11 20:23:42.000000000 +0200 +@@ -9,11 +9,22 @@ + #include "../../Common/LimitedStreams.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + namespace NArchive { + namespace NZip { ++ ++CInArchive::CInArchive() { ++ rccctx = rcc_init(); ++} ++ ++CInArchive::~CInArchive() { ++ rcc_free(rccctx); ++} ++ + + // static const char kEndOfString = '\0'; +- ++ + bool CInArchive::Open(IInStream *inStream, const UInt64 *searchHeaderSizeLimit) + { + m_Stream = inStream; +@@ -196,10 +207,18 @@ + + AString CInArchive::ReadFileName(UInt32 nameSize) + { ++ char *rccrec; + if (nameSize == 0) + return AString(); + SafeReadBytes(m_NameBuffer.GetBuffer(nameSize), nameSize); + m_NameBuffer.ReleaseBuffer(nameSize); ++ ++ rccrec = rcc_read(rccctx, (LPCSTR)m_NameBuffer, 0); ++ if (rccrec) { ++ m_NameBuffer = rccrec; ++ free(rccrec); ++ } ++ + return m_NameBuffer; + } + +diff -dPNur p7zip_4.57/CPP/7zip/Archive/Zip/ZipIn.h p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipIn.h +--- p7zip_4.57/CPP/7zip/Archive/Zip/ZipIn.h 2007-12-08 11:19:00.000000000 +0100 ++++ p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipIn.h 2008-04-11 20:23:42.000000000 +0200 +@@ -106,6 +106,10 @@ + bool SeekInArchive(UInt64 position); + ISequentialInStream *CreateLimitedStream(UInt64 position, UInt64 size); + IInStream* CreateStream(); ++ ++ void *rccctx; ++ CInArchive(); ++ ~CInArchive(); + }; + + }} +diff -dPNur p7zip_4.57/CPP/7zip/Archive/Zip/ZipOut.cpp p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipOut.cpp +--- p7zip_4.57/CPP/7zip/Archive/Zip/ZipOut.cpp 2007-06-26 20:06:23.000000000 +0200 ++++ p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipOut.cpp 2008-04-11 20:23:42.000000000 +0200 +@@ -7,9 +7,19 @@ + #include "../../Common/OffsetStream.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + namespace NArchive { + namespace NZip { + ++COutArchive::COutArchive() { ++ rccctx = rcc_init(); ++} ++ ++COutArchive::~COutArchive() { ++ rcc_free(rccctx); ++} ++ + void COutArchive::Create(IOutStream *outStream) + { + if (!m_OutBuffer.Create(1 << 16)) +@@ -112,6 +122,7 @@ + { + SeekTo(m_BasePosition); + ++ char *rccrec; + bool isZip64 = m_IsZip64 || item.PackSize >= 0xFFFFFFFF || item.UnPackSize >= 0xFFFFFFFF; + + WriteUInt32(NSignature::kLocalFileHeader); +@@ -130,6 +141,12 @@ + throw CSystemException(E_FAIL); + } + WriteUInt16((UInt16)m_ExtraSize); // test it; ++ rccrec = rcc_write(rccctx, (const char *)item.Name, item.Name.Length()); ++ if (rccrec) { ++ printf("%u, %s.\n", item.Name.Length(), rccrec); ++ WriteBytes(rccrec, strlen(rccrec)); ++ free(rccrec); ++ } else + WriteBytes((const char *)item.Name, item.Name.Length()); + + UInt32 extraPos = 0; +@@ -154,6 +171,7 @@ + + void COutArchive::WriteCentralHeader(const CItem &item) + { ++ char *rccrec; + bool isUnPack64 = item.UnPackSize >= 0xFFFFFFFF; + bool isPack64 = item.PackSize >= 0xFFFFFFFF; + bool isPosition64 = item.LocalHeaderPosition >= 0xFFFFFFFF; +@@ -180,6 +198,13 @@ + WriteUInt16(item.InternalAttributes); + WriteUInt32(item.ExternalAttributes); + WriteUInt32(isPosition64 ? 0xFFFFFFFF: (UInt32)item.LocalHeaderPosition); ++ ++ rccrec = rcc_write(rccctx, (const char *)item.Name, item.Name.Length()); ++ if (rccrec) { ++ printf("C: %u, %s.\n", item.Name.Length(), rccrec); ++ WriteBytes(rccrec, strlen(rccrec)); ++ free(rccrec); ++ } else + WriteBytes((const char *)item.Name, item.Name.Length()); + if (isZip64) + { +diff -dPNur p7zip_4.57/CPP/7zip/Archive/Zip/ZipOut.h p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipOut.h +--- p7zip_4.57/CPP/7zip/Archive/Zip/ZipOut.h 2007-06-26 20:06:22.000000000 +0200 ++++ p7zip_4.57-new/CPP/7zip/Archive/Zip/ZipOut.h 2008-04-11 20:23:42.000000000 +0200 +@@ -49,6 +49,11 @@ + void CreateStreamForCompressing(IOutStream **outStream); + void CreateStreamForCopying(ISequentialOutStream **outStream); + void SeekToPackedDataPosition(); ++ ++ void *rccctx; ++ COutArchive(); ++ ~COutArchive(); ++ + }; + + }} +diff -dPNur p7zip_4.57/CPP/7zip/Bundles/Alone/makefile p7zip_4.57-new/CPP/7zip/Bundles/Alone/makefile +--- p7zip_4.57/CPP/7zip/Bundles/Alone/makefile 2007-07-24 20:55:33.000000000 +0200 ++++ p7zip_4.57-new/CPP/7zip/Bundles/Alone/makefile 2008-04-11 20:23:42.000000000 +0200 +@@ -15,6 +15,7 @@ + LIBS=$(LOCAL_LIBS) + + OBJS=\ ++rccrecode.o \ + myGetTickCount.o \ + wine_date_and_time.o \ + myAddExeFlag.o \ +diff -dPNur p7zip_4.57/CPP/7zip/Bundles/Alone/makefile.list p7zip_4.57-new/CPP/7zip/Bundles/Alone/makefile.list +--- p7zip_4.57/CPP/7zip/Bundles/Alone/makefile.list 2007-07-24 20:56:10.000000000 +0200 ++++ p7zip_4.57-new/CPP/7zip/Bundles/Alone/makefile.list 2008-04-11 20:23:42.000000000 +0200 +@@ -196,6 +196,7 @@ + ../../../../C/Compress/Branch/BranchPPC.c \ + ../../../../C/Compress/Branch/BranchSPARC.c \ + ../../../../C/Compress/Branch/BranchX86.c \ ++ ../../../../C/rccrecode.c \ + ../../../../C/7zCrc.c \ + ../../../../C/Sort.c \ + ../../../../C/Threads.c \ +@@ -237,6 +238,8 @@ + $(CXX) $(CFLAGS) ../../../Common/IntToString.cpp + ListFileUtils.o : ../../../Common/ListFileUtils.cpp + $(CXX) $(CFLAGS) ../../../Common/ListFileUtils.cpp ++rccrecode.o : ../../../../C/rccrecode.c ++ $(CC) $(CFLAGS) ../../../../C/rccrecode.c + MyWindows.o : ../../../Common/MyWindows.cpp + $(CXX) $(CFLAGS) ../../../Common/MyWindows.cpp + Random.o : ../../../Common/Random.cpp +diff -dPNur p7zip_4.57/CPP/7zip/Bundles/Format7zFree/makefile p7zip_4.57-new/CPP/7zip/Bundles/Format7zFree/makefile +--- p7zip_4.57/CPP/7zip/Bundles/Format7zFree/makefile 2007-08-03 20:16:04.000000000 +0200 ++++ p7zip_4.57-new/CPP/7zip/Bundles/Format7zFree/makefile 2008-04-11 20:30:53.000000000 +0200 +@@ -14,6 +14,7 @@ + LIBS=$(LOCAL_LIBS_DLL) + + OBJS = \ ++rccrecode.o \ + wine_date_and_time.o \ + myGetTickCount.o \ + CRC.o \ +diff -dPNur p7zip_4.57/CPP/7zip/Bundles/Format7zFree/makefile.list p7zip_4.57-new/CPP/7zip/Bundles/Format7zFree/makefile.list +--- p7zip_4.57/CPP/7zip/Bundles/Format7zFree/makefile.list 2007-08-03 20:17:57.000000000 +0200 ++++ p7zip_4.57-new/CPP/7zip/Bundles/Format7zFree/makefile.list 2008-04-11 20:32:11.000000000 +0200 +@@ -218,6 +218,7 @@ + ../../../../C/Compress/Branch/BranchPPC.c \ + ../../../../C/Compress/Branch/BranchSPARC.c \ + ../../../../C/Compress/Branch/BranchX86.c \ ++ ../../../../C/rccrecode.c \ + ../../../../C/7zCrc.c \ + ../../../../C/Sort.c \ + ../../../../C/Threads.c \ +@@ -237,6 +238,8 @@ + $(CXX) $(CC_SHARED) $(CFLAGS) ../../../Common/ListFileUtils.cpp + MyWindows.o : ../../../Common/MyWindows.cpp + $(CXX) $(CC_SHARED) $(CFLAGS) ../../../Common/MyWindows.cpp ++rccrecode.o : ../../../../C/rccrecode.c ++ $(CC) $(CC_SHARED) $(CFLAGS) ../../../../C/rccrecode.c + Random.o : ../../../Common/Random.cpp + $(CXX) $(CC_SHARED) $(CFLAGS) ../../../Common/Random.cpp + StdInStream.o : ../../../Common/StdInStream.cpp +diff -dPNur p7zip_4.57/makefile.machine p7zip_4.57-new/makefile.machine +--- p7zip_4.57/makefile.machine 2007-12-15 18:19:48.000000000 +0100 ++++ p7zip_4.57-new/makefile.machine 2008-04-11 20:23:42.000000000 +0200 +@@ -14,7 +14,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip_4.57/makefile.machine.orig p7zip_4.57-new/makefile.machine.orig +--- p7zip_4.57/makefile.machine.orig 1970-01-01 01:00:00.000000000 +0100 ++++ p7zip_4.57-new/makefile.machine.orig 2007-12-15 18:19:48.000000000 +0100 +@@ -0,0 +1,21 @@ ++# ++# makefile for Linux (x86, PPC, alpha ...) ++# ++ ++OPTFLAGS=-O ++ ++ALLFLAGS=${OPTFLAGS} -s \ ++ -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \ ++ -DNDEBUG -D_REENTRANT -DENV_UNIX \ ++ $(LOCAL_FLAGS) ++ ++CXX=g++ $(ALLFLAGS) ++CC=gcc $(ALLFLAGS) ++CC_SHARED=-fPIC ++LINK_SHARED=-fPIC -shared ++ ++LOCAL_LIBS=-lpthread ++LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl ++ ++OBJ_CRC32=$(OBJ_CRC32_C) ++ diff --git a/patches/p7zip/p7zip_4.65-ds-rusxmms-full.patch b/patches/p7zip/p7zip_4.65-ds-rusxmms-full.patch new file mode 100644 index 0000000..a7ab04e --- /dev/null +++ b/patches/p7zip/p7zip_4.65-ds-rusxmms-full.patch @@ -0,0 +1,425 @@ +diff -dPNur p7zip_4.65/C/rccrecode.c p7zip_4.65-new/C/rccrecode.c +--- p7zip_4.65/C/rccrecode.c 1970-01-01 01:00:00.000000000 +0100 ++++ p7zip_4.65-new/C/rccrecode.c 2009-06-14 02:44:19.000000000 +0200 +@@ -0,0 +1,71 @@ ++#include <pthread.h> ++#include <librcc.h> ++ ++static rcc_class_default_charset default_oem[] = { ++ { "ru", "IBM866" }, ++ { NULL, NULL } ++}; ++ ++static rcc_class_default_charset default_iso[] = { ++ { "ru", "CP1251" }, ++ { NULL, NULL } ++}; ++ ++#define ARC_CLASS 0 ++#define OUT_CLASS 1 ++#define ARCOUT_CLASS 0 ++static rcc_class classes[] = { ++ { "oem", RCC_CLASS_STANDARD, NULL, default_oem, "OEM Encoding", 0 }, ++ { "out", RCC_CLASS_STANDARD, "LC_CTYPE", NULL, "Output", 0 }, ++ { NULL, RCC_CLASS_STANDARD, NULL, NULL, NULL, 0 } ++}; ++ ++static int initialized = 0; ++static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; ++ ++void *rcc_init() { ++ rcc_context ctx; ++ ++ pthread_mutex_lock(&mutex); ++ if (!initialized) { ++ rccInit(); ++ rccInitDefaultContext(NULL, 0, 0, classes, 0); ++ rccLoad(NULL, "zip"); ++ rccInitDb4(NULL, NULL, 0); ++ } ++ initialized++; ++ pthread_mutex_unlock(&mutex); ++ ++ ctx = rccCreateContext(NULL, 0, 0, classes, 0); ++ if (ctx) rccInitDb4(ctx, NULL, 0); ++ if (ctx) rccLoad(ctx, "zip"); ++ ++ return ctx; ++} ++ ++ ++void rcc_free(void *ctx) { ++ if (ctx) rccFreeContext((rcc_context)ctx); ++ ++ pthread_mutex_lock(&mutex); ++ if (initialized == 1) rccFree(); ++ initialized--; ++ pthread_mutex_unlock(&mutex); ++} ++ ++ ++char *rcc_read(void *ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, ARC_CLASS, OUT_CLASS, string, size, NULL); ++} ++ ++char *rcc_write(rcc_context ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, OUT_CLASS, ARCOUT_CLASS, string, size, NULL); ++} +diff -dPNur p7zip_4.65/C/rccrecode.h p7zip_4.65-new/C/rccrecode.h +--- p7zip_4.65/C/rccrecode.h 1970-01-01 01:00:00.000000000 +0100 ++++ p7zip_4.65-new/C/rccrecode.h 2009-06-14 02:44:19.000000000 +0200 +@@ -0,0 +1,17 @@ ++#ifndef _RCC_RECODE_H ++#define _RCC_RECODE_H ++ ++# ifdef __cplusplus ++extern "C" { ++# endif ++ ++ void *rcc_init(); ++ void rcc_free(void *ctx); ++ char *rcc_read(void *ctx, const char *string, size_t size); ++ char *rcc_write(void *ctx, const char *string, size_t size); ++ ++# ifdef __cplusplus ++} ++# endif ++ ++#endif /* _RCC_RECODE_H */ +diff -dPNur p7zip_4.65/CPP/7zip/Archive/Zip/ZipIn.cpp p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipIn.cpp +--- p7zip_4.65/CPP/7zip/Archive/Zip/ZipIn.cpp 2008-11-28 23:03:44.000000000 +0100 ++++ p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipIn.cpp 2009-06-14 02:47:28.000000000 +0200 +@@ -9,6 +9,8 @@ + #include "../../Common/LimitedStreams.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + extern "C" + { + #include "../../../../C/CpuArch.h" +@@ -23,6 +25,14 @@ + + // static const char kEndOfString = '\0'; + ++CInArchive::CInArchive() { ++ rccctx = rcc_init(); ++} ++ ++CInArchive::~CInArchive() { ++ rcc_free(rccctx); ++} ++ + HRESULT CInArchive::Open(IInStream *stream, const UInt64 *searchHeaderSizeLimit) + { + Close(); +@@ -198,12 +208,21 @@ + + AString CInArchive::ReadFileName(UInt32 nameSize) + { ++ char *rccrec; ++ + if (nameSize == 0) + return AString(); + char *p = m_NameBuffer.GetBuffer(nameSize); + SafeReadBytes(p, nameSize); + p[nameSize] = 0; + m_NameBuffer.ReleaseBuffer(); ++ ++ rccrec = rcc_read(rccctx, (LPCSTR)m_NameBuffer, 0); ++ if (rccrec) { ++ m_NameBuffer = rccrec; ++ free(rccrec); ++ } ++ + return m_NameBuffer; + } + +diff -dPNur p7zip_4.65/CPP/7zip/Archive/Zip/ZipIn.h p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipIn.h +--- p7zip_4.65/CPP/7zip/Archive/Zip/ZipIn.h 2008-08-14 11:11:13.000000000 +0200 ++++ p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipIn.h 2009-06-14 02:48:32.000000000 +0200 +@@ -108,6 +108,10 @@ + ISequentialInStream *CreateLimitedStream(UInt64 position, UInt64 size); + IInStream* CreateStream(); + ++ void *rccctx; ++ CInArchive(); ++ ~CInArchive(); ++ + bool IsOpen() const { return m_Stream != NULL; } + }; + +diff -dPNur p7zip_4.65/CPP/7zip/Archive/Zip/ZipOut.cpp p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipOut.cpp +--- p7zip_4.65/CPP/7zip/Archive/Zip/ZipOut.cpp 2008-08-14 11:11:26.000000000 +0200 ++++ p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipOut.cpp 2009-06-14 02:44:19.000000000 +0200 +@@ -7,9 +7,19 @@ + #include "../../Common/OffsetStream.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + namespace NArchive { + namespace NZip { + ++COutArchive::COutArchive() { ++ rccctx = rcc_init(); ++} ++ ++COutArchive::~COutArchive() { ++ rcc_free(rccctx); ++} ++ + void COutArchive::Create(IOutStream *outStream) + { + if (!m_OutBuffer.Create(1 << 16)) +@@ -112,6 +122,7 @@ + { + SeekTo(m_BasePosition); + ++ char *rccrec; + bool isZip64 = m_IsZip64 || item.PackSize >= 0xFFFFFFFF || item.UnPackSize >= 0xFFFFFFFF; + + WriteUInt32(NSignature::kLocalFileHeader); +@@ -130,6 +141,12 @@ + throw CSystemException(E_FAIL); + } + WriteUInt16((UInt16)m_ExtraSize); // test it; ++ rccrec = rcc_write(rccctx, (const char *)item.Name, item.Name.Length()); ++ if (rccrec) { ++ printf("%u, %s.\n", item.Name.Length(), rccrec); ++ WriteBytes(rccrec, strlen(rccrec)); ++ free(rccrec); ++ } else + WriteBytes((const char *)item.Name, item.Name.Length()); + + UInt32 extraPos = 0; +@@ -154,6 +171,7 @@ + + void COutArchive::WriteCentralHeader(const CItem &item) + { ++ char *rccrec; + bool isUnPack64 = item.UnPackSize >= 0xFFFFFFFF; + bool isPack64 = item.PackSize >= 0xFFFFFFFF; + bool isPosition64 = item.LocalHeaderPosition >= 0xFFFFFFFF; +@@ -181,6 +199,13 @@ + WriteUInt16(item.InternalAttributes); + WriteUInt32(item.ExternalAttributes); + WriteUInt32(isPosition64 ? 0xFFFFFFFF: (UInt32)item.LocalHeaderPosition); ++ ++ rccrec = rcc_write(rccctx, (const char *)item.Name, item.Name.Length()); ++ if (rccrec) { ++ printf("C: %u, %s.\n", item.Name.Length(), rccrec); ++ WriteBytes(rccrec, strlen(rccrec)); ++ free(rccrec); ++ } else + WriteBytes((const char *)item.Name, item.Name.Length()); + if (isZip64) + { +diff -dPNur p7zip_4.65/CPP/7zip/Archive/Zip/ZipOut.h p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipOut.h +--- p7zip_4.65/CPP/7zip/Archive/Zip/ZipOut.h 2008-08-14 11:11:13.000000000 +0200 ++++ p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipOut.h 2009-06-14 02:44:19.000000000 +0200 +@@ -49,6 +49,11 @@ + void CreateStreamForCompressing(IOutStream **outStream); + void CreateStreamForCopying(ISequentialOutStream **outStream); + void SeekToPackedDataPosition(); ++ ++ void *rccctx; ++ COutArchive(); ++ ~COutArchive(); ++ + }; + + }} +diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Alone/makefile p7zip_4.65-new/CPP/7zip/Bundles/Alone/makefile +--- p7zip_4.65/CPP/7zip/Bundles/Alone/makefile 2009-02-07 19:39:04.000000000 +0100 ++++ p7zip_4.65-new/CPP/7zip/Bundles/Alone/makefile 2009-06-14 02:44:19.000000000 +0200 +@@ -250,6 +250,7 @@ + Sha256.o + + OBJS=\ ++rccrecode.o \ + myGetTickCount.o \ + wine_date_and_time.o \ + myAddExeFlag.o \ +diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Alone/makefile.list p7zip_4.65-new/CPP/7zip/Bundles/Alone/makefile.list +--- p7zip_4.65/CPP/7zip/Bundles/Alone/makefile.list 2009-02-09 21:04:57.000000000 +0100 ++++ p7zip_4.65-new/CPP/7zip/Bundles/Alone/makefile.list 2009-06-14 02:51:45.000000000 +0200 +@@ -204,6 +204,7 @@ + ../../Crypto/ZipStrong.cpp + + SRCS_C=\ ++ ../../../../C/rccrecode.c \ + ../../../../C/Bra.c \ + ../../../../C/Bra86.c \ + ../../../../C/BraIA64.c \ +diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Format7zFree/makefile p7zip_4.65-new/CPP/7zip/Bundles/Format7zFree/makefile +--- p7zip_4.65/CPP/7zip/Bundles/Format7zFree/makefile 2009-02-09 21:47:24.000000000 +0100 ++++ p7zip_4.65-new/CPP/7zip/Bundles/Format7zFree/makefile 2009-06-14 03:00:06.000000000 +0200 +@@ -296,6 +296,7 @@ + Sha256.o \ + + OBJS = \ ++ rccrecode.o \ + wine_date_and_time.o \ + myGetTickCount.o \ + $(COMMON_OBJS) \ +diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Format7zFree/makefile.list p7zip_4.65-new/CPP/7zip/Bundles/Format7zFree/makefile.list +--- p7zip_4.65/CPP/7zip/Bundles/Format7zFree/makefile.list 2009-02-09 21:04:32.000000000 +0100 ++++ p7zip_4.65-new/CPP/7zip/Bundles/Format7zFree/makefile.list 2009-06-14 03:00:39.000000000 +0200 +@@ -235,6 +235,7 @@ + ../../Crypto/ZipStrong.cpp + + SRCS_C=\ ++ ../../../../C/rccrecode.c \ + ../../../../C/Bra.c \ + ../../../../C/Bra86.c \ + ../../../../C/BraIA64.c \ +diff -dPNur p7zip_4.65/makefile.linux_amd64 p7zip_4.65-new/makefile.linux_amd64 +--- p7zip_4.65/makefile.linux_amd64 2007-06-28 09:32:20.000000000 +0200 ++++ p7zip_4.65-new/makefile.linux_amd64 2009-06-14 05:08:19.000000000 +0200 +@@ -12,7 +12,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip_4.65/makefile.linux_amd64_asm p7zip_4.65-new/makefile.linux_amd64_asm +--- p7zip_4.65/makefile.linux_amd64_asm 2007-06-28 09:32:30.000000000 +0200 ++++ p7zip_4.65-new/makefile.linux_amd64_asm 2009-06-14 05:08:19.000000000 +0200 +@@ -13,7 +13,7 @@ + LINK_SHARED=-fPIC -shared + ASM=yasm -f elf -m amd64 + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x64 +diff -dPNur p7zip_4.65/makefile.linux_amd64_asm_icc p7zip_4.65-new/makefile.linux_amd64_asm_icc +--- p7zip_4.65/makefile.linux_amd64_asm_icc 2009-02-09 22:12:36.000000000 +0100 ++++ p7zip_4.65-new/makefile.linux_amd64_asm_icc 2009-06-14 05:08:19.000000000 +0200 +@@ -16,7 +16,7 @@ + LINK_SHARED=-fPIC -shared + ASM=yasm -f elf -m amd64 + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x64 +diff -dPNur p7zip_4.65/makefile.linux_gcc_2.95_no_need_for_libstdc p7zip_4.65-new/makefile.linux_gcc_2.95_no_need_for_libstdc +--- p7zip_4.65/makefile.linux_gcc_2.95_no_need_for_libstdc 2007-06-24 20:49:31.000000000 +0200 ++++ p7zip_4.65-new/makefile.linux_gcc_2.95_no_need_for_libstdc 2009-06-14 05:08:19.000000000 +0200 +@@ -11,7 +11,7 @@ + LINK_SHARED=-shared + ASM=nasm -f elf + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x86 +diff -dPNur p7zip_4.65/makefile.linux_s390x p7zip_4.65-new/makefile.linux_s390x +--- p7zip_4.65/makefile.linux_s390x 2007-08-07 18:36:01.000000000 +0200 ++++ p7zip_4.65-new/makefile.linux_s390x 2009-06-14 05:08:19.000000000 +0200 +@@ -15,7 +15,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip_4.65/makefile.linux_x86_asm_gcc_4.X p7zip_4.65-new/makefile.linux_x86_asm_gcc_4.X +--- p7zip_4.65/makefile.linux_x86_asm_gcc_4.X 2007-08-08 11:15:07.000000000 +0200 ++++ p7zip_4.65-new/makefile.linux_x86_asm_gcc_4.X 2009-06-14 05:08:19.000000000 +0200 +@@ -15,7 +15,7 @@ + LINK_SHARED=-fPIC -shared + ASM=nasm -f elf + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x86 +diff -dPNur p7zip_4.65/makefile.linux_x86_asm_gcc_4.X_fltk p7zip_4.65-new/makefile.linux_x86_asm_gcc_4.X_fltk +--- p7zip_4.65/makefile.linux_x86_asm_gcc_4.X_fltk 2007-08-08 11:15:10.000000000 +0200 ++++ p7zip_4.65-new/makefile.linux_x86_asm_gcc_4.X_fltk 2009-06-14 05:08:19.000000000 +0200 +@@ -15,7 +15,7 @@ + LINK_SHARED=-fPIC -shared + ASM=nasm -f elf + +-LOCAL_LIBS=-lpthread `fltk-config --ldflags` ++LOCAL_LIBS=-lpthread -lrcc `fltk-config --ldflags` + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x86 +diff -dPNur p7zip_4.65/makefile.linux_x86_asm_icc p7zip_4.65-new/makefile.linux_x86_asm_icc +--- p7zip_4.65/makefile.linux_x86_asm_icc 2007-08-08 11:15:15.000000000 +0200 ++++ p7zip_4.65-new/makefile.linux_x86_asm_icc 2009-06-14 05:08:19.000000000 +0200 +@@ -16,7 +16,7 @@ + LINK_SHARED=-fPIC -shared + ASM=nasm -f elf + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x86 +diff -dPNur p7zip_4.65/makefile.linux_x86_ppc_alpha p7zip_4.65-new/makefile.linux_x86_ppc_alpha +--- p7zip_4.65/makefile.linux_x86_ppc_alpha 2007-08-08 11:15:18.000000000 +0200 ++++ p7zip_4.65-new/makefile.linux_x86_ppc_alpha 2009-06-14 05:08:19.000000000 +0200 +@@ -14,7 +14,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip_4.65/makefile.linux_x86_ppc_alpha_gcc_4.X p7zip_4.65-new/makefile.linux_x86_ppc_alpha_gcc_4.X +--- p7zip_4.65/makefile.linux_x86_ppc_alpha_gcc_4.X 2007-08-08 11:15:20.000000000 +0200 ++++ p7zip_4.65-new/makefile.linux_x86_ppc_alpha_gcc_4.X 2009-06-14 05:08:19.000000000 +0200 +@@ -14,7 +14,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip_4.65/makefile.machine p7zip_4.65-new/makefile.machine +--- p7zip_4.65/makefile.machine 2009-02-14 18:19:09.000000000 +0100 ++++ p7zip_4.65-new/makefile.machine 2009-06-14 02:44:19.000000000 +0200 +@@ -14,7 +14,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip_4.65/makefile.rules p7zip_4.65-new/makefile.rules +--- p7zip_4.65/makefile.rules 2009-02-09 21:03:16.000000000 +0100 ++++ p7zip_4.65-new/makefile.rules 2009-06-14 02:52:48.000000000 +0200 +@@ -558,3 +558,5 @@ + 7zCrcT8.o : ../../../../C/7zCrcT8.c + $(CC) $(CFLAGS) ../../../../C/7zCrcT8.c + ++rccrecode.o : ../../../../C/rccrecode.c ++ $(CC) $(CFLAGS) ../../../../C/rccrecode.c diff --git a/patches/p7zip/p7zip_4.65-ds-rusxmms.patch b/patches/p7zip/p7zip_4.65-ds-rusxmms.patch new file mode 100644 index 0000000..7072522 --- /dev/null +++ b/patches/p7zip/p7zip_4.65-ds-rusxmms.patch @@ -0,0 +1,305 @@ +diff -dPNur p7zip_4.65/C/rccrecode.c p7zip_4.65-new/C/rccrecode.c +--- p7zip_4.65/C/rccrecode.c 1970-01-01 01:00:00.000000000 +0100 ++++ p7zip_4.65-new/C/rccrecode.c 2009-06-14 02:44:19.000000000 +0200 +@@ -0,0 +1,71 @@ ++#include <pthread.h> ++#include <librcc.h> ++ ++static rcc_class_default_charset default_oem[] = { ++ { "ru", "IBM866" }, ++ { NULL, NULL } ++}; ++ ++static rcc_class_default_charset default_iso[] = { ++ { "ru", "CP1251" }, ++ { NULL, NULL } ++}; ++ ++#define ARC_CLASS 0 ++#define OUT_CLASS 1 ++#define ARCOUT_CLASS 0 ++static rcc_class classes[] = { ++ { "oem", RCC_CLASS_STANDARD, NULL, default_oem, "OEM Encoding", 0 }, ++ { "out", RCC_CLASS_STANDARD, "LC_CTYPE", NULL, "Output", 0 }, ++ { NULL, RCC_CLASS_STANDARD, NULL, NULL, NULL, 0 } ++}; ++ ++static int initialized = 0; ++static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; ++ ++void *rcc_init() { ++ rcc_context ctx; ++ ++ pthread_mutex_lock(&mutex); ++ if (!initialized) { ++ rccInit(); ++ rccInitDefaultContext(NULL, 0, 0, classes, 0); ++ rccLoad(NULL, "zip"); ++ rccInitDb4(NULL, NULL, 0); ++ } ++ initialized++; ++ pthread_mutex_unlock(&mutex); ++ ++ ctx = rccCreateContext(NULL, 0, 0, classes, 0); ++ if (ctx) rccInitDb4(ctx, NULL, 0); ++ if (ctx) rccLoad(ctx, "zip"); ++ ++ return ctx; ++} ++ ++ ++void rcc_free(void *ctx) { ++ if (ctx) rccFreeContext((rcc_context)ctx); ++ ++ pthread_mutex_lock(&mutex); ++ if (initialized == 1) rccFree(); ++ initialized--; ++ pthread_mutex_unlock(&mutex); ++} ++ ++ ++char *rcc_read(void *ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, ARC_CLASS, OUT_CLASS, string, size, NULL); ++} ++ ++char *rcc_write(rcc_context ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, OUT_CLASS, ARCOUT_CLASS, string, size, NULL); ++} +diff -dPNur p7zip_4.65/C/rccrecode.h p7zip_4.65-new/C/rccrecode.h +--- p7zip_4.65/C/rccrecode.h 1970-01-01 01:00:00.000000000 +0100 ++++ p7zip_4.65-new/C/rccrecode.h 2009-06-14 02:44:19.000000000 +0200 +@@ -0,0 +1,17 @@ ++#ifndef _RCC_RECODE_H ++#define _RCC_RECODE_H ++ ++# ifdef __cplusplus ++extern "C" { ++# endif ++ ++ void *rcc_init(); ++ void rcc_free(void *ctx); ++ char *rcc_read(void *ctx, const char *string, size_t size); ++ char *rcc_write(void *ctx, const char *string, size_t size); ++ ++# ifdef __cplusplus ++} ++# endif ++ ++#endif /* _RCC_RECODE_H */ +diff -dPNur p7zip_4.65/CPP/7zip/Archive/Zip/ZipIn.cpp p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipIn.cpp +--- p7zip_4.65/CPP/7zip/Archive/Zip/ZipIn.cpp 2008-11-28 23:03:44.000000000 +0100 ++++ p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipIn.cpp 2009-06-14 02:47:28.000000000 +0200 +@@ -9,6 +9,8 @@ + #include "../../Common/LimitedStreams.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + extern "C" + { + #include "../../../../C/CpuArch.h" +@@ -23,6 +25,14 @@ + + // static const char kEndOfString = '\0'; + ++CInArchive::CInArchive() { ++ rccctx = rcc_init(); ++} ++ ++CInArchive::~CInArchive() { ++ rcc_free(rccctx); ++} ++ + HRESULT CInArchive::Open(IInStream *stream, const UInt64 *searchHeaderSizeLimit) + { + Close(); +@@ -198,12 +208,21 @@ + + AString CInArchive::ReadFileName(UInt32 nameSize) + { ++ char *rccrec; ++ + if (nameSize == 0) + return AString(); + char *p = m_NameBuffer.GetBuffer(nameSize); + SafeReadBytes(p, nameSize); + p[nameSize] = 0; + m_NameBuffer.ReleaseBuffer(); ++ ++ rccrec = rcc_read(rccctx, (LPCSTR)m_NameBuffer, 0); ++ if (rccrec) { ++ m_NameBuffer = rccrec; ++ free(rccrec); ++ } ++ + return m_NameBuffer; + } + +diff -dPNur p7zip_4.65/CPP/7zip/Archive/Zip/ZipIn.h p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipIn.h +--- p7zip_4.65/CPP/7zip/Archive/Zip/ZipIn.h 2008-08-14 11:11:13.000000000 +0200 ++++ p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipIn.h 2009-06-14 02:48:32.000000000 +0200 +@@ -108,6 +108,10 @@ + ISequentialInStream *CreateLimitedStream(UInt64 position, UInt64 size); + IInStream* CreateStream(); + ++ void *rccctx; ++ CInArchive(); ++ ~CInArchive(); ++ + bool IsOpen() const { return m_Stream != NULL; } + }; + +diff -dPNur p7zip_4.65/CPP/7zip/Archive/Zip/ZipOut.cpp p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipOut.cpp +--- p7zip_4.65/CPP/7zip/Archive/Zip/ZipOut.cpp 2008-08-14 11:11:26.000000000 +0200 ++++ p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipOut.cpp 2009-06-14 02:44:19.000000000 +0200 +@@ -7,9 +7,19 @@ + #include "../../Common/OffsetStream.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + namespace NArchive { + namespace NZip { + ++COutArchive::COutArchive() { ++ rccctx = rcc_init(); ++} ++ ++COutArchive::~COutArchive() { ++ rcc_free(rccctx); ++} ++ + void COutArchive::Create(IOutStream *outStream) + { + if (!m_OutBuffer.Create(1 << 16)) +@@ -112,6 +122,7 @@ + { + SeekTo(m_BasePosition); + ++ char *rccrec; + bool isZip64 = m_IsZip64 || item.PackSize >= 0xFFFFFFFF || item.UnPackSize >= 0xFFFFFFFF; + + WriteUInt32(NSignature::kLocalFileHeader); +@@ -130,6 +141,12 @@ + throw CSystemException(E_FAIL); + } + WriteUInt16((UInt16)m_ExtraSize); // test it; ++ rccrec = rcc_write(rccctx, (const char *)item.Name, item.Name.Length()); ++ if (rccrec) { ++ printf("%u, %s.\n", item.Name.Length(), rccrec); ++ WriteBytes(rccrec, strlen(rccrec)); ++ free(rccrec); ++ } else + WriteBytes((const char *)item.Name, item.Name.Length()); + + UInt32 extraPos = 0; +@@ -154,6 +171,7 @@ + + void COutArchive::WriteCentralHeader(const CItem &item) + { ++ char *rccrec; + bool isUnPack64 = item.UnPackSize >= 0xFFFFFFFF; + bool isPack64 = item.PackSize >= 0xFFFFFFFF; + bool isPosition64 = item.LocalHeaderPosition >= 0xFFFFFFFF; +@@ -181,6 +199,13 @@ + WriteUInt16(item.InternalAttributes); + WriteUInt32(item.ExternalAttributes); + WriteUInt32(isPosition64 ? 0xFFFFFFFF: (UInt32)item.LocalHeaderPosition); ++ ++ rccrec = rcc_write(rccctx, (const char *)item.Name, item.Name.Length()); ++ if (rccrec) { ++ printf("C: %u, %s.\n", item.Name.Length(), rccrec); ++ WriteBytes(rccrec, strlen(rccrec)); ++ free(rccrec); ++ } else + WriteBytes((const char *)item.Name, item.Name.Length()); + if (isZip64) + { +diff -dPNur p7zip_4.65/CPP/7zip/Archive/Zip/ZipOut.h p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipOut.h +--- p7zip_4.65/CPP/7zip/Archive/Zip/ZipOut.h 2008-08-14 11:11:13.000000000 +0200 ++++ p7zip_4.65-new/CPP/7zip/Archive/Zip/ZipOut.h 2009-06-14 02:44:19.000000000 +0200 +@@ -49,6 +49,11 @@ + void CreateStreamForCompressing(IOutStream **outStream); + void CreateStreamForCopying(ISequentialOutStream **outStream); + void SeekToPackedDataPosition(); ++ ++ void *rccctx; ++ COutArchive(); ++ ~COutArchive(); ++ + }; + + }} +diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Alone/makefile p7zip_4.65-new/CPP/7zip/Bundles/Alone/makefile +--- p7zip_4.65/CPP/7zip/Bundles/Alone/makefile 2009-02-07 19:39:04.000000000 +0100 ++++ p7zip_4.65-new/CPP/7zip/Bundles/Alone/makefile 2009-06-14 02:44:19.000000000 +0200 +@@ -250,6 +250,7 @@ + Sha256.o + + OBJS=\ ++rccrecode.o \ + myGetTickCount.o \ + wine_date_and_time.o \ + myAddExeFlag.o \ +diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Alone/makefile.list p7zip_4.65-new/CPP/7zip/Bundles/Alone/makefile.list +--- p7zip_4.65/CPP/7zip/Bundles/Alone/makefile.list 2009-02-09 21:04:57.000000000 +0100 ++++ p7zip_4.65-new/CPP/7zip/Bundles/Alone/makefile.list 2009-06-14 02:51:45.000000000 +0200 +@@ -204,6 +204,7 @@ + ../../Crypto/ZipStrong.cpp + + SRCS_C=\ ++ ../../../../C/rccrecode.c \ + ../../../../C/Bra.c \ + ../../../../C/Bra86.c \ + ../../../../C/BraIA64.c \ +diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Format7zFree/makefile p7zip_4.65-new/CPP/7zip/Bundles/Format7zFree/makefile +--- p7zip_4.65/CPP/7zip/Bundles/Format7zFree/makefile 2009-02-09 21:47:24.000000000 +0100 ++++ p7zip_4.65-new/CPP/7zip/Bundles/Format7zFree/makefile 2009-06-14 03:00:06.000000000 +0200 +@@ -296,6 +296,7 @@ + Sha256.o \ + + OBJS = \ ++ rccrecode.o \ + wine_date_and_time.o \ + myGetTickCount.o \ + $(COMMON_OBJS) \ +diff -dPNur p7zip_4.65/CPP/7zip/Bundles/Format7zFree/makefile.list p7zip_4.65-new/CPP/7zip/Bundles/Format7zFree/makefile.list +--- p7zip_4.65/CPP/7zip/Bundles/Format7zFree/makefile.list 2009-02-09 21:04:32.000000000 +0100 ++++ p7zip_4.65-new/CPP/7zip/Bundles/Format7zFree/makefile.list 2009-06-14 03:00:39.000000000 +0200 +@@ -235,6 +235,7 @@ + ../../Crypto/ZipStrong.cpp + + SRCS_C=\ ++ ../../../../C/rccrecode.c \ + ../../../../C/Bra.c \ + ../../../../C/Bra86.c \ + ../../../../C/BraIA64.c \ +diff -dPNur p7zip_4.65/makefile.machine p7zip_4.65-new/makefile.machine +--- p7zip_4.65/makefile.machine 2009-02-14 18:19:09.000000000 +0100 ++++ p7zip_4.65-new/makefile.machine 2009-06-14 02:44:19.000000000 +0200 +@@ -14,7 +14,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip_4.65/makefile.rules p7zip_4.65-new/makefile.rules +--- p7zip_4.65/makefile.rules 2009-02-09 21:03:16.000000000 +0100 ++++ p7zip_4.65-new/makefile.rules 2009-06-14 02:52:48.000000000 +0200 +@@ -558,3 +558,5 @@ + 7zCrcT8.o : ../../../../C/7zCrcT8.c + $(CC) $(CFLAGS) ../../../../C/7zCrcT8.c + ++rccrecode.o : ../../../../C/rccrecode.c ++ $(CC) $(CFLAGS) ../../../../C/rccrecode.c diff --git a/patches/p7zip/p7zip_9.04-ds-rusxmms-full.patch b/patches/p7zip/p7zip_9.04-ds-rusxmms-full.patch new file mode 100644 index 0000000..d44a16f --- /dev/null +++ b/patches/p7zip/p7zip_9.04-ds-rusxmms-full.patch @@ -0,0 +1,414 @@ +diff -dPNur p7zip-9.04~dfsg.1/C/rccrecode.c p7zip-9.04~dfsg.1-ds/C/rccrecode.c +--- p7zip-9.04~dfsg.1/C/rccrecode.c 1970-01-01 03:00:00.000000000 +0300 ++++ p7zip-9.04~dfsg.1-ds/C/rccrecode.c 2009-10-28 03:29:23.000000000 +0300 +@@ -0,0 +1,71 @@ ++#include <pthread.h> ++#include <librcc.h> ++ ++static rcc_class_default_charset default_oem[] = { ++ { "ru", "IBM866" }, ++ { NULL, NULL } ++}; ++ ++static rcc_class_default_charset default_iso[] = { ++ { "ru", "CP1251" }, ++ { NULL, NULL } ++}; ++ ++#define ARC_CLASS 0 ++#define OUT_CLASS 1 ++#define ARCOUT_CLASS 0 ++static rcc_class classes[] = { ++ { "oem", RCC_CLASS_STANDARD, NULL, default_oem, "OEM Encoding", 0 }, ++ { "out", RCC_CLASS_STANDARD, "LC_CTYPE", NULL, "Output", 0 }, ++ { NULL, RCC_CLASS_STANDARD, NULL, NULL, NULL, 0 } ++}; ++ ++static int initialized = 0; ++static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; ++ ++void *rcc_init() { ++ rcc_context ctx; ++ ++ pthread_mutex_lock(&mutex); ++ if (!initialized) { ++ rccInit(); ++ rccInitDefaultContext(NULL, 0, 0, classes, 0); ++ rccLoad(NULL, "zip"); ++ rccInitDb4(NULL, NULL, 0); ++ } ++ initialized++; ++ pthread_mutex_unlock(&mutex); ++ ++ ctx = rccCreateContext(NULL, 0, 0, classes, 0); ++ if (ctx) rccInitDb4(ctx, NULL, 0); ++ if (ctx) rccLoad(ctx, "zip"); ++ ++ return ctx; ++} ++ ++ ++void rcc_free(void *ctx) { ++ if (ctx) rccFreeContext((rcc_context)ctx); ++ ++ pthread_mutex_lock(&mutex); ++ if (initialized == 1) rccFree(); ++ initialized--; ++ pthread_mutex_unlock(&mutex); ++} ++ ++ ++char *rcc_read(void *ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, ARC_CLASS, OUT_CLASS, string, size, NULL); ++} ++ ++char *rcc_write(rcc_context ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, OUT_CLASS, ARCOUT_CLASS, string, size, NULL); ++} +diff -dPNur p7zip-9.04~dfsg.1/C/rccrecode.h p7zip-9.04~dfsg.1-ds/C/rccrecode.h +--- p7zip-9.04~dfsg.1/C/rccrecode.h 1970-01-01 03:00:00.000000000 +0300 ++++ p7zip-9.04~dfsg.1-ds/C/rccrecode.h 2009-10-28 03:29:23.000000000 +0300 +@@ -0,0 +1,17 @@ ++#ifndef _RCC_RECODE_H ++#define _RCC_RECODE_H ++ ++# ifdef __cplusplus ++extern "C" { ++# endif ++ ++ void *rcc_init(); ++ void rcc_free(void *ctx); ++ char *rcc_read(void *ctx, const char *string, size_t size); ++ char *rcc_write(void *ctx, const char *string, size_t size); ++ ++# ifdef __cplusplus ++} ++# endif ++ ++#endif /* _RCC_RECODE_H */ +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipIn.cpp p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipIn.cpp +--- p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipIn.cpp 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipIn.cpp 2009-10-28 03:49:06.000000000 +0300 +@@ -9,6 +9,8 @@ + #include "../../Common/LimitedStreams.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + #include "ZipIn.h" + + #define Get16(p) GetUi16(p) +@@ -17,7 +19,17 @@ + + namespace NArchive { + namespace NZip { +- ++ ++CInArchive::CInArchive() ++{ ++ rccctx = rcc_init(); ++} ++ ++CInArchive::~CInArchive() ++{ ++ rcc_free(rccctx); ++} ++ + HRESULT CInArchive::Open(IInStream *stream, const UInt64 *searchHeaderSizeLimit) + { + _inBufMode = false; +@@ -200,12 +212,20 @@ + + void CInArchive::ReadFileName(UInt32 nameSize, AString &dest) + { ++ char *rccrec; ++ + if (nameSize == 0) + dest.Empty(); + char *p = dest.GetBuffer((int)nameSize); + SafeReadBytes(p, nameSize); + p[nameSize] = 0; + dest.ReleaseBuffer(); ++ ++ rccrec = rcc_read(rccctx, (LPCSTR)dest, 0); ++ if (rccrec) { ++ dest = rccrec; ++ free(rccrec); ++ } + } + + void CInArchive::GetArchiveInfo(CInArchiveInfo &archiveInfo) const +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipIn.h p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipIn.h +--- p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipIn.h 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipIn.h 2009-10-28 03:29:23.000000000 +0300 +@@ -114,6 +114,10 @@ + ISequentialInStream *CreateLimitedStream(UInt64 position, UInt64 size); + IInStream* CreateStream(); + ++ void *rccctx; ++ CInArchive(); ++ ~CInArchive(); ++ + bool IsOpen() const { return m_Stream != NULL; } + }; + +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipOut.h p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipOut.h +--- p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipOut.h 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipOut.h 2009-10-28 05:49:05.000000000 +0300 +@@ -49,6 +49,11 @@ + void CreateStreamForCompressing(IOutStream **outStream); + void CreateStreamForCopying(ISequentialOutStream **outStream); + void SeekToPackedDataPosition(); ++ ++ void *rccctx; ++ COutArchive(); ++ ~COutArchive(); ++ void Recode(CItem &item); + }; + + }} +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipUpdate.cpp p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipUpdate.cpp +--- p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipUpdate.cpp 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipUpdate.cpp 2009-10-28 05:48:04.000000000 +0300 +@@ -87,6 +87,7 @@ + item.NtfsATime = ui.NtfsATime; + item.NtfsCTime = ui.NtfsCTime; + item.NtfsTimeIsDefined = ui.NtfsTimeIsDefined; ++ archive.Recode(item); + } + else + isDir = item.IsDir(); +@@ -359,9 +360,11 @@ + item.NtfsCTime = ui.NtfsCTime; + item.NtfsTimeIsDefined = ui.NtfsTimeIsDefined; + ++ archive.Recode(item); ++ + item.CentralExtra.RemoveUnknownSubBlocks(); + item.LocalExtra.RemoveUnknownSubBlocks(); +- ++ + archive.PrepareWriteCompressedData2((UInt16)item.Name.Length(), item.UnPackSize, item.PackSize, item.LocalExtra.HasWzAesField()); + item.LocalHeaderPosition = archive.GetCurrentPosition(); + archive.SeekToPackedDataPosition(); +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Alone/makefile p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Alone/makefile +--- p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Alone/makefile 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Alone/makefile 2009-10-28 03:29:24.000000000 +0300 +@@ -244,6 +244,7 @@ + + + OBJS=\ ++rccrecode.o \ + myGetTickCount.o \ + wine_date_and_time.o \ + myAddExeFlag.o \ +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Alone/makefile.list p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Alone/makefile.list +--- p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Alone/makefile.list 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Alone/makefile.list 2009-10-28 03:40:17.000000000 +0300 +@@ -192,6 +192,7 @@ + ../../Crypto/ZipStrong.cpp + + SRCS_C=\ ++ ../../../../C/rccrecode.c \ + ../../../../C/Aes.c \ + ../../../../C/7zStream.c \ + ../../../../C/Bra.c \ +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Format7zFree/makefile p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Format7zFree/makefile +--- p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Format7zFree/makefile 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Format7zFree/makefile 2009-10-28 03:29:24.000000000 +0300 +@@ -284,6 +284,7 @@ + + + OBJS = \ ++ rccrecode.o \ + wine_date_and_time.o \ + myGetTickCount.o \ + $(COMMON_OBJS) \ +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Format7zFree/makefile.list p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Format7zFree/makefile.list +--- p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Format7zFree/makefile.list 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Format7zFree/makefile.list 2009-10-28 03:34:02.000000000 +0300 +@@ -218,6 +218,7 @@ + ../../Crypto/ZipStrong.cpp + + SRCS_C=\ ++ ../../../../C/rccrecode.c \ + ../../../../C/7zBuf2.c \ + ../../../../C/7zStream.c \ + ../../../../C/Aes.c \ +diff -dPNur p7zip-9.04~dfsg.1/makefile.linux_amd64 p7zip-9.04~dfsg.1-ds/makefile.linux_amd64 +--- p7zip-9.04~dfsg.1/makefile.linux_amd64 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.linux_amd64 2009-10-28 03:54:47.000000000 +0300 +@@ -12,7 +12,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip-9.04~dfsg.1/makefile.linux_amd64_asm p7zip-9.04~dfsg.1-ds/makefile.linux_amd64_asm +--- p7zip-9.04~dfsg.1/makefile.linux_amd64_asm 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.linux_amd64_asm 2009-10-28 03:54:47.000000000 +0300 +@@ -13,7 +13,7 @@ + LINK_SHARED=-fPIC -shared + ASM=yasm -f elf -m amd64 + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x64 +diff -dPNur p7zip-9.04~dfsg.1/makefile.linux_amd64_asm_icc p7zip-9.04~dfsg.1-ds/makefile.linux_amd64_asm_icc +--- p7zip-9.04~dfsg.1/makefile.linux_amd64_asm_icc 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.linux_amd64_asm_icc 2009-10-28 03:54:47.000000000 +0300 +@@ -16,7 +16,7 @@ + LINK_SHARED=-fPIC -shared + ASM=yasm -f elf -m amd64 + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x64 +diff -dPNur p7zip-9.04~dfsg.1/makefile.linux_gcc_2.95_no_need_for_libstdc p7zip-9.04~dfsg.1-ds/makefile.linux_gcc_2.95_no_need_for_libstdc +--- p7zip-9.04~dfsg.1/makefile.linux_gcc_2.95_no_need_for_libstdc 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.linux_gcc_2.95_no_need_for_libstdc 2009-10-28 03:54:47.000000000 +0300 +@@ -11,7 +11,7 @@ + LINK_SHARED=-shared + ASM=nasm -f elf + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x86 +diff -dPNur p7zip-9.04~dfsg.1/makefile.linux_s390x p7zip-9.04~dfsg.1-ds/makefile.linux_s390x +--- p7zip-9.04~dfsg.1/makefile.linux_s390x 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.linux_s390x 2009-10-28 03:54:47.000000000 +0300 +@@ -15,7 +15,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip-9.04~dfsg.1/makefile.linux_x86_asm_gcc_4.X p7zip-9.04~dfsg.1-ds/makefile.linux_x86_asm_gcc_4.X +--- p7zip-9.04~dfsg.1/makefile.linux_x86_asm_gcc_4.X 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.linux_x86_asm_gcc_4.X 2009-10-28 03:54:47.000000000 +0300 +@@ -15,7 +15,7 @@ + LINK_SHARED=-fPIC -shared + ASM=nasm -f elf + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x86 +diff -dPNur p7zip-9.04~dfsg.1/makefile.linux_x86_asm_gcc_4.X_fltk p7zip-9.04~dfsg.1-ds/makefile.linux_x86_asm_gcc_4.X_fltk +--- p7zip-9.04~dfsg.1/makefile.linux_x86_asm_gcc_4.X_fltk 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.linux_x86_asm_gcc_4.X_fltk 2009-10-28 03:54:47.000000000 +0300 +@@ -15,7 +15,7 @@ + LINK_SHARED=-fPIC -shared + ASM=nasm -f elf + +-LOCAL_LIBS=-lpthread `fltk-config --ldflags` ++LOCAL_LIBS=-lpthread -lrcc `fltk-config --ldflags` + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x86 +diff -dPNur p7zip-9.04~dfsg.1/makefile.linux_x86_asm_icc p7zip-9.04~dfsg.1-ds/makefile.linux_x86_asm_icc +--- p7zip-9.04~dfsg.1/makefile.linux_x86_asm_icc 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.linux_x86_asm_icc 2009-10-28 03:54:47.000000000 +0300 +@@ -16,7 +16,7 @@ + LINK_SHARED=-fPIC -shared + ASM=nasm -f elf + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + CPU=x86 +diff -dPNur p7zip-9.04~dfsg.1/makefile.linux_x86_ppc_alpha p7zip-9.04~dfsg.1-ds/makefile.linux_x86_ppc_alpha +--- p7zip-9.04~dfsg.1/makefile.linux_x86_ppc_alpha 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.linux_x86_ppc_alpha 2009-10-28 03:54:47.000000000 +0300 +@@ -14,7 +14,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip-9.04~dfsg.1/makefile.linux_x86_ppc_alpha_gcc_4.X p7zip-9.04~dfsg.1-ds/makefile.linux_x86_ppc_alpha_gcc_4.X +--- p7zip-9.04~dfsg.1/makefile.linux_x86_ppc_alpha_gcc_4.X 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.linux_x86_ppc_alpha_gcc_4.X 2009-10-28 03:54:47.000000000 +0300 +@@ -14,7 +14,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip-9.04~dfsg.1/makefile.machine p7zip-9.04~dfsg.1-ds/makefile.machine +--- p7zip-9.04~dfsg.1/makefile.machine 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.machine 2009-10-28 03:29:24.000000000 +0300 +@@ -14,7 +14,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip-9.04~dfsg.1/makefile.rules p7zip-9.04~dfsg.1-ds/makefile.rules +--- p7zip-9.04~dfsg.1/makefile.rules 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.rules 2009-10-28 03:29:24.000000000 +0300 +@@ -586,3 +586,5 @@ + 7zCrcT8.o : ../../../../C/7zCrcT8.c + $(CC) $(CFLAGS) ../../../../C/7zCrcT8.c + ++rccrecode.o : ../../../../C/rccrecode.c ++ $(CC) $(CFLAGS) ../../../../C/rccrecode.c +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipOut.cpp p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipOut.cpp +--- p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipOut.cpp 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipOut.cpp 2009-10-28 05:49:01.000000000 +0300 +@@ -7,9 +7,24 @@ + #include "../../Common/OffsetStream.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + namespace NArchive { + namespace NZip { + ++COutArchive::COutArchive() { ++ rccctx = rcc_init(); ++} ++ ++COutArchive::~COutArchive() { ++ rcc_free(rccctx); ++} ++ ++void COutArchive::Recode(CItem &item) { ++ char *rccrec = rcc_write(rccctx, (const char *)item.Name, item.Name.Length()); ++ if (rccrec) item.Name = rccrec; ++} ++ + void COutArchive::Create(IOutStream *outStream) + { + if (!m_OutBuffer.Create(1 << 16)) diff --git a/patches/p7zip/p7zip_9.04-ds-rusxmms.patch b/patches/p7zip/p7zip_9.04-ds-rusxmms.patch new file mode 100644 index 0000000..7678241 --- /dev/null +++ b/patches/p7zip/p7zip_9.04-ds-rusxmms.patch @@ -0,0 +1,294 @@ +diff -dPNur p7zip-9.04~dfsg.1/C/rccrecode.c p7zip-9.04~dfsg.1-ds/C/rccrecode.c +--- p7zip-9.04~dfsg.1/C/rccrecode.c 1970-01-01 03:00:00.000000000 +0300 ++++ p7zip-9.04~dfsg.1-ds/C/rccrecode.c 2009-10-28 03:29:23.000000000 +0300 +@@ -0,0 +1,71 @@ ++#include <pthread.h> ++#include <librcc.h> ++ ++static rcc_class_default_charset default_oem[] = { ++ { "ru", "IBM866" }, ++ { NULL, NULL } ++}; ++ ++static rcc_class_default_charset default_iso[] = { ++ { "ru", "CP1251" }, ++ { NULL, NULL } ++}; ++ ++#define ARC_CLASS 0 ++#define OUT_CLASS 1 ++#define ARCOUT_CLASS 0 ++static rcc_class classes[] = { ++ { "oem", RCC_CLASS_STANDARD, NULL, default_oem, "OEM Encoding", 0 }, ++ { "out", RCC_CLASS_STANDARD, "LC_CTYPE", NULL, "Output", 0 }, ++ { NULL, RCC_CLASS_STANDARD, NULL, NULL, NULL, 0 } ++}; ++ ++static int initialized = 0; ++static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; ++ ++void *rcc_init() { ++ rcc_context ctx; ++ ++ pthread_mutex_lock(&mutex); ++ if (!initialized) { ++ rccInit(); ++ rccInitDefaultContext(NULL, 0, 0, classes, 0); ++ rccLoad(NULL, "zip"); ++ rccInitDb4(NULL, NULL, 0); ++ } ++ initialized++; ++ pthread_mutex_unlock(&mutex); ++ ++ ctx = rccCreateContext(NULL, 0, 0, classes, 0); ++ if (ctx) rccInitDb4(ctx, NULL, 0); ++ if (ctx) rccLoad(ctx, "zip"); ++ ++ return ctx; ++} ++ ++ ++void rcc_free(void *ctx) { ++ if (ctx) rccFreeContext((rcc_context)ctx); ++ ++ pthread_mutex_lock(&mutex); ++ if (initialized == 1) rccFree(); ++ initialized--; ++ pthread_mutex_unlock(&mutex); ++} ++ ++ ++char *rcc_read(void *ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, ARC_CLASS, OUT_CLASS, string, size, NULL); ++} ++ ++char *rcc_write(rcc_context ctx, const char *string, size_t size) { ++ if (!initialized) { ++ rcc_init(); ++ if (!initialized) return NULL; ++ } ++ return rccSizedRecode((rcc_context)ctx, OUT_CLASS, ARCOUT_CLASS, string, size, NULL); ++} +diff -dPNur p7zip-9.04~dfsg.1/C/rccrecode.h p7zip-9.04~dfsg.1-ds/C/rccrecode.h +--- p7zip-9.04~dfsg.1/C/rccrecode.h 1970-01-01 03:00:00.000000000 +0300 ++++ p7zip-9.04~dfsg.1-ds/C/rccrecode.h 2009-10-28 03:29:23.000000000 +0300 +@@ -0,0 +1,17 @@ ++#ifndef _RCC_RECODE_H ++#define _RCC_RECODE_H ++ ++# ifdef __cplusplus ++extern "C" { ++# endif ++ ++ void *rcc_init(); ++ void rcc_free(void *ctx); ++ char *rcc_read(void *ctx, const char *string, size_t size); ++ char *rcc_write(void *ctx, const char *string, size_t size); ++ ++# ifdef __cplusplus ++} ++# endif ++ ++#endif /* _RCC_RECODE_H */ +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipIn.cpp p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipIn.cpp +--- p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipIn.cpp 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipIn.cpp 2009-10-28 03:49:06.000000000 +0300 +@@ -9,6 +9,8 @@ + #include "../../Common/LimitedStreams.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + #include "ZipIn.h" + + #define Get16(p) GetUi16(p) +@@ -17,7 +19,17 @@ + + namespace NArchive { + namespace NZip { +- ++ ++CInArchive::CInArchive() ++{ ++ rccctx = rcc_init(); ++} ++ ++CInArchive::~CInArchive() ++{ ++ rcc_free(rccctx); ++} ++ + HRESULT CInArchive::Open(IInStream *stream, const UInt64 *searchHeaderSizeLimit) + { + _inBufMode = false; +@@ -200,12 +212,20 @@ + + void CInArchive::ReadFileName(UInt32 nameSize, AString &dest) + { ++ char *rccrec; ++ + if (nameSize == 0) + dest.Empty(); + char *p = dest.GetBuffer((int)nameSize); + SafeReadBytes(p, nameSize); + p[nameSize] = 0; + dest.ReleaseBuffer(); ++ ++ rccrec = rcc_read(rccctx, (LPCSTR)dest, 0); ++ if (rccrec) { ++ dest = rccrec; ++ free(rccrec); ++ } + } + + void CInArchive::GetArchiveInfo(CInArchiveInfo &archiveInfo) const +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipIn.h p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipIn.h +--- p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipIn.h 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipIn.h 2009-10-28 03:29:23.000000000 +0300 +@@ -114,6 +114,10 @@ + ISequentialInStream *CreateLimitedStream(UInt64 position, UInt64 size); + IInStream* CreateStream(); + ++ void *rccctx; ++ CInArchive(); ++ ~CInArchive(); ++ + bool IsOpen() const { return m_Stream != NULL; } + }; + +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipOut.h p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipOut.h +--- p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipOut.h 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipOut.h 2009-10-28 05:49:05.000000000 +0300 +@@ -49,6 +49,11 @@ + void CreateStreamForCompressing(IOutStream **outStream); + void CreateStreamForCopying(ISequentialOutStream **outStream); + void SeekToPackedDataPosition(); ++ ++ void *rccctx; ++ COutArchive(); ++ ~COutArchive(); ++ void Recode(CItem &item); + }; + + }} +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipUpdate.cpp p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipUpdate.cpp +--- p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipUpdate.cpp 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipUpdate.cpp 2009-10-28 05:48:04.000000000 +0300 +@@ -87,6 +87,7 @@ + item.NtfsATime = ui.NtfsATime; + item.NtfsCTime = ui.NtfsCTime; + item.NtfsTimeIsDefined = ui.NtfsTimeIsDefined; ++ archive.Recode(item); + } + else + isDir = item.IsDir(); +@@ -359,9 +360,11 @@ + item.NtfsCTime = ui.NtfsCTime; + item.NtfsTimeIsDefined = ui.NtfsTimeIsDefined; + ++ archive.Recode(item); ++ + item.CentralExtra.RemoveUnknownSubBlocks(); + item.LocalExtra.RemoveUnknownSubBlocks(); +- ++ + archive.PrepareWriteCompressedData2((UInt16)item.Name.Length(), item.UnPackSize, item.PackSize, item.LocalExtra.HasWzAesField()); + item.LocalHeaderPosition = archive.GetCurrentPosition(); + archive.SeekToPackedDataPosition(); +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Alone/makefile p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Alone/makefile +--- p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Alone/makefile 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Alone/makefile 2009-10-28 03:29:24.000000000 +0300 +@@ -244,6 +244,7 @@ + + + OBJS=\ ++rccrecode.o \ + myGetTickCount.o \ + wine_date_and_time.o \ + myAddExeFlag.o \ +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Alone/makefile.list p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Alone/makefile.list +--- p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Alone/makefile.list 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Alone/makefile.list 2009-10-28 03:40:17.000000000 +0300 +@@ -192,6 +192,7 @@ + ../../Crypto/ZipStrong.cpp + + SRCS_C=\ ++ ../../../../C/rccrecode.c \ + ../../../../C/Aes.c \ + ../../../../C/7zStream.c \ + ../../../../C/Bra.c \ +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Format7zFree/makefile p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Format7zFree/makefile +--- p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Format7zFree/makefile 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Format7zFree/makefile 2009-10-28 03:29:24.000000000 +0300 +@@ -284,6 +284,7 @@ + + + OBJS = \ ++ rccrecode.o \ + wine_date_and_time.o \ + myGetTickCount.o \ + $(COMMON_OBJS) \ +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Format7zFree/makefile.list p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Format7zFree/makefile.list +--- p7zip-9.04~dfsg.1/CPP/7zip/Bundles/Format7zFree/makefile.list 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Bundles/Format7zFree/makefile.list 2009-10-28 03:34:02.000000000 +0300 +@@ -218,6 +218,7 @@ + ../../Crypto/ZipStrong.cpp + + SRCS_C=\ ++ ../../../../C/rccrecode.c \ + ../../../../C/7zBuf2.c \ + ../../../../C/7zStream.c \ + ../../../../C/Aes.c \ +diff -dPNur p7zip-9.04~dfsg.1/makefile.machine p7zip-9.04~dfsg.1-ds/makefile.machine +--- p7zip-9.04~dfsg.1/makefile.machine 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.machine 2009-10-28 03:29:24.000000000 +0300 +@@ -14,7 +14,7 @@ + CC_SHARED=-fPIC + LINK_SHARED=-fPIC -shared + +-LOCAL_LIBS=-lpthread ++LOCAL_LIBS=-lpthread -lrcc + LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl + + OBJ_CRC32=$(OBJ_CRC32_C) +diff -dPNur p7zip-9.04~dfsg.1/makefile.rules p7zip-9.04~dfsg.1-ds/makefile.rules +--- p7zip-9.04~dfsg.1/makefile.rules 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/makefile.rules 2009-10-28 03:29:24.000000000 +0300 +@@ -586,3 +586,5 @@ + 7zCrcT8.o : ../../../../C/7zCrcT8.c + $(CC) $(CFLAGS) ../../../../C/7zCrcT8.c + ++rccrecode.o : ../../../../C/rccrecode.c ++ $(CC) $(CFLAGS) ../../../../C/rccrecode.c +diff -dPNur p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipOut.cpp p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipOut.cpp +--- p7zip-9.04~dfsg.1/CPP/7zip/Archive/Zip/ZipOut.cpp 2009-06-27 18:18:14.000000000 +0400 ++++ p7zip-9.04~dfsg.1-ds/CPP/7zip/Archive/Zip/ZipOut.cpp 2009-10-28 05:49:01.000000000 +0300 +@@ -7,9 +7,24 @@ + #include "../../Common/OffsetStream.h" + #include "../../Common/StreamUtils.h" + ++#include "../../../../C/rccrecode.h" ++ + namespace NArchive { + namespace NZip { + ++COutArchive::COutArchive() { ++ rccctx = rcc_init(); ++} ++ ++COutArchive::~COutArchive() { ++ rcc_free(rccctx); ++} ++ ++void COutArchive::Recode(CItem &item) { ++ char *rccrec = rcc_write(rccctx, (const char *)item.Name, item.Name.Length()); ++ if (rccrec) item.Name = rccrec; ++} ++ + void COutArchive::Create(IOutStream *outStream) + { + if (!m_OutBuffer.Create(1 << 16)) |