From 4677d362982a38c6e2aabb667e33aaa7f921f018 Mon Sep 17 00:00:00 2001 From: Karsten Heimrich Date: Tue, 9 Jun 2015 16:04:24 +0200 Subject: Update source tree with version 9.38.beta of LZMA SDK. - Remove unused files. - Split in .pri files. - Add HEADERS section. - Adjust lib7z_facade. Change-Id: I31e7bafbfe1a9346364bd58c391601955f98ad3a Reviewed-by: Kai Koehne --- src/libs/7zip/patches/0001-Adjust-7z-and-p7z.patch | 517 +++++++++++++++++++++ 1 file changed, 517 insertions(+) create mode 100644 src/libs/7zip/patches/0001-Adjust-7z-and-p7z.patch (limited to 'src/libs/7zip/patches') diff --git a/src/libs/7zip/patches/0001-Adjust-7z-and-p7z.patch b/src/libs/7zip/patches/0001-Adjust-7z-and-p7z.patch new file mode 100644 index 000000000..822deb07f --- /dev/null +++ b/src/libs/7zip/patches/0001-Adjust-7z-and-p7z.patch @@ -0,0 +1,517 @@ +From f643c01e4e8534f26a5a2d260caa566d23cdcb13 Mon Sep 17 00:00:00 2001 +From: Karsten Heimrich +Date: Thu, 4 Jun 2015 15:41:51 +0200 +Subject: [PATCH 1/1] Adjust 7z and p7z. + +Change-Id: I3b96d2b02e5a0908fb4cf5b4262cb33516a10098 +--- + src/libs/7zip/7zip.pri | 11 ++++- + src/libs/7zip/7zip.pro | 14 +----- + src/libs/7zip/unix/CPP/7zip/Archive/7z/7zOut.cpp | 2 - + src/libs/7zip/unix/CPP/7zip/Common/RegisterArc.h | 32 ++++++++++--- + src/libs/7zip/unix/CPP/7zip/Common/RegisterCodec.h | 29 ++++++++--- + src/libs/7zip/unix/CPP/7zip/UI/Common/Extract.cpp | 2 - + .../unix/CPP/include_windows/include_windows.pri | 3 ++ + .../unix/CPP/myWindows/myCommandLineParser.cpp | 56 ++++++++++++++++++++++ + src/libs/7zip/unix/CPP/myWindows/myDateAndTime.cpp | 42 ++++++++-------- + src/libs/7zip/unix/CPP/myWindows/myWindows.pri | 7 +++ + src/libs/7zip/win/CPP/7zip/Archive/7z/7zOut.cpp | 2 - + src/libs/7zip/win/CPP/7zip/Common/RegisterArc.h | 32 ++++++++++--- + src/libs/7zip/win/CPP/7zip/Common/RegisterCodec.h | 29 ++++++++--- + src/libs/7zip/win/CPP/7zip/UI/Common/Extract.cpp | 2 - + 14 files changed, 194 insertions(+), 69 deletions(-) + create mode 100644 src/libs/7zip/unix/CPP/include_windows/include_windows.pri + create mode 100644 src/libs/7zip/unix/CPP/myWindows/myCommandLineParser.cpp + create mode 100644 src/libs/7zip/unix/CPP/myWindows/myWindows.pri + +diff --git a/src/libs/7zip/7zip.pri b/src/libs/7zip/7zip.pri +index 823e3ab..85574ce 100644 +--- a/src/libs/7zip/7zip.pri ++++ b/src/libs/7zip/7zip.pri +@@ -1,7 +1,11 @@ ++DEFINES += _UNICODE _NO_CRYPTO ++ + win32 { + 7ZIP_BASE=$$PWD/win + INCLUDEPATH += $$7ZIP_BASE/C $$7ZIP_BASE/CPP +- DEFINES += WIN_LONG_PATH _UNICODE _NO_CRYPTO ++ DEFINES += WIN_LONG_PATH _CRT_SECURE_NO_WARNINGS ++ win32-g++*:QMAKE_CXXFLAGS += -w -fvisibility=hidden ++ + QMAKE_CXXFLAGS_RELEASE -= -Zc:strictStrings + QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO -= -Zc:strictStrings + } +@@ -14,6 +18,9 @@ unix { + $$7ZIP_BASE/CPP/myWindows \ + $$7ZIP_BASE/CPP/include_windows + ++ QMAKE_CFLAGS += -w ++ QMAKE_CXXFLAGS += -fvisibility=hidden -w ++ + macx:DEFINES += ENV_MACOSX +- DEFINES += _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE NDEBUG _REENTRANT ENV_UNIX UNICODE _UNICODE _NO_CRYPTO ++ DEFINES += _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE NDEBUG _REENTRANT ENV_UNIX UNICODE + } +diff --git a/src/libs/7zip/7zip.pro b/src/libs/7zip/7zip.pro +index 01b69da..70a51c0 100644 +--- a/src/libs/7zip/7zip.pro ++++ b/src/libs/7zip/7zip.pro +@@ -7,15 +7,5 @@ CONFIG += staticlib + DESTDIR = $$IFW_LIB_PATH + + include(7zip.pri) +-win32 { +- DEFINES += _CRT_SECURE_NO_WARNINGS +- win32-g++*:QMAKE_CXXFLAGS += -w -fvisibility=hidden +- CONFIG += no_batch # this is needed because we have a same named *.c and *.cpp file -> 7in +- include($$7ZIP_BASE/win.pri) #this is 7zip +-} +- +-unix { +- QMAKE_CFLAGS += -w +- QMAKE_CXXFLAGS += -fvisibility=hidden -w +- include($$7ZIP_BASE/unix.pri) #this is p7zip +-} ++win32:include($$7ZIP_BASE/win.pri) #7zip ++unix:include($$7ZIP_BASE/unix.pri) #p7zip +diff --git a/src/libs/7zip/unix/CPP/7zip/Archive/7z/7zOut.cpp b/src/libs/7zip/unix/CPP/7zip/Archive/7z/7zOut.cpp +index 8af28b9..e20858e 100644 +--- a/src/libs/7zip/unix/CPP/7zip/Archive/7z/7zOut.cpp ++++ b/src/libs/7zip/unix/CPP/7zip/Archive/7z/7zOut.cpp +@@ -4,8 +4,6 @@ + + #include "../../../../C/7zCrc.h" + +-#include "../../../Common/AutoPtr.h" +- + #include "../../Common/StreamObjects.h" + + #include "7zOut.h" +diff --git a/src/libs/7zip/unix/CPP/7zip/Common/RegisterArc.h b/src/libs/7zip/unix/CPP/7zip/Common/RegisterArc.h +index 1e9bf14..82bd096 100644 +--- a/src/libs/7zip/unix/CPP/7zip/Common/RegisterArc.h ++++ b/src/libs/7zip/unix/CPP/7zip/Common/RegisterArc.h +@@ -5,6 +5,8 @@ + + #include "../Archive/IArchive.h" + ++#include ++ + struct CArcInfo + { + const char *Name; +@@ -24,19 +26,35 @@ struct CArcInfo + Func_IsArc IsArc; + + bool IsMultiSignature() const { return (Flags & NArcInfoFlags::kMultiSignature) != 0; } ++ ++ std::once_flag once; + }; + + void RegisterArc(const CArcInfo *arcInfo) throw(); + + #define REGISTER_ARC_NAME(x) CRegister ## x + +-#define REGISTER_ARC(x) struct REGISTER_ARC_NAME(x) { \ +- REGISTER_ARC_NAME(x)() { RegisterArc(&g_ArcInfo); }}; \ +- static REGISTER_ARC_NAME(x) g_RegisterArc; +- +-#define REGISTER_ARC_DEC_SIG(x) struct REGISTER_ARC_NAME(x) { \ +- REGISTER_ARC_NAME(x)() { g_ArcInfo.Signature[0]--; RegisterArc(&g_ArcInfo); }}; \ +- static REGISTER_ARC_NAME(x) g_RegisterArc; ++#define REGISTER_ARC(x) struct REGISTER_ARC_NAME(x) \ ++ { \ ++ REGISTER_ARC_NAME(x)() \ ++ { \ ++ std::call_once(g_ArcInfo.once, [] { RegisterArc(&g_ArcInfo); }); \ ++ } \ ++ }; \ ++ static REGISTER_ARC_NAME(x) g_RegisterArc; \ ++ void registerArc##x() { static REGISTER_ARC_NAME(x) g_RegisterArc; } ++ ++#define REGISTER_ARC_DEC_SIG(x) struct REGISTER_ARC_NAME(x) \ ++ { \ ++ REGISTER_ARC_NAME(x)() { \ ++ std::call_once(g_ArcInfo.once, [] { \ ++ g_ArcInfo.Signature[0]--; \ ++ RegisterArc(&g_ArcInfo); \ ++ }); \ ++ } \ ++ }; \ ++ static REGISTER_ARC_NAME(x) g_RegisterArc; \ ++ void registerArcDec##x() { static REGISTER_ARC_NAME(x) g_RegisterArc; } + + + #define IMP_CreateArcIn_2(c) \ +diff --git a/src/libs/7zip/unix/CPP/7zip/Common/RegisterCodec.h b/src/libs/7zip/unix/CPP/7zip/Common/RegisterCodec.h +index 4222a30..0c6662a 100644 +--- a/src/libs/7zip/unix/CPP/7zip/Common/RegisterCodec.h ++++ b/src/libs/7zip/unix/CPP/7zip/Common/RegisterCodec.h +@@ -6,6 +6,8 @@ + #include "../Common/MethodId.h" + #include "../ICoder.h" + ++#include ++ + typedef void * (*CreateCodecP)(); + struct CCodecInfo + { +@@ -15,21 +17,34 @@ struct CCodecInfo + const wchar_t *Name; + UInt32 NumInStreams; + bool IsFilter; ++ std::once_flag once; + }; + + void RegisterCodec(const CCodecInfo *codecInfo) throw(); + + #define REGISTER_CODEC_NAME(x) CRegisterCodec ## x + +-#define REGISTER_CODEC(x) struct REGISTER_CODEC_NAME(x) { \ +- REGISTER_CODEC_NAME(x)() { RegisterCodec(&g_CodecInfo); }}; \ +- static REGISTER_CODEC_NAME(x) g_RegisterCodec; ++#define REGISTER_CODEC(x) struct REGISTER_CODEC_NAME(x) \ ++ { \ ++ REGISTER_CODEC_NAME(x)() \ ++ { \ ++ std::call_once(g_CodecInfo.once, [] { RegisterCodec(&g_CodecInfo); }); \ ++ } \ ++ }; \ ++ static REGISTER_CODEC_NAME(x) g_RegisterCodec; \ ++ void registerCodec##x() { static REGISTER_CODEC_NAME(x) g_RegisterCodecs; } + + #define REGISTER_CODECS_NAME(x) CRegisterCodecs ## x +-#define REGISTER_CODECS(x) struct REGISTER_CODECS_NAME(x) { \ +- REGISTER_CODECS_NAME(x)() { for (unsigned i = 0; i < ARRAY_SIZE(g_CodecsInfo); i++) \ +- RegisterCodec(&g_CodecsInfo[i]); }}; \ +- static REGISTER_CODECS_NAME(x) g_RegisterCodecs; ++#define REGISTER_CODECS(x) struct REGISTER_CODECS_NAME(x) \ ++ { \ ++ REGISTER_CODECS_NAME(x)() \ ++ { \ ++ for (unsigned i = 0; i < ARRAY_SIZE(g_CodecsInfo); i++) \ ++ std::call_once(g_CodecsInfo[i].once, [&i] { RegisterCodec(&g_CodecsInfo[i]); }); \ ++ } \ ++ }; \ ++ static REGISTER_CODECS_NAME(x) g_RegisterCodecs; \ ++ void registerCodec##x() { static REGISTER_CODECS_NAME(x) g_RegisterCodecs; } + + + struct CHasherInfo +diff --git a/src/libs/7zip/unix/CPP/7zip/UI/Common/Extract.cpp b/src/libs/7zip/unix/CPP/7zip/UI/Common/Extract.cpp +index 03f31fa..5f94254 100644 +--- a/src/libs/7zip/unix/CPP/7zip/UI/Common/Extract.cpp ++++ b/src/libs/7zip/unix/CPP/7zip/UI/Common/Extract.cpp +@@ -2,8 +2,6 @@ + + #include "StdAfx.h" + +-#include "../../../../C/Sort.h" +- + #include "../../../Common/StringConvert.h" + + #include "../../../Windows/FileDir.h" +diff --git a/src/libs/7zip/unix/CPP/include_windows/include_windows.pri b/src/libs/7zip/unix/CPP/include_windows/include_windows.pri +new file mode 100644 +index 0000000..5ef72fd +--- /dev/null ++++ b/src/libs/7zip/unix/CPP/include_windows/include_windows.pri +@@ -0,0 +1,3 @@ ++HEADERS += $$7ZIP_BASE/CPP/include_windows/basetyps.h \ ++ $$7ZIP_BASE/CPP/include_windows/tchar.h \ ++ $$7ZIP_BASE/CPP/include_windows/windows.h +diff --git a/src/libs/7zip/unix/CPP/myWindows/myCommandLineParser.cpp b/src/libs/7zip/unix/CPP/myWindows/myCommandLineParser.cpp +new file mode 100644 +index 0000000..5d7f6fd +--- /dev/null ++++ b/src/libs/7zip/unix/CPP/myWindows/myCommandLineParser.cpp +@@ -0,0 +1,56 @@ ++/************************************************************************** ++** ++** Copyright (C) 2015 The Qt Company Ltd. ++** Contact: http://www.qt.io/licensing/ ++** ++** This file is part of the Qt Installer Framework. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** Commercial License Usage ++** Licensees holding valid commercial Qt licenses may use this file in ++** accordance with the commercial license agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and The Qt Company. For licensing terms ++** and conditions see http://qt.io/terms-conditions. For further ++** information use the contact form at http://www.qt.io/contact-us. ++** ++** GNU Lesser General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 or version 3 as published by the Free ++** Software Foundation and appearing in the file LICENSE.LGPLv21 and ++** LICENSE.LGPLv3 included in the packaging of this file. Please review the ++** following information to ensure the GNU Lesser General Public License ++** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ++** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** As a special exception, The Qt Company gives you certain additional ++** rights. These rights are described in The Qt Company LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** ++** $QT_END_LICENSE$ ++** ++**************************************************************************/ ++ ++#include "../CPP/Common/MyString.h" ++ ++#include ++ ++namespace NCommandLineParser { ++ ++void SplitCommandLine(const UString &s, UStringVector &parts) ++{ ++ parts.Clear(); ++ ++ const QString cmdLine = QString::fromStdWString(static_cast(s)); ++ const QStringList args = cmdLine.simplified().split(QLatin1Char(' '), QString::SkipEmptyParts); ++ foreach (QString arg, args) { ++ if (arg.startsWith(QLatin1Char('\"'))) ++ arg = arg.mid(1); ++ if (arg.endsWith(QLatin1Char('\"'))) ++ arg = arg.mid(1); ++ parts.Add(arg.toStdWString().c_str()); ++ } ++} ++ ++} // namespace NCommandLineParser +diff --git a/src/libs/7zip/unix/CPP/myWindows/myDateAndTime.cpp b/src/libs/7zip/unix/CPP/myWindows/myDateAndTime.cpp +index 96554c9..9ebfe37 100644 +--- a/src/libs/7zip/unix/CPP/myWindows/myDateAndTime.cpp ++++ b/src/libs/7zip/unix/CPP/myWindows/myDateAndTime.cpp +@@ -32,19 +32,18 @@ + ** + **************************************************************************/ + +-#include +-#include + #include "windows.h" + ++#include ++ + void FileTimeToDateTime(const FILETIME *source, QDateTime *target) + { + ULARGE_INTEGER store; +- QDateTime tempDateTime(QDate(1601, 1, 1)); +- + store.QuadPart = source->dwHighDateTime; + store.QuadPart = store.QuadPart << 32; + store.QuadPart += source->dwLowDateTime; + ++ const QDateTime tempDateTime(QDate(1601, 1, 1), QTime(0, 0, 0, 0), Qt::UTC); + *target = tempDateTime.addMSecs(store.QuadPart / 10000); + } + +@@ -60,6 +59,13 @@ void DateTimeToSystemTime(const QDateTime *source, SYSTEMTIME *target) + target->wMilliseconds = source->time().msec(); + } + ++void DateTimeToFileTime(const QDateTime &dateTime, FILETIME *target) ++{ ++ const qint64 nsecs = QDateTime(QDate(1601, 1, 1), QTime(0, 0, 0, 0), Qt::UTC) ++ .msecsTo(dateTime) * 10000; ++ target->dwLowDateTime = nsecs; ++ target->dwHighDateTime = nsecs >> 32; ++} + + BOOL WINAPI FileTimeToSystemTime(CONST FILETIME *source,SYSTEMTIME *target) + { +@@ -70,21 +76,6 @@ BOOL WINAPI FileTimeToSystemTime(CONST FILETIME *source,SYSTEMTIME *target) + return TRUE; + } + +-BOOL WINAPI SystemTimeToFileTime(const SYSTEMTIME *source,FILETIME *target) +-{ +- // TODO: Implementation! +- // This doesn't seem to be called at all +- +- qDebug() << "SystemTimeToFileTime"; +- +- target->dwHighDateTime = 0; +- target->dwLowDateTime = 0; +- +- qWarning() << Q_FUNC_INFO; +- +- return TRUE; +-} +- + BOOL WINAPI FileTimeToLocalFileTime(CONST FILETIME *source,FILETIME *target) + { + target->dwHighDateTime = source->dwHighDateTime; +@@ -137,3 +128,16 @@ VOID WINAPI GetSystemTime(SYSTEMTIME *st) + QDateTime nowDateTime = QDateTime::currentDateTimeUtc(); + DateTimeToSystemTime(&nowDateTime, st); + } ++ ++VOID WINAPI GetSystemTimeAsFileTime(FILETIME *time) ++{ ++ DateTimeToFileTime(QDateTime::currentDateTimeUtc(), time); ++} ++ ++DWORD WINAPI GetTickCount() ++{ ++ struct timespec ts; ++ if (clock_gettime(CLOCK_MONOTONIC, &ts)) ++ return DWORD(ts.tv_sec * 1000 + ts.tv_nsec / 1000000); ++ return DWORD(QDateTime::currentMSecsSinceEpoch()); ++} +diff --git a/src/libs/7zip/unix/CPP/myWindows/myWindows.pri b/src/libs/7zip/unix/CPP/myWindows/myWindows.pri +new file mode 100644 +index 0000000..0875fdb +--- /dev/null ++++ b/src/libs/7zip/unix/CPP/myWindows/myWindows.pri +@@ -0,0 +1,7 @@ ++HEADERS += $$7ZIP_BASE/CPP/myWindows/StdAfx.h \ ++ $$7ZIP_BASE/CPP/myWindows/config.h \ ++ $$7ZIP_BASE/CPP/myWindows/initguid.h \ ++ $$7ZIP_BASE/CPP/myWindows/myPrivate.h ++ ++SOURCES += $$7ZIP_BASE/CPP/myWindows/myDateAndTime.cpp \ ++ $$7ZIP_BASE/CPP/myWindows/myCommandLineParser.cpp +diff --git a/src/libs/7zip/win/CPP/7zip/Archive/7z/7zOut.cpp b/src/libs/7zip/win/CPP/7zip/Archive/7z/7zOut.cpp +index 8af28b9..e20858e 100644 +--- a/src/libs/7zip/win/CPP/7zip/Archive/7z/7zOut.cpp ++++ b/src/libs/7zip/win/CPP/7zip/Archive/7z/7zOut.cpp +@@ -4,8 +4,6 @@ + + #include "../../../../C/7zCrc.h" + +-#include "../../../Common/AutoPtr.h" +- + #include "../../Common/StreamObjects.h" + + #include "7zOut.h" +diff --git a/src/libs/7zip/win/CPP/7zip/Common/RegisterArc.h b/src/libs/7zip/win/CPP/7zip/Common/RegisterArc.h +index 1e9bf14..82bd096 100644 +--- a/src/libs/7zip/win/CPP/7zip/Common/RegisterArc.h ++++ b/src/libs/7zip/win/CPP/7zip/Common/RegisterArc.h +@@ -5,6 +5,8 @@ + + #include "../Archive/IArchive.h" + ++#include ++ + struct CArcInfo + { + const char *Name; +@@ -24,19 +26,35 @@ struct CArcInfo + Func_IsArc IsArc; + + bool IsMultiSignature() const { return (Flags & NArcInfoFlags::kMultiSignature) != 0; } ++ ++ std::once_flag once; + }; + + void RegisterArc(const CArcInfo *arcInfo) throw(); + + #define REGISTER_ARC_NAME(x) CRegister ## x + +-#define REGISTER_ARC(x) struct REGISTER_ARC_NAME(x) { \ +- REGISTER_ARC_NAME(x)() { RegisterArc(&g_ArcInfo); }}; \ +- static REGISTER_ARC_NAME(x) g_RegisterArc; +- +-#define REGISTER_ARC_DEC_SIG(x) struct REGISTER_ARC_NAME(x) { \ +- REGISTER_ARC_NAME(x)() { g_ArcInfo.Signature[0]--; RegisterArc(&g_ArcInfo); }}; \ +- static REGISTER_ARC_NAME(x) g_RegisterArc; ++#define REGISTER_ARC(x) struct REGISTER_ARC_NAME(x) \ ++ { \ ++ REGISTER_ARC_NAME(x)() \ ++ { \ ++ std::call_once(g_ArcInfo.once, [] { RegisterArc(&g_ArcInfo); }); \ ++ } \ ++ }; \ ++ static REGISTER_ARC_NAME(x) g_RegisterArc; \ ++ void registerArc##x() { static REGISTER_ARC_NAME(x) g_RegisterArc; } ++ ++#define REGISTER_ARC_DEC_SIG(x) struct REGISTER_ARC_NAME(x) \ ++ { \ ++ REGISTER_ARC_NAME(x)() { \ ++ std::call_once(g_ArcInfo.once, [] { \ ++ g_ArcInfo.Signature[0]--; \ ++ RegisterArc(&g_ArcInfo); \ ++ }); \ ++ } \ ++ }; \ ++ static REGISTER_ARC_NAME(x) g_RegisterArc; \ ++ void registerArcDec##x() { static REGISTER_ARC_NAME(x) g_RegisterArc; } + + + #define IMP_CreateArcIn_2(c) \ +diff --git a/src/libs/7zip/win/CPP/7zip/Common/RegisterCodec.h b/src/libs/7zip/win/CPP/7zip/Common/RegisterCodec.h +index 4222a30..0c6662a 100644 +--- a/src/libs/7zip/win/CPP/7zip/Common/RegisterCodec.h ++++ b/src/libs/7zip/win/CPP/7zip/Common/RegisterCodec.h +@@ -6,6 +6,8 @@ + #include "../Common/MethodId.h" + #include "../ICoder.h" + ++#include ++ + typedef void * (*CreateCodecP)(); + struct CCodecInfo + { +@@ -15,21 +17,34 @@ struct CCodecInfo + const wchar_t *Name; + UInt32 NumInStreams; + bool IsFilter; ++ std::once_flag once; + }; + + void RegisterCodec(const CCodecInfo *codecInfo) throw(); + + #define REGISTER_CODEC_NAME(x) CRegisterCodec ## x + +-#define REGISTER_CODEC(x) struct REGISTER_CODEC_NAME(x) { \ +- REGISTER_CODEC_NAME(x)() { RegisterCodec(&g_CodecInfo); }}; \ +- static REGISTER_CODEC_NAME(x) g_RegisterCodec; ++#define REGISTER_CODEC(x) struct REGISTER_CODEC_NAME(x) \ ++ { \ ++ REGISTER_CODEC_NAME(x)() \ ++ { \ ++ std::call_once(g_CodecInfo.once, [] { RegisterCodec(&g_CodecInfo); }); \ ++ } \ ++ }; \ ++ static REGISTER_CODEC_NAME(x) g_RegisterCodec; \ ++ void registerCodec##x() { static REGISTER_CODEC_NAME(x) g_RegisterCodecs; } + + #define REGISTER_CODECS_NAME(x) CRegisterCodecs ## x +-#define REGISTER_CODECS(x) struct REGISTER_CODECS_NAME(x) { \ +- REGISTER_CODECS_NAME(x)() { for (unsigned i = 0; i < ARRAY_SIZE(g_CodecsInfo); i++) \ +- RegisterCodec(&g_CodecsInfo[i]); }}; \ +- static REGISTER_CODECS_NAME(x) g_RegisterCodecs; ++#define REGISTER_CODECS(x) struct REGISTER_CODECS_NAME(x) \ ++ { \ ++ REGISTER_CODECS_NAME(x)() \ ++ { \ ++ for (unsigned i = 0; i < ARRAY_SIZE(g_CodecsInfo); i++) \ ++ std::call_once(g_CodecsInfo[i].once, [&i] { RegisterCodec(&g_CodecsInfo[i]); }); \ ++ } \ ++ }; \ ++ static REGISTER_CODECS_NAME(x) g_RegisterCodecs; \ ++ void registerCodec##x() { static REGISTER_CODECS_NAME(x) g_RegisterCodecs; } + + + struct CHasherInfo +diff --git a/src/libs/7zip/win/CPP/7zip/UI/Common/Extract.cpp b/src/libs/7zip/win/CPP/7zip/UI/Common/Extract.cpp +index df86620..13d2ad2 100644 +--- a/src/libs/7zip/win/CPP/7zip/UI/Common/Extract.cpp ++++ b/src/libs/7zip/win/CPP/7zip/UI/Common/Extract.cpp +@@ -2,8 +2,6 @@ + + #include "StdAfx.h" + +-#include "../../../../C/Sort.h" +- + #include "../../../Common/StringConvert.h" + + #include "../../../Windows/FileDir.h" +-- +2.3.7.windows.1 + -- cgit v1.2.3