From 07e55e9a84e08d772badd227e284423538187c54 Mon Sep 17 00:00:00 2001 From: Daniel Holbert Date: Fri, 13 May 2011 13:25:09 -0700 Subject: [PATCH 001/282] Bug 656944: Remove 'todo' flags for unexpected passes in test_hunspell.js. r=khuey --- .../spellcheck/hunspell/tests/unit/test_hunspell.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/extensions/spellcheck/hunspell/tests/unit/test_hunspell.js b/extensions/spellcheck/hunspell/tests/unit/test_hunspell.js index fef0117e63b8..7543f45983ca 100644 --- a/extensions/spellcheck/hunspell/tests/unit/test_hunspell.js +++ b/extensions/spellcheck/hunspell/tests/unit/test_hunspell.js @@ -66,7 +66,7 @@ const tests = [ ["checkcompounddup", "iso-8859-1"], ["checkcompoundtriple", "iso-8859-1"], ["simplifiedtriple", "iso-8859-1"], - ["checkcompoundrep", "iso-8859-1", null, {2: "todo"}], + ["checkcompoundrep", "iso-8859-1"], ["checkcompoundcase2", "iso-8859-1"], ["checkcompoundcaseutf", "UTF-8"], ["checkcompoundpattern", "iso-8859-1"], @@ -111,16 +111,16 @@ const tests = [ ["korean", "UTF-8"], ["opentaal_forbiddenword1", "UTF-8"], ["opentaal_forbiddenword2", "UTF-8"], - ["opentaal_keepcase", "UTF-8", null, {7: "todo"}], + ["opentaal_keepcase", "UTF-8"], ["arabic", "UTF-8"], ["2970240", "iso-8859-1"], ["2970242", "iso-8859-1"], ["breakoff", "iso-8859-1"], ["opentaal_cpdpat", "iso-8859-1"], ["opentaal_cpdpat2", "iso-8859-1"], - ["2999225", "iso-8859-1", {1: "todo"}], - ["onlyincompound2", "iso-8859-1", null, {2: "todo"}], - ["forceucase", "iso-8859-1", null, {1: "todo"}], + ["2999225", "iso-8859-1"], + ["onlyincompound2", "iso-8859-1"], + ["forceucase", "iso-8859-1"], ["warn", "iso-8859-1"] ]; From 2aee8bfc79e35ebd3e6d8027013d77205fb5facf Mon Sep 17 00:00:00 2001 From: Daniel Holbert Date: Fri, 13 May 2011 13:25:31 -0700 Subject: [PATCH 002/282] Bug 656992: Use DebugOnly<> to fix 'unused variable' opt build warnings in NeckoMessageUtils.h. r=jduell --- netwerk/ipc/NeckoMessageUtils.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/netwerk/ipc/NeckoMessageUtils.h b/netwerk/ipc/NeckoMessageUtils.h index a483a3493509..8b3bbf7b4f8d 100644 --- a/netwerk/ipc/NeckoMessageUtils.h +++ b/netwerk/ipc/NeckoMessageUtils.h @@ -48,6 +48,7 @@ #include "nsNetUtil.h" #include "nsStringStream.h" #include "prio.h" +#include "mozilla/Util.h" // for DebugOnly namespace IPC { @@ -106,10 +107,7 @@ struct ParamTraits nsCOMPtr classInfo = do_QueryInterface(aParam.mURI); char cidStr[NSID_LENGTH]; nsCID cid; -#ifdef DEBUG - nsresult rv = -#endif - classInfo->GetClassIDNoAlloc(&cid); + mozilla::DebugOnly rv = classInfo->GetClassIDNoAlloc(&cid); NS_ABORT_IF_FALSE(NS_SUCCEEDED(rv), "All IPDL URIs must report a valid class ID"); cid.ToProvidedString(cidStr); @@ -216,7 +214,8 @@ struct ParamTraits aParam.mStream->Available(&bytes); if (bytes > 0) { - nsresult rv = NS_ReadInputStreamToString(aParam.mStream, streamString, bytes); + mozilla::DebugOnly rv = + NS_ReadInputStreamToString(aParam.mStream, streamString, bytes); NS_ABORT_IF_FALSE(NS_SUCCEEDED(rv), "Can't read input stream into a string!"); } @@ -227,7 +226,7 @@ struct ParamTraits nsCOMPtr classInfo = do_QueryInterface(aParam.mStream); char cidStr[NSID_LENGTH]; nsCID cid; - nsresult rv = classInfo->GetClassIDNoAlloc(&cid); + mozilla::DebugOnly rv = classInfo->GetClassIDNoAlloc(&cid); NS_ABORT_IF_FALSE(NS_SUCCEEDED(rv), "All IPDL streams must report a valid class ID"); cid.ToProvidedString(cidStr); From 702a955a9a72e2f851a13558327a95cde369ff6a Mon Sep 17 00:00:00 2001 From: Frank Yan Date: Tue, 10 May 2011 01:42:39 -0500 Subject: [PATCH 003/282] Bug 655797 - Recalculate whether to show close buttons after resizing tabs. r=dao --- browser/base/content/tabbrowser.xml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/browser/base/content/tabbrowser.xml b/browser/base/content/tabbrowser.xml index 8decfd4d8b6d..eb9c44aefb2e 100644 --- a/browser/base/content/tabbrowser.xml +++ b/browser/base/content/tabbrowser.xml @@ -3142,12 +3142,15 @@ Date: Thu, 12 May 2011 14:12:37 -0400 Subject: [PATCH 004/282] Bug 656629 - Change integrated Twitter search to mobile Twitter site. r=mfinkle --- mobile/locales/en-US/searchplugins/twitter.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mobile/locales/en-US/searchplugins/twitter.xml b/mobile/locales/en-US/searchplugins/twitter.xml index eefd46b0f21c..2609568cb3c5 100644 --- a/mobile/locales/en-US/searchplugins/twitter.xml +++ b/mobile/locales/en-US/searchplugins/twitter.xml @@ -1,9 +1,9 @@ Twitter data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADTppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDQuMi4yLWMwNjMgNTMuMzUyNjI0LCAyMDA4LzA3LzMwLTE4OjA1OjQxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOklwdGM0eG1wQ29yZT0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcENvcmUvMS4wL3htbG5zLyIKICAgeG1wUmlnaHRzOldlYlN0YXRlbWVudD0iIgogICBwaG90b3Nob3A6QXV0aG9yc1Bvc2l0aW9uPSIiPgogICA8ZGM6cmlnaHRzPgogICAgPHJkZjpBbHQ+CiAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ii8+CiAgICA8L3JkZjpBbHQ+CiAgIDwvZGM6cmlnaHRzPgogICA8ZGM6Y3JlYXRvcj4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkvPgogICAgPC9yZGY6U2VxPgogICA8L2RjOmNyZWF0b3I+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+dHdpdHRlci10LXNvbG88L3JkZjpsaT4KICAgIDwvcmRmOkFsdD4KICAgPC9kYzp0aXRsZT4KICAgPHhtcFJpZ2h0czpVc2FnZVRlcm1zPgogICAgPHJkZjpBbHQ+CiAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ii8+CiAgICA8L3JkZjpBbHQ+CiAgIDwveG1wUmlnaHRzOlVzYWdlVGVybXM+CiAgIDxJcHRjNHhtcENvcmU6Q3JlYXRvckNvbnRhY3RJbmZvCiAgICBJcHRjNHhtcENvcmU6Q2lBZHJFeHRhZHI9IiIKICAgIElwdGM0eG1wQ29yZTpDaUFkckNpdHk9IiIKICAgIElwdGM0eG1wQ29yZTpDaUFkclJlZ2lvbj0iIgogICAgSXB0YzR4bXBDb3JlOkNpQWRyUGNvZGU9IiIKICAgIElwdGM0eG1wQ29yZTpDaUFkckN0cnk9IiIKICAgIElwdGM0eG1wQ29yZTpDaVRlbFdvcms9IiIKICAgIElwdGM0eG1wQ29yZTpDaUVtYWlsV29yaz0iIgogICAgSXB0YzR4bXBDb3JlOkNpVXJsV29yaz0iIi8+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6sMuh4AAADGElEQVR42tRXT2jTYBT/0tR0Sek2RIvr/NMq66RTOj3sMD1UKuxg9SQep8gugruoh6nbaRfBo6CgF93NHqUgooIgKpYhLWKZ3aTVTZG6dd26Nm3WNn6vS/QjJjVtuooPHs3H95L36/v/KFEUkRoFnmXs+MeD2YmZIa7imGOh450p1ASi1ABg5QPeDrN/uIcN7LGZ+ttoipPvPmbKr6dm+VB0pfQcgwgbRgAASD7xdHngZiQ3yZcqOVGD4C6ULNwHWeX79bJSuf1aOHu1lnISBADF7+w0AsCsMIgHzC6bfEUQ0Y1IDr1fLVUvD7ab0Vi/FXUwFAKZ03stgRc/hJf4aqFRDygBOMHn8oFUDgTP49Nr6NagbUPYRoOsE8eMQ+XbizhGhHoBMGTAkcplSuTL6Guugrqtpur5iofzz62U3Uq58NL6AgaWwY/JWlljbsRsKf43AJ+DOeNT+f8jiEWFspj/nK1EIGswGNWsMaFNJLBmbyc9OHHYOu7bzpyE9G4pABLIxQPsJagtUoEz5oKJyJouOWXWQIZdns6+AS+2xAIQxJBJMkkZ5mypC8hMkjKMaXkM1KJNBwBx8M8AyEFIdlKpnRvLgvP7WOSy0TVl7KzpV7ECgqIEBQmqomEAoPzQNv2vgvJHyeIDaYZIGQZQDyWz5ci9GT6oNcD8n1kQ+lLULQstG3rBsKvtnFovULpAAH/JLdnF0dX2q6S36XU0+S6HArstuoIQvnfKaTkbTZfmMYgkGQdKAN++5ytxadBAx7oYlPjEqyoAEMDN7gXJD+lSVD74uxlkpamm9QJozfjHrRkD2DTxO7P8k6wgLsEZkI/u55rWC/QGYezxfDEoH452bUGjvVzrsgBbITqVKASlslmloV0MGuuzNuQOshdAgEOg60nDGA6W6yQIsMTdI+0bZZijG+oFMB9KQ6r2ZkQuKZh9M8ulV2ITCBYZWHrgu5qbkRaIh3P87dViZdGIcmmL+mOVo7S2Y8Wy6oWt6UIPO9S31ezdwZnc5P5QqwnJY7lWL9AFgADilmY6h3K00iDhb4vJTwEGANC+26MCs7qQAAAAAElFTkSuQmCC - + UTF-8 - http://search.twitter.com/ + http://mobile.twitter.com/searches From e6a161640a93b2a042b1631f899936eadef263cd Mon Sep 17 00:00:00 2001 From: Patrick McManus Date: Fri, 13 May 2011 13:28:30 -0700 Subject: [PATCH 005/282] bug 654201 - an idle persistent connection could be run with the wrong security callbacks r=honzab --- netwerk/protocol/http/nsHttpConnection.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/netwerk/protocol/http/nsHttpConnection.cpp b/netwerk/protocol/http/nsHttpConnection.cpp index 3769d7193073..76eadd72cf25 100644 --- a/netwerk/protocol/http/nsHttpConnection.cpp +++ b/netwerk/protocol/http/nsHttpConnection.cpp @@ -150,6 +150,18 @@ nsHttpConnection::Activate(nsAHttpTransaction *trans, PRUint8 caps) NS_ENSURE_ARG_POINTER(trans); NS_ENSURE_TRUE(!mTransaction, NS_ERROR_IN_PROGRESS); + // Update security callbacks + nsCOMPtr callbacks; + nsCOMPtr callbackTarget; + trans->GetSecurityCallbacks(getter_AddRefs(callbacks), + getter_AddRefs(callbackTarget)); + if (callbacks != mCallbacks) { + mCallbacks.swap(callbacks); + if (callbacks) + NS_ProxyRelease(mCallbackTarget, callbacks); + mCallbackTarget = callbackTarget; + } + // take ownership of the transaction mTransaction = trans; From dd10a26e8b019257ba4227dbf3d503fc225e80b5 Mon Sep 17 00:00:00 2001 From: Erik Vold Date: Fri, 13 May 2011 15:07:00 -0700 Subject: [PATCH 006/282] Bug 643341: Fix typo causing problems when an update check http request fails. r=dtownsend --- toolkit/mozapps/extensions/AddonUpdateChecker.jsm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/toolkit/mozapps/extensions/AddonUpdateChecker.jsm b/toolkit/mozapps/extensions/AddonUpdateChecker.jsm index 89e3e46f46cd..cc2e269282f2 100644 --- a/toolkit/mozapps/extensions/AddonUpdateChecker.jsm +++ b/toolkit/mozapps/extensions/AddonUpdateChecker.jsm @@ -533,7 +533,7 @@ UpdateParser.prototype = { this.timer = null; if (!Components.isSuccessCode(this.request.status)) { - WARN("Request failed: " + request.status); + WARN("Request failed: " + this.request.status); } else if (this.request.channel instanceof Ci.nsIHttpChannel) { try { From 23532cf3fb4f6444bf43364870d33106c1d5d0e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20H=C3=A4nel?= Date: Sat, 14 May 2011 12:11:37 +1200 Subject: [PATCH 007/282] Bug 643793 - Convert OpenGL scissor rects to world space in ContainerLayerOGL. r=joe --- gfx/layers/opengl/ContainerLayerOGL.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gfx/layers/opengl/ContainerLayerOGL.cpp b/gfx/layers/opengl/ContainerLayerOGL.cpp index 2d77443b77f1..0ceb0aeefa44 100644 --- a/gfx/layers/opengl/ContainerLayerOGL.cpp +++ b/gfx/layers/opengl/ContainerLayerOGL.cpp @@ -168,6 +168,8 @@ ContainerRender(Container* aContainer, nsIntPoint childOffset(aOffset); nsIntRect visibleRect = aContainer->GetEffectiveVisibleRegion().GetBounds(); + gfxMatrix worldTransform = aManager->GetWorldTransform(); + nsIntRect cachedScissor = aContainer->gl()->ScissorRect(); aContainer->gl()->PushScissorRect(); aContainer->mSupportsComponentAlphaChildren = PR_FALSE; @@ -235,7 +237,7 @@ ContainerRender(Container* aContainer, layerToRender->GetLayer()->CalculateScissorRect(needsFramebuffer, visibleRect, cachedScissor, - contTransform); + contTransform * worldTransform); if (scissorRect.IsEmpty()) { continue; From ea31e2b888baab3a3370e077cf1d3f08913b69d7 Mon Sep 17 00:00:00 2001 From: Nick Hurley Date: Fri, 13 May 2011 18:02:07 -0700 Subject: [PATCH 008/282] Bug 637339 - Improve error handling in HttpChannelChild. r=jduell --- netwerk/protocol/http/HttpBaseChannel.cpp | 23 ++++ netwerk/protocol/http/HttpBaseChannel.h | 93 ++++++++++++++++ netwerk/protocol/http/HttpChannelChild.cpp | 80 ++++++++------ netwerk/protocol/http/HttpChannelChild.h | 15 ++- netwerk/protocol/http/HttpChannelParent.cpp | 20 ++-- netwerk/protocol/http/PHttpChannel.ipdl | 2 +- netwerk/protocol/http/nsHttpChannel.cpp | 113 +++++--------------- netwerk/protocol/http/nsHttpChannel.h | 26 ++--- 8 files changed, 220 insertions(+), 152 deletions(-) diff --git a/netwerk/protocol/http/HttpBaseChannel.cpp b/netwerk/protocol/http/HttpBaseChannel.cpp index bdc278bb2c10..179491b9c1d7 100644 --- a/netwerk/protocol/http/HttpBaseChannel.cpp +++ b/netwerk/protocol/http/HttpBaseChannel.cpp @@ -78,6 +78,7 @@ HttpBaseChannel::HttpBaseChannel() , mChooseApplicationCache(PR_FALSE) , mLoadedFromApplicationCache(PR_FALSE) , mChannelIsForDownload(PR_FALSE) + , mSuspendCount(0) , mRedirectedCachekeys(nsnull) { LOG(("Creating HttpBaseChannel @%x\n", this)); @@ -1311,6 +1312,28 @@ HttpBaseChannel::GetEntityID(nsACString& aEntityID) // HttpBaseChannel helpers //----------------------------------------------------------------------------- +void +HttpBaseChannel::DoNotifyListener() +{ + // Make sure mIsPending is set to PR_FALSE. At this moment we are done from + // the point of view of our consumer and we have to report our self + // as not-pending. + if (mListener) { + mListener->OnStartRequest(this, mListenerContext); + mIsPending = PR_FALSE; + mListener->OnStopRequest(this, mListenerContext, mStatus); + mListener = 0; + mListenerContext = 0; + } else { + mIsPending = PR_FALSE; + } + // We have to make sure to drop the reference to the callbacks too + mCallbacks = nsnull; + mProgressSink = nsnull; + + DoNotifyListenerCleanup(); +} + void HttpBaseChannel::AddCookiesToRequest() { diff --git a/netwerk/protocol/http/HttpBaseChannel.h b/netwerk/protocol/http/HttpBaseChannel.h index 73a5ac43c3f5..85a2aff9c6be 100644 --- a/netwerk/protocol/http/HttpBaseChannel.h +++ b/netwerk/protocol/http/HttpBaseChannel.h @@ -60,6 +60,7 @@ #include "nsIApplicationCache.h" #include "nsIResumableChannel.h" #include "mozilla/net/NeckoCommon.h" +#include "nsThreadUtils.h" namespace mozilla { namespace net { @@ -204,7 +205,14 @@ public: const PRNetAddr& GetSelfAddr() { return mSelfAddr; } const PRNetAddr& GetPeerAddr() { return mPeerAddr; } +public: /* Necko internal use only... */ + protected: + + // Handle notifying listener, removing from loadgroup if request failed. + void DoNotifyListener(); + virtual void DoNotifyListenerCleanup() = 0; + nsresult ApplyContentConversions(); void AddCookiesToRequest(); @@ -269,10 +277,95 @@ protected: PRUint32 mLoadedFromApplicationCache : 1; PRUint32 mChannelIsForDownload : 1; + // Current suspension depth for this channel object + PRUint32 mSuspendCount; + nsTArray *mRedirectedCachekeys; }; +// Share some code while working around C++'s absurd inability to handle casting +// of member functions between base/derived types. +// - We want to store member function pointer to call at resume time, but one +// such function--HandleAsyncAbort--we want to share between the +// nsHttpChannel/HttpChannelChild. Can't define it in base class, because +// then we'd have to cast member function ptr between base/derived class +// types. Sigh... +template +class HttpAsyncAborter +{ +public: + HttpAsyncAborter(T *derived) : mThis(derived), mCallOnResume(0) {} + + // Aborts channel: calls OnStart/Stop with provided status, removes channel + // from loadGroup. + nsresult AsyncAbort(nsresult status); + + // Does most the actual work. + void HandleAsyncAbort(); + + // AsyncCall calls a member function asynchronously (via an event). + // retval isn't refcounted and is set only when event was successfully + // posted, the event is returned for the purpose of cancelling when needed + nsresult AsyncCall(void (T::*funcPtr)(), + nsRunnableMethod **retval = nsnull); +private: + T *mThis; + +protected: + // Function to be called at resume time + void (T::* mCallOnResume)(void); +}; + +template +nsresult HttpAsyncAborter::AsyncAbort(nsresult status) +{ + LOG(("HttpAsyncAborter::AsyncAbort [this=%p status=%x]\n", mThis, status)); + + mThis->mStatus = status; + mThis->mIsPending = PR_FALSE; + + // if this fails? Callers ignore our return value anyway.... + return AsyncCall(&T::HandleAsyncAbort); +} + +// Each subclass needs to define its own version of this (which just calls this +// base version), else we wind up casting base/derived member function ptrs +template +inline void HttpAsyncAborter::HandleAsyncAbort() +{ + NS_PRECONDITION(!mCallOnResume, "How did that happen?"); + + if (mThis->mSuspendCount) { + LOG(("Waiting until resume to do async notification [this=%p]\n", + mThis)); + mCallOnResume = &T::HandleAsyncAbort; + return; + } + + mThis->DoNotifyListener(); + + // finally remove ourselves from the load group. + if (mThis->mLoadGroup) + mThis->mLoadGroup->RemoveRequest(mThis, nsnull, mThis->mStatus); +} + +template +nsresult HttpAsyncAborter::AsyncCall(void (T::*funcPtr)(), + nsRunnableMethod **retval) +{ + nsresult rv; + + nsRefPtr > event = NS_NewRunnableMethod(mThis, funcPtr); + rv = NS_DispatchToCurrentThread(event); + if (NS_SUCCEEDED(rv) && retval) { + *retval = event; + } + + return rv; +} + + } // namespace net } // namespace mozilla diff --git a/netwerk/protocol/http/HttpChannelChild.cpp b/netwerk/protocol/http/HttpChannelChild.cpp index b90746e5fadd..0391f452835a 100644 --- a/netwerk/protocol/http/HttpChannelChild.cpp +++ b/netwerk/protocol/http/HttpChannelChild.cpp @@ -59,12 +59,12 @@ namespace net { //----------------------------------------------------------------------------- HttpChannelChild::HttpChannelChild() - : ChannelEventQueue(this) + : HttpAsyncAborter(this) + , ChannelEventQueue(this) , mIsFromCache(PR_FALSE) , mCacheEntryAvailable(PR_FALSE) , mCacheExpirationTime(nsICache::NO_EXPIRATION_TIME) , mSendResumeAt(false) - , mSuspendCount(0) , mIPCOpen(false) , mKeptAlive(false) { @@ -573,53 +573,53 @@ HttpChannelChild::OnStatus(const nsresult& status) } } -class CancelEvent : public ChannelEvent +class FailedAsyncOpenEvent : public ChannelEvent { public: - CancelEvent(HttpChannelChild* child, const nsresult& status) + FailedAsyncOpenEvent(HttpChannelChild* child, const nsresult& status) : mChild(child) , mStatus(status) {} - void Run() { mChild->OnCancel(mStatus); } + void Run() { mChild->FailedAsyncOpen(mStatus); } private: HttpChannelChild* mChild; nsresult mStatus; }; bool -HttpChannelChild::RecvCancelEarly(const nsresult& status) +HttpChannelChild::RecvFailedAsyncOpen(const nsresult& status) { if (ShouldEnqueue()) { - EnqueueEvent(new CancelEvent(this, status)); + EnqueueEvent(new FailedAsyncOpenEvent(this, status)); } else { - OnCancel(status); + FailedAsyncOpen(status); } return true; } +// We need to have an implementation of this function just so that we can keep +// all references to mCallOnResume of type HttpChannelChild: it's not OK in C++ +// to set a member function ptr to a base class function. void -HttpChannelChild::OnCancel(const nsresult& status) +HttpChannelChild::HandleAsyncAbort() { - LOG(("HttpChannelChild::OnCancel [this=%p status=%x]\n", this, status)); + HttpAsyncAborter::HandleAsyncAbort(); +} - if (mCanceled) - return; +void +HttpChannelChild::FailedAsyncOpen(const nsresult& status) +{ + LOG(("HttpChannelChild::FailedAsyncOpen [this=%p status=%x]\n", this, status)); - mCanceled = true; mStatus = status; + mIsPending = PR_FALSE; + // We're already being called from IPDL, therefore already "async" + HandleAsyncAbort(); +} - mIsPending = false; - if (mLoadGroup) - mLoadGroup->RemoveRequest(this, nsnull, mStatus); - - if (mListener) { - mListener->OnStartRequest(this, mListenerContext); - mListener->OnStopRequest(this, mListenerContext, mStatus); - } - - mListener = NULL; - mListenerContext = NULL; - +void +HttpChannelChild::DoNotifyListenerCleanup() +{ if (mIPCOpen) PHttpChannelChild::Send__delete__(this); } @@ -873,7 +873,10 @@ HttpChannelChild::OnRedirectVerifyCallback(nsresult result) if (NS_SUCCEEDED(result)) gHttpHandler->OnModifyRequest(newHttpChannel); - return SendRedirect2Verify(result, *headerTuples); + if (mIPCOpen) + SendRedirect2Verify(result, *headerTuples); + + return NS_OK; } //----------------------------------------------------------------------------- @@ -903,23 +906,37 @@ HttpChannelChild::Suspend() return NS_OK; } +void +HttpChannelChild::CompleteResume() +{ + if (mCallOnResume) { + (this->*mCallOnResume)(); + mCallOnResume = 0; + } + + FlushEventQueue(); +} + NS_IMETHODIMP HttpChannelChild::Resume() { NS_ENSURE_TRUE(mIPCOpen, NS_ERROR_NOT_AVAILABLE); NS_ENSURE_TRUE(mSuspendCount > 0, NS_ERROR_UNEXPECTED); + + nsresult rv = NS_OK; + SendResume(); mSuspendCount--; if (!mSuspendCount) { // If we were suspended outside of an event handler (bug 595972) we'll // consider ourselves unqueued. This is a legal state of affairs but // FlushEventQueue() can't easily ensure this fact, so we'll do some - // fudging to set the invariants correctly. + // fudging to set the invariants correctly. if (mQueuePhase == PHASE_UNQUEUED) mQueuePhase = PHASE_FINISHED_QUEUEING; - FlushEventQueue(); + rv = AsyncCall(&HttpChannelChild::CompleteResume); } - return NS_OK; + return rv; } //----------------------------------------------------------------------------- @@ -982,10 +999,7 @@ HttpChannelChild::AsyncOpen(nsIStreamListener *listener, nsISupports *aContext) // We may have been canceled already, either by on-modify-request // listeners or by load group observers; in that case, don't create IPDL // connection. See nsHttpChannel::AsyncOpen(). - - // Clear mCanceled here, or we will bail out at top of OnCancel(). - mCanceled = false; - OnCancel(mStatus); + AsyncAbort(mStatus); return NS_OK; } diff --git a/netwerk/protocol/http/HttpChannelChild.h b/netwerk/protocol/http/HttpChannelChild.h index 2155f83ffbdf..46e2e595c07b 100644 --- a/netwerk/protocol/http/HttpChannelChild.h +++ b/netwerk/protocol/http/HttpChannelChild.h @@ -69,6 +69,7 @@ namespace net { class HttpChannelChild : public PHttpChannelChild , public HttpBaseChannel + , public HttpAsyncAborter , public nsICacheInfoChannel , public nsIProxiedChannel , public nsITraceableChannel @@ -146,7 +147,7 @@ protected: bool RecvOnStopRequest(const nsresult& statusCode); bool RecvOnProgress(const PRUint64& progress, const PRUint64& progressMax); bool RecvOnStatus(const nsresult& status); - bool RecvCancelEarly(const nsresult& status); + bool RecvFailedAsyncOpen(const nsresult& status); bool RecvRedirect1Begin(const PRUint32& newChannel, const URI& newURI, const PRUint32& redirectFlags, @@ -157,6 +158,7 @@ protected: bool RecvDeleteSelf(); bool GetAssociatedContentSecurity(nsIAssociatedContentSecurity** res = nsnull); + virtual void DoNotifyListenerCleanup(); private: RequestHeaderTuples mRequestHeaders; @@ -171,8 +173,6 @@ private: // If ResumeAt is called before AsyncOpen, we need to send extra data upstream bool mSendResumeAt; - // Current suspension depth for this channel object - PRUint32 mSuspendCount; bool mIPCOpen; bool mKeptAlive; @@ -196,7 +196,8 @@ private: void OnStopRequest(const nsresult& statusCode); void OnProgress(const PRUint64& progress, const PRUint64& progressMax); void OnStatus(const nsresult& status); - void OnCancel(const nsresult& status); + void FailedAsyncOpen(const nsresult& status); + void HandleAsyncAbort(); void Redirect1Begin(const PRUint32& newChannelId, const URI& newUri, const PRUint32& redirectFlags, @@ -204,15 +205,19 @@ private: void Redirect3Complete(); void DeleteSelf(); + // Called asynchronously from Resume: continues any pending calls into client. + void CompleteResume(); + friend class StartRequestEvent; friend class StopRequestEvent; friend class TransportAndDataEvent; friend class ProgressEvent; friend class StatusEvent; - friend class CancelEvent; + friend class FailedAsyncOpenEvent; friend class Redirect1Event; friend class Redirect3Event; friend class DeleteSelfEvent; + friend class HttpAsyncAborter; }; //----------------------------------------------------------------------------- diff --git a/netwerk/protocol/http/HttpChannelParent.cpp b/netwerk/protocol/http/HttpChannelParent.cpp index b8736beb0523..2efa08a056b3 100644 --- a/netwerk/protocol/http/HttpChannelParent.cpp +++ b/netwerk/protocol/http/HttpChannelParent.cpp @@ -157,11 +157,11 @@ HttpChannelParent::RecvAsyncOpen(const IPC::URI& aURI, nsCOMPtr ios(do_GetIOService(&rv)); if (NS_FAILED(rv)) - return SendCancelEarly(rv); + return SendFailedAsyncOpen(rv); rv = NS_NewChannel(getter_AddRefs(mChannel), uri, ios, nsnull, nsnull, loadFlags); if (NS_FAILED(rv)) - return SendCancelEarly(rv); + return SendFailedAsyncOpen(rv); nsHttpChannel *httpChan = static_cast(mChannel.get()); @@ -239,7 +239,7 @@ HttpChannelParent::RecvAsyncOpen(const IPC::URI& aURI, rv = httpChan->AsyncOpen(channelListener, nsnull); if (NS_FAILED(rv)) - return SendCancelEarly(rv); + return SendFailedAsyncOpen(rv); return true; } @@ -259,8 +259,10 @@ HttpChannelParent::RecvConnectChannel(const PRUint32& channelId) bool HttpChannelParent::RecvSetPriority(const PRUint16& priority) { - nsHttpChannel *httpChan = static_cast(mChannel.get()); - httpChan->SetPriority(priority); + if (mChannel) { + nsHttpChannel *httpChan = static_cast(mChannel.get()); + httpChan->SetPriority(priority); + } nsCOMPtr priorityRedirectChannel = do_QueryInterface(mRedirectChannel); @@ -273,14 +275,18 @@ HttpChannelParent::RecvSetPriority(const PRUint16& priority) bool HttpChannelParent::RecvSuspend() { - mChannel->Suspend(); + if (mChannel) { + mChannel->Suspend(); + } return true; } bool HttpChannelParent::RecvResume() { - mChannel->Resume(); + if (mChannel) { + mChannel->Resume(); + } return true; } diff --git a/netwerk/protocol/http/PHttpChannel.ipdl b/netwerk/protocol/http/PHttpChannel.ipdl index b6b095d26677..70c79e315dff 100644 --- a/netwerk/protocol/http/PHttpChannel.ipdl +++ b/netwerk/protocol/http/PHttpChannel.ipdl @@ -154,7 +154,7 @@ child: // Used to cancel child channel if we hit errors during creating and // AsyncOpen of nsHttpChannel on the parent. - CancelEarly(nsresult status); + FailedAsyncOpen(nsresult status); // Called to initiate content channel redirect, starts talking to sinks // on the content process and reports result via Redirect2Verify above diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp index e12836598bcd..7ec0c8b50514 100644 --- a/netwerk/protocol/http/nsHttpChannel.cpp +++ b/netwerk/protocol/http/nsHttpChannel.cpp @@ -110,14 +110,13 @@ AutoRedirectVetoNotifier::ReportRedirectResult(bool succeeded) //----------------------------------------------------------------------------- nsHttpChannel::nsHttpChannel() - : mLogicalOffset(0) + : HttpAsyncAborter(this) + , mLogicalOffset(0) , mCacheAccess(0) , mPostID(0) , mRequestTime(0) , mOnCacheEntryAvailableCallback(nsnull) , mAsyncCacheOpen(PR_FALSE) - , mPendingAsyncCallOnResume(nsnull) - , mSuspendCount(0) , mCachedContentIsValid(PR_FALSE) , mCachedContentIsPartial(PR_FALSE) , mTransactionReplaced(PR_FALSE) @@ -171,22 +170,6 @@ nsHttpChannel::Init(nsIURI *uri, // nsHttpChannel //----------------------------------------------------------------------------- -nsresult -nsHttpChannel::AsyncCall(nsAsyncCallback funcPtr, - nsRunnableMethod **retval) -{ - nsresult rv; - - nsRefPtr > event = - NS_NewRunnableMethod(this, funcPtr); - rv = NS_DispatchToCurrentThread(event); - if (NS_SUCCEEDED(rv) && retval) { - *retval = event; - } - - return rv; -} - nsresult nsHttpChannel::Connect(PRBool firstTime) { @@ -331,60 +314,9 @@ nsHttpChannel::Connect(PRBool firstTime) return NS_OK; } -// called when Connect fails -nsresult -nsHttpChannel::AsyncAbort(nsresult status) -{ - LOG(("nsHttpChannel::AsyncAbort [this=%p status=%x]\n", this, status)); - - mStatus = status; - mIsPending = PR_FALSE; - - nsresult rv = AsyncCall(&nsHttpChannel::HandleAsyncNotifyListener); - // And if that fails? Callers ignore our return value anyway.... - - // finally remove ourselves from the load group. - if (mLoadGroup) - mLoadGroup->RemoveRequest(this, nsnull, status); - - return rv; -} - void -nsHttpChannel::HandleAsyncNotifyListener() +nsHttpChannel::DoNotifyListenerCleanup() { - NS_PRECONDITION(!mPendingAsyncCallOnResume, "How did that happen?"); - - if (mSuspendCount) { - LOG(("Waiting until resume to do async notification [this=%p]\n", - this)); - mPendingAsyncCallOnResume = &nsHttpChannel::HandleAsyncNotifyListener; - return; - } - - DoNotifyListener(); -} - -void -nsHttpChannel::DoNotifyListener() -{ - // Make sure mIsPending is set to PR_FALSE. At this moment we are done from - // the point of view of our consumer and we have to report our self - // as not-pending. - if (mListener) { - mListener->OnStartRequest(this, mListenerContext); - mIsPending = PR_FALSE; - mListener->OnStopRequest(this, mListenerContext, mStatus); - mListener = 0; - mListenerContext = 0; - } - else { - mIsPending = PR_FALSE; - } - // We have to make sure to drop the reference to the callbacks too - mCallbacks = nsnull; - mProgressSink = nsnull; - // We don't need this info anymore CleanRedirectCacheChainIfNecessary(); } @@ -392,11 +324,11 @@ nsHttpChannel::DoNotifyListener() void nsHttpChannel::HandleAsyncRedirect() { - NS_PRECONDITION(!mPendingAsyncCallOnResume, "How did that happen?"); + NS_PRECONDITION(!mCallOnResume, "How did that happen?"); if (mSuspendCount) { LOG(("Waiting until resume to do async redirect [this=%p]\n", this)); - mPendingAsyncCallOnResume = &nsHttpChannel::HandleAsyncRedirect; + mCallOnResume = &nsHttpChannel::HandleAsyncRedirect; return; } @@ -450,12 +382,12 @@ nsHttpChannel::ContinueHandleAsyncRedirect(nsresult rv) void nsHttpChannel::HandleAsyncNotModified() { - NS_PRECONDITION(!mPendingAsyncCallOnResume, "How did that happen?"); + NS_PRECONDITION(!mCallOnResume, "How did that happen?"); if (mSuspendCount) { LOG(("Waiting until resume to do async not-modified [this=%p]\n", this)); - mPendingAsyncCallOnResume = &nsHttpChannel::HandleAsyncNotModified; + mCallOnResume = &nsHttpChannel::HandleAsyncNotModified; return; } @@ -474,11 +406,11 @@ nsHttpChannel::HandleAsyncNotModified() void nsHttpChannel::HandleAsyncFallback() { - NS_PRECONDITION(!mPendingAsyncCallOnResume, "How did that happen?"); + NS_PRECONDITION(!mCallOnResume, "How did that happen?"); if (mSuspendCount) { LOG(("Waiting until resume to do async fallback [this=%p]\n", this)); - mPendingAsyncCallOnResume = &nsHttpChannel::HandleAsyncFallback; + mCallOnResume = &nsHttpChannel::HandleAsyncFallback; return; } @@ -1295,13 +1227,12 @@ nsHttpChannel::ProxyFailover() void nsHttpChannel::HandleAsyncReplaceWithProxy() { - NS_PRECONDITION(!mPendingAsyncCallOnResume, "How did that happen?"); + NS_PRECONDITION(!mCallOnResume, "How did that happen?"); if (mSuspendCount) { LOG(("Waiting until resume to do async proxy replacement [this=%p]\n", this)); - mPendingAsyncCallOnResume = - &nsHttpChannel::HandleAsyncReplaceWithProxy; + mCallOnResume = &nsHttpChannel::HandleAsyncReplaceWithProxy; return; } @@ -1329,7 +1260,7 @@ nsHttpChannel::ContinueHandleAsyncReplaceWithProxy(nsresult status) mLoadGroup->RemoveRequest(this, nsnull, mStatus); } else if (NS_FAILED(status)) { - AsyncAbort(status); + AsyncAbort(status); } // Return NS_OK here, even it seems to be breaking the async function stack @@ -1344,11 +1275,11 @@ nsHttpChannel::ContinueHandleAsyncReplaceWithProxy(nsresult status) void nsHttpChannel::HandleAsyncRedirectChannelToHttps() { - NS_PRECONDITION(!mPendingAsyncCallOnResume, "How did that happen?"); + NS_PRECONDITION(!mCallOnResume, "How did that happen?"); if (mSuspendCount) { LOG(("Waiting until resume to do async redirect to https [this=%p]\n", this)); - mPendingAsyncCallOnResume = &nsHttpChannel::HandleAsyncRedirectChannelToHttps; + mCallOnResume = &nsHttpChannel::HandleAsyncRedirectChannelToHttps; return; } @@ -1644,6 +1575,16 @@ nsHttpChannel::ResponseWouldVary() return PR_FALSE; } +// We need to have an implementation of this function just so that we can keep +// all references to mCallOnResume of type nsHttpChannel: it's not OK in C++ +// to set a member function ptr to a base class function. +void +nsHttpChannel::HandleAsyncAbort() +{ + HttpAsyncAborter::HandleAsyncAbort(); +} + + nsresult nsHttpChannel::Hash(const char *buf, nsACString &hash) { @@ -3591,9 +3532,9 @@ nsHttpChannel::Resume() LOG(("nsHttpChannel::Resume [this=%p]\n", this)); - if (--mSuspendCount == 0 && mPendingAsyncCallOnResume) { - nsresult rv = AsyncCall(mPendingAsyncCallOnResume); - mPendingAsyncCallOnResume = nsnull; + if (--mSuspendCount == 0 && mCallOnResume) { + nsresult rv = AsyncCall(mCallOnResume); + mCallOnResume = nsnull; NS_ENSURE_SUCCESS(rv, rv); } diff --git a/netwerk/protocol/http/nsHttpChannel.h b/netwerk/protocol/http/nsHttpChannel.h index fcf013bfe0b7..8699c7d82cc1 100644 --- a/netwerk/protocol/http/nsHttpChannel.h +++ b/netwerk/protocol/http/nsHttpChannel.h @@ -75,6 +75,7 @@ using namespace mozilla::net; //----------------------------------------------------------------------------- class nsHttpChannel : public HttpBaseChannel + , public HttpAsyncAborter , public nsIStreamListener , public nsICachingChannel , public nsICacheListener @@ -143,7 +144,6 @@ public: NS_IMETHOD ResumeAt(PRUint64 startPos, const nsACString& entityID); public: /* internal necko use only */ - typedef void (nsHttpChannel:: *nsAsyncCallback)(void); void InternalSetUploadStream(nsIInputStream *uploadStream) { mUploadStream = uploadStream; } @@ -162,18 +162,8 @@ public: /* internal necko use only */ private: typedef nsresult (nsHttpChannel::*nsContinueRedirectionFunc)(nsresult result); - // AsyncCall may be used to call a member function asynchronously. - // retval isn't refcounted and is set only when event was successfully - // posted, the event is returned for the purpose of cancelling when needed - nsresult AsyncCall(nsAsyncCallback funcPtr, - nsRunnableMethod **retval = nsnull); - PRBool RequestIsConditional(); nsresult Connect(PRBool firstTime = PR_TRUE); - nsresult AsyncAbort(nsresult status); - // Send OnStartRequest/OnStopRequest to our listener, if any. - void HandleAsyncNotifyListener(); - void DoNotifyListener(); nsresult SetupTransaction(); nsresult CallOnStartRequest(); nsresult ProcessResponse(); @@ -189,6 +179,7 @@ private: nsresult ProcessFallback(PRBool *waitingForRedirectCallback); nsresult ContinueProcessFallback(nsresult); PRBool ResponseWouldVary(); + void HandleAsyncAbort(); nsresult ContinueOnStartRequest1(nsresult); nsresult ContinueOnStartRequest2(nsresult); @@ -300,24 +291,16 @@ private: // auth specific data nsCOMPtr mAuthProvider; - // Function pointer that can be set to indicate that we got suspended while - // waiting on an AsyncCall. When we get resumed we should AsyncCall this - // function. - nsAsyncCallback mPendingAsyncCallOnResume; - // Proxy info to replace with nsCOMPtr mTargetProxyInfo; - // Suspend counter. This is used if someone tries to suspend/resume us - // before we have either a cache pump or a transaction pump. - PRUint32 mSuspendCount; - // If the channel is associated with a cache, and the URI matched // a fallback namespace, this will hold the key for the fallback // cache entry. nsCString mFallbackKey; friend class AutoRedirectVetoNotifier; + friend class HttpAsyncAborter; nsCOMPtr mRedirectURI; nsCOMPtr mRedirectChannel; PRUint32 mRedirectType; @@ -354,6 +337,9 @@ private: nsresult WaitForRedirectCallback(); void PushRedirectAsyncFunc(nsContinueRedirectionFunc func); void PopRedirectAsyncFunc(nsContinueRedirectionFunc func); + +protected: + virtual void DoNotifyListenerCleanup(); }; #endif // nsHttpChannel_h__ From f32aa6957befb3a477e270a80dc4e12100f1d70c Mon Sep 17 00:00:00 2001 From: Phil Ringnalda Date: Fri, 13 May 2011 20:48:38 -0700 Subject: [PATCH 009/282] Back out 93604789da99 (bug 637339) on suspicion of causing timeouts in Linux debug test_httpsuspend_wrap.js CLOSED TREE --- netwerk/protocol/http/HttpBaseChannel.cpp | 23 ---- netwerk/protocol/http/HttpBaseChannel.h | 93 ---------------- netwerk/protocol/http/HttpChannelChild.cpp | 80 ++++++-------- netwerk/protocol/http/HttpChannelChild.h | 15 +-- netwerk/protocol/http/HttpChannelParent.cpp | 20 ++-- netwerk/protocol/http/PHttpChannel.ipdl | 2 +- netwerk/protocol/http/nsHttpChannel.cpp | 115 +++++++++++++++----- netwerk/protocol/http/nsHttpChannel.h | 26 ++++- 8 files changed, 153 insertions(+), 221 deletions(-) diff --git a/netwerk/protocol/http/HttpBaseChannel.cpp b/netwerk/protocol/http/HttpBaseChannel.cpp index 179491b9c1d7..bdc278bb2c10 100644 --- a/netwerk/protocol/http/HttpBaseChannel.cpp +++ b/netwerk/protocol/http/HttpBaseChannel.cpp @@ -78,7 +78,6 @@ HttpBaseChannel::HttpBaseChannel() , mChooseApplicationCache(PR_FALSE) , mLoadedFromApplicationCache(PR_FALSE) , mChannelIsForDownload(PR_FALSE) - , mSuspendCount(0) , mRedirectedCachekeys(nsnull) { LOG(("Creating HttpBaseChannel @%x\n", this)); @@ -1312,28 +1311,6 @@ HttpBaseChannel::GetEntityID(nsACString& aEntityID) // HttpBaseChannel helpers //----------------------------------------------------------------------------- -void -HttpBaseChannel::DoNotifyListener() -{ - // Make sure mIsPending is set to PR_FALSE. At this moment we are done from - // the point of view of our consumer and we have to report our self - // as not-pending. - if (mListener) { - mListener->OnStartRequest(this, mListenerContext); - mIsPending = PR_FALSE; - mListener->OnStopRequest(this, mListenerContext, mStatus); - mListener = 0; - mListenerContext = 0; - } else { - mIsPending = PR_FALSE; - } - // We have to make sure to drop the reference to the callbacks too - mCallbacks = nsnull; - mProgressSink = nsnull; - - DoNotifyListenerCleanup(); -} - void HttpBaseChannel::AddCookiesToRequest() { diff --git a/netwerk/protocol/http/HttpBaseChannel.h b/netwerk/protocol/http/HttpBaseChannel.h index 85a2aff9c6be..73a5ac43c3f5 100644 --- a/netwerk/protocol/http/HttpBaseChannel.h +++ b/netwerk/protocol/http/HttpBaseChannel.h @@ -60,7 +60,6 @@ #include "nsIApplicationCache.h" #include "nsIResumableChannel.h" #include "mozilla/net/NeckoCommon.h" -#include "nsThreadUtils.h" namespace mozilla { namespace net { @@ -205,14 +204,7 @@ public: const PRNetAddr& GetSelfAddr() { return mSelfAddr; } const PRNetAddr& GetPeerAddr() { return mPeerAddr; } -public: /* Necko internal use only... */ - protected: - - // Handle notifying listener, removing from loadgroup if request failed. - void DoNotifyListener(); - virtual void DoNotifyListenerCleanup() = 0; - nsresult ApplyContentConversions(); void AddCookiesToRequest(); @@ -277,95 +269,10 @@ protected: PRUint32 mLoadedFromApplicationCache : 1; PRUint32 mChannelIsForDownload : 1; - // Current suspension depth for this channel object - PRUint32 mSuspendCount; - nsTArray *mRedirectedCachekeys; }; -// Share some code while working around C++'s absurd inability to handle casting -// of member functions between base/derived types. -// - We want to store member function pointer to call at resume time, but one -// such function--HandleAsyncAbort--we want to share between the -// nsHttpChannel/HttpChannelChild. Can't define it in base class, because -// then we'd have to cast member function ptr between base/derived class -// types. Sigh... -template -class HttpAsyncAborter -{ -public: - HttpAsyncAborter(T *derived) : mThis(derived), mCallOnResume(0) {} - - // Aborts channel: calls OnStart/Stop with provided status, removes channel - // from loadGroup. - nsresult AsyncAbort(nsresult status); - - // Does most the actual work. - void HandleAsyncAbort(); - - // AsyncCall calls a member function asynchronously (via an event). - // retval isn't refcounted and is set only when event was successfully - // posted, the event is returned for the purpose of cancelling when needed - nsresult AsyncCall(void (T::*funcPtr)(), - nsRunnableMethod **retval = nsnull); -private: - T *mThis; - -protected: - // Function to be called at resume time - void (T::* mCallOnResume)(void); -}; - -template -nsresult HttpAsyncAborter::AsyncAbort(nsresult status) -{ - LOG(("HttpAsyncAborter::AsyncAbort [this=%p status=%x]\n", mThis, status)); - - mThis->mStatus = status; - mThis->mIsPending = PR_FALSE; - - // if this fails? Callers ignore our return value anyway.... - return AsyncCall(&T::HandleAsyncAbort); -} - -// Each subclass needs to define its own version of this (which just calls this -// base version), else we wind up casting base/derived member function ptrs -template -inline void HttpAsyncAborter::HandleAsyncAbort() -{ - NS_PRECONDITION(!mCallOnResume, "How did that happen?"); - - if (mThis->mSuspendCount) { - LOG(("Waiting until resume to do async notification [this=%p]\n", - mThis)); - mCallOnResume = &T::HandleAsyncAbort; - return; - } - - mThis->DoNotifyListener(); - - // finally remove ourselves from the load group. - if (mThis->mLoadGroup) - mThis->mLoadGroup->RemoveRequest(mThis, nsnull, mThis->mStatus); -} - -template -nsresult HttpAsyncAborter::AsyncCall(void (T::*funcPtr)(), - nsRunnableMethod **retval) -{ - nsresult rv; - - nsRefPtr > event = NS_NewRunnableMethod(mThis, funcPtr); - rv = NS_DispatchToCurrentThread(event); - if (NS_SUCCEEDED(rv) && retval) { - *retval = event; - } - - return rv; -} - - } // namespace net } // namespace mozilla diff --git a/netwerk/protocol/http/HttpChannelChild.cpp b/netwerk/protocol/http/HttpChannelChild.cpp index 0391f452835a..b90746e5fadd 100644 --- a/netwerk/protocol/http/HttpChannelChild.cpp +++ b/netwerk/protocol/http/HttpChannelChild.cpp @@ -59,12 +59,12 @@ namespace net { //----------------------------------------------------------------------------- HttpChannelChild::HttpChannelChild() - : HttpAsyncAborter(this) - , ChannelEventQueue(this) + : ChannelEventQueue(this) , mIsFromCache(PR_FALSE) , mCacheEntryAvailable(PR_FALSE) , mCacheExpirationTime(nsICache::NO_EXPIRATION_TIME) , mSendResumeAt(false) + , mSuspendCount(0) , mIPCOpen(false) , mKeptAlive(false) { @@ -573,53 +573,53 @@ HttpChannelChild::OnStatus(const nsresult& status) } } -class FailedAsyncOpenEvent : public ChannelEvent +class CancelEvent : public ChannelEvent { public: - FailedAsyncOpenEvent(HttpChannelChild* child, const nsresult& status) + CancelEvent(HttpChannelChild* child, const nsresult& status) : mChild(child) , mStatus(status) {} - void Run() { mChild->FailedAsyncOpen(mStatus); } + void Run() { mChild->OnCancel(mStatus); } private: HttpChannelChild* mChild; nsresult mStatus; }; bool -HttpChannelChild::RecvFailedAsyncOpen(const nsresult& status) +HttpChannelChild::RecvCancelEarly(const nsresult& status) { if (ShouldEnqueue()) { - EnqueueEvent(new FailedAsyncOpenEvent(this, status)); + EnqueueEvent(new CancelEvent(this, status)); } else { - FailedAsyncOpen(status); + OnCancel(status); } return true; } -// We need to have an implementation of this function just so that we can keep -// all references to mCallOnResume of type HttpChannelChild: it's not OK in C++ -// to set a member function ptr to a base class function. void -HttpChannelChild::HandleAsyncAbort() +HttpChannelChild::OnCancel(const nsresult& status) { - HttpAsyncAborter::HandleAsyncAbort(); -} + LOG(("HttpChannelChild::OnCancel [this=%p status=%x]\n", this, status)); -void -HttpChannelChild::FailedAsyncOpen(const nsresult& status) -{ - LOG(("HttpChannelChild::FailedAsyncOpen [this=%p status=%x]\n", this, status)); + if (mCanceled) + return; + mCanceled = true; mStatus = status; - mIsPending = PR_FALSE; - // We're already being called from IPDL, therefore already "async" - HandleAsyncAbort(); -} -void -HttpChannelChild::DoNotifyListenerCleanup() -{ + mIsPending = false; + if (mLoadGroup) + mLoadGroup->RemoveRequest(this, nsnull, mStatus); + + if (mListener) { + mListener->OnStartRequest(this, mListenerContext); + mListener->OnStopRequest(this, mListenerContext, mStatus); + } + + mListener = NULL; + mListenerContext = NULL; + if (mIPCOpen) PHttpChannelChild::Send__delete__(this); } @@ -873,10 +873,7 @@ HttpChannelChild::OnRedirectVerifyCallback(nsresult result) if (NS_SUCCEEDED(result)) gHttpHandler->OnModifyRequest(newHttpChannel); - if (mIPCOpen) - SendRedirect2Verify(result, *headerTuples); - - return NS_OK; + return SendRedirect2Verify(result, *headerTuples); } //----------------------------------------------------------------------------- @@ -906,37 +903,23 @@ HttpChannelChild::Suspend() return NS_OK; } -void -HttpChannelChild::CompleteResume() -{ - if (mCallOnResume) { - (this->*mCallOnResume)(); - mCallOnResume = 0; - } - - FlushEventQueue(); -} - NS_IMETHODIMP HttpChannelChild::Resume() { NS_ENSURE_TRUE(mIPCOpen, NS_ERROR_NOT_AVAILABLE); NS_ENSURE_TRUE(mSuspendCount > 0, NS_ERROR_UNEXPECTED); - - nsresult rv = NS_OK; - SendResume(); mSuspendCount--; if (!mSuspendCount) { // If we were suspended outside of an event handler (bug 595972) we'll // consider ourselves unqueued. This is a legal state of affairs but // FlushEventQueue() can't easily ensure this fact, so we'll do some - // fudging to set the invariants correctly. + // fudging to set the invariants correctly. if (mQueuePhase == PHASE_UNQUEUED) mQueuePhase = PHASE_FINISHED_QUEUEING; - rv = AsyncCall(&HttpChannelChild::CompleteResume); + FlushEventQueue(); } - return rv; + return NS_OK; } //----------------------------------------------------------------------------- @@ -999,7 +982,10 @@ HttpChannelChild::AsyncOpen(nsIStreamListener *listener, nsISupports *aContext) // We may have been canceled already, either by on-modify-request // listeners or by load group observers; in that case, don't create IPDL // connection. See nsHttpChannel::AsyncOpen(). - AsyncAbort(mStatus); + + // Clear mCanceled here, or we will bail out at top of OnCancel(). + mCanceled = false; + OnCancel(mStatus); return NS_OK; } diff --git a/netwerk/protocol/http/HttpChannelChild.h b/netwerk/protocol/http/HttpChannelChild.h index 46e2e595c07b..2155f83ffbdf 100644 --- a/netwerk/protocol/http/HttpChannelChild.h +++ b/netwerk/protocol/http/HttpChannelChild.h @@ -69,7 +69,6 @@ namespace net { class HttpChannelChild : public PHttpChannelChild , public HttpBaseChannel - , public HttpAsyncAborter , public nsICacheInfoChannel , public nsIProxiedChannel , public nsITraceableChannel @@ -147,7 +146,7 @@ protected: bool RecvOnStopRequest(const nsresult& statusCode); bool RecvOnProgress(const PRUint64& progress, const PRUint64& progressMax); bool RecvOnStatus(const nsresult& status); - bool RecvFailedAsyncOpen(const nsresult& status); + bool RecvCancelEarly(const nsresult& status); bool RecvRedirect1Begin(const PRUint32& newChannel, const URI& newURI, const PRUint32& redirectFlags, @@ -158,7 +157,6 @@ protected: bool RecvDeleteSelf(); bool GetAssociatedContentSecurity(nsIAssociatedContentSecurity** res = nsnull); - virtual void DoNotifyListenerCleanup(); private: RequestHeaderTuples mRequestHeaders; @@ -173,6 +171,8 @@ private: // If ResumeAt is called before AsyncOpen, we need to send extra data upstream bool mSendResumeAt; + // Current suspension depth for this channel object + PRUint32 mSuspendCount; bool mIPCOpen; bool mKeptAlive; @@ -196,8 +196,7 @@ private: void OnStopRequest(const nsresult& statusCode); void OnProgress(const PRUint64& progress, const PRUint64& progressMax); void OnStatus(const nsresult& status); - void FailedAsyncOpen(const nsresult& status); - void HandleAsyncAbort(); + void OnCancel(const nsresult& status); void Redirect1Begin(const PRUint32& newChannelId, const URI& newUri, const PRUint32& redirectFlags, @@ -205,19 +204,15 @@ private: void Redirect3Complete(); void DeleteSelf(); - // Called asynchronously from Resume: continues any pending calls into client. - void CompleteResume(); - friend class StartRequestEvent; friend class StopRequestEvent; friend class TransportAndDataEvent; friend class ProgressEvent; friend class StatusEvent; - friend class FailedAsyncOpenEvent; + friend class CancelEvent; friend class Redirect1Event; friend class Redirect3Event; friend class DeleteSelfEvent; - friend class HttpAsyncAborter; }; //----------------------------------------------------------------------------- diff --git a/netwerk/protocol/http/HttpChannelParent.cpp b/netwerk/protocol/http/HttpChannelParent.cpp index 2efa08a056b3..b8736beb0523 100644 --- a/netwerk/protocol/http/HttpChannelParent.cpp +++ b/netwerk/protocol/http/HttpChannelParent.cpp @@ -157,11 +157,11 @@ HttpChannelParent::RecvAsyncOpen(const IPC::URI& aURI, nsCOMPtr ios(do_GetIOService(&rv)); if (NS_FAILED(rv)) - return SendFailedAsyncOpen(rv); + return SendCancelEarly(rv); rv = NS_NewChannel(getter_AddRefs(mChannel), uri, ios, nsnull, nsnull, loadFlags); if (NS_FAILED(rv)) - return SendFailedAsyncOpen(rv); + return SendCancelEarly(rv); nsHttpChannel *httpChan = static_cast(mChannel.get()); @@ -239,7 +239,7 @@ HttpChannelParent::RecvAsyncOpen(const IPC::URI& aURI, rv = httpChan->AsyncOpen(channelListener, nsnull); if (NS_FAILED(rv)) - return SendFailedAsyncOpen(rv); + return SendCancelEarly(rv); return true; } @@ -259,10 +259,8 @@ HttpChannelParent::RecvConnectChannel(const PRUint32& channelId) bool HttpChannelParent::RecvSetPriority(const PRUint16& priority) { - if (mChannel) { - nsHttpChannel *httpChan = static_cast(mChannel.get()); - httpChan->SetPriority(priority); - } + nsHttpChannel *httpChan = static_cast(mChannel.get()); + httpChan->SetPriority(priority); nsCOMPtr priorityRedirectChannel = do_QueryInterface(mRedirectChannel); @@ -275,18 +273,14 @@ HttpChannelParent::RecvSetPriority(const PRUint16& priority) bool HttpChannelParent::RecvSuspend() { - if (mChannel) { - mChannel->Suspend(); - } + mChannel->Suspend(); return true; } bool HttpChannelParent::RecvResume() { - if (mChannel) { - mChannel->Resume(); - } + mChannel->Resume(); return true; } diff --git a/netwerk/protocol/http/PHttpChannel.ipdl b/netwerk/protocol/http/PHttpChannel.ipdl index 70c79e315dff..b6b095d26677 100644 --- a/netwerk/protocol/http/PHttpChannel.ipdl +++ b/netwerk/protocol/http/PHttpChannel.ipdl @@ -154,7 +154,7 @@ child: // Used to cancel child channel if we hit errors during creating and // AsyncOpen of nsHttpChannel on the parent. - FailedAsyncOpen(nsresult status); + CancelEarly(nsresult status); // Called to initiate content channel redirect, starts talking to sinks // on the content process and reports result via Redirect2Verify above diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp index 7ec0c8b50514..e12836598bcd 100644 --- a/netwerk/protocol/http/nsHttpChannel.cpp +++ b/netwerk/protocol/http/nsHttpChannel.cpp @@ -110,13 +110,14 @@ AutoRedirectVetoNotifier::ReportRedirectResult(bool succeeded) //----------------------------------------------------------------------------- nsHttpChannel::nsHttpChannel() - : HttpAsyncAborter(this) - , mLogicalOffset(0) + : mLogicalOffset(0) , mCacheAccess(0) , mPostID(0) , mRequestTime(0) , mOnCacheEntryAvailableCallback(nsnull) , mAsyncCacheOpen(PR_FALSE) + , mPendingAsyncCallOnResume(nsnull) + , mSuspendCount(0) , mCachedContentIsValid(PR_FALSE) , mCachedContentIsPartial(PR_FALSE) , mTransactionReplaced(PR_FALSE) @@ -170,6 +171,22 @@ nsHttpChannel::Init(nsIURI *uri, // nsHttpChannel //----------------------------------------------------------------------------- +nsresult +nsHttpChannel::AsyncCall(nsAsyncCallback funcPtr, + nsRunnableMethod **retval) +{ + nsresult rv; + + nsRefPtr > event = + NS_NewRunnableMethod(this, funcPtr); + rv = NS_DispatchToCurrentThread(event); + if (NS_SUCCEEDED(rv) && retval) { + *retval = event; + } + + return rv; +} + nsresult nsHttpChannel::Connect(PRBool firstTime) { @@ -314,9 +331,60 @@ nsHttpChannel::Connect(PRBool firstTime) return NS_OK; } -void -nsHttpChannel::DoNotifyListenerCleanup() +// called when Connect fails +nsresult +nsHttpChannel::AsyncAbort(nsresult status) { + LOG(("nsHttpChannel::AsyncAbort [this=%p status=%x]\n", this, status)); + + mStatus = status; + mIsPending = PR_FALSE; + + nsresult rv = AsyncCall(&nsHttpChannel::HandleAsyncNotifyListener); + // And if that fails? Callers ignore our return value anyway.... + + // finally remove ourselves from the load group. + if (mLoadGroup) + mLoadGroup->RemoveRequest(this, nsnull, status); + + return rv; +} + +void +nsHttpChannel::HandleAsyncNotifyListener() +{ + NS_PRECONDITION(!mPendingAsyncCallOnResume, "How did that happen?"); + + if (mSuspendCount) { + LOG(("Waiting until resume to do async notification [this=%p]\n", + this)); + mPendingAsyncCallOnResume = &nsHttpChannel::HandleAsyncNotifyListener; + return; + } + + DoNotifyListener(); +} + +void +nsHttpChannel::DoNotifyListener() +{ + // Make sure mIsPending is set to PR_FALSE. At this moment we are done from + // the point of view of our consumer and we have to report our self + // as not-pending. + if (mListener) { + mListener->OnStartRequest(this, mListenerContext); + mIsPending = PR_FALSE; + mListener->OnStopRequest(this, mListenerContext, mStatus); + mListener = 0; + mListenerContext = 0; + } + else { + mIsPending = PR_FALSE; + } + // We have to make sure to drop the reference to the callbacks too + mCallbacks = nsnull; + mProgressSink = nsnull; + // We don't need this info anymore CleanRedirectCacheChainIfNecessary(); } @@ -324,11 +392,11 @@ nsHttpChannel::DoNotifyListenerCleanup() void nsHttpChannel::HandleAsyncRedirect() { - NS_PRECONDITION(!mCallOnResume, "How did that happen?"); + NS_PRECONDITION(!mPendingAsyncCallOnResume, "How did that happen?"); if (mSuspendCount) { LOG(("Waiting until resume to do async redirect [this=%p]\n", this)); - mCallOnResume = &nsHttpChannel::HandleAsyncRedirect; + mPendingAsyncCallOnResume = &nsHttpChannel::HandleAsyncRedirect; return; } @@ -382,12 +450,12 @@ nsHttpChannel::ContinueHandleAsyncRedirect(nsresult rv) void nsHttpChannel::HandleAsyncNotModified() { - NS_PRECONDITION(!mCallOnResume, "How did that happen?"); + NS_PRECONDITION(!mPendingAsyncCallOnResume, "How did that happen?"); if (mSuspendCount) { LOG(("Waiting until resume to do async not-modified [this=%p]\n", this)); - mCallOnResume = &nsHttpChannel::HandleAsyncNotModified; + mPendingAsyncCallOnResume = &nsHttpChannel::HandleAsyncNotModified; return; } @@ -406,11 +474,11 @@ nsHttpChannel::HandleAsyncNotModified() void nsHttpChannel::HandleAsyncFallback() { - NS_PRECONDITION(!mCallOnResume, "How did that happen?"); + NS_PRECONDITION(!mPendingAsyncCallOnResume, "How did that happen?"); if (mSuspendCount) { LOG(("Waiting until resume to do async fallback [this=%p]\n", this)); - mCallOnResume = &nsHttpChannel::HandleAsyncFallback; + mPendingAsyncCallOnResume = &nsHttpChannel::HandleAsyncFallback; return; } @@ -1227,12 +1295,13 @@ nsHttpChannel::ProxyFailover() void nsHttpChannel::HandleAsyncReplaceWithProxy() { - NS_PRECONDITION(!mCallOnResume, "How did that happen?"); + NS_PRECONDITION(!mPendingAsyncCallOnResume, "How did that happen?"); if (mSuspendCount) { LOG(("Waiting until resume to do async proxy replacement [this=%p]\n", this)); - mCallOnResume = &nsHttpChannel::HandleAsyncReplaceWithProxy; + mPendingAsyncCallOnResume = + &nsHttpChannel::HandleAsyncReplaceWithProxy; return; } @@ -1260,7 +1329,7 @@ nsHttpChannel::ContinueHandleAsyncReplaceWithProxy(nsresult status) mLoadGroup->RemoveRequest(this, nsnull, mStatus); } else if (NS_FAILED(status)) { - AsyncAbort(status); + AsyncAbort(status); } // Return NS_OK here, even it seems to be breaking the async function stack @@ -1275,11 +1344,11 @@ nsHttpChannel::ContinueHandleAsyncReplaceWithProxy(nsresult status) void nsHttpChannel::HandleAsyncRedirectChannelToHttps() { - NS_PRECONDITION(!mCallOnResume, "How did that happen?"); + NS_PRECONDITION(!mPendingAsyncCallOnResume, "How did that happen?"); if (mSuspendCount) { LOG(("Waiting until resume to do async redirect to https [this=%p]\n", this)); - mCallOnResume = &nsHttpChannel::HandleAsyncRedirectChannelToHttps; + mPendingAsyncCallOnResume = &nsHttpChannel::HandleAsyncRedirectChannelToHttps; return; } @@ -1575,16 +1644,6 @@ nsHttpChannel::ResponseWouldVary() return PR_FALSE; } -// We need to have an implementation of this function just so that we can keep -// all references to mCallOnResume of type nsHttpChannel: it's not OK in C++ -// to set a member function ptr to a base class function. -void -nsHttpChannel::HandleAsyncAbort() -{ - HttpAsyncAborter::HandleAsyncAbort(); -} - - nsresult nsHttpChannel::Hash(const char *buf, nsACString &hash) { @@ -3532,9 +3591,9 @@ nsHttpChannel::Resume() LOG(("nsHttpChannel::Resume [this=%p]\n", this)); - if (--mSuspendCount == 0 && mCallOnResume) { - nsresult rv = AsyncCall(mCallOnResume); - mCallOnResume = nsnull; + if (--mSuspendCount == 0 && mPendingAsyncCallOnResume) { + nsresult rv = AsyncCall(mPendingAsyncCallOnResume); + mPendingAsyncCallOnResume = nsnull; NS_ENSURE_SUCCESS(rv, rv); } diff --git a/netwerk/protocol/http/nsHttpChannel.h b/netwerk/protocol/http/nsHttpChannel.h index 8699c7d82cc1..fcf013bfe0b7 100644 --- a/netwerk/protocol/http/nsHttpChannel.h +++ b/netwerk/protocol/http/nsHttpChannel.h @@ -75,7 +75,6 @@ using namespace mozilla::net; //----------------------------------------------------------------------------- class nsHttpChannel : public HttpBaseChannel - , public HttpAsyncAborter , public nsIStreamListener , public nsICachingChannel , public nsICacheListener @@ -144,6 +143,7 @@ public: NS_IMETHOD ResumeAt(PRUint64 startPos, const nsACString& entityID); public: /* internal necko use only */ + typedef void (nsHttpChannel:: *nsAsyncCallback)(void); void InternalSetUploadStream(nsIInputStream *uploadStream) { mUploadStream = uploadStream; } @@ -162,8 +162,18 @@ public: /* internal necko use only */ private: typedef nsresult (nsHttpChannel::*nsContinueRedirectionFunc)(nsresult result); + // AsyncCall may be used to call a member function asynchronously. + // retval isn't refcounted and is set only when event was successfully + // posted, the event is returned for the purpose of cancelling when needed + nsresult AsyncCall(nsAsyncCallback funcPtr, + nsRunnableMethod **retval = nsnull); + PRBool RequestIsConditional(); nsresult Connect(PRBool firstTime = PR_TRUE); + nsresult AsyncAbort(nsresult status); + // Send OnStartRequest/OnStopRequest to our listener, if any. + void HandleAsyncNotifyListener(); + void DoNotifyListener(); nsresult SetupTransaction(); nsresult CallOnStartRequest(); nsresult ProcessResponse(); @@ -179,7 +189,6 @@ private: nsresult ProcessFallback(PRBool *waitingForRedirectCallback); nsresult ContinueProcessFallback(nsresult); PRBool ResponseWouldVary(); - void HandleAsyncAbort(); nsresult ContinueOnStartRequest1(nsresult); nsresult ContinueOnStartRequest2(nsresult); @@ -291,16 +300,24 @@ private: // auth specific data nsCOMPtr mAuthProvider; + // Function pointer that can be set to indicate that we got suspended while + // waiting on an AsyncCall. When we get resumed we should AsyncCall this + // function. + nsAsyncCallback mPendingAsyncCallOnResume; + // Proxy info to replace with nsCOMPtr mTargetProxyInfo; + // Suspend counter. This is used if someone tries to suspend/resume us + // before we have either a cache pump or a transaction pump. + PRUint32 mSuspendCount; + // If the channel is associated with a cache, and the URI matched // a fallback namespace, this will hold the key for the fallback // cache entry. nsCString mFallbackKey; friend class AutoRedirectVetoNotifier; - friend class HttpAsyncAborter; nsCOMPtr mRedirectURI; nsCOMPtr mRedirectChannel; PRUint32 mRedirectType; @@ -337,9 +354,6 @@ private: nsresult WaitForRedirectCallback(); void PushRedirectAsyncFunc(nsContinueRedirectionFunc func); void PopRedirectAsyncFunc(nsContinueRedirectionFunc func); - -protected: - virtual void DoNotifyListenerCleanup(); }; #endif // nsHttpChannel_h__ From 9d24f296ab37d4e3f586fdbfe981ef2f354b4ee0 Mon Sep 17 00:00:00 2001 From: Trevor Saunders Date: Fri, 13 May 2011 23:28:56 -0400 Subject: [PATCH 010/282] redisable test_singleline.html and test_whitespaces.html because they went permaorange again after tm merge CLOSED TREE --- accessible/tests/mochitest/text/Makefile.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/accessible/tests/mochitest/text/Makefile.in b/accessible/tests/mochitest/text/Makefile.in index 15b33314a2c8..83946f4c46ce 100644 --- a/accessible/tests/mochitest/text/Makefile.in +++ b/accessible/tests/mochitest/text/Makefile.in @@ -50,8 +50,8 @@ _TEST_FILES = \ test_doc.html \ test_hypertext.html \ test_passwords.html \ - test_singleline.html \ - test_whitespaces.html \ + $(warning test_singleline.html disabled due to bug 652459) \ + $(warning test_whitespaces.html disabled due to bug 652459) \ test_words.html \ $(NULL) From eccbe478efcaf39152d7213f34e41239157e4f88 Mon Sep 17 00:00:00 2001 From: Olli Pettay Date: Fri, 13 May 2011 23:44:35 +0300 Subject: [PATCH 011/282] Bug 656954 - Add defaultPrevented to nsIDOMEvent, r=sicking --HG-- extra : rebase_source : f491aa3d1b40980ca0f6b8cc38a5e9e60d80b9e7 --- content/events/src/nsDOMEvent.cpp | 6 +++ content/events/test/Makefile.in | 1 + content/events/test/test_bug656954.html | 43 +++++++++++++++++++ dom/interfaces/events/nsIDOMEvent.idl | 7 ++- dom/src/threads/nsDOMWorkerEvents.cpp | 14 ++++++ dom/src/threads/nsDOMWorkerEvents.h | 2 + security/manager/ssl/src/nsSmartCardEvent.cpp | 6 +++ 7 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 content/events/test/test_bug656954.html diff --git a/content/events/src/nsDOMEvent.cpp b/content/events/src/nsDOMEvent.cpp index 920f5b376ae3..ed148ba747a2 100644 --- a/content/events/src/nsDOMEvent.cpp +++ b/content/events/src/nsDOMEvent.cpp @@ -1390,6 +1390,12 @@ nsDOMEvent::GetPreventDefault(PRBool* aReturn) return NS_OK; } +NS_IMETHODIMP +nsDOMEvent::GetDefaultPrevented(PRBool* aReturn) +{ + return GetPreventDefault(aReturn); +} + void nsDOMEvent::Serialize(IPC::Message* aMsg, PRBool aSerializeInterfaceType) { diff --git a/content/events/test/Makefile.in b/content/events/test/Makefile.in index d4b9e6f7c5af..2e0a1c14b645 100644 --- a/content/events/test/Makefile.in +++ b/content/events/test/Makefile.in @@ -105,6 +105,7 @@ _TEST_FILES = \ test_bug641477.html \ test_bug648573.html \ test_bug615597.html \ + test_bug656954.html \ $(NULL) #bug 585630 diff --git a/content/events/test/test_bug656954.html b/content/events/test/test_bug656954.html new file mode 100644 index 000000000000..8410292864db --- /dev/null +++ b/content/events/test/test_bug656954.html @@ -0,0 +1,43 @@ + + + + + Test for Bug 656954 + + + + + +Mozilla Bug 656954 +

+ +
+
+
+ + diff --git a/dom/interfaces/events/nsIDOMEvent.idl b/dom/interfaces/events/nsIDOMEvent.idl index 9f3baf9ff9cd..b90af4cd9505 100644 --- a/dom/interfaces/events/nsIDOMEvent.idl +++ b/dom/interfaces/events/nsIDOMEvent.idl @@ -49,7 +49,7 @@ interface nsIDOMEventTarget; * http://www.w3.org/TR/DOM-Level-2-Events/ */ -[scriptable, uuid(a66b7b80-ff46-bd97-0080-5f8ae38add32)] +[scriptable, uuid(548137e8-fd2c-48c4-8635-3033f7db79e0)] interface nsIDOMEvent : nsISupports { // PhaseType @@ -169,4 +169,9 @@ interface nsIDOMEvent : nsISupports void initEvent(in DOMString eventTypeArg, in boolean canBubbleArg, in boolean cancelableArg); + + /** + * Used to indicate whether preventDefault() has been called for this event. + */ + readonly attribute boolean defaultPrevented; }; diff --git a/dom/src/threads/nsDOMWorkerEvents.cpp b/dom/src/threads/nsDOMWorkerEvents.cpp index e788939d0e17..188592edd9c8 100644 --- a/dom/src/threads/nsDOMWorkerEvents.cpp +++ b/dom/src/threads/nsDOMWorkerEvents.cpp @@ -105,6 +105,13 @@ nsDOMWorkerPrivateEvent::PreventDefault() return mEvent->PreventDefault(); } +NS_IMETHODIMP +nsDOMWorkerPrivateEvent::GetDefaultPrevented(PRBool* aRetVal) +{ + *aRetVal = mPreventDefaultCalled; + return NS_OK; +} + NS_IMETHODIMP nsDOMWorkerPrivateEvent::InitEvent(const nsAString& aEventType, PRBool aCanBubble, @@ -242,6 +249,13 @@ nsDOMWorkerEvent::PreventDefault() return NS_OK; } +NS_IMETHODIMP +nsDOMWorkerEvent::GetDefaultPrevented(PRBool* aRetVal) +{ + *aRetVal = mPreventDefaultCalled; + return NS_OK; +} + NS_IMETHODIMP nsDOMWorkerEvent::InitEvent(const nsAString& aEventTypeArg, PRBool aCanBubbleArg, diff --git a/dom/src/threads/nsDOMWorkerEvents.h b/dom/src/threads/nsDOMWorkerEvents.h index 10ac2254e306..269dac84511c 100644 --- a/dom/src/threads/nsDOMWorkerEvents.h +++ b/dom/src/threads/nsDOMWorkerEvents.h @@ -160,6 +160,8 @@ public: const nsAString& aFilenameArg, PRUint32 aLinenoArg); + NS_IMETHOD GetDefaultPrevented(PRBool* aRetVal); + virtual PRBool PreventDefaultCalled(); private: diff --git a/security/manager/ssl/src/nsSmartCardEvent.cpp b/security/manager/ssl/src/nsSmartCardEvent.cpp index 53104e96ebd9..d2fcc852ec1c 100644 --- a/security/manager/ssl/src/nsSmartCardEvent.cpp +++ b/security/manager/ssl/src/nsSmartCardEvent.cpp @@ -238,6 +238,12 @@ NS_IMETHODIMP nsSmartCardEvent::PreventDefault() return mInner->PreventDefault(); } +NS_IMETHODIMP nsSmartCardEvent::GetDefaultPrevented(PRBool* aReturn) +{ + NS_ASSERTION(mInner, "SmartCardEvent called without Init"); + return mInner->GetDefaultPrevented(aReturn); +} + NS_IMETHODIMP nsSmartCardEvent::InitEvent(const nsAString & eventTypeArg, PRBool canBubbleArg, PRBool cancelableArg) { NS_ASSERTION(mInner, "SmartCardEvent called without Init"); From e9b6bed064e7af7370a9d7d7060178d0fd2526d2 Mon Sep 17 00:00:00 2001 From: Jean-Bernard Marcon Date: Sat, 14 May 2011 12:26:28 +0200 Subject: [PATCH 012/282] Bug 655720 - rewording suggestion 'Press' instead of 'click' [r=vingtetun] --- mobile/chrome/content/browser.js | 2 +- mobile/locales/en-US/chrome/browser.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mobile/chrome/content/browser.js b/mobile/chrome/content/browser.js index 5954eb8b406a..3a69845307b3 100644 --- a/mobile/chrome/content/browser.js +++ b/mobile/chrome/content/browser.js @@ -2331,7 +2331,7 @@ var XPInstallObserver = { buttons = []; } else { - messageString = strings.formatStringFromName("xpinstallDisabledMessage", [brandShortName, host], 2); + messageString = strings.formatStringFromName("xpinstallDisabledMessage2", [brandShortName, host], 2); buttons = [{ label: strings.GetStringFromName("xpinstallDisabledButton"), accessKey: null, diff --git a/mobile/locales/en-US/chrome/browser.properties b/mobile/locales/en-US/chrome/browser.properties index 2ead1b058c02..3ead1ede8838 100644 --- a/mobile/locales/en-US/chrome/browser.properties +++ b/mobile/locales/en-US/chrome/browser.properties @@ -125,7 +125,7 @@ popupButtonNeverWarn2=Never Show xpinstallPromptWarning=%S prevented this site (%S) from asking you to install software on your device. xpinstallPromptAllowButton=Allow xpinstallDisabledMessageLocked=Software installation has been disabled by your system administrator. -xpinstallDisabledMessage=Software installation is currently disabled. Click Enable and try again. +xpinstallDisabledMessage2=Software installation is currently disabled. Press Enable and try again. xpinstallDisabledButton=Enable # Site Identity From 45415c336c296203a34dfe1f9030af2faeaed09d Mon Sep 17 00:00:00 2001 From: Vivien Nicolas <21@vingtetun.org> Date: Sat, 14 May 2011 12:27:50 +0200 Subject: [PATCH 013/282] Bug 648026 - Move Content Popup Helper out of FormHelperUI [r=mfinkle] --- mobile/chrome/content/ContentPopupHelper.js | 233 ++++++++++++++++++ mobile/chrome/content/browser-scripts.js | 1 + mobile/chrome/content/common-ui.js | 199 ++------------- mobile/chrome/content/forms.js | 2 +- mobile/chrome/jar.mn | 1 + mobile/chrome/tests/Makefile.in | 3 + mobile/chrome/tests/browser_autocomplete.html | 8 + mobile/chrome/tests/browser_autocomplete.js | 52 +++- mobile/chrome/tests/browser_contentpopup.html | 26 ++ mobile/chrome/tests/browser_contentpopup.js | 94 +++++++ mobile/chrome/tests/remote_autocomplete.js | 7 + mobile/chrome/tests/remote_contentpopup.js | 18 ++ 12 files changed, 466 insertions(+), 178 deletions(-) create mode 100644 mobile/chrome/content/ContentPopupHelper.js create mode 100644 mobile/chrome/tests/browser_contentpopup.html create mode 100644 mobile/chrome/tests/browser_contentpopup.js create mode 100644 mobile/chrome/tests/remote_contentpopup.js diff --git a/mobile/chrome/content/ContentPopupHelper.js b/mobile/chrome/content/ContentPopupHelper.js new file mode 100644 index 000000000000..ae31ede8f572 --- /dev/null +++ b/mobile/chrome/content/ContentPopupHelper.js @@ -0,0 +1,233 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code + * + * The Initial Developer of the Original Code is + * Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +var ContentPopupHelper = { + _popup: null, + get popup() { + return this._popup; + }, + + set popup(aPopup) { + // If there is nothing to do then bail out + if (!this._popup && !aPopup) + return; + + if (aPopup) { + // Keeps the new popup element hidden until it is positioned, but using + // visibility: 'hidden' instead of display: 'none' will allow to + // workaround some bugs with arrowscrollbox's arrows that does not + // update their hidden state correctly when used as a child (because of + // missed underflow events) + // + // Also the popup is moved to the left border of the window otherwise the + // sidebars position are messed up when the content of the popup's child + // is too wide, but since the size of the popup can't be larger than 75% + // of the window width (see the update method) then the problem does not + // appear if the popup is positioned between 0-25% percent of the window + // width + aPopup.left = 0; + aPopup.firstChild.style.maxWidth = "0px"; + aPopup.style.visibility = "hidden"; + aPopup.hidden = false; + + window.addEventListener("TabSelect", this, false); + window.addEventListener("TabClose", this, false); + window.addEventListener("AnimatedZoomBegin", this, false); + window.addEventListener("AnimatedZoomEnd", this, false); + window.addEventListener("MozBeforeResize", this, true); + window.addEventListener("resize", this, false); + Elements.browsers.addEventListener("PanBegin", this, false); + Elements.browsers.addEventListener("PanFinished", this, false); + } else { + this._popup.hidden = true; + this._anchorRect = null; + + window.removeEventListener("TabSelect", this, false); + window.removeEventListener("TabClose", this, false); + window.removeEventListener("AnimatedZoomBegin", this, false); + window.removeEventListener("AnimatedZoomEnd", this, false); + window.removeEventListener("MozBeforeResize", this, true); + window.removeEventListener("resize", this, false); + Elements.browsers.removeEventListener("PanBegin", this, false); + Elements.browsers.removeEventListener("PanFinished", this, false); + + let event = document.createEvent("Events"); + event.initEvent("contentpopuphidden", true, false); + this._popup.dispatchEvent(event); + } + + this._popup = aPopup; + }, + + /** + * This method positioned an arrowbox on the screen using a 'virtual' + * element as referrer that match the real content element + * This method called element.getBoundingClientRect() many times and can be + * expensive, do not called it too many times. + */ + anchorTo: function(aAnchorRect) { + let popup = this._popup; + if (!popup) + return; + + // Use the old rect until we get a new one + this._anchorRect = aAnchorRect ? aAnchorRect : this._anchorRect; + + // Calculate the maximum size of the arrowpanel by allowing it to live only + // on the visible browser area + let [leftVis, rightVis, leftW, rightW] = Browser.computeSidebarVisibility(); + let leftOffset = leftVis * leftW; + let rightOffset = rightVis * rightW; + let visibleAreaWidth = window.innerWidth - leftOffset - rightOffset; + popup.firstChild.style.maxWidth = (visibleAreaWidth * 0.75) + "px"; + + let browser = getBrowser(); + let rect = this._anchorRect.clone().scale(browser.scale, browser.scale); + let scroll = browser.getRootView().getPosition(); + + // The sidebars scroll needs to be taken into account, otherwise the arrows + // can be misplaced if the sidebars are open + let topOffset = (BrowserUI.toolbarH - Browser.getScrollboxPosition(Browser.pageScrollboxScroller).y); + + // Notifications take height _before_ the browser if there any + let notification = Browser.getNotificationBox().currentNotification; + if (notification) + topOffset += notification.getBoundingClientRect().height; + + let virtualContentRect = { + width: rect.width, + height: rect.height, + left: Math.ceil(rect.left - scroll.x + leftOffset - rightOffset), + right: Math.floor(rect.left + rect.width - scroll.x + leftOffset - rightOffset), + top: Math.ceil(rect.top - scroll.y + topOffset), + bottom: Math.floor(rect.top + rect.height - scroll.y + topOffset) + }; + + // Translate the virtual rect inside the bounds of the viewable area if it + // overflow + if (virtualContentRect.left + virtualContentRect.width > visibleAreaWidth) { + let offsetX = visibleAreaWidth - (virtualContentRect.left + virtualContentRect.width); + virtualContentRect.width += offsetX; + virtualContentRect.right -= offsetX; + } + + if (virtualContentRect.left < leftOffset) { + let offsetX = (virtualContentRect.right - virtualContentRect.width); + virtualContentRect.width += offsetX; + virtualContentRect.left -= offsetX; + } + + // If the suggestions are out of view there is no need to display it + let browserRect = Rect.fromRect(browser.getBoundingClientRect()); + if (BrowserUI.isToolbarLocked()) { + // If the toolbar is locked, it can appear over the field in such a way + // that the field is hidden + let toolbarH = BrowserUI.toolbarH; + browserRect = new Rect(leftOffset - rightOffset, Math.max(0, browserRect.top - toolbarH) + toolbarH, + browserRect.width + leftOffset - rightOffset, browserRect.height - toolbarH); + } + + if (browserRect.intersect(Rect.fromRect(virtualContentRect)).isEmpty()) { + popup.style.visibility = "hidden"; + return; + } + + // Adding rect.height to the top moves the arrowbox below the virtual field + let left = rect.left - scroll.x + leftOffset - rightOffset; + let top = rect.top - scroll.y + topOffset + (rect.height); + + // Ensure parts of the arrowbox are not outside the window + let arrowboxRect = Rect.fromRect(popup.getBoundingClientRect()); + if (left + arrowboxRect.width > window.innerWidth) + left -= (left + arrowboxRect.width - window.innerWidth); + else if (left < leftOffset) + left += (leftOffset - left); + popup.left = left; + + // Do not position the suggestions over the navigation buttons + let buttonsHeight = Elements.contentNavigator.getBoundingClientRect().height; + if (top + arrowboxRect.height >= window.innerHeight - buttonsHeight) + top -= (rect.height + arrowboxRect.height); + popup.top = top; + + // Create a virtual element to point to + let virtualContentElement = { + getBoundingClientRect: function() { + return virtualContentRect; + } + }; + popup.anchorTo(virtualContentElement); + popup.style.visibility = "visible"; + + let event = document.createEvent("Events"); + event.initEvent("contentpopupshown", true, false); + popup.dispatchEvent(event); + }, + + handleEvent: function(aEvent) { + let popup = this._popup; + if (!popup || !this._anchorRect) + return; + + switch(aEvent.type) { + case "TabSelect": + case "TabClose": + this.popup = null; + break; + + case "PanBegin": + case "AnimatedZoomBegin": + popup.left = 0; + popup.style.visibility = "hidden"; + break; + + case "PanFinished": + case "AnimatedZoomEnd": + popup.style.visibility = "visible"; + this.anchorTo(); + break; + + case "MozBeforeResize": + popup.left = 0; + break; + + case "resize": + this.anchorTo(); + break; + } + } +}; + diff --git a/mobile/chrome/content/browser-scripts.js b/mobile/chrome/content/browser-scripts.js index bd519e8349cb..de5ee7fb9a1b 100644 --- a/mobile/chrome/content/browser-scripts.js +++ b/mobile/chrome/content/browser-scripts.js @@ -104,6 +104,7 @@ XPCOMUtils.defineLazyGetter(this, "CommonUI", function() { ["PreferencesView", "chrome://browser/content/preferences.js"], ["Sanitizer", "chrome://browser/content/sanitize.js"], ["SelectHelperUI", "chrome://browser/content/SelectHelperUI.js"], + ["ContentPopupHelper", "chrome://browser/content/ContentPopupHelper.js"], ["SharingUI", "chrome://browser/content/SharingUI.js"], #ifdef MOZ_SERVICES_SYNC ["WeaveGlue", "chrome://browser/content/sync.js"], diff --git a/mobile/chrome/content/common-ui.js b/mobile/chrome/content/common-ui.js index 073bd4549df5..df00ab7f4321 100644 --- a/mobile/chrome/content/common-ui.js +++ b/mobile/chrome/content/common-ui.js @@ -646,7 +646,6 @@ var FormHelperUI = { init: function formHelperInit() { this._container = document.getElementById("content-navigator"); - this._suggestionsContainer = document.getElementById("form-helper-suggestions-container"); this._cmdPrevious = document.getElementById(this.commands.previous); this._cmdNext = document.getElementById(this.commands.next); @@ -673,13 +672,9 @@ var FormHelperUI = { window.addEventListener("keyup", this, true); window.addEventListener("keypress", this, true); - // Listen some events to show/hide the autocomplete box + // Listen some events to show/hide arrows Elements.browsers.addEventListener("PanBegin", this, false); Elements.browsers.addEventListener("PanFinished", this, false); - window.addEventListener("AnimatedZoomBegin", this, false); - window.addEventListener("AnimatedZoomEnd", this, false); - window.addEventListener("MozBeforeResize", this, true); - window.addEventListener("resize", this, false); }, _currentBrowser: null, @@ -697,7 +692,6 @@ var FormHelperUI = { else this._container.removeAttribute("disabled"); - this._hasSuggestions = false; this._open = true; let lastElement = this._currentElement || null; @@ -715,7 +709,6 @@ var FormHelperUI = { this._updateContainerForSelect(lastElement, this._currentElement); this._zoom(Rect.fromRect(aElement.rect), Rect.fromRect(aElement.caretRect)); - this._updateSuggestionsFor(this._currentElement); // Prevent the view to scroll automatically while typing this._currentBrowser.scrollSync = false; @@ -733,7 +726,6 @@ var FormHelperUI = { this._currentCaretRect = null; this._updateContainerForSelect(this._currentElement, null); - this._resetSuggestions(); this._currentBrowser.messageManager.sendAsyncMessage("FormAssist:Closed", { }); this._open = false; @@ -758,28 +750,11 @@ var FormHelperUI = { // manual dblClick and navigation between the fields by clicking the // buttons this._container.style.visibility = "hidden"; - - case "AnimatedZoomBegin": - // Changing the hidden attribute here create bugs with the scrollbox - // arrows because the binding will miss some underflow events - if (this._hasSuggestions) { - // Because the suggestions container could be big in terms of width - // (but never bigger than the screen) it's position needs to be - // resetted to the left to ensure it does not push the content to - // the right and misplaced sidebars as a result - this._suggestionsContainer.left = 0; - this._suggestionsContainer.style.visibility = "hidden"; - } break; + case "PanFinished": this._container.style.visibility = "visible"; - - case "AnimatedZoomEnd": - if (this._hasSuggestions) { - this._suggestionsContainer.style.visibility = "visible"; - this._ensureSuggestionsVisible(); - } break; case "URLChanged": @@ -813,16 +788,6 @@ var FormHelperUI = { self._zoom(self._currentElementRect, self._currentCaretRect); }, 0, this); break; - - case "MozBeforeResize": - if (this._hasSuggestions) - this._suggestionsContainer.left = 0; - break; - - case "resize": - if (this._hasSuggestions) - this._ensureSuggestionsVisible(); - break; } }, @@ -903,6 +868,7 @@ var FormHelperUI = { this._currentElement = null; this._container.hide(this); + ContentPopupHelper.popup = null; this._container.removeAttribute("disabled"); // Since the style is overrided when a popup is shown, it needs to be @@ -915,35 +881,25 @@ var FormHelperUI = { this._container.dispatchEvent(evt); }, - _hasSuggestions: false, _updateSuggestionsFor: function _formHelperUpdateAutocompleteFor(aElement) { let suggestions = this._getAutocompleteSuggestions(aElement); if (!suggestions.length) { - this._resetSuggestions(); + ContentPopupHelper.popup = null; return; } - // Keeps the suggestions element hidden while is it not positionned to the - // correct place - let suggestionsContainer = this._suggestionsContainer; - suggestionsContainer.style.visibility = "hidden"; - suggestionsContainer.hidden = false; - suggestionsContainer.left = 0; // the scrollX/scrollY position can change because of the animated zoom so // delay the suggestions positioning if (AnimatedZoom.isZooming()) { let self = this; - window.addEventListener("AnimatedZoomEnd", function() { - window.removeEventListener("AnimatedZoomEnd", arguments.callee, true); - // Ensure the current element has not changed during this interval - if (self._currentElement != aElement) - return; - - self._updateSuggestionsFor(aElement); - }, true); + this._waitForZoom(function() { + self._updateSuggestionsFor(aElement); + }); return; } + // Declare which box is going to be the inside container of the content popup helper + let suggestionsContainer = document.getElementById("form-helper-suggestions-container"); let container = suggestionsContainer.firstChild; while (container.hasChildNodes()) container.removeChild(container.lastChild); @@ -959,8 +915,8 @@ var FormHelperUI = { } container.appendChild(fragment); - this._hasSuggestions = true; - this._ensureSuggestionsVisible(); + ContentPopupHelper.popup = suggestionsContainer; + ContentPopupHelper.anchorTo(this._currentElementRect); }, /** Retrieve the autocomplete list from the autocomplete service for an element */ @@ -993,114 +949,6 @@ var FormHelperUI = { return suggestions; }, - _resetSuggestions: function _formHelperResetAutocomplete() { - this._suggestionsContainer.hidden = true; - this._hasSuggestions = false; - }, - - /** - * This method positionned the list of suggestions on the screen using - * a 'virtual' element as referrer that match the real content element - * This method called element.getBoundingClientRect() many times and can be - * expensive, do not called it too many times. - */ - _ensureSuggestionsVisible: function _formHelperEnsureSuggestionsVisible() { - let container = this._suggestionsContainer; - - // Calculate the maximum size of the arrowpanel by allowing it to live only - // on the visible browser area - let [leftVis, rightVis, leftW, rightW] = Browser.computeSidebarVisibility(); - let leftOffset = leftVis * leftW; - let rightOffset = rightVis * rightW; - let visibleAreaWidth = window.innerWidth - leftOffset - rightOffset; - container.firstChild.style.maxWidth = (visibleAreaWidth * 0.75) + "px"; - - let browser = getBrowser(); - let rect = this._currentElementRect.clone().scale(browser.scale, browser.scale); - let scroll = browser.getRootView().getPosition(); - - // The sidebars scroll needs to be taken into account, otherwise the arrows - // can be misplaced if the sidebars are open - let topOffset = (BrowserUI.toolbarH - Browser.getScrollboxPosition(Browser.pageScrollboxScroller).y); - - // Notifications take height _before_ the browser if there any - let notification = Browser.getNotificationBox().currentNotification; - if (notification) - topOffset += notification.getBoundingClientRect().height; - - let virtualContentRect = { - width: rect.width, - height: rect.height, - left: Math.ceil(rect.left - scroll.x + leftOffset - rightOffset), - right: Math.floor(rect.left + rect.width - scroll.x + leftOffset - rightOffset), - top: Math.ceil(rect.top - scroll.y + topOffset), - bottom: Math.floor(rect.top + rect.height - scroll.y + topOffset) - }; - - // Translate the virtual rect inside the bounds of the viewable area if it - // overflow - if (virtualContentRect.left + virtualContentRect.width > visibleAreaWidth) { - let offsetX = visibleAreaWidth - (virtualContentRect.left + virtualContentRect.width); - virtualContentRect.width += offsetX; - virtualContentRect.right -= offsetX; - } - - if (virtualContentRect.left < leftOffset) { - let offsetX = (virtualContentRect.right - virtualContentRect.width); - virtualContentRect.width += offsetX; - virtualContentRect.left -= offsetX; - } - - // If the suggestions are out of view there is no need to display it - let browserRect = Rect.fromRect(browser.getBoundingClientRect()); - if (BrowserUI.isToolbarLocked()) { - // If the toolbar is locked, it can appear over the field in such a way - // that the field is hidden - let toolbarH = BrowserUI.toolbarH; - browserRect = new Rect(leftOffset - rightOffset, Math.max(0, browserRect.top - toolbarH) + toolbarH, - browserRect.width + leftOffset - rightOffset, browserRect.height - toolbarH); - } - - if (browserRect.intersect(Rect.fromRect(virtualContentRect)).isEmpty()) { - container.style.visibility = "hidden"; - return; - } - - // Adding rect.height to the top moves the arrowbox below the virtual field - let left = rect.left - scroll.x + leftOffset - rightOffset; - let top = rect.top - scroll.y + topOffset + (rect.height); - - // Ensure parts of the arrowbox are not outside the window - let arrowboxRect = Rect.fromRect(container.getBoundingClientRect()); - if (left + arrowboxRect.width > window.innerWidth) - left -= (left + arrowboxRect.width - window.innerWidth); - else if (left < leftOffset) - left += (leftOffset - left); - container.left = left; - - // Do not position the suggestions over the navigation buttons - let buttonsHeight = this._container.getBoundingClientRect().height; - if (top + arrowboxRect.height >= window.innerHeight - buttonsHeight) - top -= (rect.height + arrowboxRect.height); - container.top = top; - - // Create a virtual element to point to - let virtualContentElement = { - getBoundingClientRect: function() { - return virtualContentRect; - } - }; - container.anchorTo(virtualContentElement); - container.style.visibility = "visible"; - }, - - /** Update the form helper container to reflect new element user is editing. */ - _updateContainer: function _formHelperUpdateContainer(aLastElement, aCurrentElement) { - this._updateContainerForSelect(aLastElement, aCurrentElement); - - this._container.contentHasChanged(); - }, - /** Helper for _updateContainer that handles the case where the new element is a select. */ _updateContainerForSelect: function _formHelperUpdateContainerForSelect(aLastElement, aCurrentElement) { let lastHasChoices = aLastElement && (aLastElement.choices != null); @@ -1146,16 +994,10 @@ var FormHelperUI = { // the scrollX/scrollY position can change because of the animated zoom so // delay the caret adjustment if (AnimatedZoom.isZooming()) { - let currentElement = this._currentElement; let self = this; - window.addEventListener("AnimatedZoomEnd", function() { - window.removeEventListener("AnimatedZoomEnd", arguments.callee, true); - // Ensure the current element has not changed during this interval - if (self._currentElement != currentElement) - return; - - self._ensureCaretVisible(aCaretRect); - }, true); + this._waitForZoom(function() { + self._ensureCaretVisible(aCaretRect); + }); return; } @@ -1200,6 +1042,19 @@ var FormHelperUI = { Browser.pageScrollboxScroller.scrollTo(restore.pageScrollOffset.x, restore.pageScrollOffset.y); }, + _waitForZoom: function _formHelperWaitForZoom(aCallback) { + let currentElement = this._currentElement; + let self = this; + window.addEventListener("AnimatedZoomEnd", function() { + window.removeEventListener("AnimatedZoomEnd", arguments.callee, true); + // Ensure the current element has not changed during this interval + if (self._currentElement != currentElement) + return; + + aCallback(); + }, true); + }, + _getZoomLevelForRect: function _getZoomLevelForRect(aRect) { const margin = 30; let zoomLevel = getBrowser().getBoundingClientRect().width / (aRect.width + margin); diff --git a/mobile/chrome/content/forms.js b/mobile/chrome/content/forms.js index 46eb422a9725..cd7bea8a53a4 100644 --- a/mobile/chrome/content/forms.js +++ b/mobile/chrome/content/forms.js @@ -578,7 +578,7 @@ FormAssistant.prototype = { }, _isVisibleElement: function formHelperIsVisibleElement(aElement) { - let style = aElement.ownerDocument.defaultView.getComputedStyle(aElement, null); + let style = aElement ? aElement.ownerDocument.defaultView.getComputedStyle(aElement, null) : null; if (!style) return false; diff --git a/mobile/chrome/jar.mn b/mobile/chrome/jar.mn index fdabe73e8c71..b3802d921eca 100644 --- a/mobile/chrome/jar.mn +++ b/mobile/chrome/jar.mn @@ -28,6 +28,7 @@ chrome.jar: content/AwesomePanel.js (content/AwesomePanel.js) content/BookmarkHelper.js (content/BookmarkHelper.js) content/BookmarkPopup.js (content/BookmarkPopup.js) + content/ContentPopupHelper.js (content/ContentPopupHelper.js) * content/ContextCommands.js (content/ContextCommands.js) content/IndexedDB.js (content/IndexedDB.js) content/MenuListHelperUI.js (content/MenuListHelperUI.js) diff --git a/mobile/chrome/tests/Makefile.in b/mobile/chrome/tests/Makefile.in index 7c81e540ce8d..812fc5404fa2 100644 --- a/mobile/chrome/tests/Makefile.in +++ b/mobile/chrome/tests/Makefile.in @@ -49,6 +49,7 @@ include $(topsrcdir)/config/rules.mk _BROWSER_FILES = \ head.js \ remote_autocomplete.js \ + remote_contentpopup.js \ remote_head.js \ remote_forms.js \ remote_formsZoom.js \ @@ -67,6 +68,8 @@ _BROWSER_FILES = \ browser_click_content.html \ browser_click_content.js \ browser_contacts.js \ + browser_contentpopup.html \ + browser_contentpopup.js \ browser_dragger.js \ browser_find.js \ browser_forms.html \ diff --git a/mobile/chrome/tests/browser_autocomplete.html b/mobile/chrome/tests/browser_autocomplete.html index 882759457815..93d424fa627e 100644 --- a/mobile/chrome/tests/browser_autocomplete.html +++ b/mobile/chrome/tests/browser_autocomplete.html @@ -21,6 +21,14 @@ +

+ + + + + + +

diff --git a/mobile/chrome/tests/browser_autocomplete.js b/mobile/chrome/tests/browser_autocomplete.js index 965da8d1d69c..3ac1ead3cf01 100644 --- a/mobile/chrome/tests/browser_autocomplete.js +++ b/mobile/chrome/tests/browser_autocomplete.js @@ -20,7 +20,14 @@ function test() { } }); - newTab = Browser.addTab(testURL, true); + let startupInfo = Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup).getStartupInfo(); + if (!("firstPaint" in startupInfo)) + waitFor(function() { newTab = Browser.addTab(testURL, true); }, function() { + let startupInfo = Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup).getStartupInfo(); + return ("firstPaint" in startupInfo); + }, Date.now() + 3000); + else + newTab = Browser.addTab(testURL, true); } //------------------------------------------------------------------------------ @@ -36,6 +43,9 @@ function runNextTest() { // Cleanup. All tests are completed at this point try { // Add any cleanup code here + + // Close our tab when finished + Browser.closeTab(newTab); } finally { // We must finialize the tests @@ -130,11 +140,43 @@ gTests.push({ // Close the form assistant FormHelperUI.hide(); - // Close our tab when finished - Browser.closeTab(newTab); - // We must finalize the tests - finish(); + AsyncTests.waitFor("TestRemoteAutocomplete:Reset", { id: "input-datalist-1" }, function(json) { + runNextTest(); + }); + } +}); + +//------------------------------------------------------------------------------ +// Case: Check arrows visibility +gTests.push({ + desc: "Check arrows visibility", + + run: function() { + let popup = document.getElementById("form-helper-suggestions-container"); + popup.addEventListener("contentpopupshown", function(aEvent) { + aEvent.target.removeEventListener(aEvent.type, arguments.callee, false); + waitFor(gCurrentTest.checkNoArrows, function() { + return FormHelperUI._open; + }); + }, false); + + AsyncTests.waitFor("TestRemoteAutocomplete:Click", + { id: "input-datalist-3" }, function(json) {}); + }, + + checkNoArrows: function() { + let scrollbox = document.getElementById("form-helper-suggestions"); + todo_is(scrollbox._scrollButtonUp.collapsed, true, "Left button should be collapsed"); + todo_is(scrollbox._scrollButtonDown.collapsed, true, "Right button should be collapsed"); + gCurrentTest.finish(); + }, + + finish: function() { + // Close the form assistant + FormHelperUI.hide(); + + runNextTest(); } }); diff --git a/mobile/chrome/tests/browser_contentpopup.html b/mobile/chrome/tests/browser_contentpopup.html new file mode 100644 index 000000000000..882759457815 --- /dev/null +++ b/mobile/chrome/tests/browser_contentpopup.html @@ -0,0 +1,26 @@ + + + + + + + + + + +

+ + + + + + + + + + + + + + + diff --git a/mobile/chrome/tests/browser_contentpopup.js b/mobile/chrome/tests/browser_contentpopup.js new file mode 100644 index 000000000000..10cb222cf603 --- /dev/null +++ b/mobile/chrome/tests/browser_contentpopup.js @@ -0,0 +1,94 @@ +let testURL = chromeRoot + "browser_contentpopup.html"; +messageManager.loadFrameScript(chromeRoot + "remote_contentpopup.js", true); + +let newTab = null; + +// A queue to order the tests and a handle for each test +var gTests = []; +var gCurrentTest = null; + +function test() { + // This test is async + waitForExplicitFinish(); + + // Need to wait until the page is loaded + messageManager.addMessageListener("pageshow", function(aMessage) { + if (newTab && newTab.browser.currentURI.spec != "about:blank") { + messageManager.removeMessageListener(aMessage.name, arguments.callee); + BrowserUI.closeAutoComplete(true); + setTimeout(runNextTest, 0); + } + }); + + let startupInfo = Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup).getStartupInfo(); + if (!("firstPaint" in startupInfo)) + waitFor(function() { newTab = Browser.addTab(testURL, true); }, function() { + let startupInfo = Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup).getStartupInfo(); + return ("firstPaint" in startupInfo); + }, Date.now() + 3000); + else + newTab = Browser.addTab(testURL, true); +} + +//------------------------------------------------------------------------------ +// Iterating tests by shifting test out one by one as runNextTest is called. +function runNextTest() { + // Run the next test until all tests completed + if (gTests.length > 0) { + gCurrentTest = gTests.shift(); + info(gCurrentTest.desc); + gCurrentTest.run(); + } + else { + // Cleanup. All tests are completed at this point + try { + // Add any cleanup code here + + // Close our tab when finished + Browser.closeTab(newTab); + } + finally { + // We must finialize the tests + finish(); + } + } +} + +//------------------------------------------------------------------------------ +// Case: Show/Hide the content popup helper +gTests.push({ + desc: "Show/Hide the content popup helper", + + run: function() { + let popup = document.getElementById("form-helper-suggestions-container"); + popup.addEventListener("contentpopupshown", function(aEvent) { + aEvent.target.removeEventListener(aEvent.type, arguments.callee, false); + ok(!popup.hidden, "Content popup should be visible"); + waitFor(gCurrentTest.hidePopup, function() { + return FormHelperUI._open; + }); + }, false); + + AsyncTests.waitFor("TestRemoteAutocomplete:Click", + { id: "input-datalist-1" }, function(json) {}); + }, + + hidePopup: function() { + let popup = document.getElementById("form-helper-suggestions-container"); + popup.addEventListener("contentpopuphidden", function(aEvent) { + popup.removeEventListener("contentpopuphidden", arguments.callee, false); + ok(popup.hidden, "Content popup should be hidden"); + waitFor(gCurrentTest.finish, function() { + return !FormHelperUI._open; + }); + }, false); + + // Close the form assistant + FormHelperUI.hide(); + }, + + finish: function() { + runNextTest(); + } +}); + diff --git a/mobile/chrome/tests/remote_autocomplete.js b/mobile/chrome/tests/remote_autocomplete.js index a4d816bea2ad..56f4646fdf9d 100644 --- a/mobile/chrome/tests/remote_autocomplete.js +++ b/mobile/chrome/tests/remote_autocomplete.js @@ -16,3 +16,10 @@ AsyncTests.add("TestRemoteAutocomplete:Check", function(aMessage, aJson) { return element.value; }); +AsyncTests.add("TestRemoteAutocomplete:Reset", function(aMessage, aJson) { + gFocusManager.focusedElement = null; + let element = content.document.getElementById(aJson.id); + element.value = ""; + return true; +}); + diff --git a/mobile/chrome/tests/remote_contentpopup.js b/mobile/chrome/tests/remote_contentpopup.js new file mode 100644 index 000000000000..a4d816bea2ad --- /dev/null +++ b/mobile/chrome/tests/remote_contentpopup.js @@ -0,0 +1,18 @@ +dump("====================== Content Script Loaded =======================\n"); + +let assistant = Content._formAssistant; + +AsyncTests.add("TestRemoteAutocomplete:Click", function(aMessage, aJson) { + let element = content.document.getElementById(aJson.id); + assistant.open(element); + assistant._executeDelayed(function(assistant) { + sendAsyncMessage("FormAssist:AutoComplete", assistant._getJSON()); + }); + return true; +}); + +AsyncTests.add("TestRemoteAutocomplete:Check", function(aMessage, aJson) { + let element = content.document.getElementById(aJson.id); + return element.value; +}); + From 7fb702771bfd9121c3481ba73483e5176b231a83 Mon Sep 17 00:00:00 2001 From: Vivien Nicolas <21@vingtetun.org> Date: Sat, 14 May 2011 12:28:11 +0200 Subject: [PATCH 014/282] Bug 652958 - FormHelper autocomplete does not work well with IME compositions [r=mfinkle] --- mobile/chrome/content/forms.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mobile/chrome/content/forms.js b/mobile/chrome/content/forms.js index cd7bea8a53a4..d0df32cc86da 100644 --- a/mobile/chrome/content/forms.js +++ b/mobile/chrome/content/forms.js @@ -256,6 +256,14 @@ FormAssistant.prototype = { } case "FormAssist:AutoComplete": { + try { + currentElement = currentElement.QueryInterface(Ci.nsIDOMNSEditableElement); + let imeEditor = currentElement.editor.QueryInterface(Ci.nsIEditorIMESupport); + if (imeEditor.composing) + imeEditor.forceCompositionEnd(); + } + catch(e) {} + currentElement.value = json.value; let event = currentElement.ownerDocument.createEvent("Events"); From 3f688917af480d8c9b018a338e495ce8f0c37d42 Mon Sep 17 00:00:00 2001 From: Vivien Nicolas <21@vingtetun.org> Date: Sat, 14 May 2011 12:28:27 +0200 Subject: [PATCH 015/282] Bug 656876 - Panning is broken if sidebars are collapsed [r=mfinkle] --- mobile/chrome/content/browser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/chrome/content/browser.js b/mobile/chrome/content/browser.js index 3a69845307b3..64dc24c4380a 100644 --- a/mobile/chrome/content/browser.js +++ b/mobile/chrome/content/browser.js @@ -920,7 +920,7 @@ var Browser = { function visibility(aSidebarRect, aVisibleRect) { let width = aSidebarRect.width; aSidebarRect.restrictTo(aVisibleRect); - return aSidebarRect.width / width; + return (aSidebarRect.width ? aSidebarRect.width / width : 0); } if (!dx) dx = 0; From baec452f675a6b151fa25cd3e2dce2110aad89a0 Mon Sep 17 00:00:00 2001 From: Jonathan Watt Date: Sat, 14 May 2011 14:12:32 +0100 Subject: [PATCH 016/282] Bug 580983. Attempt to fix random orange. --- content/svg/content/test/test_pointer-events-2.xhtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/svg/content/test/test_pointer-events-2.xhtml b/content/svg/content/test/test_pointer-events-2.xhtml index 9967d225e8ce..4471e0dd748b 100644 --- a/content/svg/content/test/test_pointer-events-2.xhtml +++ b/content/svg/content/test/test_pointer-events-2.xhtml @@ -8,7 +8,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=500174 - + From a519d6e979a816116ee37f242c76c5bb4c0f11c1 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 17 May 2011 15:45:19 +0200 Subject: [PATCH 041/282] Bug 640889. Have test_leaf_layers_partition_browser_window.xul test maximized windows as well as normal windows; on Windows XP, don't test normal windows because we know the resizer overlaps there. r=tnikkel --- ...t_leaf_layers_partition_browser_window.xul | 49 ++++++++++++++----- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/layout/base/tests/chrome/test_leaf_layers_partition_browser_window.xul b/layout/base/tests/chrome/test_leaf_layers_partition_browser_window.xul index 36d8ea441e09..55aaabfe750a 100644 --- a/layout/base/tests/chrome/test_leaf_layers_partition_browser_window.xul +++ b/layout/base/tests/chrome/test_leaf_layers_partition_browser_window.xul @@ -17,46 +17,69 @@ ", - "", "scrollbars=yes,toolbar,menubar,width=500,height=500"); - win.addEventListener('load', doTest, false); + function nextTest() { + if (testIndex >= tests.length) { + SimpleTest.finish(); + return; + } + // Skip non-maximized tests on WinXP since the resizer causes overlapping layers + if (winXP && !tests[testIndex].maximize) { + ++testIndex; + nextTest(); + return; + } + + // Run the test in a separate window so we get a clean browser window. + win = window.open("data:text/html,", + "", "scrollbars=yes,toolbar,menubar,width=500,height=500"); + win.addEventListener('load', doTest, false); } + + nextTest(); ]]> From b4edcad58f87aee24a91da9155fec428a218ba8e Mon Sep 17 00:00:00 2001 From: David Bolter Date: Tue, 17 May 2011 12:33:45 -0400 Subject: [PATCH 042/282] Bug 640707 - Add event support for aria-sort. r=surkov Yahoo mail needs this ASAP. --HG-- rename : accessible/tests/mochitest/events/test_aria_hidden.html => accessible/tests/mochitest/events/test_aria_objattr.html --- accessible/src/base/nsDocAccessible.cpp | 3 +- accessible/tests/mochitest/events/Makefile.in | 2 +- ...ria_hidden.html => test_aria_objattr.html} | 37 +++++++++++++++++-- 3 files changed, 37 insertions(+), 5 deletions(-) rename accessible/tests/mochitest/events/{test_aria_hidden.html => test_aria_objattr.html} (65%) diff --git a/accessible/src/base/nsDocAccessible.cpp b/accessible/src/base/nsDocAccessible.cpp index 88a766be0d0e..67ee32e4df86 100644 --- a/accessible/src/base/nsDocAccessible.cpp +++ b/accessible/src/base/nsDocAccessible.cpp @@ -1114,7 +1114,8 @@ nsDocAccessible::ARIAAttributeChanged(nsIContent* aContent, nsIAtom* aAttribute) // at least until native API comes up with a more meaningful event. if (aAttribute == nsAccessibilityAtoms::aria_grabbed || aAttribute == nsAccessibilityAtoms::aria_dropeffect || - aAttribute == nsAccessibilityAtoms::aria_hidden) { + aAttribute == nsAccessibilityAtoms::aria_hidden || + aAttribute == nsAccessibilityAtoms::aria_sort) { FireDelayedAccessibleEvent(nsIAccessibleEvent::EVENT_OBJECT_ATTRIBUTE_CHANGED, aContent); } diff --git a/accessible/tests/mochitest/events/Makefile.in b/accessible/tests/mochitest/events/Makefile.in index 180570d7bfef..1c099e789eaf 100644 --- a/accessible/tests/mochitest/events/Makefile.in +++ b/accessible/tests/mochitest/events/Makefile.in @@ -51,8 +51,8 @@ _TEST_FILES =\ focus.html \ scroll.html \ test_aria_alert.html \ - test_aria_hidden.html \ test_aria_menu.html \ + test_aria_objattr.html \ test_aria_statechange.html \ test_attrs.html \ test_caretmove.html \ diff --git a/accessible/tests/mochitest/events/test_aria_hidden.html b/accessible/tests/mochitest/events/test_aria_objattr.html similarity index 65% rename from accessible/tests/mochitest/events/test_aria_hidden.html rename to accessible/tests/mochitest/events/test_aria_objattr.html index 25e72833210a..a4810fe1e895 100644 --- a/accessible/tests/mochitest/events/test_aria_hidden.html +++ b/accessible/tests/mochitest/events/test_aria_objattr.html @@ -1,7 +1,7 @@ - Accessible ARIA hidden attribute + Accessible ARIA object attribute changes @@ -43,14 +43,38 @@ } } + function updateSort(aID, aSort) + { + this.node = getNode(aID); + this.accessible = getAccessible(this.node); + + this.eventSeq = [ + new invokerChecker(EVENT_OBJECT_ATTRIBUTE_CHANGED, this.accessible), + ]; + + this.invoke = function updateSort_invoke() + { + this.node.setAttribute("aria-sort", aSort); + } + + this.getID = function updateSort_getID() + { + return "aria-sort for " + aID + " " + aSort; + } + } + + // Debug stuff. + // gA11yEventDumpID = "eventdump"; + // gA11yEventDumpToConsole = true; + function doTests() { - //gA11yEventDumpID = "eventdump"; // debug stuff - gQueue = new eventQueue(); gQueue.push(new hideNode("hideable", "true")); + gQueue.push(new updateSort("sortable", "ascending")); + gQueue.invoke(); // Will call SimpleTest.finish(); } @@ -67,6 +91,12 @@ Mozilla Bug 581096 + + Mozilla Bug 640707 + +

@@ -75,5 +105,6 @@
 
   
Hi
there
+
aria-sort
From 6c39859dae8591ef19c72933cc12ee361095069b Mon Sep 17 00:00:00 2001 From: Mounir Lamouri Date: Tue, 17 May 2011 18:39:22 +0200 Subject: [PATCH 043/282] Bug 656909 - Use a native rendering for vertical progress bar on Windows. r=jimm --- widget/src/windows/nsNativeThemeWin.cpp | 89 ++++++++++++++++++------- widget/src/windows/nsUXThemeConstants.h | 2 + widget/src/xpwidgets/nsNativeTheme.cpp | 7 ++ widget/src/xpwidgets/nsNativeTheme.h | 1 + 4 files changed, 76 insertions(+), 23 deletions(-) diff --git a/widget/src/windows/nsNativeThemeWin.cpp b/widget/src/windows/nsNativeThemeWin.cpp index 372e09c9cc51..7975db480824 100644 --- a/widget/src/windows/nsNativeThemeWin.cpp +++ b/widget/src/windows/nsNativeThemeWin.cpp @@ -349,10 +349,14 @@ static CaptionButtonPadding buttonData[3] = { * These values are found by experimenting and comparing against native widgets * used by the system. They are very unlikely exact but try to not be too wrong. */ -// The width of the overlay used to animate the progress bar (Vista and later). -static const PRInt32 kProgressVistaOverlayWidth = 120; -// The width of the overlay used to for indeterminate progress bars on XP. -static const PRInt32 kProgressXPOverlayWidth = 55; +// The width of the overlay used to animate the horizontal progress bar (Vista and later). +static const PRInt32 kProgressHorizontalVistaOverlaySize = 120; +// The width of the overlay used for the horizontal indeterminate progress bars on XP. +static const PRInt32 kProgressHorizontalXPOverlaySize = 55; +// The height of the overlay used to animate the vertical progress bar (Vista and later). +static const PRInt32 kProgressVerticalOverlaySize = 45; +// The height of the overlay used for the vertical indeterminate progress bar (Vista and later). +static const PRInt32 kProgressVerticalIndeterminateOverlaySize = 60; // Speed (px per ms) of the animation for determined Vista and later progress bars. static const double kProgressDeterminedVistaSpeed = 0.225; // Speed (px per ms) of the animation for indeterminate progress bars. @@ -672,17 +676,24 @@ nsNativeThemeWin::GetThemePartAndState(nsIFrame* aFrame, PRUint8 aWidgetType, return NS_OK; } case NS_THEME_PROGRESSBAR: { - aPart = PP_BAR; + aPart = IsVerticalProgress(aFrame) ? PP_BARVERT : PP_BAR; aState = TS_NORMAL; return NS_OK; } case NS_THEME_PROGRESSBAR_CHUNK: { nsIFrame* stateFrame = aFrame->GetParent(); nsEventStates eventStates = GetContentState(stateFrame, aWidgetType); - // If the element is indeterminate, we are going to render it ourself so - // we have to return aPart = -1. - aPart = IsIndeterminateProgress(stateFrame, eventStates) - ? -1 : nsUXThemeData::sIsVistaOrLater ? PP_FILL : PP_CHUNK; + + if (IsIndeterminateProgress(stateFrame, eventStates)) { + // If the element is indeterminate, we are going to render it ourself so + // we have to return aPart = -1. + aPart = -1; + } else if (IsVerticalProgress(stateFrame)) { + aPart = nsUXThemeData::sIsVistaOrLater ? PP_FILLVERT : PP_CHUNKVERT; + } else { + aPart = nsUXThemeData::sIsVistaOrLater ? PP_FILL : PP_CHUNK; + } + aState = TS_NORMAL; return NS_OK; } @@ -1567,43 +1578,75 @@ RENDER_AGAIN: nsIFrame* stateFrame = aFrame->GetParent(); nsEventStates eventStates = GetContentState(stateFrame, aWidgetType); bool indeterminate = IsIndeterminateProgress(stateFrame, eventStates); + bool vertical = IsVerticalProgress(stateFrame); if (indeterminate || nsUXThemeData::sIsVistaOrLater) { if (!QueueAnimatedContentForRefresh(aFrame->GetContent(), 60)) { NS_WARNING("unable to animate progress widget!"); } - const PRInt32 overlayWidth = nsUXThemeData::sIsVistaOrLater - ? kProgressVistaOverlayWidth - : kProgressXPOverlayWidth; + /** + * Unfortunately, vertical progress bar support on Windows seems weak and + * PP_MOVEOVERLAYRECT looks really different from PP_MOVEOVERLAY. + * Thus, we have to change the size and even don't use it for vertical + * indeterminate progress bars. + */ + PRInt32 overlaySize; + if (nsUXThemeData::sIsVistaOrLater) { + if (vertical) { + overlaySize = indeterminate ? kProgressVerticalIndeterminateOverlaySize + : kProgressVerticalOverlaySize; + } else { + overlaySize = kProgressHorizontalVistaOverlaySize; + } + } else { + overlaySize = kProgressHorizontalXPOverlaySize; + } + const double pixelsPerMillisecond = indeterminate ? kProgressIndeterminateSpeed : kProgressDeterminedVistaSpeed; const PRInt32 delay = indeterminate ? kProgressIndeterminateDelay : kProgressDeterminedVistaDelay; - const PRInt32 frameWidth = widgetRect.right - widgetRect.left; - const PRInt32 animationWidth = frameWidth + overlayWidth + + const PRInt32 frameSize = vertical ? widgetRect.bottom - widgetRect.top + : widgetRect.right - widgetRect.left; + const PRInt32 animationSize = frameSize + overlaySize + static_cast(pixelsPerMillisecond * delay); - const double interval = animationWidth / pixelsPerMillisecond; + const double interval = animationSize / pixelsPerMillisecond; // We have to pass a double* to modf and we can't pass NULL. double tempValue; double ratio = modf(PR_IntervalToMilliseconds(PR_IntervalNow())/interval, &tempValue); // If the frame direction is RTL, we want to have the animation going RTL. // ratio is in [0.0; 1.0[ range, inverting it reverse the animation. - if (IsFrameRTL(aFrame)) { + if (!vertical && IsFrameRTL(aFrame)) { ratio = 1.0 - ratio; } - PRInt32 dx = static_cast(animationWidth * ratio) - overlayWidth; + PRInt32 dx = static_cast(animationSize * ratio) - overlaySize; RECT overlayRect = widgetRect; - overlayRect.left += dx; - overlayRect.right = overlayRect.left + overlayWidth; - nsUXThemeData::drawThemeBG(theme, hdc, - nsUXThemeData::sIsVistaOrLater ? PP_MOVEOVERLAY - : PP_CHUNK, - state, &overlayRect, &clipRect); + if (vertical) { + overlayRect.bottom -= dx; + overlayRect.top = overlayRect.bottom - overlaySize; + } else { + overlayRect.left += dx; + overlayRect.right = overlayRect.left + overlaySize; + } + + PRInt32 overlayPart; + if (vertical) { + if (nsUXThemeData::sIsVistaOrLater) { + overlayPart = indeterminate ? PP_MOVEOVERLAY : PP_MOVEOVERLAYVERT; + } else { + overlayPart = PP_CHUNKVERT; + } + } else { + overlayPart = nsUXThemeData::sIsVistaOrLater ? PP_MOVEOVERLAY : PP_CHUNK; + } + + nsUXThemeData::drawThemeBG(theme, hdc, overlayPart, state, &overlayRect, + &clipRect); } } diff --git a/widget/src/windows/nsUXThemeConstants.h b/widget/src/windows/nsUXThemeConstants.h index 28e2edc29f8f..afab8117ce60 100644 --- a/widget/src/windows/nsUXThemeConstants.h +++ b/widget/src/windows/nsUXThemeConstants.h @@ -117,7 +117,9 @@ #define PP_CHUNK 3 #define PP_CHUNKVERT 4 #define PP_FILL 5 +#define PP_FILLVERT 6 #define PP_MOVEOVERLAY 8 +#define PP_MOVEOVERLAYVERT 9 // Tab constants #define TABP_TAB 4 diff --git a/widget/src/xpwidgets/nsNativeTheme.cpp b/widget/src/xpwidgets/nsNativeTheme.cpp index dce6db986940..05eeddd79e4a 100644 --- a/widget/src/xpwidgets/nsNativeTheme.cpp +++ b/widget/src/xpwidgets/nsNativeTheme.cpp @@ -472,6 +472,13 @@ nsNativeTheme::IsIndeterminateProgress(nsIFrame* aFrame, eCaseMatters); } +PRBool +nsNativeTheme::IsVerticalProgress(nsIFrame* aFrame) +{ + return aFrame && + aFrame->GetStyleDisplay()->mOrient == NS_STYLE_ORIENT_VERTICAL; +} + // menupopup: PRBool nsNativeTheme::IsSubmenu(nsIFrame* aFrame, PRBool* aLeftOfParent) diff --git a/widget/src/xpwidgets/nsNativeTheme.h b/widget/src/xpwidgets/nsNativeTheme.h index 8b6cd28791c1..b91f75b66073 100644 --- a/widget/src/xpwidgets/nsNativeTheme.h +++ b/widget/src/xpwidgets/nsNativeTheme.h @@ -161,6 +161,7 @@ class nsNativeTheme : public nsITimerCallback // progressbar: PRBool IsIndeterminateProgress(nsIFrame* aFrame, nsEventStates aEventStates); + PRBool IsVerticalProgress(nsIFrame* aFrame); // textfield: PRBool IsReadOnly(nsIFrame* aFrame) { From d3b8ce217fe40b355aacbf0a5f46d9151a4af08a Mon Sep 17 00:00:00 2001 From: Joel Maher Date: Tue, 17 May 2011 13:10:37 -0400 Subject: [PATCH 044/282] Bug 654461 - cleanup chrome and a11y harnesses to simplify code. r=ted, a=test-only --- testing/mochitest/Makefile.in | 2 - testing/mochitest/browser-harness.xul | 62 +++------------- testing/mochitest/browser-test-overlay.xul | 1 + testing/mochitest/browser-test.js | 17 +++-- testing/mochitest/chrome-harness.js | 67 +++++++++++++++++ testing/mochitest/harness-a11y.xul | 11 --- testing/mochitest/harness-overlay.xul | 40 ++++------- testing/mochitest/jar.mn | 2 - testing/mochitest/redirect-a11y.html | 14 ---- testing/mochitest/runtests.py | 80 +++++++++++++-------- testing/mochitest/tests/SimpleTest/setup.js | 18 +++++ 11 files changed, 168 insertions(+), 146 deletions(-) delete mode 100644 testing/mochitest/harness-a11y.xul delete mode 100644 testing/mochitest/redirect-a11y.html diff --git a/testing/mochitest/Makefile.in b/testing/mochitest/Makefile.in index 8167ea7d54ec..290eda6edfc4 100644 --- a/testing/mochitest/Makefile.in +++ b/testing/mochitest/Makefile.in @@ -86,7 +86,6 @@ _SERV_FILES = \ $(topsrcdir)/build/mobile/remoteautomation.py \ gen_template.pl \ server.js \ - harness-a11y.xul \ harness-overlay.xul \ harness.xul \ browser-test-overlay.xul \ @@ -95,7 +94,6 @@ _SERV_FILES = \ ipc-overlay.xul \ ipc.js \ browser-harness.xul \ - redirect-a11y.html \ redirect.html \ redirect.js \ $(topsrcdir)/build/pgo/server-locations.txt \ diff --git a/testing/mochitest/browser-harness.xul b/testing/mochitest/browser-harness.xul index b255ce75a03a..ed2e95b328ac 100644 --- a/testing/mochitest/browser-harness.xul +++ b/testing/mochitest/browser-harness.xul @@ -104,13 +104,13 @@ var gDumper = { get fileLogger() { let logger = null; - if (gConfig.logPath) { + if (gConfig.logFile) { try { - MozillaFileLogger.init(gConfig.logPath); + MozillaFileLogger.init(gConfig.logFile); logger = MozillaFileLogger; } catch (ex) { dump("TEST-UNEXPECTED-FAIL | (browser-harness.xul) | " + - "Error trying to log to " + gConfig.logPath + ": " + ex + "\n"); + "Error trying to log to " + gConfig.logFile + ": " + ex + "\n"); } } delete this.fileLogger; @@ -140,39 +140,10 @@ document.getElementById("runTestsButton").label = "Run " + gConfig.testPath + " tests"; - if (gConfig.autoRun) + if (gConfig.autorun) setTimeout(runTests, 0); } - function readConfig() { - var fileLocator = Cc["@mozilla.org/file/directory_service;1"]. - getService(Ci.nsIProperties); - var configFile = fileLocator.get("ProfD", Ci.nsIFile); - configFile.append("testConfig.js"); - - if (!configFile.exists()) - return; - - var fileInStream = Cc["@mozilla.org/network/file-input-stream;1"]. - createInstance(Ci.nsIFileInputStream); - var sstream = Cc["@mozilla.org/scriptableinputstream;1"]. - createInstance(Ci.nsIScriptableInputStream); - fileInStream.init(configFile, -1, 0, 0); - sstream.init(fileInStream); - - var config = ""; - var str = sstream.read(4096); - while (str.length > 0) { - config += str; - str = sstream.read(4096); - } - - sstream.close(); - fileInStream.close(); - - return eval(config); - } - var gErrorCount = 0; function browserTest(aTestFile) { @@ -229,31 +200,14 @@ // Returns an array of browserTest objects for all the selected tests function listTests() { - var baseURL = 'chrome://mochitests/content'; - var testsURI = Components.classes["@mozilla.org/file/directory_service;1"] - .getService(Components.interfaces.nsIProperties) - .get("ProfD", Components.interfaces.nsILocalFile); - testsURI.append("tests.manifest"); - var ioSvc = Components.classes["@mozilla.org/network/io-service;1"]. - getService(Components.interfaces.nsIIOService); - var manifestFile = ioSvc.newFileURI(testsURI) - .QueryInterface(Components.interfaces.nsIFileURL).file; - - Components.manager.QueryInterface(Components.interfaces.nsIComponentRegistrar). - autoRegister(manifestFile); + [links, singleTestPath] = getTestList(); // load server.js in so we can share template functions var scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"]. - getService(Ci.mozIJSSubScriptLoader); + getService(Ci.mozIJSSubScriptLoader); var srvScope = {}; - scriptLoader.loadSubScript('chrome://mochikit/content/server.js', srvScope); - - var jar = getJar(baseURL); - if (jar != null) { - var [links, singleTestPath] = getMochitestJarListing(baseURL, gConfig.testPath, "browser"); - } else { - var [links, singleTestPath] = getFileListing(baseURL, gConfig.testPath, "browser", srvScope); - } + scriptLoader.loadSubScript('chrome://mochikit/content/server.js', + srvScope); var fileNames = []; var fileNameRegexp = /browser_.+\.js$/; diff --git a/testing/mochitest/browser-test-overlay.xul b/testing/mochitest/browser-test-overlay.xul index 0d6be54860c4..6d40a52e8d47 100644 --- a/testing/mochitest/browser-test-overlay.xul +++ b/testing/mochitest/browser-test-overlay.xul @@ -40,5 +40,6 @@ + - - - - -redirecting... - - diff --git a/testing/mochitest/runtests.py b/testing/mochitest/runtests.py index ac0633dada54..7c80322ecc26 100644 --- a/testing/mochitest/runtests.py +++ b/testing/mochitest/runtests.py @@ -405,7 +405,6 @@ class Mochitest(object): # Path to the test script on the server TEST_PATH = "/tests/" CHROME_PATH = "/redirect.html"; - A11Y_PATH = "/redirect-a11y.html" urlOpts = [] runSSLTunnel = True vmwareHelper = None @@ -434,14 +433,8 @@ class Mochitest(object): """ Build the url path to the specific test harness and test file or directory """ testHost = "http://mochi.test:8888" testURL = testHost + self.TEST_PATH + options.testPath - if options.chrome: - testURL = testHost + self.CHROME_PATH - if options.testPath: - self.urlOpts.append("testPath=" + encodeURIComponent(options.testPath)) - elif options.a11y: - testURL = testHost + self.A11Y_PATH - if options.testPath: - self.urlOpts.append("testPath=" + encodeURIComponent(options.testPath)) + if options.chrome or options.a11y: + testURL = testHost + self.CHROME_PATH elif options.browserChrome: testURL = "about:blank" elif options.ipcplugins: @@ -554,7 +547,7 @@ class Mochitest(object): # allow relative paths for logFile if options.logFile: options.logFile = self.getLogFilePath(options.logFile) - if options.browserChrome: + if options.browserChrome or options.chrome or options.a11y: self.makeTestConfig(options) else: if options.autorun: @@ -679,23 +672,54 @@ class Mochitest(object): def makeTestConfig(self, options): "Creates a test configuration file for customizing test execution." - def boolString(b): - if b: - return "true" - return "false" + def jsonString(val): + if isinstance(val, bool): + if val: + return "true" + return "false" + elif val is None: + return '""' + elif isinstance(val, basestring): + return '"%s"' % (val.replace('\\', '\\\\')) + elif isinstance(val, int): + return '%s' % (val) + elif isinstance(val, list): + content = '[' + first = True + for item in val: + if first: + first = False + else: + content += ", " + content += jsonString(item) + content += ']' + return content + else: + print "unknown type: %s: %s" % (opt, val) + sys.exit(1) - logFile = options.logFile.replace("\\", "\\\\") - testPath = options.testPath.replace("\\", "\\\\") - content = """\ -({ - autoRun: %(autorun)s, - closeWhenDone: %(closeWhenDone)s, - logPath: "%(logPath)s", - testPath: "%(testPath)s" -})""" % {"autorun": boolString(options.autorun), - "closeWhenDone": boolString(options.closeWhenDone), - "logPath": logFile, - "testPath": testPath} + options.logFile = options.logFile.replace("\\", "\\\\") + options.testPath = options.testPath.replace("\\", "\\\\") + testRoot = 'chrome' + if (options.browserChrome): + testRoot = 'browser' + elif (options.a11y): + testRoot = 'a11y' + + #TODO: when we upgrade to python 2.6, just use json.dumps(options.__dict__) + content = "{" + content += '"testRoot": "%s", ' % (testRoot) + first = True + for opt in options.__dict__.keys(): + val = options.__dict__[opt] + if first: + first = False + else: + content += ", " + + content += '"' + opt + '": ' + content += jsonString(val) + content += "}" with open(os.path.join(options.profilePath, "testConfig.js"), "w") as config: config.write(content) @@ -742,12 +766,12 @@ toolbar#nav-bar { # Support Firefox (browser) and SeaMonkey (navigator). chrome = "" - if options.browserChrome: + if options.browserChrome or options.chrome or options.a11y: chrome += """ overlay chrome://browser/content/browser.xul chrome://mochikit/content/browser-test-overlay.xul overlay chrome://navigator/content/navigator.xul chrome://mochikit/content/browser-test-overlay.xul """ - elif (options.chrome == False) and (options.a11y == False): + else: #only do the ipc-overlay.xul for mochitest-plain. #Currently there are focus issues in chrome tests and issues with new windows and dialogs when using ipc chrome += """ diff --git a/testing/mochitest/tests/SimpleTest/setup.js b/testing/mochitest/tests/SimpleTest/setup.js index e9f693fac996..9fa7dc855c84 100644 --- a/testing/mochitest/tests/SimpleTest/setup.js +++ b/testing/mochitest/tests/SimpleTest/setup.js @@ -42,6 +42,24 @@ TestRunner.logger = new Logger(); // Check the query string for arguments var params = parseQueryString(location.search.substring(1), true); +var config = {}; +if (window.readConfig) { + config = readConfig(); +} + +if (config.testRoot == "chrome" || config.testRoot == "a11y") { + for (p in params) { + if (params[p] == 1) { + config[p] = true; + } else if (params[p] == 0) { + config[p] = false; + } else { + config[p] = params[p]; + } + } + params = config; +} + // set the per-test timeout if specified in the query string if (params.timeout) { TestRunner.timeout = parseInt(params.timeout) * 1000; From 51a78c71ebc66f84f31c4a6b048f56ee39d9bc4c Mon Sep 17 00:00:00 2001 From: Michael Wu Date: Tue, 17 May 2011 11:06:16 -0700 Subject: [PATCH 045/282] Bug 656050 - Fix jar reordering on linux by moving jarlog dir, r=ted --- build/pgo/profileserver.py | 2 +- toolkit/locales/l10n.mk | 2 +- toolkit/mozapps/installer/packager.mk | 7 ++++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/build/pgo/profileserver.py b/build/pgo/profileserver.py index da787554e2a7..a765de04c565 100644 --- a/build/pgo/profileserver.py +++ b/build/pgo/profileserver.py @@ -54,7 +54,7 @@ from automationutils import getDebuggerInfo, addCommonOptions PORT = 8888 PROFILE_DIRECTORY = os.path.abspath(os.path.join(SCRIPT_DIR, "./pgoprofile")) -MOZ_JAR_LOG_DIR = os.path.abspath(os.path.join(os.path.join(os.getenv("OBJDIR"), "dist"), "jarlog")) +MOZ_JAR_LOG_DIR = os.path.abspath(os.path.join(os.getenv("OBJDIR"), "jarlog")) os.chdir(SCRIPT_DIR) class EasyServer(SocketServer.TCPServer): diff --git a/toolkit/locales/l10n.mk b/toolkit/locales/l10n.mk index 5f0b006dae49..f3fd26c8f7e8 100644 --- a/toolkit/locales/l10n.mk +++ b/toolkit/locales/l10n.mk @@ -139,7 +139,7 @@ endif repackage-zip: UNPACKAGE="$(ZIP_IN)" repackage-zip: libs-$(AB_CD) # Adjust jar logs with the new locale (can't use sed -i because of bug 373784) - -$(PERL) -pi.old -e "s/en-US/$(AB_CD)/g" $(_ABS_DIST)/jarlog/*.jar.log + -$(PERL) -pi.old -e "s/en-US/$(AB_CD)/g" $(JARLOG_DIR)/*.jar.log # call a hook for apps to put their uninstall helper.exe into the package $(UNINSTALLER_PACKAGE_HOOK) # copy xpi-stage over, but not install.rdf and chrome.manifest, diff --git a/toolkit/mozapps/installer/packager.mk b/toolkit/mozapps/installer/packager.mk index c3fdc3aef219..93d6a36d60bc 100644 --- a/toolkit/mozapps/installer/packager.mk +++ b/toolkit/mozapps/installer/packager.mk @@ -84,6 +84,7 @@ SDK = $(SDK_PATH)$(PKG_BASENAME).sdk$(SDK_SUFFIX) MAKE_PACKAGE = $(error What is a $(MOZ_PKG_FORMAT) package format?); _ABS_DIST = $(call core_abspath,$(DIST)) +JARLOG_DIR = $(call core_abspath,$(DEPTH)/jarlog/) CREATE_FINAL_TAR = $(TAR) -c --owner=0 --group=0 --numeric-owner \ --mode="go-w" -f @@ -392,11 +393,11 @@ PACK_OMNIJAR = \ find . | xargs touch -t 201001010000 && \ zip -r9mX omni.jar $(OMNIJAR_FILES) -x $(NON_OMNIJAR_FILES) && \ $(GENERATE_CACHE) && \ - $(OPTIMIZE_JARS_CMD) --optimize $(_ABS_DIST)/jarlog/ ./ ./ && \ + $(OPTIMIZE_JARS_CMD) --optimize $(JARLOG_DIR) ./ ./ && \ mv binary.manifest components && \ printf "manifest components/binary.manifest\n" > chrome.manifest UNPACK_OMNIJAR = \ - $(OPTIMIZE_JARS_CMD) --deoptimize $(_ABS_DIST)/jarlog/ ./ ./ && \ + $(OPTIMIZE_JARS_CMD) --deoptimize $(JARLOG_DIR) ./ ./ && \ unzip -o omni.jar && \ rm -f components/binary.manifest && \ sed -e 's/^\#binary-component/binary-component/' components/components.manifest > components.manifest && \ @@ -619,7 +620,7 @@ else endif # DMG endif # MOZ_PKG_MANIFEST endif # UNIVERSAL_BINARY - $(OPTIMIZE_JARS_CMD) --optimize $(DIST)/jarlog/ $(DIST)/bin/chrome $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)/chrome + $(OPTIMIZE_JARS_CMD) --optimize $(JARLOG_DIR) $(DIST)/bin/chrome $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)/chrome ifndef PKG_SKIP_STRIP ifeq ($(OS_ARCH),OS2) @echo "Stripping package directory..." From 4bfbb86634f1d53b58018feec1c3fefdc4e5464e Mon Sep 17 00:00:00 2001 From: Bas Schouten Date: Tue, 17 May 2011 21:27:05 +0200 Subject: [PATCH 046/282] Bug 657141: Avoid excessive clipping by only popping to the common ancestor. r=jrmuizel --- gfx/cairo/cairo/src/cairo-d2d-surface.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/gfx/cairo/cairo/src/cairo-d2d-surface.cpp b/gfx/cairo/cairo/src/cairo-d2d-surface.cpp index 066533a96c44..43ae796c4512 100644 --- a/gfx/cairo/cairo/src/cairo-d2d-surface.cpp +++ b/gfx/cairo/cairo/src/cairo-d2d-surface.cpp @@ -3161,6 +3161,7 @@ _cairo_d2d_mask(void *surface, cairo_rectangle_int_t extents; cairo_clip_t *actual_clip = clip; + cairo_clip_t temporary_clip; cairo_int_status_t status; @@ -3207,10 +3208,21 @@ _cairo_d2d_mask(void *surface, box.p2.y = MIN(box.p2.y, boxes->p2.y); if (clip->path != d2dsurf->clip.path) { - // Only reset the clip if we don't have the right clip set. Otherwise - // just leave the clip as it is. If we have the right clip set we - // should not do a needless pop of the clip. - actual_clip = NULL; + // If we have a clip set, but it's not the right one. We want to + // pop as much as we need to, to be sure the area affected by + // the operation is not clipped. To do this we set the clip path + // to the common ancestor of the currently set clip path and the + // clip path for this operation. This will cause + // _cairo_d2d_set_clip to pop to that common ancestor, but not + // needlessly push the additional clips we're trying to avoid. + temporary_clip.path = find_common_ancestor(clip->path, d2dsurf->clip.path); + + // We're not going to be using this down the line so it doesn't + // really matter what the value is. If all -was- clipped this + // call shouldn't even have reached the surface backend. + temporary_clip.all_clipped = FALSE; + + actual_clip = &temporary_clip; } } From 3cacc4c5315a5290445fe512237003b3b0adcece Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hern=C3=A1n=20Rodriguez=20Colmeiro?= Date: Tue, 17 May 2011 12:57:38 -0700 Subject: [PATCH 047/282] Bug 656269: Add link to Mozilla plugin check from Add-ons Manager. r=dtownsend --- .../chrome/mozapps/extensions/extensions.dtd | 4 ++ .../mozapps/extensions/content/extensions.css | 6 ++- .../mozapps/extensions/content/extensions.js | 7 +++ .../mozapps/extensions/content/extensions.xul | 11 +++++ .../extensions/test/browser/Makefile.in | 1 + .../browser/browser_globalinformations.js | 46 +++++++++++++++++++ .../mozapps/extensions/extensions.css | 7 +++ .../mozapps/extensions/extensions.css | 7 +++ 8 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 toolkit/mozapps/extensions/test/browser/browser_globalinformations.js diff --git a/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd b/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd index 2b25cb389d1c..424d601ee69c 100644 --- a/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd +++ b/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd @@ -23,6 +23,10 @@ + + + + diff --git a/toolkit/mozapps/extensions/content/extensions.css b/toolkit/mozapps/extensions/content/extensions.css index a2d353a14615..ae77c59c054c 100644 --- a/toolkit/mozapps/extensions/content/extensions.css +++ b/toolkit/mozapps/extensions/content/extensions.css @@ -156,11 +156,15 @@ xhtml|link { /* Plugins aren't yet disabled by safemode (bug 342333), so don't show that warning when viewing plugins. */ -#addons-page[warning="safemode"] .view-pane[type="plugin"] .global-warning, +#addons-page[warning="safemode"] .view-pane[type="plugin"] .global-warning-container, #addons-page[warning="safemode"] #detail-view[loading="true"] .global-warning { display: none; } +#addons-page .view-pane:not([type="plugin"]) .global-info-container { + display: none; +} + .addon .relnotes { -moz-user-select: text; } diff --git a/toolkit/mozapps/extensions/content/extensions.js b/toolkit/mozapps/extensions/content/extensions.js index 1f029c7e787c..bd7d92cd5c13 100644 --- a/toolkit/mozapps/extensions/content/extensions.js +++ b/toolkit/mozapps/extensions/content/extensions.js @@ -699,6 +699,13 @@ var gViewController = { } }, + cmd_pluginCheck: { + isEnabled: function() true, + doCommand: function() { + openURL(Services.urlFormatter.formatURLPref("plugins.update.url")); + } + }, + cmd_toggleAutoUpdateDefault: { isEnabled: function() true, doCommand: function() { diff --git a/toolkit/mozapps/extensions/content/extensions.xul b/toolkit/mozapps/extensions/content/extensions.xul index f5b32259e577..ac72cb4e9902 100644 --- a/toolkit/mozapps/extensions/content/extensions.xul +++ b/toolkit/mozapps/extensions/content/extensions.xul @@ -120,6 +120,7 @@ + @@ -394,6 +395,16 @@ + + +
  • To make the timer start on your signal and fire every 10 milliseconds of wall-clock time use: @@ -189,82 +205,87 @@ corresponding to one function. A typical section looks something like this:
    -             141300 PL_ProcessPendingEvents
    -                927 PL_ProcessEventsBeforeID
    - 29358   0   142227 PL_HandleEvent
    -              92394 nsInputStreamReadyEvent::EventHandler(PLEvent*)
    -              49181 HandlePLEvent(ReflowEvent*)
    -                481 handleTimerEvent(TimerEventType*)
    -                158 nsTransportStatusEvent::HandleEvent(PLEvent*)
    -                  9 PL_DestroyEvent
    -
    -                  4 __restore_rt
    + index  Count         Hits      Function Name
    +                           545 (46.4%) nsBlockFrame::ReflowInlineFrames(nsBlockReflowState&, nsLineList_iterator, int*)
    +                           100 (8.5%)  nsBlockFrame::ReflowDirtyLines(nsBlockReflowState&)
    + 72870      4 (0.3%)       645 (54.9%) nsBlockFrame::DoReflowInlineFrames(nsBlockReflowState&, nsLineLayout&, nsLineList_iterator, nsFlowAreaRect&, int&, nsFloatManager::SavedState*, int*, LineReflowStatus*, int)
    +                           545 (46.4%) nsBlockFrame::ReflowInlineFrame(nsBlockReflowState&, nsLineLayout&, nsLineList_iterator, nsIFrame*, LineReflowStatus*)
    +                            83 (7.1%)  nsBlockFrame::PlaceLine(nsBlockReflowState&, nsLineLayout&, nsLineList_iterator, nsFloatManager::SavedState*, nsRect&, int&, int*)
    +                             9 (0.8%)  nsLineLayout::BeginLineReflow(int, int, int, int, int, int)
    +                             1 (0.1%)  nsTextFrame::GetType() const
    +                             1 (0.1%)  nsLineLayout::RelativePositionFrames(nsOverflowAreas&)
    +                             1 (0.1%)  __i686.get_pc_thunk.bx
    +                             1 (0.1%)  PL_ArenaAllocate
     
    The information this block tells us is:
      -
    • There were 0 profiler hits in PL_HandleEvent -
    • There were 142227 profiler hits under PL_HandleEvent. Of these: +
    • There were 4 profiler hits in nsBlockFrame::DoReflowInlineFrames +
    • There were 645 profiler hits in or under nsBlockFrame::DoReflowInlineFrames. Of these:
        -
      • 92394 were in or under nsInputStreamReadyEvent::EventHandler -
      • 49181 were in or under HandlePLEvent(ReflowEvent*) -
      • 481 were in or under handleTimerEvent -
      • 158 were in or under nsTransportStatusEvent::HandleEvent -
      • 9 were in or under PL_DestroyEvent -
      • 4 were in or under __restore_rt +
      • 545 were in or under nsBlockFrame::ReflowInlineFrame +
      • 83 were in or under nsBlockFrame::PlaceLine +
      • 9 were in or under nsLineLayout::BeginLineReflow +
      • 1 was in or under nsTextFrame::GetType +
      • 1 was in or under nsLineLayout::RelativePositionFrames +
      • 1 was in or under __i686.get_pc_thunk.bx +
      • 1 was in or under PL_ArenaAllocate
      -
    • Of these 142227 calls into PL_HandleEvent: +
    • Of these 645 calls into nsBlockFrame::DoReflowInlineFrames:
        -
      • 141300 came from PL_ProcessPendingEvents -
      • 927 came from PL_ProcessEventsBeforeID +
      • 545 came from nsBlockFrame::ReflowInlineFrames +
      • 100 came from nsBlockFrame::ReflowDirtyLines
    The rest of this section explains how to read this information off from the jprof output. -

    This block corresponds to the function PL_HandleEvent, which is +

    This block corresponds to the function nsBlockFrame::DoReflowInlineFrames, which is therefore bolded and not a link. The name of this function is preceded by -three numbers which have the following meaning. The number on the left (29358) -is the index number, and is not important. The center number (0) is the number -of times this function was interrupted by the timer. The last number (142227) -is the number of times this function was in the call stack when the timer went +five numbers which have the following meaning. The number on the left (72870) +is the index number, and is not important. The next number (4) and the +percentage following (0.3%) are the number +of times this function was interrupted by the timer and the percentage of +the total hits that is. The last number pair ("645 (54.9%)") +are the number of times this function was in the call stack when the timer went off. That is, the timer went off while we were in code that was ultimately -called from PL_HandleEvent. +called from nsBlockFrame::DoReflowInlineFrames.

    For our example we can see that our function was in the call stack for -142227 interrupt ticks, but we were never the function that was running when -the interrupt arrived. +645 interrupt ticks, but we were only the function that was running when +the interrupt arrived 4 times.

    -The functions listed above the line for PL_HandleEvent are its +The functions listed above the line for nsBlockFrame::DoReflowInlineFrames are its callers. The numbers to the left of these function names are the numbers of times these functions were in the call stack as callers of -PL_HandleEvent. In our example, we were called 927 times by -PL_ProcessEventsBeforeID and 141300 times by -PL_ProcessPendingEvents. +nsBlockFrame::DoReflowInlineFrames. In our example, we were called 545 times by +nsBlockFrame::ReflowInlineFrames and 100 times by +nsBlockFrame::ReflowDirtyLines.

    -The functions listed below the line for PL_HandleEvent are its +The functions listed below the line for nsBlockFrame::DoReflowInlineFrames are its callees. The numbers to the left of the function names are the numbers of -times these functions were in the callstack as callees of PL_HandleEvent. In our example, of the 142227 profiler hits under PL_HandleEvent 92394 were under nsInputStreamReadyEvent::EventHandler, 49181 were under HandlePLEvent(ReflowEvent*), and so forth. +times these functions were in the callstack as callees of +nsBlockFrame::DoReflowInlineFrames and the corresponding percentages. In our example, of the 645 profiler hits under nsBlockFrame::DoReflowInlineFrames 545 were under nsBlockFrame::ReflowInlineFrame, 83 were under nsBlockFrame::PlaceLine, and so forth.

    + +NOTE: If there are loops of execution or recursion, the numbers will +not add up and percentages can exceed 100%. If a function directly calls +itself "(self)" will be appended to the line, but indirect recursion will +not be marked.

    Bugs

    -Jprof has only been tested under Red Hat Linux 6.0, 6.1, and 6.2. It does -not work under 6.0, though it is possible hack up the source code and make -it work there. The way I determine the stack trace from inside the -signal handler is tightly bound to the version of glibc that is running. -If you know of a more portable way to get this information please let -me know. - -

    Update

    +The current build of Jprof has only been tested under Ubuntu 8.04 LTS, but +should work under any fairly modern linux distribution using GCC/GLIBC. +Please update this document with any known compatibilities/incompatibilities. +

    +If you get an error:

    Inconsistency detected by ld.so: dl-open.c: 260: dl_open_worker: Assertion `_dl_debug_initialize (0, args->nsid)->r_state == RT_CONSISTENT' failed! +

    that means you've hit a timing hole in the version of glibc you're +running. See Redhat bug 4578. + diff --git a/tools/jprof/leaky.cpp b/tools/jprof/leaky.cpp index bcc6c58a2f15..4ebd3887f789 100644 --- a/tools/jprof/leaky.cpp +++ b/tools/jprof/leaky.cpp @@ -1,3 +1,4 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * @@ -128,6 +129,7 @@ leaky::leaky() quiet = TRUE; showAddress = FALSE; + showThreads = FALSE; stackDepth = 100000; mappedLogFile = -1; @@ -149,7 +151,8 @@ leaky::~leaky() void leaky::usageError() { - fprintf(stderr, "Usage: %s prog log\n", (char*) applicationName); + fprintf(stderr, "Usage: %s [-v][-t] [-e exclude] [-i include] [-s stackdepth] prog log\n", (char*) applicationName); + fprintf(stderr, "\t-v: verbose\n\t-t: split threads\n"); exit(-1); } @@ -165,14 +168,15 @@ void leaky::initialize(int argc, char** argv) int arg; int errflg = 0; - while ((arg = getopt(argc, argv, "adEe:gh:i:r:Rs:tqx")) != -1) { + while ((arg = getopt(argc, argv, "adEe:gh:i:r:Rs:tqvx")) != -1) { switch (arg) { case '?': + default: errflg++; break; case 'a': break; - case 'A': + case 'A': // not implemented showAddress = TRUE; break; case 'd': @@ -184,7 +188,7 @@ void leaky::initialize(int argc, char** argv) break; case 'g': break; - case 'r': + case 'r': // not implemented roots.add(optarg); if (!includes.IsEmpty()) { errflg++; @@ -207,7 +211,12 @@ void leaky::initialize(int argc, char** argv) case 'x': break; case 'q': - quiet = TRUE; + break; + case 'v': + quiet = !quiet; + break; + case 't': + showThreads = TRUE; break; } } @@ -265,6 +274,10 @@ void leaky::LoadMap() void leaky::open() { + int threadArray[100]; // should auto-expand + int last_thread = -1; + int numThreads=0; + LoadMap(); setupSymbols(progFile); @@ -279,7 +292,61 @@ void leaky::open() firstLogEntry = (malloc_log_entry*) mapFile(mappedLogFile, PROT_READ, &size); lastLogEntry = (malloc_log_entry*)((char*)firstLogEntry + size); - analyze(); + fprintf(stdout,"Jprof Profile Report\n"); + fprintf(stdout,"

    Jprof Profile Report

    \n"); + + if (showThreads) + { + // Find all the threads captured + + // pthread/linux docs say the signal can be delivered to any thread in + // the process. In practice, it appears in Linux that it's always + // delivered to the thread that called setitimer(), and each thread can + // have a separate itimer. There's a support library for gprof that + // overlays pthread_create() to set timers in any threads you spawn. + + // This loop walks through all the call stacks we recorded + for (malloc_log_entry* lep=firstLogEntry; + lep < lastLogEntry; + lep = reinterpret_cast(&lep->pcs[lep->numpcs])) { + if (lep->thread != last_thread) + { + int i; + for (i=0; ithread == threadArray[i]) + break; + } + if (i == numThreads && + i < (int) (sizeof(threadArray)/sizeof(threadArray[0]))) + { + threadArray[i] = lep->thread; + numThreads++; + fprintf(stderr,"new thread %d\n",lep->thread); + } + } + } + fprintf(stderr,"Num threads %d\n",numThreads); + + fprintf(stdout,"
    Threads:

    \n");
    +    for (int i=0; i%d

    \n", + threadArray[i],threadArray[i]); + } + fprintf(stdout,"


    "); + + for (int i=0; i\n"); exit(0); } @@ -428,14 +495,19 @@ void leaky::dumpEntryToLog(malloc_log_entry* lep) displayStackTrace(stdout, lep); } -void leaky::generateReportHTML(FILE *fp, int *countArray, int count) +void leaky::generateReportHTML(FILE *fp, int *countArray, int count, int thread) { - fprintf(fp,"Jprof Profile Report\n"); - fprintf(fp,"

    Jprof Profile Report

    \n"); fprintf(fp,"
    "); - fprintf(fp,"flat | hierarchical"); + if (showThreads) + { + fprintf(fp,"
    Thread: %d

    ", + thread,thread); + } + fprintf(fp,"flat | hierarchical", + thread,thread); fprintf(fp,"

    \n"); + int totalTimerHits = count; int *rankingTable = new int[usefulSymbols]; for(int cnt=usefulSymbols; --cnt>=0; rankingTable[cnt]=cnt); @@ -464,23 +536,29 @@ void leaky::generateReportHTML(FILE *fp, int *countArray, int count) // this loop. Later we can get callers and callees into it like gprof // does fprintf(fp, - "

    Hierarchical Profile


    \n"); + "

    Hierarchical Profile


    \n", + thread); fprintf(fp, "
    \n");
    -  fprintf(fp, "%5s %5s    %4s %s\n",
    -  "index", "Count", "Hits", "Function Name");
    +  fprintf(fp, "%6s %6s         %4s      %s\n",
    +          "index", "Count", "Hits", "Function Name");
     
       for(i=0; i0; i++) {
         Symbol *sp=&externalSymbols[rankingTable[i]];
         
    -    sp->cntP.printReport(fp, this);
    +    sp->cntP.printReport(fp, this, rankingTable[i], totalTimerHits);
     
         char *symname = htmlify(sp->name);
    -    fprintf(fp, "%6d %3d %8d %s\n", rankingTable[i],
    -            sp->timerHit, rankingTable[i], countArray[rankingTable[i]],
    +    fprintf(fp, "%6d %6d (%3.1f%%)%s %8d (%3.1f%%)%s %s\n", 
    +            rankingTable[i],
    +            sp->timerHit, (sp->timerHit*1000/totalTimerHits)/10.0,
    +            (sp->timerHit*1000/totalTimerHits)/10.0 >= 10.0 ? "" : " ",
    +            rankingTable[i], countArray[rankingTable[i]],
    +            (countArray[rankingTable[i]]*1000/totalTimerHits)/10.0,
    +            (countArray[rankingTable[i]]*1000/totalTimerHits)/10.0 >= 10.0 ? "" : " ",
                 symname);
         delete [] symname;
     
    -    sp->cntC.printReport(fp, this);
    +    sp->cntC.printReport(fp, this, rankingTable[i], totalTimerHits);
     
         fprintf(fp, "
    \n"); } @@ -508,14 +586,21 @@ void leaky::generateReportHTML(FILE *fp, int *countArray, int count) // I wanted the total before walking the list, if this // double-pass over externalSymbols gets slow we can // do single-pass and print this out after the loop finishes. - int totalTimerHits = 0; + totalTimerHits = 0; for(i=0; i0; i++) { Symbol *sp=&externalSymbols[rankingTable[i]]; totalTimerHits += sp->timerHit; } + if (totalTimerHits == 0) + totalTimerHits = 1; - fprintf(fp,"

    Flat Profile


    \n"); + if (totalTimerHits != count) + fprintf(stderr,"Hit count mismatch: count=%d; totalTimerHits=%d", + count,totalTimerHits); + + fprintf(fp,"

    Flat Profile


    \n", + thread); fprintf(fp, "
    \n");
     
       fprintf(fp, "Total hit count: %d\n", totalTimerHits);
    @@ -532,11 +617,9 @@ void leaky::generateReportHTML(FILE *fp, int *countArray, int count)
                 ((float)sp->timerHit/(float)totalTimerHits)*100.0, symname);
         delete [] symname;
       }
    -
    -  fprintf(fp,"
    \n"); } -void leaky::analyze() +void leaky::analyze(int thread) { int *countArray = new int[usefulSymbols]; int *flagArray = new int[usefulSymbols]; @@ -558,8 +641,11 @@ void leaky::analyze() lep < lastLogEntry; lep = reinterpret_cast(&lep->pcs[lep->numpcs])) { - if (excluded(lep) || !included(lep)) + if ((thread != 0 && lep->thread != thread) || + excluded(lep) || !included(lep)) + { continue; + } ++stacks; // How many stack frames did we collect @@ -568,7 +654,7 @@ void leaky::analyze() u_int n = (lep->numpcs < stackDepth) ? lep->numpcs : stackDepth; char** pcp = &lep->pcs[n-1]; int idx=-1, parrentIdx=-1; // Init idx incase n==0 - for(int i=n-1; i>=0; --i, --pcp, parrentIdx=idx) { + for (int i=n-1; i>=0; --i, --pcp) { idx = findSymbolIndex(reinterpret_cast(*pcp)); if(idx>=0) { @@ -593,6 +679,9 @@ void leaky::analyze() externalSymbols[parrentIdx].regChild(idx); externalSymbols[idx].regParrent(parrentIdx); } + // inside if() so an unknown in the middle of a stack won't break + // the link! + parrentIdx=idx; } } @@ -602,12 +691,12 @@ void leaky::analyze() } } - generateReportHTML(stdout, countArray, stacks); + generateReportHTML(stdout, countArray, stacks, thread); } -void FunctionCount::printReport(FILE *fp, leaky *lk) +void FunctionCount::printReport(FILE *fp, leaky *lk, int parent, int total) { - const char *fmt = " %6d %s\n"; + const char *fmt = " %8d (%3.1f%%)%s %s%s\n"; int nmax, tmax=((~0U)>>1); @@ -618,7 +707,11 @@ void FunctionCount::printReport(FILE *fp, leaky *lk) if(cnt==tmax) { int idx = getIndex(j); char *symname = htmlify(lk->indexToName(idx)); - fprintf(fp, fmt, idx, getCount(j), symname); + fprintf(fp, fmt, idx, getCount(j), + getCount(j)*100.0/total, + getCount(j)*100.0/total >= 10.0 ? "" : " ", + symname, + parent == idx ? " (self)" : ""); delete [] symname; } else if(cntnmax) { nmax=cnt; diff --git a/tools/jprof/leaky.h b/tools/jprof/leaky.h index 1b65ca23caeb..41250c58fd3f 100644 --- a/tools/jprof/leaky.h +++ b/tools/jprof/leaky.h @@ -52,7 +52,7 @@ struct leaky; class FunctionCount : public IntCount { public: - void printReport(FILE *fp, leaky *lk); + void printReport(FILE *fp, leaky *lk, int parent, int total); }; struct Symbol { @@ -90,6 +90,7 @@ struct leaky { int quiet; int showAddress; + int showThreads; u_int stackDepth; int mappedLogFile; @@ -115,7 +116,7 @@ struct leaky { void LoadMap(); - void analyze(); + void analyze(int thread); void dumpEntryToLog(malloc_log_entry* lep); @@ -133,7 +134,7 @@ struct leaky { const char* indexToName(int idx) {return externalSymbols[idx].name;} private: - void generateReportHTML(FILE *fp, int *countArray, int count); + void generateReportHTML(FILE *fp, int *countArray, int count, int thread); int findSymbolIndex(u_long address); }; diff --git a/tools/jprof/stub/Makefile.in b/tools/jprof/stub/Makefile.in index 52757a9673d3..8da3eac1b19f 100644 --- a/tools/jprof/stub/Makefile.in +++ b/tools/jprof/stub/Makefile.in @@ -48,6 +48,9 @@ EXPORTS = LIBRARY_NAME = jprof EXPORT_LIBRARY = 1 +# override optimization +MOZ_OPTIMIZE_FLAGS = -fno-omit-frame-pointer + CPPSRCS = \ libmalloc.cpp \ $(NULL) diff --git a/tools/jprof/stub/libmalloc.cpp b/tools/jprof/stub/libmalloc.cpp index 5e092e956c9f..5a81e7a53603 100644 --- a/tools/jprof/stub/libmalloc.cpp +++ b/tools/jprof/stub/libmalloc.cpp @@ -23,6 +23,7 @@ * Jim Nance * L. David Baron - JP_REALTIME, JPROF_PTHREAD_HACK, and SIGUSR1 handling * Mike Shaver - JP_RTC_HZ support + * Randell Jesup - glibc backtrace() support * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or @@ -61,7 +62,9 @@ #include #include #include +#include #include +#include #include "libmalloc.h" #include "jprof.h" @@ -77,6 +80,10 @@ extern r_debug _r_debug; #include #endif +#define USE_GLIBC_BACKTRACE 1 +// To debug, use #define JPROF_STATIC +#define JPROF_STATIC //static + static int gLogFD = -1; static pthread_t main_thread; @@ -87,9 +94,32 @@ static int enableRTCSignals(bool enable); //---------------------------------------------------------------------- #if defined(i386) || defined(_i386) || defined(__x86_64__) -static void CrawlStack(malloc_log_entry* me, - void* stack_top, void* top_instr_ptr) +JPROF_STATIC void CrawlStack(malloc_log_entry* me, + void* stack_top, void* top_instr_ptr) { +#if USE_GLIBC_BACKTRACE + // This probably works on more than x86! But we need a way to get the + // top instruction pointer, which is kindof arch-specific + void *array[500]; + int cnt, i; + u_long numpcs = 0; + bool tracing = false; + + // This is from glibc. A more generic version might use + // libunwind and/or CaptureStackBackTrace() on Windows + cnt = backtrace(&array[0],sizeof(array)/sizeof(array[0])); + + // StackHook->JprofLog->CrawlStack + // Then we have sigaction, which replaced top_instr_ptr + array[3] = top_instr_ptr; + for (i = 3; i < cnt; i++) + { + me->pcs[numpcs++] = (char *) array[i]; + } + me->numpcs = numpcs; + +#else + // original code - this breaks on many platforms void **bp; #if defined(__i386) __asm__( "movl %%ebp, %0" : "=g"(bp)); @@ -102,6 +132,7 @@ static void CrawlStack(malloc_log_entry* me, bp = __builtin_frame_address(0); #endif u_long numpcs = 0; + bool tracing = false; me->pcs[numpcs++] = (char*) top_instr_ptr; @@ -111,13 +142,17 @@ static void CrawlStack(malloc_log_entry* me, if (nextbp < bp) { break; } - if (bp > stack_top) { + if (tracing) { // Skip the signal handling. me->pcs[numpcs++] = (char*) pc; } + else if (pc == top_instr_ptr) { + tracing = true; + } bp = nextbp; } me->numpcs = numpcs; +#endif } #endif @@ -169,13 +204,14 @@ static void EndProfilingHook(int signum) //---------------------------------------------------------------------- -static void -Log(u_long aTime, void* stack_top, void* top_instr_ptr) +JPROF_STATIC void +JprofLog(u_long aTime, void* stack_top, void* top_instr_ptr) { // Static is simply to make debugging tollerable static malloc_log_entry me; me.delTime = aTime; + me.thread = syscall(SYS_gettid); //gettid(); CrawlStack(&me, stack_top, top_instr_ptr); @@ -281,7 +317,7 @@ static int enableRTCSignals(bool enable) } #endif -static void StackHook( +JPROF_STATIC void StackHook( int signum, siginfo_t *info, void *ucontext) @@ -325,9 +361,9 @@ void *ucontext) gregset_t &gregs = ((ucontext_t*)ucontext)->uc_mcontext.gregs; #ifdef __x86_64__ - Log(millisec, (void*)gregs[REG_RSP], (void*)gregs[REG_RIP]); + JprofLog(millisec, (void*)gregs[REG_RSP], (void*)gregs[REG_RIP]); #else - Log(millisec, (void*)gregs[REG_ESP], (void*)gregs[REG_EIP]); + JprofLog(millisec, (void*)gregs[REG_ESP], (void*)gregs[REG_EIP]); #endif if (!rtcHz) @@ -371,21 +407,26 @@ NS_EXPORT_(void) setupProfilingStuff(void) char *delay = strstr(tst,"JP_PERIOD="); if(delay) { - double tmp = strtod(delay+10, NULL); - if(tmp>1e-3) { + double tmp = strtod(delay+strlen("JP_PERIOD="), NULL); + if (tmp>=1e-3) { timerMiliSec = static_cast(1000 * tmp); - } + } else { + fprintf(stderr, + "JP_PERIOD of %g less than 0.001 (1ms), using 1ms\n", + tmp); + timerMiliSec = 1; + } } char *first = strstr(tst, "JP_FIRST="); if(first) { - firstDelay = atol(first+9); + firstDelay = atol(first+strlen("JP_FIRST=")); } char *rtc = strstr(tst, "JP_RTC_HZ="); if (rtc) { #if defined(linux) - rtcHz = atol(rtc+10); + rtcHz = atol(rtc+strlen("JP_RTC_HZ=")); timerMiliSec = 0; /* This makes JP_FIRST work right. */ realTime = 1; /* It's the _R_TC and all. ;) */ @@ -420,6 +461,8 @@ NS_EXPORT_(void) setupProfilingStuff(void) atexit(DumpAddressMap); main_thread = pthread_self(); + //fprintf(stderr,"jprof: main_thread = %u\n", + // (unsigned int)main_thread); sigemptyset(&mset); action.sa_handler = NULL; diff --git a/tools/jprof/stub/libmalloc.h b/tools/jprof/stub/libmalloc.h index 80e7b57cca0a..b6d40a1fe8c0 100644 --- a/tools/jprof/stub/libmalloc.h +++ b/tools/jprof/stub/libmalloc.h @@ -52,6 +52,7 @@ typedef unsigned long u_long; struct malloc_log_entry { u_long delTime; u_long numpcs; + int thread; char* pcs[MAX_STACK_CRAWL]; }; From 514ab4a72072f97dbbdf4bc513701bf9fa8538cc Mon Sep 17 00:00:00 2001 From: Mark Finkle Date: Tue, 17 May 2011 00:12:40 -0400 Subject: [PATCH 112/282] Bug 657067 - XPIProvider.jsm refers to nsIPrefBranch.getComplexPref... which doesn't exist [r=dtownsend] --- toolkit/mozapps/extensions/XPIProvider.jsm | 6 +++--- toolkit/mozapps/extensions/nsBlocklistService.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/toolkit/mozapps/extensions/XPIProvider.jsm b/toolkit/mozapps/extensions/XPIProvider.jsm index 324c303c51cb..84ad6a2cf97b 100644 --- a/toolkit/mozapps/extensions/XPIProvider.jsm +++ b/toolkit/mozapps/extensions/XPIProvider.jsm @@ -344,7 +344,7 @@ SafeInstallOperation.prototype = { function getLocale() { if (Prefs.getBoolPref(PREF_MATCH_OS_LOCALE, false)) return Services.locale.getLocaleComponentForUserAgent(); - let locale = Prefs.getComplexPref(PREF_SELECTED_LOCALE, Ci.nsIPrefLocalizedString); + let locale = Prefs.getComplexValue(PREF_SELECTED_LOCALE, Ci.nsIPrefLocalizedString); if (locale) return locale; return Prefs.getCharPref(PREF_SELECTED_LOCALE, "en-US"); @@ -1229,9 +1229,9 @@ var Prefs = { * A value to return if the preference does not exist * @return the value of the preference or aDefaultValue if there is none */ - getComplexPref: function(aName, aType, aDefaultValue) { + getComplexValue: function(aName, aType, aDefaultValue) { try { - return Services.prefs.getComplexPref(aName, aType).data; + return Services.prefs.getComplexValue(aName, aType).data; } catch (e) { } diff --git a/toolkit/mozapps/extensions/nsBlocklistService.js b/toolkit/mozapps/extensions/nsBlocklistService.js index 427977ad2a55..ec6d30e13aef 100644 --- a/toolkit/mozapps/extensions/nsBlocklistService.js +++ b/toolkit/mozapps/extensions/nsBlocklistService.js @@ -246,8 +246,8 @@ function getLocale() { try { // Get the default branch var defaultPrefs = gPref.getDefaultBranch(null); - return defaultPrefs.getComplexPref(PREF_GENERAL_USERAGENT_LOCALE, - Ci.nsIPrefLocalizedString).data; + return defaultPrefs.getComplexValue(PREF_GENERAL_USERAGENT_LOCALE, + Ci.nsIPrefLocalizedString).data; } catch (e) {} return gPref.getCharPref(PREF_GENERAL_USERAGENT_LOCALE); From f1dc6cff4ad7012594f450fb1c4ea99cb0f0e1e2 Mon Sep 17 00:00:00 2001 From: Mark Banner Date: Tue, 17 May 2011 07:54:59 +0100 Subject: [PATCH 113/282] Bug 653662 Disable incremental linking of libxul on Windows for the time being. Some developers and tree builders are hitting a hard-coded limit in Visual Studio where the link fails if the incremental link data file is over a certain size. r=ted --- toolkit/library/Makefile.in | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/toolkit/library/Makefile.in b/toolkit/library/Makefile.in index 75d7869f8952..893ad1e4c3aa 100644 --- a/toolkit/library/Makefile.in +++ b/toolkit/library/Makefile.in @@ -132,6 +132,16 @@ else SDK_LIBRARY = $(SHARED_LIBRARY) endif +# See bug 653662 - some builders are hitting an internal size limit +# on incremental builds. Disable this for debug builds for now. We may +# be able to revisit this after our builders are upgraded to something +# later than Visual Studio 2005. +ifeq ($(OS_ARCH),WINNT) +ifdef MOZ_DEBUG +EXTRA_DSO_LDOPTS += -INCREMENTAL:NO +endif +endif + EXTRA_DSO_LDOPTS += $(LIBS_DIR) $(EXTRA_DSO_LIBS) ifndef MOZ_ENABLE_LIBXUL From f3370e122185add2fdd6f5c088ee42e4b123b5cc Mon Sep 17 00:00:00 2001 From: Henri Sivonen Date: Tue, 17 May 2011 10:15:48 +0300 Subject: [PATCH 114/282] Bug 656881 - Make timer in file_bug534293-slow.sjs not suspectible to early GC. r=jwalden. --- parser/htmlparser/tests/mochitest/file_bug534293-slow.sjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/parser/htmlparser/tests/mochitest/file_bug534293-slow.sjs b/parser/htmlparser/tests/mochitest/file_bug534293-slow.sjs index 287ee12437f8..ec456f3ebdc8 100644 --- a/parser/htmlparser/tests/mochitest/file_bug534293-slow.sjs +++ b/parser/htmlparser/tests/mochitest/file_bug534293-slow.sjs @@ -1,10 +1,12 @@ +var timer; + function handleRequest(request, response) { response.setHeader("Cache-Control", "no-cache", false); response.setHeader("Content-Type", "text/javascript", false); response.write("ok(true, 'Slow script ran.');"); response.processAsync(); - var timer = Components.classes["@mozilla.org/timer;1"] + timer = Components.classes["@mozilla.org/timer;1"] .createInstance(Components.interfaces.nsITimer); timer.initWithCallback(function() { response.finish(); From b7d8bff6f5c74d4b3584034933eb826a13ac26a6 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Tue, 17 May 2011 09:34:20 +0200 Subject: [PATCH 115/282] Bug 657396 - Move LDFLAGS after other flags when building elfhack test case. r=ted --- build/unix/elfhack/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/unix/elfhack/Makefile.in b/build/unix/elfhack/Makefile.in index 81ef3b29714f..00ce11c0c08d 100644 --- a/build/unix/elfhack/Makefile.in +++ b/build/unix/elfhack/Makefile.in @@ -91,7 +91,7 @@ test$(DLL_SUFFIX): test.$(OBJ_SUFFIX) elfhack $(CSRCS:.c=.$(OBJ_SUFFIX)) [ $$(objdump -R $@.bak | wc -l) -gt $$(objdump -R $@ | wc -l) ] dummy: dummy.$(OBJ_SUFFIX) test$(DLL_SUFFIX) - $(CC) $(LDFLAGS) -o $@ $^ + $(CC) -o $@ $^ $(LDFLAGS) libs:: dummy # Will either crash or return exit code 1 if elfhack is broken From aacb2ec3c5f4883117d504e8d12b6d22bb2d3ee0 Mon Sep 17 00:00:00 2001 From: Vivien Nicolas <21@vingtetun.org> Date: Tue, 17 May 2011 11:55:05 +0200 Subject: [PATCH 116/282] Bug 653146: switch awesomescreen tabs immediately on tap [r=wesj] --- mobile/chrome/content/bindings.xml | 36 +++++++++++++++++++++-------- mobile/chrome/content/browser-ui.js | 14 +++++------ mobile/themes/core/browser.css | 22 ++++++++++++++++++ 3 files changed, 54 insertions(+), 18 deletions(-) diff --git a/mobile/chrome/content/bindings.xml b/mobile/chrome/content/bindings.xml index bdb64784cfdc..8e2692fd94d6 100644 --- a/mobile/chrome/content/bindings.xml +++ b/mobile/chrome/content/bindings.xml @@ -1254,17 +1254,25 @@ + + + @@ -1364,17 +1372,25 @@ + + + diff --git a/mobile/chrome/content/browser-ui.js b/mobile/chrome/content/browser-ui.js index d69f2a50a326..af7c190fa9d0 100644 --- a/mobile/chrome/content/browser-ui.js +++ b/mobile/chrome/content/browser-ui.js @@ -1196,15 +1196,11 @@ var BrowserUI = { this.activePanel = HistoryList; break; case "cmd_remoteTabs": - // remove the checked state set by the click it will be reset by setting - // checked on the command element if we decide to show this panel (see AwesomePanel.js) - document.getElementById("remotetabs-button").removeAttribute("checked"); - if (Weave.Status.checkSetup() == Weave.CLIENT_NOT_CONFIGURED) { - this.activePanel = null; - WeaveGlue.open(); } else if (!Weave.Service.isLoggedIn) { + // unchecked the relative command button + document.getElementById("remotetabs-button").removeAttribute("checked"); this.activePanel = null; BrowserUI.showPanel("prefs-container"); @@ -1217,9 +1213,11 @@ var BrowserUI = { prefsBox.scrollBoxObject.scrollTo(0, syncAreaY - prefsBoxY); }, 0); } - } else { - this.activePanel = RemoteTabsList; + + return; } + + this.activePanel = RemoteTabsList; break; case "cmd_quit": GlobalOverlay.goQuitApplication(); diff --git a/mobile/themes/core/browser.css b/mobile/themes/core/browser.css index faa4b1d438f8..e505000c1006 100644 --- a/mobile/themes/core/browser.css +++ b/mobile/themes/core/browser.css @@ -414,6 +414,28 @@ toolbarbutton.choice-remotetabs { list-style-image: url(chrome://browser/skin/images/remotetabs-48.png); } +/* awesomescreen panels ---------------------------------------------------- */ +historylist > hbox.history-throbber-box, +remotetabslist > hbox.remotetabs-throbber-box { + display: none; +} + +.history-throbber-box > image, +.remotetabs-throbber-box > image { + list-style-image: url("chrome://browser/skin/images/throbber.png"); +} + +historylist[loading="true"] > hbox.history-throbber-box, +remotetabslist[loading="true"] > hbox.remotetabs-throbber-box { + background-color: white; + display: -moz-box; +} + +historylist[loading="true"] > richlistbox.history-list-children, +remotetabslist[loading="true"] > richlistbox.remotetabs-list-children { + visibility: collapse; +} + /* browsers ---------------------------------------------------------------- */ .input-overlay:-moz-focusring { outline: 0 !important; From 4f0d491bdd40afcf9114b9d8360aa7be80631b3a Mon Sep 17 00:00:00 2001 From: Vivien Nicolas <21@vingtetun.org> Date: Tue, 17 May 2011 11:55:05 +0200 Subject: [PATCH 117/282] Bug 656373: Turn off Form Assistant zooming, panning and next/prev on tablets [r=mfinkle] --- mobile/app/mobile.js | 3 ++- mobile/chrome/content/Util.js | 7 +++++++ mobile/chrome/content/common-ui.js | 32 +++++++++++++++++++++++------- mobile/chrome/content/forms.js | 14 +++++++------ 4 files changed, 42 insertions(+), 14 deletions(-) diff --git a/mobile/app/mobile.js b/mobile/app/mobile.js index f2d8b1ed17c6..b3526067cb01 100644 --- a/mobile/app/mobile.js +++ b/mobile/app/mobile.js @@ -172,7 +172,8 @@ pref("signon.expireMasterPassword", false); pref("signon.SignonFileName", "signons.txt"); /* form helper */ -pref("formhelper.enabled", true); +// 0 = disabled, 1 = enabled, 2 = dynamic depending on screen size +pref("formhelper.mode", 2); pref("formhelper.autozoom", true); pref("formhelper.autozoom.caret", true); pref("formhelper.restore", false); diff --git a/mobile/chrome/content/Util.js b/mobile/chrome/content/Util.js index 5d33f2209562..4594a237d277 100644 --- a/mobile/chrome/content/Util.js +++ b/mobile/chrome/content/Util.js @@ -161,6 +161,13 @@ let Util = { return (!appInfo || appInfo.getService(Ci.nsIXULRuntime).processType == Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT); }, + isTablet: function isTablet() { + // See the tablet_panel_minwidth from mobile/themes/core/defines.inc + let tablet_panel_minwidth = 124; + let dpmm = Util.getWindowUtils(window).displayDPI / 25.4; + return (window.innerWidth / dpmm <= tablet_panel_minwidth); + }, + isPortrait: function isPortrait() { #ifdef MOZ_PLATFORM_MAEMO return (screen.width <= screen.height); diff --git a/mobile/chrome/content/common-ui.js b/mobile/chrome/content/common-ui.js index df00ab7f4321..250106e2c652 100644 --- a/mobile/chrome/content/common-ui.js +++ b/mobile/chrome/content/common-ui.js @@ -675,6 +675,12 @@ var FormHelperUI = { // Listen some events to show/hide arrows Elements.browsers.addEventListener("PanBegin", this, false); Elements.browsers.addEventListener("PanFinished", this, false); + + // Dynamically enabled/disabled the form helper if needed depending on + // the size of the screen + let mode = Services.prefs.getIntPref("formhelper.mode"); + let state = (mode == 2) ? !Util.isTablet() : !!mode; + Services.prefs.setBoolPref("formhelper.enabled", state); }, _currentBrowser: null, @@ -792,22 +798,34 @@ var FormHelperUI = { }, receiveMessage: function formHelperReceiveMessage(aMessage) { - if (!this._open && aMessage.name != "FormAssist:Show" && aMessage.name != "FormAssist:Hide") + let allowedMessages = ["FormAssist:Show", "FormAssist:Hide", "FormAssist:AutoComplete"]; + if (!this._open && allowedMessages.indexOf(aMessage.name) == -1) return; let json = aMessage.json; switch (aMessage.name) { case "FormAssist:Show": // if the user has manually disabled the Form Assistant UI we still - // want to show a UI for element and still want to show + // autocomplete suggestions but not managed by FormHelperUI + if (this.enabled) { + this.show(json.current, json.hasPrevious, json.hasNext) + } else if (json.current.choices) { + SelectHelperUI.show(json.current.choices, json.current.title); + } else { + this._currentElementRect = Rect.fromRect(json.current.rect); + this._currentBrowser = getBrowser(); + this._updateSuggestionsFor(json.current); + } break; case "FormAssist:Hide": - this.enabled ? this.hide() - : SelectHelperUI.hide(); + if (this.enabled) { + this.hide(); + } else { + SelectHelperUI.hide(); + ContentPopupHelper.popup = null; + } break; case "FormAssist:Resize": diff --git a/mobile/chrome/content/forms.js b/mobile/chrome/content/forms.js index d0df32cc86da..30cdd83afe54 100644 --- a/mobile/chrome/content/forms.js +++ b/mobile/chrome/content/forms.js @@ -179,10 +179,12 @@ FormAssistant.prototype = { return false; } - // If form assistant is disabled but the element is a type of choice list - // we still want to show the simple select list + // There is some case where we still want some data to be send to the + // parent process even if form assistant is disabled: + // - the element is a choice list + // - the element has autocomplete suggestions this._enabled = Services.prefs.getBoolPref("formhelper.enabled"); - if (!this._enabled && !this._isSelectElement(aElement)) + if (!this._enabled && !this._isSelectElement(aElement) && !this._isAutocomplete(aElement)) return this.close(); if (this._enabled) { @@ -210,7 +212,7 @@ FormAssistant.prototype = { receiveMessage: function receiveMessage(aMessage) { let currentElement = this.currentElement; - if ((!this._enabled && !getWrapperForElement(currentElement)) || !currentElement) + if ((!this._enabled && !this._isAutocomplete(currentElement) && !getWrapperForElement(currentElement)) || !currentElement) return; let json = aMessage.json; @@ -729,8 +731,8 @@ FormAssistant.prototype = { maxLength: element.maxLength, type: (element.getAttribute("type") || "").toLowerCase(), choices: choices, - isAutocomplete: this._isAutocomplete(this.currentElement), - list: this._getListSuggestions(this.currentElement), + isAutocomplete: this._isAutocomplete(element), + list: this._getListSuggestions(element), rect: this._getRect(), caretRect: this._getCaretRect() }, From 3ea309cc44ed7feaa529537588416dbeee925180 Mon Sep 17 00:00:00 2001 From: Vivien Nicolas <21@vingtetun.org> Date: Tue, 17 May 2011 11:55:05 +0200 Subject: [PATCH 118/282] Bug 640630 - about:home advertises add-ons that are installed already [r=mfinkle] --- mobile/chrome/content/aboutHome.xhtml | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/mobile/chrome/content/aboutHome.xhtml b/mobile/chrome/content/aboutHome.xhtml index 89d82ee01530..21b5dfa68617 100644 --- a/mobile/chrome/content/aboutHome.xhtml +++ b/mobile/chrome/content/aboutHome.xhtml @@ -98,6 +98,7 @@ + + + diff --git a/widget/tests/window_bug596600.xul b/widget/tests/window_bug596600.xul new file mode 100644 index 000000000000..28e96f68e00d --- /dev/null +++ b/widget/tests/window_bug596600.xul @@ -0,0 +1,4 @@ + + + From 43a7619e54e1e309a82e3f13b7d30a4be796e4fc Mon Sep 17 00:00:00 2001 From: Mounir Lamouri Date: Mon, 16 May 2011 12:19:27 +0200 Subject: [PATCH 122/282] Bug 656284 - Fix clipped XUL progressmeter on Windows. r=roc --- layout/reftests/forms/progress/style.css | 2 ++ layout/style/forms.css | 1 + .../progressbar-fallback-default-style-ref.html | 2 ++ widget/src/windows/nsNativeThemeWin.cpp | 16 ---------------- 4 files changed, 5 insertions(+), 16 deletions(-) diff --git a/layout/reftests/forms/progress/style.css b/layout/reftests/forms/progress/style.css index 63db367696ca..5651360232fc 100644 --- a/layout/reftests/forms/progress/style.css +++ b/layout/reftests/forms/progress/style.css @@ -23,6 +23,8 @@ div.progress-bar { * width: 100%; */ + -moz-box-sizing: border-box; + /* Default style in case of there is -moz-appearance: none; */ background-color: ThreeDShadow; } diff --git a/layout/style/forms.css b/layout/style/forms.css index b91956442b0f..33826df7182d 100644 --- a/layout/style/forms.css +++ b/layout/style/forms.css @@ -679,6 +679,7 @@ progress { float: none ! important; position: static ! important; overflow: visible ! important; + -moz-box-sizing: border-box ! important; -moz-appearance: progresschunk; height: 100%; diff --git a/widget/reftests/progressbar-fallback-default-style-ref.html b/widget/reftests/progressbar-fallback-default-style-ref.html index 19cee0169171..30918cf36c91 100644 --- a/widget/reftests/progressbar-fallback-default-style-ref.html +++ b/widget/reftests/progressbar-fallback-default-style-ref.html @@ -29,6 +29,8 @@ height: 100%; width: 100%; + -moz-box-sizing: border-box; + /* Default style in case of there is -moz-appearance: none; */ background-color: ThreeDShadow; } diff --git a/widget/src/windows/nsNativeThemeWin.cpp b/widget/src/windows/nsNativeThemeWin.cpp index b6152f0db6f8..372e09c9cc51 100644 --- a/widget/src/windows/nsNativeThemeWin.cpp +++ b/widget/src/windows/nsNativeThemeWin.cpp @@ -349,14 +349,6 @@ static CaptionButtonPadding buttonData[3] = { * These values are found by experimenting and comparing against native widgets * used by the system. They are very unlikely exact but try to not be too wrong. */ -// PP_CHUNK is overflowing on the bottom for no appearant reasons. -// This is a fix around this issue. -static const PRInt32 kProgressDeterminedXPOverflow = 11; -// Same thing but for PP_FILL. -static const PRInt32 kProgressDeterminedVistaOverflow = 4; -// Same thing but for indeterminate progress bar. -// The value is the same for PP_CHUNK and PP_MOVEOVERLAY in that case. -static const PRInt32 kProgressIndeterminateOverflow = 2; // The width of the overlay used to animate the progress bar (Vista and later). static const PRInt32 kProgressVistaOverlayWidth = 120; // The width of the overlay used to for indeterminate progress bars on XP. @@ -1326,14 +1318,6 @@ RENDER_AGAIN: } else if (aWidgetType == NS_THEME_WINDOW_BUTTON_CLOSE) { OffsetBackgroundRect(widgetRect, CAPTIONBUTTON_CLOSE); - } else if (aWidgetType == NS_THEME_PROGRESSBAR_CHUNK) { - nsIFrame* stateFrame = aFrame->GetParent(); - nsEventStates eventStates = GetContentState(stateFrame, aWidgetType); - widgetRect.bottom -= IsIndeterminateProgress(stateFrame, eventStates) - ? kProgressIndeterminateOverflow - : nsUXThemeData::sIsVistaOrLater - ? kProgressDeterminedVistaOverflow - : kProgressDeterminedXPOverflow; } // widgetRect is the bounding box for a widget, yet the scale track is only From f4961e70d3aa383b31e596bf37c1fe7ed082a10f Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Mon, 16 May 2011 15:49:29 +0200 Subject: [PATCH 123/282] Fixup for bug 644608. r=ted --- config/rules.mk | 2 ++ js/src/config/rules.mk | 2 ++ 2 files changed, 4 insertions(+) diff --git a/config/rules.mk b/config/rules.mk index 8ef3307d5a69..45c546c05b64 100644 --- a/config/rules.mk +++ b/config/rules.mk @@ -801,6 +801,7 @@ $(error SHARED_LIBRARY_LIBS must contain .$(LIB_SUFFIX) files only) endif # Create dependencies on static (and shared EXTRA_DSO_LIBS) libraries +ifeq (,$(filter clean clobber clobber_all distclean realclean,$(MAKECMDGOALS))) ifneq (,$(strip $(filter %.$(LIB_SUFFIX),$(LIBS) $(EXTRA_DSO_LDOPTS)) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LIBS))) $(MDDEPDIR)/libs: Makefile.in @$(EXPAND_LIBS_DEPS) LIBS_DEPS = $(filter %.$(LIB_SUFFIX),$(LIBS)) , \ @@ -815,6 +816,7 @@ $(MDDEPDIR)/libs: $(filter %.$(LIBS_DESC_SUFFIX),$(LIBS_DEPS) $(SHARED_LIBRARY_L EXTRA_DEPS += $(MDDEPDIR)/libs endif +endif HOST_LIBS_DEPS = $(filter %.$(LIB_SUFFIX),$(HOST_LIBS)) diff --git a/js/src/config/rules.mk b/js/src/config/rules.mk index 8ef3307d5a69..45c546c05b64 100644 --- a/js/src/config/rules.mk +++ b/js/src/config/rules.mk @@ -801,6 +801,7 @@ $(error SHARED_LIBRARY_LIBS must contain .$(LIB_SUFFIX) files only) endif # Create dependencies on static (and shared EXTRA_DSO_LIBS) libraries +ifeq (,$(filter clean clobber clobber_all distclean realclean,$(MAKECMDGOALS))) ifneq (,$(strip $(filter %.$(LIB_SUFFIX),$(LIBS) $(EXTRA_DSO_LDOPTS)) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LIBS))) $(MDDEPDIR)/libs: Makefile.in @$(EXPAND_LIBS_DEPS) LIBS_DEPS = $(filter %.$(LIB_SUFFIX),$(LIBS)) , \ @@ -815,6 +816,7 @@ $(MDDEPDIR)/libs: $(filter %.$(LIBS_DESC_SUFFIX),$(LIBS_DEPS) $(SHARED_LIBRARY_L EXTRA_DEPS += $(MDDEPDIR)/libs endif +endif HOST_LIBS_DEPS = $(filter %.$(LIB_SUFFIX),$(HOST_LIBS)) From b281811c0294e13c4424de750ab2d1b6c84586f7 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Mon, 16 May 2011 15:51:21 +0200 Subject: [PATCH 124/282] Bug 569365 - Remove preprocessor.pl and replace it with Preprocessor.py. r=ted --HG-- rename : config/Expression.py => js/src/config/Expression.py rename : config/Preprocessor.py => js/src/config/Preprocessor.py --- browser/locales/Makefile.in | 4 +- config/Makefile.in | 2 +- config/preprocessor.pl | 671 ---------------------------- config/preprocessor.txt | 252 ----------- js/src/config/Expression.py | 209 +++++++++ js/src/config/Makefile.in | 2 +- js/src/config/Preprocessor.py | 477 ++++++++++++++++++++ js/src/config/preprocessor.pl | 671 ---------------------------- toolkit/locales/l10n.mk | 2 +- xulrunner/app/Makefile.in | 2 +- xulrunner/installer/mac/Makefile.in | 2 +- 11 files changed, 693 insertions(+), 1601 deletions(-) delete mode 100644 config/preprocessor.pl delete mode 100644 config/preprocessor.txt create mode 100644 js/src/config/Expression.py create mode 100644 js/src/config/Preprocessor.py delete mode 100644 js/src/config/preprocessor.pl diff --git a/browser/locales/Makefile.in b/browser/locales/Makefile.in index 360ea611825a..1982b179a782 100644 --- a/browser/locales/Makefile.in +++ b/browser/locales/Makefile.in @@ -116,12 +116,12 @@ $(DIST)/branding: libs:: @if test -f "$(LOCALE_SRCDIR)/existing-profile-defaults.js"; then \ - $(PERL) $(topsrcdir)/config/preprocessor.pl $(PREF_PPFLAGS) $(DEFINES) $(ACDEFINES) $(XULPPFLAGS) \ + $(PYTHON) $(topsrcdir)/config/Preprocessor.py $(PREF_PPFLAGS) $(DEFINES) $(ACDEFINES) $(XULPPFLAGS) \ $(LOCALE_SRCDIR)/existing-profile-defaults.js > $(FINAL_TARGET)/defaults/existing-profile-defaults.js; \ fi install:: @if test -f "$(LOCALE_SRCDIR)/existing-profile-defaults.js"; then \ - $(PERL) $(topsrcdir)/config/preprocessor.pl $(PREF_PPFLAGS) $(DEFINES) $(ACDEFINES) $(XULPPFLAGS) \ + $(PYTHON) $(topsrcdir)/config/Preprocessor.py $(PREF_PPFLAGS) $(DEFINES) $(ACDEFINES) $(XULPPFLAGS) \ $(LOCALE_SRCDIR)/existing-profile-defaults.js > $(DESTDIR)$(mozappdir)/defaults/existing-profile-defaults.js; \ fi diff --git a/config/Makefile.in b/config/Makefile.in index af438afdefb6..1e3652572e4a 100644 --- a/config/Makefile.in +++ b/config/Makefile.in @@ -121,7 +121,7 @@ endif ifdef WRAP_SYSTEM_INCLUDES export:: if test ! -d system_wrappers; then mkdir system_wrappers; fi - $(PERL) $(topsrcdir)/config/preprocessor.pl $(DEFINES) $(ACDEFINES) \ + $(PYTHON) $(topsrcdir)/config/Preprocessor.py $(DEFINES) $(ACDEFINES) \ -DBUILD_STATIC_LIBS=$(BUILD_STATIC_LIBS) \ -DMOZ_TREE_CAIRO=$(MOZ_TREE_CAIRO) \ -DMOZ_TREE_PIXMAN=$(MOZ_TREE_PIXMAN) \ diff --git a/config/preprocessor.pl b/config/preprocessor.pl deleted file mode 100644 index 3da6654dd72d..000000000000 --- a/config/preprocessor.pl +++ /dev/null @@ -1,671 +0,0 @@ -#!/usr/bin/perl -w -# -*- Mode: perl; tab-width: 4; indent-tabs-mode: nil; -*- -# -# Preprocessor -# Version 1.1 -# -# Copyright (c) 2002, 2003, 2004 by Ian Hickson -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -# Thanks to bryner and bsmedberg for suggestions. -# Thanks to jon rekai for a patch to not require File::Spec 0.8. - -use strict; - -# takes as arguments the files to process -# defaults to stdin -# output to stdout - -my $stack = new stack; -my $marker = '#'; - -# command line arguments -my @includes; -while ($_ = $ARGV[0], defined($_) && /^-./) { - shift; - last if /^--$/os; - if (/^-D(.*)$/os) { - for ($1) { - if (/^([\w\.]+)=(.*)$/os) { - $stack->define($1, $2); - } elsif (/^([\w\.]+)$/os) { - $stack->define($1, 1); - } else { - die "$0: invalid argument to -D: $_\n"; - } - } - } elsif (/^-F(.*)$/os) { - for ($1) { - if (/^(\w+)$/os) { - $stack->filter($1, 1); - } else { - die "$0: invalid argument to -F: $_\n"; - } - } - } elsif (/^-I(.*)$/os) { - push(@includes, $1); - } elsif (/^-E$/os) { - foreach (keys %ENV) { - # define all variables that have valid names - $stack->define($_, $ENV{$_}) unless m/\W/; - } - } elsif (/^-d$/os) { - $stack->{'dependencies'} = 1; - } elsif (/^--line-endings=crlf$/os) { - $stack->{'lineEndings'} = "\x0D\x0A"; - } elsif (/^--line-endings=cr$/os) { - $stack->{'lineEndings'} = "\x0D"; - } elsif (/^--line-endings=lf$/os) { - $stack->{'lineEndings'} = "\x0A"; - } elsif (/^--line-endings=(.+)$/os) { - die "$0: unrecognised line ending: $1\n"; - } elsif (/^--marker=(.)$/os) { - $marker = $1; - } else { - die "$0: invalid argument: $_\n"; - } -} -unshift(@ARGV, '-') unless @ARGV; -unshift(@ARGV, @includes); - -# do the work -foreach (@ARGV) { include($stack, $_); } -exit(0); - -######################################################################## - -package main; -use File::Spec; -use File::Spec::Unix; # on all platforms, because the #include syntax is unix-based - -# Note: Ideally we would use File::Spec 0.8. When this becomes -# possible, add "0.8" to the first "use" line above, then replace -# occurrences of "::_0_8::" with "->" below. And remove the code for -# File::Spec 0.8 much lower down the file. - -sub include { - my($stack, $filename) = @_; - my $directory = $stack->{'variables'}->{'DIRECTORY'}; - if ($filename ne '-') { - $filename = File::Spec::_0_8::rel2abs($filename, $directory); - # splitpath expects forward-slash paths on windows, so we have to - # change the slashes if using Activestate Perl. - $filename =~ s?\\?/?g if "$^O" eq "MSWin32"; - my($volume, $path) = File::Spec::_0_8::splitpath($filename); - $directory = File::Spec::_0_8::catpath($volume, $path, ''); - } - local $stack->{'variables'}->{'DIRECTORY'} = $directory; - local $stack->{'variables'}->{'FILE'} = $filename; - local $stack->{'variables'}->{'LINE'} = 0; - local *FILE; - open(FILE, $filename) or die "Couldn't open $filename: $!\n"; - my $lineout = 0; - while () { - # on cygwin, line endings are screwed up, so normalise them. - s/[\x0D\x0A]+$/\n/os if ($^O eq 'msys' || $^O eq 'cygwin' || "$^O" eq "MSWin32"); - $stack->newline; - if (/^\Q$marker\E([a-z]+)\n?$/os) { # argumentless processing instruction - process($stack, $1); - } elsif (/^\Q$marker\E([a-z]+)\s(.*?)\n?$/os) { # processing instruction with arguments - process($stack, $1, $2); - } elsif (/^\Q$marker\E/os) { # comment - # ignore it - } elsif ($stack->enabled) { - next if $stack->{'dependencies'}; - - # set the current line number in JavaScript if necessary - my $linein = $stack->{'variables'}->{'LINE'}; - if (++$lineout != $linein) { - if ($filename =~ /\.js(|\.in)$/o) { - $stack->print("//\@line $linein \"$filename\"\n") - } - $lineout = $linein; - } - - # print it, including any newlines - $stack->print(filtered($stack, $_)); - } - } - close(FILE); -} - -sub process { - my($stack, $instruction, @arguments) = @_; - my $method = 'preprocessor'->can($instruction); - if (not defined($method)) { - fatal($stack, 'unknown instruction', $instruction); - } - eval { &$method($stack, @arguments) }; - if ($@) { - fatal($stack, "error evaluating $instruction:", $@); - } -} - -sub filtered { - my($stack, $text) = @_; - foreach my $filter (sort keys %{$stack->{'filters'}}) { - next unless $stack->{'filters'}->{$filter}; - my $method = 'filter'->can($filter); - if (not defined($method)) { - fatal($stack, 'unknown filter', $filter); - } - $text = eval { &$method($stack, $text) }; - if ($@) { - fatal($stack, "error using $filter:", $@); - } - } - return $text; -} - -sub fatal { - my $stack = shift; - my $filename = $stack->{'variables'}->{'FILE'}; - local $" = ' '; - print STDERR "$0:$filename:$.: @_\n"; - exit(1); -} - - -######################################################################## - -package stack; - -# condition evaluated just prior to this context was false -use constant COND_FALSE => 0; - -# condition evaluated just prior to this context was true -use constant COND_TRUE => 1; - -# some prior condition at this level already evaluated to true (or a -# parent condition evaluated to false or must be ignored), so we're -# ignoring all remaining conditions at current level (and nested -# conditions, too) -use constant COND_COMPLETED => 2; - -sub new { - return bless { - 'variables' => { - # %ENV, - 'LINE' => 0, # the line number in the source file - 'DIRECTORY' => '', # current directory - 'FILE' => '', # source filename - '1' => 1, # for convenience (the constant '1' is thus true) - }, - 'filters' => { - # filters - }, - 'values' => [], # the value of the last condition evaluated at the nth level - 'lastConditionState' => [], # whether the condition in the nth-level context was true, false, or not applicable - 'conditionState' => COND_TRUE, - 'dependencies' => 0, # whether we are showing dependencies - 'lineEndings' => "\n", # default to platform conventions - }; -} - -sub newline { - my $self = shift; - $self->{'variables'}->{'LINE'}++; -} - -sub define { - my $self = shift; - my($variable, $value) = @_; - die "not a valid variable name: '$variable'\n" if $variable =~ m/[^\w\.]/; - $self->{'variables'}->{$variable} = $value; -} - -sub defined { - my $self = shift; - my($variable) = @_; - die "not a valid variable name: '$variable'\n" if $variable =~ m/[^\w\.]/; - return defined($self->{'variables'}->{$variable}); -} - -sub undefine { - my $self = shift; - my($variable) = @_; - die "not a valid variable name: '$variable'\n" if $variable =~ m/[^\w\.]/; - delete($self->{'variables'}->{$variable}); -} - -sub get { - my $self = shift; - my($variable, $required) = @_; - die "not a valid variable name: '$variable'\n" if $variable =~ m/[^\w\.]/; - my $value = $self->{'variables'}->{$variable}; - if (defined($value)) { - return $value; - } else { - die "variable '$variable' is not defined\n" if $required; - return ''; - } -} - -sub replace { - my $self = shift; - my ($value) = @_; - - ${$self->{'values'}}[-1] = $value; - $self->{'conditionState'} = $self->{'conditionState'} != COND_FALSE - ? COND_COMPLETED - : $value ? COND_TRUE : COND_FALSE; -} - -sub push { - my $self = shift; - my($value) = @_; - - push(@{$self->{'values'}}, $value); - my $lastCondition = $self->{'conditionState'}; - push(@{$self->{'lastConditionState'}}, $lastCondition); - $self->{'conditionState'} = $lastCondition != COND_TRUE - ? COND_COMPLETED - : $value ? COND_TRUE : COND_FALSE; -} - -sub pop { - my $self = shift; - $self->{'conditionState'} = pop(@{$self->{'lastConditionState'}}); - return pop(@{$self->{'values'}}); -} - -sub enabled { - my $self = shift; - return $self->{'conditionState'} == COND_TRUE; -} - -sub disabled { - my $self = shift; - return $self->{'conditionState'} != COND_TRUE; -} - -sub filter { - my $self = shift; - my($filter, $value) = @_; - die "not a valid filter name: '$filter'\n" if $filter =~ m/\W/; - $self->{'filters'}->{$filter} = $value; -} - -sub expand { - my $self = shift; - my($line) = @_; - $line =~ s/__(\w+)__/$self->get($1)/gose; - return $line; -} - -sub print { - my $self = shift; - return if $self->{'dependencies'}; - foreach my $line (@_) { - if (chomp $line) { - CORE::print("$line$self->{'lineEndings'}"); - } else { - CORE::print($line); - } - } -} - -sub visit { - my $self = shift; - my($filename) = @_; - my $directory = $stack->{'variables'}->{'DIRECTORY'}; - $filename = File::Spec::_0_8::abs2rel(File::Spec::_0_8::rel2abs($filename, $directory)); - CORE::print("$filename\n"); -} - -######################################################################## - -package preprocessor; - -sub define { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - my $argument = shift; - for ($argument) { - /^(\w+)\s(.*)$/os && do { - return $stack->define($1, $2); - }; - /^(\w+)$/os && do { - return $stack->define($1, 1); - }; - die "invalid argument: '$_'\n"; - } -} - -sub undef { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - $stack->undefine(@_); -} - -sub ifdef { - my $stack = shift; - my $variable = shift; - my $replace = defined(shift); - die "argument expected\n" unless defined($variable); - if ($replace) { - $stack->replace($stack->defined($variable)); - } else { - $stack->push($stack->defined($variable)); - } -} - -sub ifndef { - my $stack = shift; - my $variable = shift; - my $replace = defined(shift); - die "argument expected\n" unless defined($variable); - if ($replace) { - $stack->replace(not $stack->defined($variable)); - } else { - $stack->push(not $stack->defined($variable)); - } -} - -sub if { - my $stack = shift; - die "argument expected\n" unless @_; - my $argument = shift; - my $replace = defined(shift); - for ($argument) { - /^(\w+)==(.*)$/os && do { - # equality - if ($replace) { - return $stack->replace($stack->get($1) eq $2); - } else { - return $stack->push($stack->get($1) eq $2); - } - }; - /^(\w+)!=(.*)$/os && do { - # inequality - if ($replace) { - return $stack->replace($stack->get($1) ne $2); - } else { - return $stack->push($stack->get($1) ne $2); - } - }; - /^(\w+)$/os && do { - # true value - if ($replace) { - return $stack->replace($stack->get($1)); - } else { - return $stack->push($stack->get($1)); - } - }; - /^!(\w+)$/os && do { - # false value - if ($replace) { - return $stack->replace(not $stack->get($1)); - } else { - return $stack->push(not $stack->get($1)); - } - }; - die "invalid argument: '$_'\n"; - } -} - -sub else { - my $stack = shift; - die "argument unexpected\n" if @_; - $stack->replace(1); -} - -sub elif { - my $stack = shift; - die "argument expected\n" unless @_; - &if($stack, @_, 1); -} - -sub elifdef { - my $stack = shift; - die "argument expected\n" unless @_; - &ifdef($stack, @_, 1); -} - -sub elifndef { - my $stack = shift; - die "argument expected\n" unless @_; - &ifndef($stack, @_, 1); -} - -sub endif { - my $stack = shift; - die "argument unexpected\n" if @_; - $stack->pop; -} - -sub error { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - my $line = $stack->expand(@_); - die "$line\n"; -} - -sub expand { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - my $line = $stack->expand(@_); - $stack->print("$line\n"); -} - -sub literal { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - my $line = shift; - $stack->print("$line\n"); -} - -sub include { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - my $filename = File::Spec::_0_8::catpath(File::Spec::_0_8::splitpath(@_)); - if ($stack->{'dependencies'}) { - $stack->visit($filename); - } else { - main::include($stack, $filename); - } -} - -sub includesubst { - my ($stack, $filename) = @_; - return if $stack->disabled; - die "argument expected\n" unless $filename; - $filename =~ s/@(\w+)@/$stack->get($1, 1)/gose; - $filename = File::Spec::_0_8::catpath(File::Spec::_0_8::splitpath($filename)); - if ($stack->{'dependencies'}) { - $stack->visit($filename); - } else { - main::include($stack, $filename); - } -} - -sub filter { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - foreach (split(/\s/os, shift)) { - $stack->filter($_, 1); - } -} - -sub unfilter { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - foreach (split(/\s/os, shift)) { - $stack->filter($_, 0); - } -} - - -######################################################################## - -package filter; - -sub emptyLines { - my($stack, $text) = @_; - $text = "" if $text eq "\n"; - return $text; -} - -sub spaces { - my($stack, $text) = @_; - $text =~ s/ +/ /gos; # middle spaces - $text =~ s/^ //gos; # start spaces - $text =~ s/ (\n?)$/$1/gos; # end spaces - return $text; -} - -sub slashslash { - my($stack, $text) = @_; - $text =~ s|//.*?(\n?)$|$1|gos; - return $text; -} - -sub substitution { - my($stack, $text) = @_; - $text =~ s/@(\w+)@/$stack->get($1, 1)/gose; - return $text; -} - -sub attemptSubstitution { - my($stack, $text) = @_; - $text =~ s/@(\w+)@/$stack->get($1, 0)/gose; - return $text; -} - -######################################################################## - -######################################################################## -# This code is from File::Spec::Unix 0.8. -# It is not considered a part of the preprocessor.pl source file -# This code is licensed under the same license as File::Spec itself. - -package File::Spec::_0_8; - -use Cwd; - -sub rel2abs { - my ($path, $base) = @_; - if ( ! File::Spec->file_name_is_absolute( $path ) ) { - if ( !defined( $base ) || $base eq '' ) { - $base = cwd() ; - } elsif ( ! File::Spec->file_name_is_absolute( $base ) ) { - $base = rel2abs( $base ); - } else { - $base = File::Spec->canonpath( $base ); - } - $path = File::Spec->catdir( $base, $path ); - } - return File::Spec->canonpath( $path ); -} - -sub splitdir { - return split m|/|, $_[1], -1; # Preserve trailing fields -} - -sub splitpath { - my ($path, $nofile) = @_; - - my ($volume,$directory,$file) = ('','',''); - - if ( $nofile ) { - $directory = $path; - } - else { - $path =~ m|^ ( (?: .* / (?: \.\.?\Z(?!\n) )? )? ) ([^/]*) |xs; - $directory = $1; - $file = $2; - } - - return ($volume,$directory,$file); -} - -sub catpath { - my ($volume,$directory,$file) = @_; - - if ( $directory ne '' && - $file ne '' && - substr( $directory, -1 ) ne '/' && - substr( $file, 0, 1 ) ne '/' - ) { - $directory .= "/$file" ; - } - else { - $directory .= $file ; - } - - return $directory ; -} - -sub abs2rel { - my($path,$base) = @_; - - # Clean up $path - if ( ! File::Spec->file_name_is_absolute( $path ) ) { - $path = rel2abs( $path ) ; - } - else { - $path = File::Spec->canonpath( $path ) ; - } - - # Figure out the effective $base and clean it up. - if ( !defined( $base ) || $base eq '' ) { - $base = cwd(); - } - elsif ( ! File::Spec->file_name_is_absolute( $base ) ) { - $base = rel2abs( $base ) ; - } - else { - $base = File::Spec->canonpath( $base ) ; - } - - # Now, remove all leading components that are the same - my @pathchunks = File::Spec::_0_8::splitdir( $path); - my @basechunks = File::Spec::_0_8::splitdir( $base); - - while (@pathchunks && @basechunks && $pathchunks[0] eq $basechunks[0]) { - shift @pathchunks ; - shift @basechunks ; - } - - $path = CORE::join( '/', @pathchunks ); - $base = CORE::join( '/', @basechunks ); - - # $base now contains the directories the resulting relative path - # must ascend out of before it can descend to $path_directory. So, - # replace all names with $parentDir - $base =~ s|[^/]+|..|g ; - - # Glue the two together, using a separator if necessary, and preventing an - # empty result. - if ( $path ne '' && $base ne '' ) { - $path = "$base/$path" ; - } else { - $path = "$base$path" ; - } - - return File::Spec->canonpath( $path ) ; -} - -# End code from File::Spec::Unix 0.8. -######################################################################## diff --git a/config/preprocessor.txt b/config/preprocessor.txt deleted file mode 100644 index 730cea5a1b7a..000000000000 --- a/config/preprocessor.txt +++ /dev/null @@ -1,252 +0,0 @@ -Preprocessor -============ - -This is a very primitive line based preprocessor, for times when using -a C preprocessor isn't an option. - - -Instructions ------------- - -Any line starting with a hash # and a letter is considered to be a -preprocessor instruction. Other lines starting with a hash are ignored -as comments. - -The following preprocessor instructions are recognised. - - #define VARIABLE - #define VARIABLE STRING - #undef VARIABLE - #ifdef VARIABLE - #ifndef VARIABLE - #if VARIABLE - #if !VARIABLE - #if VARIABLE==STRING - #if VARIABLE!=STRING - #else - #elifdef VARIABLE - #elifndef VARIABLE - #elif VARIABLE - #elif !VARIABLE - #elif VARIABLE==STRING - #elif VARIABLE!=STRING - #endif - #error STRING - #include FILENAME - #includesubst @VAR@FILENAME - #expand STRING - #literal STRING - #filter FILTER1 FILTER2 ... FILTERn - #unfilter FILTER1 FILTER2 ... FILTERn - -Whitespace is significant -- for instance, '#define TEST foo' is not -the same as '#define TEST foo '. The first defines TEST to be a three -character string, the second defines it to be four characters long. - -The conditionals (#ifdef, #ifndef, #if, #else, #elifdef, #elifndef, -#elif, #endif) can be nested to arbitrary depth. - -The #elifdef, #elifndef, and #elif instructions are equivalent to -#else instructions combined with the relevant conditional. For -example, - - #ifdef foo - block 1 - #elifdef bar - block 2 - #endif - -...could be written as: - - #ifdef foo - block 1 - #else - #ifdef bar - block 2 - #endif - #endif - -An #else block is included if all previous conditions were false, and -is equivalent to #elif 1, i.e.: - - #ifdef foo - foo is defined - #else - foo is not defined - #endif - -...is equivalent to: - - #ifdef foo - foo is defined - #elif 1 - foo is not defined - #endif - -#else is not required to be the last condition in an if/el*/endif -series. In particular, along with #else's equivalence to #elif 1 -this means that the following holds: - - #if 0 - never included - #else - always included - #else - never included - #elif 1 - never included - #endif - -The #error instruction stops execution at this point with a fatal -error. The error message will include the given STRING. - -The #include instruction causes the specified file FILENAME to be -recursively processed, as if it was inserted at the current position -in the file. This means conditionals can be started in one file and -ended in another, although this practice is strongly discouraged. -There is no predefined limit to the depth of #includes, and there is -no restriction on self-inclusion, so care should be taken to avoid -infinite loops. - -The #includesubst instruction behaves like #include, except that any -variables in @ATSIGNS@ are expanded, like the substitution filter. - -The #expand instruction will print the given STRING with variable -substitutions. See the substitution section below. - -The #literal instruction will print the given STRING with a newline, -with absolutely no other fixups, guaranteed. This can be used to -output lines starting with a #, which would otherwise be stripped out -as comments. - -The #filter instruction enables the specified filters. You can turn -off filters using #unfilter. See the Filters section below. - - -Variables ---------- - -Variables consist of any alphanumeric string. They are defined using -the -D command line argument and the #define instruction. - -To define all environment variables, so that you can use __HOME__, -etc, with #expand, use the -E argument. Note that arguments that use -non-word characters (like "!") are not included. (In particular, -cygwin is known to include all kinds of weird characters in its -environment variables.) - -Two special variables are predefined, FILE and LINE. They can be -passed to #define and #undef, but FILE is automatically redefined at -the top of each file, and LINE is increased by one at the start of -each line. - -The variable '1' is predefined with value 1. The variable '0' is not -defined. This allows constructs such as - - #if 0 - ... - #endif - -...to be used to quickly comment out large sections. Note, however, -that these are simply variables, and can be redefined. This is -strongly discouraged. - - -Substitution ------------- - -In any line starting with the instruction #expand, variable names -contained between double underscores, like __THIS__, are expanded to -their string values, or the empty string if they are not defined. - -For example to print the current filename: - - #expand - -Normal lines are not affected. - -See also the substitution filter below. - - -Filters -------- - -The following filters are supported: - - emptyLines - Strips blank lines from the output. - - slashslash - Strips everything from the first two consecutive slash (/) - characters until the end of the line. - - spaces - Collapses sequences of spaces into a single space. - - substitution - Replaces occurrences of "@foo@" by the value of the variable - "foo". If @foo@ is not defined, the preprocessor will terminate - with a fatal error. - - attemptSubstitution - Replaces occurrences of "@foo@" by the value of the variable - "foo". If @foo@ is not defined, the empty string is used instead. - -Filters are run in alphabetical order, on a per-line basis. - - -Command Line Arguments ----------------------- - -Syntax: - preprocessor.pl [-Dvariable[=value]] [-E] [-Ffilter] - [-Ifilename] [-d] [--marker=] [--] filenames... - --Dvariable - Set variable to 1 before processing the files. - --Dvariable=value - Set variable to value before processing the files. - --E - Define all environment variables. - --Ffilter - Enables the specified filter. - --Ifilename - Include filename before any other files. - --d - Run through the files on the command line, listing the files they - depend on given the specified environment variables and filters. - Doesn't recurse into those files. The output is given as one - dependency per line, and filenames are given relative to the - current directory. - ---line-endings=type - Set the type of line endings to use. "type" can be either "cr", - "lf", or "crlf". The default is whatever your platform uses for - perl's "\n" character. - ---marker= - Use the character instead of '#' as the marker for preprocessor - instructions. - --- - Indicates the end of non-filename arguments. - -- - Indicates that input should come from standard input. - -If no filenames are provided, standard input is used instead. If many -files are provided, they are processed sequentially, as if they were -one big file. -I files are handled before the other files, in the -order specified, but after handling any -D, -E, -F, and -d arguments. - - -Contact Details ---------------- - -Feel free to e-mail me if you have any questions: -Ian Hickson diff --git a/js/src/config/Expression.py b/js/src/config/Expression.py new file mode 100644 index 000000000000..56a58db65fab --- /dev/null +++ b/js/src/config/Expression.py @@ -0,0 +1,209 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla build system. +# +# The Initial Developer of the Original Code is +# Mozilla Foundation. +# Portions created by the Initial Developer are Copyright (C) 2007 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Axel Hecht +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +""" +Parses and evaluates simple statements for Preprocessor: + +Expression currently supports the following grammar, whitespace is ignored: + +expression : + unary ( ( '==' | '!=' ) unary ) ? ; +unary : + '!'? value ; +value : + [0-9]+ # integer + | \w+ # string identifier or value; +""" + +import re + +class Expression: + def __init__(self, expression_string): + """ + Create a new expression with this string. + The expression will already be parsed into an Abstract Syntax Tree. + """ + self.content = expression_string + self.offset = 0 + self.__ignore_whitespace() + self.e = self.__get_equality() + if self.content: + raise Expression.ParseError, self + + def __get_equality(self): + """ + Production: unary ( ( '==' | '!=' ) unary ) ? + """ + if not len(self.content): + return None + rv = Expression.__AST("equality") + # unary + rv.append(self.__get_unary()) + self.__ignore_whitespace() + if not re.match('[=!]=', self.content): + # no equality needed, short cut to our prime unary + return rv[0] + # append operator + rv.append(Expression.__ASTLeaf('op', self.content[:2])) + self.__strip(2) + self.__ignore_whitespace() + rv.append(self.__get_unary()) + self.__ignore_whitespace() + return rv + + def __get_unary(self): + """ + Production: '!'? value + """ + # eat whitespace right away, too + not_ws = re.match('!\s*', self.content) + if not not_ws: + return self.__get_value() + rv = Expression.__AST('not') + self.__strip(not_ws.end()) + rv.append(self.__get_value()) + self.__ignore_whitespace() + return rv + + def __get_value(self): + """ + Production: ( [0-9]+ | \w+) + Note that the order is important, and the expression is kind-of + ambiguous as \w includes 0-9. One could make it unambiguous by + removing 0-9 from the first char of a string literal. + """ + rv = None + word_len = re.match('[0-9]*', self.content).end() + if word_len: + value = int(self.content[:word_len]) + rv = Expression.__ASTLeaf('int', value) + else: + word_len = re.match('\w*', self.content).end() + if word_len: + rv = Expression.__ASTLeaf('string', self.content[:word_len]) + else: + raise Expression.ParseError, self + self.__strip(word_len) + self.__ignore_whitespace() + return rv + + def __ignore_whitespace(self): + ws_len = re.match('\s*', self.content).end() + self.__strip(ws_len) + return + + def __strip(self, length): + """ + Remove a given amount of chars from the input and update + the offset. + """ + self.content = self.content[length:] + self.offset += length + + def evaluate(self, context): + """ + Evaluate the expression with the given context + """ + + # Helper function to evaluate __get_equality results + def eval_equality(tok): + left = opmap[tok[0].type](tok[0]) + right = opmap[tok[2].type](tok[2]) + rv = left == right + if tok[1].value == '!=': + rv = not rv + return rv + # Mapping from token types to evaluator functions + # Apart from (non-)equality, all these can be simple lambda forms. + opmap = { + 'equality': eval_equality, + 'not': lambda tok: not opmap[tok[0].type](tok[0]), + 'string': lambda tok: context[tok.value], + 'int': lambda tok: tok.value} + + return opmap[self.e.type](self.e); + + class __AST(list): + """ + Internal class implementing Abstract Syntax Tree nodes + """ + def __init__(self, type): + self.type = type + super(self.__class__, self).__init__(self) + + class __ASTLeaf: + """ + Internal class implementing Abstract Syntax Tree leafs + """ + def __init__(self, type, value): + self.value = value + self.type = type + def __str__(self): + return self.value.__str__() + def __repr__(self): + return self.value.__repr__() + + class ParseError(StandardError): + """ + Error raised when parsing fails. + It has two members, offset and content, which give the offset of the + error and the offending content. + """ + def __init__(self, expression): + self.offset = expression.offset + self.content = expression.content[:3] + def __str__(self): + return 'Unexpected content at offset %i, "%s"'%(self.offset, self.content) + +class Context(dict): + """ + This class holds variable values by subclassing dict, and while it + truthfully reports True and False on + + name in context + + it returns the variable name itself on + + context["name"] + + to reflect the ambiguity between string literals and preprocessor + variables. + """ + def __getitem__(self, key): + if key in self: + return super(self.__class__, self).__getitem__(key) + return key diff --git a/js/src/config/Makefile.in b/js/src/config/Makefile.in index dfed04b23e34..83a91f869042 100644 --- a/js/src/config/Makefile.in +++ b/js/src/config/Makefile.in @@ -93,7 +93,7 @@ endif ifdef WRAP_SYSTEM_INCLUDES export:: if test ! -d system_wrappers_js; then mkdir system_wrappers_js; fi - $(PERL) $(srcdir)/preprocessor.pl $(DEFINES) $(ACDEFINES) \ + $(PYTHON) $(srcdir)/Preprocessor.py $(DEFINES) $(ACDEFINES) \ -DBUILD_STATIC_LIBS=$(BUILD_STATIC_LIBS) \ $(srcdir)/system-headers | $(PERL) $(srcdir)/make-system-wrappers.pl system_wrappers_js $(INSTALL) system_wrappers_js $(DIST) diff --git a/js/src/config/Preprocessor.py b/js/src/config/Preprocessor.py new file mode 100644 index 000000000000..752e83f5c8d7 --- /dev/null +++ b/js/src/config/Preprocessor.py @@ -0,0 +1,477 @@ +""" +This is a very primitive line based preprocessor, for times when using +a C preprocessor isn't an option. +""" + +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla build system. +# +# The Initial Developer of the Original Code is +# Mozilla Foundation. +# Portions created by the Initial Developer are Copyright (C) 2007 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Axel Hecht +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +import sys +import os +import os.path +import re +from optparse import OptionParser + +# hack around win32 mangling our line endings +# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65443 +if sys.platform == "win32": + import msvcrt + msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) + os.linesep = '\n' + +import Expression + +__all__ = ['Preprocessor', 'preprocess'] + + +class Preprocessor: + """ + Class for preprocessing text files. + """ + class Error(RuntimeError): + def __init__(self, cpp, MSG, context): + self.file = cpp.context['FILE'] + self.line = cpp.context['LINE'] + self.key = MSG + RuntimeError.__init__(self, (self.file, self.line, self.key, context)) + def __init__(self): + self.context = Expression.Context() + for k,v in {'FILE': '', + 'LINE': 0, + 'DIRECTORY': os.path.abspath('.')}.iteritems(): + self.context[k] = v + self.disableLevel = 0 + # ifStates can be + # 0: hadTrue + # 1: wantsTrue + # 2: #else found + self.ifStates = [] + self.checkLineNumbers = False + self.writtenLines = 0 + self.filters = [] + self.cmds = {} + for cmd, level in {'define': 0, + 'undef': 0, + 'if': sys.maxint, + 'ifdef': sys.maxint, + 'ifndef': sys.maxint, + 'else': 1, + 'elif': 1, + 'elifdef': 1, + 'elifndef': 1, + 'endif': sys.maxint, + 'expand': 0, + 'literal': 0, + 'filter': 0, + 'unfilter': 0, + 'include': 0, + 'includesubst': 0, + 'error': 0}.iteritems(): + self.cmds[cmd] = (level, getattr(self, 'do_' + cmd)) + self.out = sys.stdout + self.setMarker('#') + self.LE = '\n' + self.varsubst = re.compile('@(?P\w+)@', re.U) + + def setLineEndings(self, aLE): + """ + Set the line endings to be used for output. + """ + self.LE = {'cr': '\x0D', 'lf': '\x0A', 'crlf': '\x0D\x0A'}[aLE] + + def setMarker(self, aMarker): + """ + Set the marker to be used for processing directives. + Used for handling CSS files, with pp.setMarker('%'), for example. + """ + self.marker = aMarker + self.instruction = re.compile('%s(?P[a-z]+)(?:\s(?P.*))?$'%aMarker, re.U) + self.comment = re.compile(aMarker, re.U) + + def clone(self): + """ + Create a clone of the current processor, including line ending + settings, marker, variable definitions, output stream. + """ + rv = Preprocessor() + rv.context.update(self.context) + rv.setMarker(self.marker) + rv.LE = self.LE + rv.out = self.out + return rv + + def write(self, aLine): + """ + Internal method for handling output. + """ + if self.checkLineNumbers: + self.writtenLines += 1 + ln = self.context['LINE'] + if self.writtenLines != ln: + self.out.write('//@line %(line)d "%(file)s"%(le)s'%{'line': ln, + 'file': self.context['FILE'], + 'le': self.LE}) + self.writtenLines = ln + for f in self.filters: + aLine = f[1](aLine) + # ensure our line ending. Only need to handle \n, as we're reading + # with universal line ending support, at least for files. + aLine = re.sub('\n', self.LE, aLine) + self.out.write(aLine) + + def handleCommandLine(self, args, defaultToStdin = False): + """ + Parse a commandline into this parser. + Uses OptionParser internally, no args mean sys.argv[1:]. + """ + p = self.getCommandLineParser() + (options, args) = p.parse_args(args=args) + includes = options.I + if defaultToStdin and len(args) == 0: + args = [sys.stdin] + includes.extend(args) + for f in includes: + self.do_include(f) + pass + + def getCommandLineParser(self, unescapeDefines = False): + escapedValue = re.compile('".*"$') + numberValue = re.compile('\d+$') + def handleE(option, opt, value, parser): + for k,v in os.environ.iteritems(): + self.context[k] = v + def handleD(option, opt, value, parser): + vals = value.split('=', 1) + if len(vals) == 1: + vals.append(1) + elif unescapeDefines and escapedValue.match(vals[1]): + # strip escaped string values + vals[1] = vals[1][1:-1] + elif numberValue.match(vals[1]): + vals[1] = int(vals[1]) + self.context[vals[0]] = vals[1] + def handleU(option, opt, value, parser): + del self.context[value] + def handleF(option, opt, value, parser): + self.do_filter(value) + def handleLE(option, opt, value, parser): + self.setLineEndings(value) + def handleMarker(option, opt, value, parser): + self.setMarker(value) + p = OptionParser() + p.add_option('-I', action='append', type="string", default = [], + metavar="FILENAME", help='Include file') + p.add_option('-E', action='callback', callback=handleE, + help='Import the environment into the defined variables') + p.add_option('-D', action='callback', callback=handleD, type="string", + metavar="VAR[=VAL]", help='Define a variable') + p.add_option('-U', action='callback', callback=handleU, type="string", + metavar="VAR", help='Undefine a variable') + p.add_option('-F', action='callback', callback=handleF, type="string", + metavar="FILTER", help='Enable the specified filter') + p.add_option('--line-endings', action='callback', callback=handleLE, + type="string", metavar="[cr|lr|crlf]", + help='Use the specified line endings [Default: OS dependent]') + p.add_option('--marker', action='callback', callback=handleMarker, + type="string", + help='Use the specified marker instead of #') + return p + + def handleLine(self, aLine): + """ + Handle a single line of input (internal). + """ + m = self.instruction.match(aLine) + if m: + args = None + cmd = m.group('cmd') + try: + args = m.group('args') + except IndexError: + pass + if cmd not in self.cmds: + raise Preprocessor.Error(self, 'INVALID_CMD', aLine) + level, cmd = self.cmds[cmd] + if (level >= self.disableLevel): + cmd(args) + elif self.disableLevel == 0 and not self.comment.match(aLine): + self.write(aLine) + pass + + # Instruction handlers + # These are named do_'instruction name' and take one argument + + # Variables + def do_define(self, args): + m = re.match('(?P\w+)(?:\s(?P.*))?', args, re.U) + if not m: + raise Preprocessor.Error(self, 'SYNTAX_DEF', args) + val = 1 + if m.group('value'): + val = m.group('value') + try: + val = int(val) + except: + pass + self.context[m.group('name')] = val + def do_undef(self, args): + m = re.match('(?P\w+)$', args, re.U) + if not m: + raise Preprocessor.Error(self, 'SYNTAX_DEF', args) + if args in self.context: + del self.context[args] + # Logic + def ensure_not_else(self): + if len(self.ifStates) == 0 or self.ifStates[-1] == 2: + sys.stderr.write('WARNING: bad nesting of #else\n') + def do_if(self, args, replace=False): + if self.disableLevel and not replace: + self.disableLevel += 1 + return + val = None + try: + e = Expression.Expression(args) + val = e.evaluate(self.context) + except Exception: + # XXX do real error reporting + raise Preprocessor.Error(self, 'SYNTAX_ERR', args) + if type(val) == str: + # we're looking for a number value, strings are false + val = False + if not val: + self.disableLevel = 1 + if replace: + if val: + self.disableLevel = 0 + self.ifStates[-1] = self.disableLevel + else: + self.ifStates.append(self.disableLevel) + pass + def do_ifdef(self, args, replace=False): + if self.disableLevel and not replace: + self.disableLevel += 1 + return + if re.match('\W', args, re.U): + raise Preprocessor.Error(self, 'INVALID_VAR', args) + if args not in self.context: + self.disableLevel = 1 + if replace: + if args in self.context: + self.disableLevel = 0 + self.ifStates[-1] = self.disableLevel + else: + self.ifStates.append(self.disableLevel) + pass + def do_ifndef(self, args, replace=False): + if self.disableLevel and not replace: + self.disableLevel += 1 + return + if re.match('\W', args, re.U): + raise Preprocessor.Error(self, 'INVALID_VAR', args) + if args in self.context: + self.disableLevel = 1 + if replace: + if args not in self.context: + self.disableLevel = 0 + self.ifStates[-1] = self.disableLevel + else: + self.ifStates.append(self.disableLevel) + pass + def do_else(self, args, ifState = 2): + self.ensure_not_else() + hadTrue = self.ifStates[-1] == 0 + self.ifStates[-1] = ifState # in-else + if hadTrue: + self.disableLevel = 1 + return + self.disableLevel = 0 + def do_elif(self, args): + if self.disableLevel == 1: + if self.ifStates[-1] == 1: + self.do_if(args, replace=True) + else: + self.do_else(None, self.ifStates[-1]) + def do_elifdef(self, args): + if self.disableLevel == 1: + if self.ifStates[-1] == 1: + self.do_ifdef(args, replace=True) + else: + self.do_else(None, self.ifStates[-1]) + def do_elifndef(self, args): + if self.disableLevel == 1: + if self.ifStates[-1] == 1: + self.do_ifndef(args, replace=True) + else: + self.do_else(None, self.ifStates[-1]) + def do_endif(self, args): + if self.disableLevel > 0: + self.disableLevel -= 1 + if self.disableLevel == 0: + self.ifStates.pop() + # output processing + def do_expand(self, args): + lst = re.split('__(\w+)__', args, re.U) + do_replace = False + def vsubst(v): + if v in self.context: + return str(self.context[v]) + return '' + for i in range(1, len(lst), 2): + lst[i] = vsubst(lst[i]) + lst.append('\n') # add back the newline + self.write(reduce(lambda x, y: x+y, lst, '')) + def do_literal(self, args): + self.write(args + self.LE) + def do_filter(self, args): + filters = [f for f in args.split(' ') if hasattr(self, 'filter_' + f)] + if len(filters) == 0: + return + current = dict(self.filters) + for f in filters: + current[f] = getattr(self, 'filter_' + f) + filterNames = current.keys() + filterNames.sort() + self.filters = [(fn, current[fn]) for fn in filterNames] + return + def do_unfilter(self, args): + filters = args.split(' ') + current = dict(self.filters) + for f in filters: + if f in current: + del current[f] + filterNames = current.keys() + filterNames.sort() + self.filters = [(fn, current[fn]) for fn in filterNames] + return + # Filters + # + # emptyLines + # Strips blank lines from the output. + def filter_emptyLines(self, aLine): + if aLine == '\n': + return '' + return aLine + # slashslash + # Strips everything after // + def filter_slashslash(self, aLine): + [aLine, rest] = aLine.split('//', 1) + if rest: + aLine += '\n' + return aLine + # spaces + # Collapses sequences of spaces into a single space + def filter_spaces(self, aLine): + return re.sub(' +', ' ', aLine).strip(' ') + # substition + # helper to be used by both substition and attemptSubstitution + def filter_substitution(self, aLine, fatal=True): + def repl(matchobj): + varname = matchobj.group('VAR') + if varname in self.context: + return str(self.context[varname]) + if fatal: + raise Preprocessor.Error(self, 'UNDEFINED_VAR', varname) + return '' + return self.varsubst.sub(repl, aLine) + def filter_attemptSubstitution(self, aLine): + return self.filter_substitution(aLine, fatal=False) + # File ops + def do_include(self, args): + """ + Preprocess a given file. + args can either be a file name, or a file-like object. + Files should be opened, and will be closed after processing. + """ + isName = type(args) == str or type(args) == unicode + oldWrittenLines = self.writtenLines + oldCheckLineNumbers = self.checkLineNumbers + self.checkLineNumbers = False + if isName: + try: + args = str(args) + if not os.path.isabs(args): + args = os.path.join(self.context['DIRECTORY'], args) + args = open(args, 'rU') + except: + raise Preprocessor.Error(self, 'FILE_NOT_FOUND', str(args)) + self.checkLineNumbers = bool(re.search('\.js(?:\.in)?$', args.name)) + oldFile = self.context['FILE'] + oldLine = self.context['LINE'] + oldDir = self.context['DIRECTORY'] + if args.isatty(): + # we're stdin, use '-' and '' for file and dir + self.context['FILE'] = '-' + self.context['DIRECTORY'] = '' + else: + abspath = os.path.abspath(args.name) + self.context['FILE'] = abspath + self.context['DIRECTORY'] = os.path.dirname(abspath) + self.context['LINE'] = 0 + self.writtenLines = 0 + for l in args: + self.context['LINE'] += 1 + self.handleLine(l) + args.close() + self.context['FILE'] = oldFile + self.checkLineNumbers = oldCheckLineNumbers + self.writtenLines = oldWrittenLines + self.context['LINE'] = oldLine + self.context['DIRECTORY'] = oldDir + def do_includesubst(self, args): + args = self.filter_substitution(args) + self.do_include(args) + def do_error(self, args): + raise Preprocessor.Error(self, 'Error: ', str(args)) + +def main(): + pp = Preprocessor() + pp.handleCommandLine(None, True) + return + +def preprocess(includes=[sys.stdin], defines={}, + output = sys.stdout, + line_endings='\n', marker='#'): + pp = Preprocessor() + pp.context.update(defines) + pp.setLineEndings(line_endings) + pp.setMarker(marker) + pp.out = output + for f in includes: + pp.do_include(f) + +if __name__ == "__main__": + main() diff --git a/js/src/config/preprocessor.pl b/js/src/config/preprocessor.pl deleted file mode 100644 index 3da6654dd72d..000000000000 --- a/js/src/config/preprocessor.pl +++ /dev/null @@ -1,671 +0,0 @@ -#!/usr/bin/perl -w -# -*- Mode: perl; tab-width: 4; indent-tabs-mode: nil; -*- -# -# Preprocessor -# Version 1.1 -# -# Copyright (c) 2002, 2003, 2004 by Ian Hickson -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -# Thanks to bryner and bsmedberg for suggestions. -# Thanks to jon rekai for a patch to not require File::Spec 0.8. - -use strict; - -# takes as arguments the files to process -# defaults to stdin -# output to stdout - -my $stack = new stack; -my $marker = '#'; - -# command line arguments -my @includes; -while ($_ = $ARGV[0], defined($_) && /^-./) { - shift; - last if /^--$/os; - if (/^-D(.*)$/os) { - for ($1) { - if (/^([\w\.]+)=(.*)$/os) { - $stack->define($1, $2); - } elsif (/^([\w\.]+)$/os) { - $stack->define($1, 1); - } else { - die "$0: invalid argument to -D: $_\n"; - } - } - } elsif (/^-F(.*)$/os) { - for ($1) { - if (/^(\w+)$/os) { - $stack->filter($1, 1); - } else { - die "$0: invalid argument to -F: $_\n"; - } - } - } elsif (/^-I(.*)$/os) { - push(@includes, $1); - } elsif (/^-E$/os) { - foreach (keys %ENV) { - # define all variables that have valid names - $stack->define($_, $ENV{$_}) unless m/\W/; - } - } elsif (/^-d$/os) { - $stack->{'dependencies'} = 1; - } elsif (/^--line-endings=crlf$/os) { - $stack->{'lineEndings'} = "\x0D\x0A"; - } elsif (/^--line-endings=cr$/os) { - $stack->{'lineEndings'} = "\x0D"; - } elsif (/^--line-endings=lf$/os) { - $stack->{'lineEndings'} = "\x0A"; - } elsif (/^--line-endings=(.+)$/os) { - die "$0: unrecognised line ending: $1\n"; - } elsif (/^--marker=(.)$/os) { - $marker = $1; - } else { - die "$0: invalid argument: $_\n"; - } -} -unshift(@ARGV, '-') unless @ARGV; -unshift(@ARGV, @includes); - -# do the work -foreach (@ARGV) { include($stack, $_); } -exit(0); - -######################################################################## - -package main; -use File::Spec; -use File::Spec::Unix; # on all platforms, because the #include syntax is unix-based - -# Note: Ideally we would use File::Spec 0.8. When this becomes -# possible, add "0.8" to the first "use" line above, then replace -# occurrences of "::_0_8::" with "->" below. And remove the code for -# File::Spec 0.8 much lower down the file. - -sub include { - my($stack, $filename) = @_; - my $directory = $stack->{'variables'}->{'DIRECTORY'}; - if ($filename ne '-') { - $filename = File::Spec::_0_8::rel2abs($filename, $directory); - # splitpath expects forward-slash paths on windows, so we have to - # change the slashes if using Activestate Perl. - $filename =~ s?\\?/?g if "$^O" eq "MSWin32"; - my($volume, $path) = File::Spec::_0_8::splitpath($filename); - $directory = File::Spec::_0_8::catpath($volume, $path, ''); - } - local $stack->{'variables'}->{'DIRECTORY'} = $directory; - local $stack->{'variables'}->{'FILE'} = $filename; - local $stack->{'variables'}->{'LINE'} = 0; - local *FILE; - open(FILE, $filename) or die "Couldn't open $filename: $!\n"; - my $lineout = 0; - while () { - # on cygwin, line endings are screwed up, so normalise them. - s/[\x0D\x0A]+$/\n/os if ($^O eq 'msys' || $^O eq 'cygwin' || "$^O" eq "MSWin32"); - $stack->newline; - if (/^\Q$marker\E([a-z]+)\n?$/os) { # argumentless processing instruction - process($stack, $1); - } elsif (/^\Q$marker\E([a-z]+)\s(.*?)\n?$/os) { # processing instruction with arguments - process($stack, $1, $2); - } elsif (/^\Q$marker\E/os) { # comment - # ignore it - } elsif ($stack->enabled) { - next if $stack->{'dependencies'}; - - # set the current line number in JavaScript if necessary - my $linein = $stack->{'variables'}->{'LINE'}; - if (++$lineout != $linein) { - if ($filename =~ /\.js(|\.in)$/o) { - $stack->print("//\@line $linein \"$filename\"\n") - } - $lineout = $linein; - } - - # print it, including any newlines - $stack->print(filtered($stack, $_)); - } - } - close(FILE); -} - -sub process { - my($stack, $instruction, @arguments) = @_; - my $method = 'preprocessor'->can($instruction); - if (not defined($method)) { - fatal($stack, 'unknown instruction', $instruction); - } - eval { &$method($stack, @arguments) }; - if ($@) { - fatal($stack, "error evaluating $instruction:", $@); - } -} - -sub filtered { - my($stack, $text) = @_; - foreach my $filter (sort keys %{$stack->{'filters'}}) { - next unless $stack->{'filters'}->{$filter}; - my $method = 'filter'->can($filter); - if (not defined($method)) { - fatal($stack, 'unknown filter', $filter); - } - $text = eval { &$method($stack, $text) }; - if ($@) { - fatal($stack, "error using $filter:", $@); - } - } - return $text; -} - -sub fatal { - my $stack = shift; - my $filename = $stack->{'variables'}->{'FILE'}; - local $" = ' '; - print STDERR "$0:$filename:$.: @_\n"; - exit(1); -} - - -######################################################################## - -package stack; - -# condition evaluated just prior to this context was false -use constant COND_FALSE => 0; - -# condition evaluated just prior to this context was true -use constant COND_TRUE => 1; - -# some prior condition at this level already evaluated to true (or a -# parent condition evaluated to false or must be ignored), so we're -# ignoring all remaining conditions at current level (and nested -# conditions, too) -use constant COND_COMPLETED => 2; - -sub new { - return bless { - 'variables' => { - # %ENV, - 'LINE' => 0, # the line number in the source file - 'DIRECTORY' => '', # current directory - 'FILE' => '', # source filename - '1' => 1, # for convenience (the constant '1' is thus true) - }, - 'filters' => { - # filters - }, - 'values' => [], # the value of the last condition evaluated at the nth level - 'lastConditionState' => [], # whether the condition in the nth-level context was true, false, or not applicable - 'conditionState' => COND_TRUE, - 'dependencies' => 0, # whether we are showing dependencies - 'lineEndings' => "\n", # default to platform conventions - }; -} - -sub newline { - my $self = shift; - $self->{'variables'}->{'LINE'}++; -} - -sub define { - my $self = shift; - my($variable, $value) = @_; - die "not a valid variable name: '$variable'\n" if $variable =~ m/[^\w\.]/; - $self->{'variables'}->{$variable} = $value; -} - -sub defined { - my $self = shift; - my($variable) = @_; - die "not a valid variable name: '$variable'\n" if $variable =~ m/[^\w\.]/; - return defined($self->{'variables'}->{$variable}); -} - -sub undefine { - my $self = shift; - my($variable) = @_; - die "not a valid variable name: '$variable'\n" if $variable =~ m/[^\w\.]/; - delete($self->{'variables'}->{$variable}); -} - -sub get { - my $self = shift; - my($variable, $required) = @_; - die "not a valid variable name: '$variable'\n" if $variable =~ m/[^\w\.]/; - my $value = $self->{'variables'}->{$variable}; - if (defined($value)) { - return $value; - } else { - die "variable '$variable' is not defined\n" if $required; - return ''; - } -} - -sub replace { - my $self = shift; - my ($value) = @_; - - ${$self->{'values'}}[-1] = $value; - $self->{'conditionState'} = $self->{'conditionState'} != COND_FALSE - ? COND_COMPLETED - : $value ? COND_TRUE : COND_FALSE; -} - -sub push { - my $self = shift; - my($value) = @_; - - push(@{$self->{'values'}}, $value); - my $lastCondition = $self->{'conditionState'}; - push(@{$self->{'lastConditionState'}}, $lastCondition); - $self->{'conditionState'} = $lastCondition != COND_TRUE - ? COND_COMPLETED - : $value ? COND_TRUE : COND_FALSE; -} - -sub pop { - my $self = shift; - $self->{'conditionState'} = pop(@{$self->{'lastConditionState'}}); - return pop(@{$self->{'values'}}); -} - -sub enabled { - my $self = shift; - return $self->{'conditionState'} == COND_TRUE; -} - -sub disabled { - my $self = shift; - return $self->{'conditionState'} != COND_TRUE; -} - -sub filter { - my $self = shift; - my($filter, $value) = @_; - die "not a valid filter name: '$filter'\n" if $filter =~ m/\W/; - $self->{'filters'}->{$filter} = $value; -} - -sub expand { - my $self = shift; - my($line) = @_; - $line =~ s/__(\w+)__/$self->get($1)/gose; - return $line; -} - -sub print { - my $self = shift; - return if $self->{'dependencies'}; - foreach my $line (@_) { - if (chomp $line) { - CORE::print("$line$self->{'lineEndings'}"); - } else { - CORE::print($line); - } - } -} - -sub visit { - my $self = shift; - my($filename) = @_; - my $directory = $stack->{'variables'}->{'DIRECTORY'}; - $filename = File::Spec::_0_8::abs2rel(File::Spec::_0_8::rel2abs($filename, $directory)); - CORE::print("$filename\n"); -} - -######################################################################## - -package preprocessor; - -sub define { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - my $argument = shift; - for ($argument) { - /^(\w+)\s(.*)$/os && do { - return $stack->define($1, $2); - }; - /^(\w+)$/os && do { - return $stack->define($1, 1); - }; - die "invalid argument: '$_'\n"; - } -} - -sub undef { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - $stack->undefine(@_); -} - -sub ifdef { - my $stack = shift; - my $variable = shift; - my $replace = defined(shift); - die "argument expected\n" unless defined($variable); - if ($replace) { - $stack->replace($stack->defined($variable)); - } else { - $stack->push($stack->defined($variable)); - } -} - -sub ifndef { - my $stack = shift; - my $variable = shift; - my $replace = defined(shift); - die "argument expected\n" unless defined($variable); - if ($replace) { - $stack->replace(not $stack->defined($variable)); - } else { - $stack->push(not $stack->defined($variable)); - } -} - -sub if { - my $stack = shift; - die "argument expected\n" unless @_; - my $argument = shift; - my $replace = defined(shift); - for ($argument) { - /^(\w+)==(.*)$/os && do { - # equality - if ($replace) { - return $stack->replace($stack->get($1) eq $2); - } else { - return $stack->push($stack->get($1) eq $2); - } - }; - /^(\w+)!=(.*)$/os && do { - # inequality - if ($replace) { - return $stack->replace($stack->get($1) ne $2); - } else { - return $stack->push($stack->get($1) ne $2); - } - }; - /^(\w+)$/os && do { - # true value - if ($replace) { - return $stack->replace($stack->get($1)); - } else { - return $stack->push($stack->get($1)); - } - }; - /^!(\w+)$/os && do { - # false value - if ($replace) { - return $stack->replace(not $stack->get($1)); - } else { - return $stack->push(not $stack->get($1)); - } - }; - die "invalid argument: '$_'\n"; - } -} - -sub else { - my $stack = shift; - die "argument unexpected\n" if @_; - $stack->replace(1); -} - -sub elif { - my $stack = shift; - die "argument expected\n" unless @_; - &if($stack, @_, 1); -} - -sub elifdef { - my $stack = shift; - die "argument expected\n" unless @_; - &ifdef($stack, @_, 1); -} - -sub elifndef { - my $stack = shift; - die "argument expected\n" unless @_; - &ifndef($stack, @_, 1); -} - -sub endif { - my $stack = shift; - die "argument unexpected\n" if @_; - $stack->pop; -} - -sub error { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - my $line = $stack->expand(@_); - die "$line\n"; -} - -sub expand { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - my $line = $stack->expand(@_); - $stack->print("$line\n"); -} - -sub literal { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - my $line = shift; - $stack->print("$line\n"); -} - -sub include { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - my $filename = File::Spec::_0_8::catpath(File::Spec::_0_8::splitpath(@_)); - if ($stack->{'dependencies'}) { - $stack->visit($filename); - } else { - main::include($stack, $filename); - } -} - -sub includesubst { - my ($stack, $filename) = @_; - return if $stack->disabled; - die "argument expected\n" unless $filename; - $filename =~ s/@(\w+)@/$stack->get($1, 1)/gose; - $filename = File::Spec::_0_8::catpath(File::Spec::_0_8::splitpath($filename)); - if ($stack->{'dependencies'}) { - $stack->visit($filename); - } else { - main::include($stack, $filename); - } -} - -sub filter { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - foreach (split(/\s/os, shift)) { - $stack->filter($_, 1); - } -} - -sub unfilter { - my $stack = shift; - return if $stack->disabled; - die "argument expected\n" unless @_; - foreach (split(/\s/os, shift)) { - $stack->filter($_, 0); - } -} - - -######################################################################## - -package filter; - -sub emptyLines { - my($stack, $text) = @_; - $text = "" if $text eq "\n"; - return $text; -} - -sub spaces { - my($stack, $text) = @_; - $text =~ s/ +/ /gos; # middle spaces - $text =~ s/^ //gos; # start spaces - $text =~ s/ (\n?)$/$1/gos; # end spaces - return $text; -} - -sub slashslash { - my($stack, $text) = @_; - $text =~ s|//.*?(\n?)$|$1|gos; - return $text; -} - -sub substitution { - my($stack, $text) = @_; - $text =~ s/@(\w+)@/$stack->get($1, 1)/gose; - return $text; -} - -sub attemptSubstitution { - my($stack, $text) = @_; - $text =~ s/@(\w+)@/$stack->get($1, 0)/gose; - return $text; -} - -######################################################################## - -######################################################################## -# This code is from File::Spec::Unix 0.8. -# It is not considered a part of the preprocessor.pl source file -# This code is licensed under the same license as File::Spec itself. - -package File::Spec::_0_8; - -use Cwd; - -sub rel2abs { - my ($path, $base) = @_; - if ( ! File::Spec->file_name_is_absolute( $path ) ) { - if ( !defined( $base ) || $base eq '' ) { - $base = cwd() ; - } elsif ( ! File::Spec->file_name_is_absolute( $base ) ) { - $base = rel2abs( $base ); - } else { - $base = File::Spec->canonpath( $base ); - } - $path = File::Spec->catdir( $base, $path ); - } - return File::Spec->canonpath( $path ); -} - -sub splitdir { - return split m|/|, $_[1], -1; # Preserve trailing fields -} - -sub splitpath { - my ($path, $nofile) = @_; - - my ($volume,$directory,$file) = ('','',''); - - if ( $nofile ) { - $directory = $path; - } - else { - $path =~ m|^ ( (?: .* / (?: \.\.?\Z(?!\n) )? )? ) ([^/]*) |xs; - $directory = $1; - $file = $2; - } - - return ($volume,$directory,$file); -} - -sub catpath { - my ($volume,$directory,$file) = @_; - - if ( $directory ne '' && - $file ne '' && - substr( $directory, -1 ) ne '/' && - substr( $file, 0, 1 ) ne '/' - ) { - $directory .= "/$file" ; - } - else { - $directory .= $file ; - } - - return $directory ; -} - -sub abs2rel { - my($path,$base) = @_; - - # Clean up $path - if ( ! File::Spec->file_name_is_absolute( $path ) ) { - $path = rel2abs( $path ) ; - } - else { - $path = File::Spec->canonpath( $path ) ; - } - - # Figure out the effective $base and clean it up. - if ( !defined( $base ) || $base eq '' ) { - $base = cwd(); - } - elsif ( ! File::Spec->file_name_is_absolute( $base ) ) { - $base = rel2abs( $base ) ; - } - else { - $base = File::Spec->canonpath( $base ) ; - } - - # Now, remove all leading components that are the same - my @pathchunks = File::Spec::_0_8::splitdir( $path); - my @basechunks = File::Spec::_0_8::splitdir( $base); - - while (@pathchunks && @basechunks && $pathchunks[0] eq $basechunks[0]) { - shift @pathchunks ; - shift @basechunks ; - } - - $path = CORE::join( '/', @pathchunks ); - $base = CORE::join( '/', @basechunks ); - - # $base now contains the directories the resulting relative path - # must ascend out of before it can descend to $path_directory. So, - # replace all names with $parentDir - $base =~ s|[^/]+|..|g ; - - # Glue the two together, using a separator if necessary, and preventing an - # empty result. - if ( $path ne '' && $base ne '' ) { - $path = "$base/$path" ; - } else { - $path = "$base$path" ; - } - - return File::Spec->canonpath( $path ) ; -} - -# End code from File::Spec::Unix 0.8. -######################################################################## diff --git a/toolkit/locales/l10n.mk b/toolkit/locales/l10n.mk index ba4b69bf165f..5f0b006dae49 100644 --- a/toolkit/locales/l10n.mk +++ b/toolkit/locales/l10n.mk @@ -189,7 +189,7 @@ langpack-%: XPI_NAME=locale-$* langpack-%: libs-% @echo "Making langpack $(LANGPACK_FILE)" $(NSINSTALL) -D $(DIST)/$(PKG_LANGPACK_PATH) - $(PERL) $(MOZILLA_DIR)/config/preprocessor.pl $(DEFINES) $(ACDEFINES) -I$(TK_DEFINES) -I$(APP_DEFINES) $(srcdir)/generic/install.rdf > $(FINAL_TARGET)/install.rdf + $(PYTHON) $(MOZILLA_DIR)/config/Preprocessor.py $(DEFINES) $(ACDEFINES) -I$(TK_DEFINES) -I$(APP_DEFINES) $(srcdir)/generic/install.rdf > $(FINAL_TARGET)/install.rdf cd $(DIST)/xpi-stage/locale-$(AB_CD) && \ $(ZIP) -r9D $(LANGPACK_FILE) install.rdf chrome chrome.manifest -x chrome/$(AB_CD).manifest diff --git a/xulrunner/app/Makefile.in b/xulrunner/app/Makefile.in index 55fa9eea6d71..5efc305b2fa1 100644 --- a/xulrunner/app/Makefile.in +++ b/xulrunner/app/Makefile.in @@ -212,7 +212,7 @@ endif # XXX applications would need to supply this file #export:: brand.dtd.in -# $(PERL) $(topsrcdir)/config/preprocessor.pl $(DEFINES) $(ACDEFINES) $^ > brand.dtd +# $(PYTHON) $(topsrcdir)/config/Preprocessor.py $(DEFINES) $(ACDEFINES) $^ > brand.dtd export:: $(NSINSTALL) -D $(DIST)/branding diff --git a/xulrunner/installer/mac/Makefile.in b/xulrunner/installer/mac/Makefile.in index 6f2d1918bdc5..b9dfe41b0c1c 100644 --- a/xulrunner/installer/mac/Makefile.in +++ b/xulrunner/installer/mac/Makefile.in @@ -61,7 +61,7 @@ include $(topsrcdir)/config/rules.mk libs:: stage-package %.plist: %.plist.in - $(PERL) $(topsrcdir)/config/preprocessor.pl $(DEFINES) $(ACDEFINES) $< > $@ + $(PYTHON) $(topsrcdir)/config/Preprocessor.py $(DEFINES) $(ACDEFINES) $< > $@ PACKAGER_NO_LIBS=1 _APPNAME = XUL.framework From 77730ba55feb7886b551110c0f5a98bba4ba7e51 Mon Sep 17 00:00:00 2001 From: Mark Finkle Date: Mon, 16 May 2011 10:01:44 -0400 Subject: [PATCH 125/282] Bug 654733 - Stop using 'computer' in offline storage notifications (entity changes) [r=wjohnston] --- mobile/chrome/content/OfflineApps.js | 2 +- mobile/chrome/content/browser.js | 2 +- mobile/components/ContentPermissionPrompt.js | 2 +- mobile/locales/en-US/chrome/browser.properties | 12 ++++++------ 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/mobile/chrome/content/OfflineApps.js b/mobile/chrome/content/OfflineApps.js index 39fc5a90ae99..5b28376ecca3 100644 --- a/mobile/chrome/content/OfflineApps.js +++ b/mobile/chrome/content/OfflineApps.js @@ -51,7 +51,7 @@ var OfflineApps = { }]; const priority = notificationBox.PRIORITY_INFO_LOW; - let message = strings.formatStringFromName("offlineApps.available", [host], 1); + let message = strings.formatStringFromName("offlineApps.available2", [host], 1); notification = notificationBox.appendNotification(message, notificationID, "", priority, buttons); notification.documents = [aRequest]; } diff --git a/mobile/chrome/content/browser.js b/mobile/chrome/content/browser.js index d6dd2f04d697..ced7d1434ba4 100644 --- a/mobile/chrome/content/browser.js +++ b/mobile/chrome/content/browser.js @@ -2347,7 +2347,7 @@ var XPInstallObserver = { } else { notificationName = "xpinstall"; - messageString = strings.formatStringFromName("xpinstallPromptWarning", [brandShortName, host], 2); + messageString = strings.formatStringFromName("xpinstallPromptWarning2", [brandShortName, host], 2); buttons = [{ label: strings.GetStringFromName("xpinstallPromptAllowButton"), diff --git a/mobile/components/ContentPermissionPrompt.js b/mobile/components/ContentPermissionPrompt.js index ce4aba440c69..959b8558e9d8 100644 --- a/mobile/components/ContentPermissionPrompt.js +++ b/mobile/components/ContentPermissionPrompt.js @@ -109,7 +109,7 @@ ContentPermissionPrompt.prototype = { } }]; - let message = browserBundle.formatStringFromName(entityName + ".siteWantsTo", + let message = browserBundle.formatStringFromName(entityName + ".wantsTo", [request.uri.host], 1); let newBar = notificationBox.appendNotification(message, request.type, diff --git a/mobile/locales/en-US/chrome/browser.properties b/mobile/locales/en-US/chrome/browser.properties index 3ead1ede8838..5230ad8c69ea 100644 --- a/mobile/locales/en-US/chrome/browser.properties +++ b/mobile/locales/en-US/chrome/browser.properties @@ -122,7 +122,7 @@ popupButtonAlwaysAllow2=Always Show popupButtonNeverWarn2=Never Show # XPInstall -xpinstallPromptWarning=%S prevented this site (%S) from asking you to install software on your device. +xpinstallPromptWarning2=%S prevented this site (%S) from asking you to install software on your device. xpinstallPromptAllowButton=Allow xpinstallDisabledMessageLocked=Software installation has been disabled by your system administrator. xpinstallDisabledMessage2=Software installation is currently disabled. Press Enable and try again. @@ -141,12 +141,12 @@ identity.ownerUnknown2=(unknown) # Geolocation UI geolocation.allow=Share geolocation.dontAllow=Don't share -geolocation.siteWantsTo=%S wants your location. +geolocation.wantsTo=%S wants your location. # Desktop notification UI desktopNotification.allow=Allow desktopNotification.dontAllow=Don't allow -desktopNotification.siteWantsTo=%S wants to use notifications. +desktopNotification.wantsTo=%S wants to use notifications. # New Tab Popup # LOCALIZATION NOTE (newtabpopup): Semi-colon list of plural forms. @@ -159,19 +159,19 @@ typeError=Error: typeWarning=Warning: # Offline web applications -offlineApps.available=%S wants to store data on your device for offline use. +offlineApps.available2=%S wants to store data on your device for offline use. offlineApps.allow=Allow offlineApps.never=Don't Allow offlineApps.notNow=Not Now # New-style ContentPermissionPrompt values offlineApps.dontAllow=Don't Allow -offlineApps.siteWantsTo=%S wants to store data on your device for offline use. +offlineApps.wantsTo=%S wants to store data on your device for offline use. # IndexedDB Quota increases indexedDBQuota.allow=Allow indexedDBQuota.dontAllow=Don't Allow -indexedDBQuota.siteWantsTo=%S wants to store a lot of data on your device for offline use. +indexedDBQuota.wantsTo=%S wants to store a lot of data on your device for offline use. # Bookmark List bookmarkList.desktop=Desktop Bookmarks From 9b7557a3358d383bb493f172d2824f156432b35f Mon Sep 17 00:00:00 2001 From: Siarhei Siamashka Date: Thu, 12 May 2011 15:26:00 -0400 Subject: [PATCH 126/282] Bug 656782 - Runtime CPU features detection does not work for pixman in Android [r=jmuizelaar] Pixman upgrade from bug 640250 resulted in ARM cpu features not being detected properly in Android. As a result, NEON optimizations were not used at all. --- gfx/cairo/libpixman/src/pixman-cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gfx/cairo/libpixman/src/pixman-cpu.c b/gfx/cairo/libpixman/src/pixman-cpu.c index 2ad638ca708f..e61ac368e2df 100644 --- a/gfx/cairo/libpixman/src/pixman-cpu.c +++ b/gfx/cairo/libpixman/src/pixman-cpu.c @@ -244,7 +244,7 @@ pixman_have_arm_neon (void) #endif /* USE_ARM_NEON */ -#elif defined (__linux__) /* linux ELF */ +#elif defined (__linux__) || defined(ANDROID) /* linux ELF */ #include #include From 1016e271753454127bfb9bed1b2655f1eed22bf4 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Mon, 16 May 2011 16:29:03 +0200 Subject: [PATCH 127/282] Backout bug 644608 because of bustage --- config/config.mk | 2 +- config/expandlibs_deps.py | 80 -------------------------------- config/rules.mk | 21 ++------- config/tests/unit-expandlibs.py | 25 ---------- js/src/config/config.mk | 2 +- js/src/config/expandlibs_deps.py | 80 -------------------------------- js/src/config/rules.mk | 21 ++------- 7 files changed, 10 insertions(+), 221 deletions(-) delete mode 100644 config/expandlibs_deps.py delete mode 100644 js/src/config/expandlibs_deps.py diff --git a/config/config.mk b/config/config.mk index 26255cb6b1de..fb894ae064fb 100644 --- a/config/config.mk +++ b/config/config.mk @@ -826,7 +826,7 @@ OPTIMIZE_JARS_CMD = $(PYTHON) $(call core_abspath,$(topsrcdir)/config/optimizeja CREATE_PRECOMPLETE_CMD = $(PYTHON) $(call core_abspath,$(topsrcdir)/config/createprecomplete.py) -EXPAND_LIBS_DEPS = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_deps.py +EXPAND_LIBS = $(PYTHON) -I$(DEPTH)/config $(topsrcdir)/config/expandlibs.py EXPAND_LIBS_EXEC = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_exec.py EXPAND_LIBS_GEN = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_gen.py EXPAND_AR = $(EXPAND_LIBS_EXEC) --extract -- $(AR) diff --git a/config/expandlibs_deps.py b/config/expandlibs_deps.py deleted file mode 100644 index 543aa3403b7b..000000000000 --- a/config/expandlibs_deps.py +++ /dev/null @@ -1,80 +0,0 @@ -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is a build helper for libraries -# -# The Initial Developer of the Original Code is -# the Mozilla Foundation -# Portions created by the Initial Developer are Copyright (C) 2011 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mike Hommey -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -'''expandlibs_deps.py takes a list of key/value pairs and prints, for each -key, a list of all dependencies corresponding to the corresponding value. -Libraries are thus expanded, and their descriptor is also made part of this -list. -The list of key/value is passed on the command line in the form -"var1 = value , var2 = value ..." -''' -import sys -import os -from expandlibs import ExpandArgs, relativize -import expandlibs_config as conf - -class ExpandLibsDeps(ExpandArgs): - def _expand_desc(self, arg): - objs = super(ExpandLibsDeps, self)._expand_desc(arg) - if os.path.exists(arg + conf.LIBS_DESC_SUFFIX): - objs += [relativize(arg + conf.LIBS_DESC_SUFFIX)] - return objs - -def split_args(args): - '''Transforms a list in the form - ['var1', '=', 'value', ',', 'var2', '=', 'other', 'value', ',' ...] - into a corresponding dict - { 'var1': ['value'], - 'var2': ['other', 'value'], ... }''' - - result = {} - while args: - try: - i = args.index(',') - l = args[:i] - args[:i + 1] = [] - except: - l = args - args = [] - if l[1] != '=': - raise RuntimeError('Expected "var = value" format') - result[l[0]] = l[2:] - return result - -if __name__ == '__main__': - for key, value in split_args(sys.argv[1:]).iteritems(): - print "%s = %s" % (key, " ".join(ExpandLibsDeps(value))) diff --git a/config/rules.mk b/config/rules.mk index 45c546c05b64..50e8c0fc7545 100644 --- a/config/rules.mk +++ b/config/rules.mk @@ -801,24 +801,11 @@ $(error SHARED_LIBRARY_LIBS must contain .$(LIB_SUFFIX) files only) endif # Create dependencies on static (and shared EXTRA_DSO_LIBS) libraries -ifeq (,$(filter clean clobber clobber_all distclean realclean,$(MAKECMDGOALS))) -ifneq (,$(strip $(filter %.$(LIB_SUFFIX),$(LIBS) $(EXTRA_DSO_LDOPTS)) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LIBS))) -$(MDDEPDIR)/libs: Makefile.in - @$(EXPAND_LIBS_DEPS) LIBS_DEPS = $(filter %.$(LIB_SUFFIX),$(LIBS)) , \ - SHARED_LIBRARY_LIBS_DEPS = $(SHARED_LIBRARY_LIBS) , \ - DSO_LDOPTS_DEPS = $(EXTRA_DSO_LIBS) $(filter %.$(LIB_SUFFIX), $(EXTRA_DSO_LDOPTS)) > $@ - -ifneq (,$(wildcard $(MDDEPDIR)/libs)) -include $(MDDEPDIR)/libs -endif - -$(MDDEPDIR)/libs: $(filter %.$(LIBS_DESC_SUFFIX),$(LIBS_DEPS) $(SHARED_LIBRARY_LIBS_DEPS) $(DSO_LDOPTS_DEPS)) - -EXTRA_DEPS += $(MDDEPDIR)/libs -endif -endif - +DO_EXPAND_LIBS = $(foreach f,$(1),$(if $(filter %.$(LIB_SUFFIX),$(f)),$(if $(wildcard $(f).$(LIBS_DESC_SUFFIX)),$(f).$(LIBS_DESC_SUFFIX),$(if $(wildcard $(f)),$(f))))) +LIBS_DEPS = $(call DO_EXPAND_LIBS,$(filter %.$(LIB_SUFFIX),$(LIBS))) +SHARED_LIBRARY_LIBS_DEPS = $(call DO_EXPAND_LIBS,$(SHARED_LIBRARY_LIBS)) HOST_LIBS_DEPS = $(filter %.$(LIB_SUFFIX),$(HOST_LIBS)) +DSO_LDOPTS_DEPS = $(call DO_EXPAND_LIBS,$(EXTRA_DSO_LIBS) $(filter %.$(LIB_SUFFIX), $(EXTRA_DSO_LDOPTS))) # Dependencies which, if modified, should cause everything to rebuild GLOBAL_DEPS += Makefile Makefile.in $(DEPTH)/config/autoconf.mk $(topsrcdir)/config/config.mk diff --git a/config/tests/unit-expandlibs.py b/config/tests/unit-expandlibs.py index 6cd44ea6fb1d..998eaef0744d 100644 --- a/config/tests/unit-expandlibs.py +++ b/config/tests/unit-expandlibs.py @@ -37,7 +37,6 @@ config_unix = { config = sys.modules['expandlibs_config'] = imp.new_module('expandlibs_config') from expandlibs import LibDescriptor, ExpandArgs, relativize -from expandlibs_deps import ExpandLibsDeps, split_args from expandlibs_gen import generate from expandlibs_exec import ExpandArgsMore @@ -192,30 +191,6 @@ class TestExpandArgs(TestExpandInit): args = ExpandArgs(['foo', '-bar'] + self.arg_files + [self.tmpfile('liby', Lib('y'))]) self.assertRelEqual(args, ['foo', '-bar'] + self.files + [self.tmpfile('liby', Lib('y'))]) -class TestExpandLibsDeps(TestExpandInit): - def test_expandlibsdeps(self): - '''Test library expansion for dependencies''' - # Dependency list for a library with a descriptor is equivalent to - # the arguments expansion, to which we add each descriptor - args = self.arg_files + [self.tmpfile('liby', Lib('y'))] - self.assertRelEqual(ExpandLibsDeps(args), ExpandArgs(args) + [self.tmpfile('libx', Lib('x') + config.LIBS_DESC_SUFFIX), self.tmpfile('liby', Lib('y') + config.LIBS_DESC_SUFFIX)]) - - # When a library exists at the same time as a descriptor, the - # descriptor is not a dependency - self.touch([self.tmpfile('libx', Lib('x'))]) - args = self.arg_files + [self.tmpfile('liby', Lib('y'))] - self.assertRelEqual(ExpandLibsDeps(args), ExpandArgs(args) + [self.tmpfile('liby', Lib('y') + config.LIBS_DESC_SUFFIX)]) - - self.touch([self.tmpfile('liby', Lib('y'))]) - args = self.arg_files + [self.tmpfile('liby', Lib('y'))] - self.assertRelEqual(ExpandLibsDeps(args), ExpandArgs(args)) - -class TestSplitArgs(unittest.TestCase): - def test_split_args(self): - self.assertEqual(split_args(['a', '=', 'b', 'c']), {'a': ['b', 'c']}) - self.assertEqual(split_args(['a', '=', 'b', 'c', ',', 'd', '=', 'e', 'f', 'g', ',', 'h', '=', 'i']), - {'a': ['b', 'c'], 'd': ['e', 'f', 'g'], 'h': ['i']}) - class TestExpandArgsMore(TestExpandInit): def test_makelist(self): '''Test grouping object files in lists''' diff --git a/js/src/config/config.mk b/js/src/config/config.mk index 26255cb6b1de..fb894ae064fb 100644 --- a/js/src/config/config.mk +++ b/js/src/config/config.mk @@ -826,7 +826,7 @@ OPTIMIZE_JARS_CMD = $(PYTHON) $(call core_abspath,$(topsrcdir)/config/optimizeja CREATE_PRECOMPLETE_CMD = $(PYTHON) $(call core_abspath,$(topsrcdir)/config/createprecomplete.py) -EXPAND_LIBS_DEPS = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_deps.py +EXPAND_LIBS = $(PYTHON) -I$(DEPTH)/config $(topsrcdir)/config/expandlibs.py EXPAND_LIBS_EXEC = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_exec.py EXPAND_LIBS_GEN = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_gen.py EXPAND_AR = $(EXPAND_LIBS_EXEC) --extract -- $(AR) diff --git a/js/src/config/expandlibs_deps.py b/js/src/config/expandlibs_deps.py deleted file mode 100644 index 543aa3403b7b..000000000000 --- a/js/src/config/expandlibs_deps.py +++ /dev/null @@ -1,80 +0,0 @@ -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is a build helper for libraries -# -# The Initial Developer of the Original Code is -# the Mozilla Foundation -# Portions created by the Initial Developer are Copyright (C) 2011 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mike Hommey -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -'''expandlibs_deps.py takes a list of key/value pairs and prints, for each -key, a list of all dependencies corresponding to the corresponding value. -Libraries are thus expanded, and their descriptor is also made part of this -list. -The list of key/value is passed on the command line in the form -"var1 = value , var2 = value ..." -''' -import sys -import os -from expandlibs import ExpandArgs, relativize -import expandlibs_config as conf - -class ExpandLibsDeps(ExpandArgs): - def _expand_desc(self, arg): - objs = super(ExpandLibsDeps, self)._expand_desc(arg) - if os.path.exists(arg + conf.LIBS_DESC_SUFFIX): - objs += [relativize(arg + conf.LIBS_DESC_SUFFIX)] - return objs - -def split_args(args): - '''Transforms a list in the form - ['var1', '=', 'value', ',', 'var2', '=', 'other', 'value', ',' ...] - into a corresponding dict - { 'var1': ['value'], - 'var2': ['other', 'value'], ... }''' - - result = {} - while args: - try: - i = args.index(',') - l = args[:i] - args[:i + 1] = [] - except: - l = args - args = [] - if l[1] != '=': - raise RuntimeError('Expected "var = value" format') - result[l[0]] = l[2:] - return result - -if __name__ == '__main__': - for key, value in split_args(sys.argv[1:]).iteritems(): - print "%s = %s" % (key, " ".join(ExpandLibsDeps(value))) diff --git a/js/src/config/rules.mk b/js/src/config/rules.mk index 45c546c05b64..50e8c0fc7545 100644 --- a/js/src/config/rules.mk +++ b/js/src/config/rules.mk @@ -801,24 +801,11 @@ $(error SHARED_LIBRARY_LIBS must contain .$(LIB_SUFFIX) files only) endif # Create dependencies on static (and shared EXTRA_DSO_LIBS) libraries -ifeq (,$(filter clean clobber clobber_all distclean realclean,$(MAKECMDGOALS))) -ifneq (,$(strip $(filter %.$(LIB_SUFFIX),$(LIBS) $(EXTRA_DSO_LDOPTS)) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LIBS))) -$(MDDEPDIR)/libs: Makefile.in - @$(EXPAND_LIBS_DEPS) LIBS_DEPS = $(filter %.$(LIB_SUFFIX),$(LIBS)) , \ - SHARED_LIBRARY_LIBS_DEPS = $(SHARED_LIBRARY_LIBS) , \ - DSO_LDOPTS_DEPS = $(EXTRA_DSO_LIBS) $(filter %.$(LIB_SUFFIX), $(EXTRA_DSO_LDOPTS)) > $@ - -ifneq (,$(wildcard $(MDDEPDIR)/libs)) -include $(MDDEPDIR)/libs -endif - -$(MDDEPDIR)/libs: $(filter %.$(LIBS_DESC_SUFFIX),$(LIBS_DEPS) $(SHARED_LIBRARY_LIBS_DEPS) $(DSO_LDOPTS_DEPS)) - -EXTRA_DEPS += $(MDDEPDIR)/libs -endif -endif - +DO_EXPAND_LIBS = $(foreach f,$(1),$(if $(filter %.$(LIB_SUFFIX),$(f)),$(if $(wildcard $(f).$(LIBS_DESC_SUFFIX)),$(f).$(LIBS_DESC_SUFFIX),$(if $(wildcard $(f)),$(f))))) +LIBS_DEPS = $(call DO_EXPAND_LIBS,$(filter %.$(LIB_SUFFIX),$(LIBS))) +SHARED_LIBRARY_LIBS_DEPS = $(call DO_EXPAND_LIBS,$(SHARED_LIBRARY_LIBS)) HOST_LIBS_DEPS = $(filter %.$(LIB_SUFFIX),$(HOST_LIBS)) +DSO_LDOPTS_DEPS = $(call DO_EXPAND_LIBS,$(EXTRA_DSO_LIBS) $(filter %.$(LIB_SUFFIX), $(EXTRA_DSO_LDOPTS))) # Dependencies which, if modified, should cause everything to rebuild GLOBAL_DEPS += Makefile Makefile.in $(DEPTH)/config/autoconf.mk $(topsrcdir)/config/config.mk From 220681533333bc8eb899ef5280b5cd941d423a31 Mon Sep 17 00:00:00 2001 From: Ehsan Akhgari Date: Mon, 16 May 2011 13:27:24 -0400 Subject: [PATCH 128/282] Bug 656875 - Use the transformed dirty rectngle when building display list items for stacking context; r=roc --- layout/generic/nsFrame.cpp | 2 +- layout/reftests/bugs/656875.html | 12 ++++++++++++ layout/reftests/bugs/reftest.list | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 layout/reftests/bugs/656875.html diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp index 8b6d3349df54..e2b7f55eff08 100644 --- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -1498,7 +1498,7 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder, #endif // Mark the display list items for absolutely positioned children - MarkAbsoluteFramesForDisplayList(aBuilder, aDirtyRect); + MarkAbsoluteFramesForDisplayList(aBuilder, dirtyRect); nsDisplayListCollection set; nsresult rv; diff --git a/layout/reftests/bugs/656875.html b/layout/reftests/bugs/656875.html new file mode 100644 index 000000000000..6b08f5bbf54d --- /dev/null +++ b/layout/reftests/bugs/656875.html @@ -0,0 +1,12 @@ + + +
    test
    + + diff --git a/layout/reftests/bugs/reftest.list b/layout/reftests/bugs/reftest.list index 7cab542430f0..518ffb90a298 100644 --- a/layout/reftests/bugs/reftest.list +++ b/layout/reftests/bugs/reftest.list @@ -1635,3 +1635,4 @@ HTTP(..) == 635639-2.html 635639-2-ref.html fails-if(layersGPUAccelerated&&cocoaWidget) == 650228-1.html 650228-1-ref.html # Quartz alpha blending doesn't match GL alpha blending HTTP(..) == 654057-1.html 654057-1-ref.html == 652775-1.html 652775-1-ref.html +!= 656875.html about:blank From 9a43bab618ccab2fc695d3a5ff3c0d8b89a103eb Mon Sep 17 00:00:00 2001 From: Steven Michaud Date: Mon, 16 May 2011 12:56:03 -0500 Subject: [PATCH 129/282] Ensure compatibility with OS X 10.7's arrowless scrollbar. r=mstange --- widget/public/nsILookAndFeel.h | 7 +++-- widget/src/cocoa/nsLookAndFeel.mm | 29 ++++++++++--------- widget/src/cocoa/nsNativeThemeCocoa.mm | 40 +++++++++++++++----------- widget/src/cocoa/nsToolkit.h | 2 ++ widget/src/cocoa/nsToolkit.mm | 5 ++++ 5 files changed, 50 insertions(+), 33 deletions(-) diff --git a/widget/public/nsILookAndFeel.h b/widget/public/nsILookAndFeel.h index 5d79c3f77efc..57dc89242553 100644 --- a/widget/public/nsILookAndFeel.h +++ b/widget/public/nsILookAndFeel.h @@ -43,10 +43,10 @@ // for |#ifdef NS_DEBUG| struct nsSize; -// 2e89c566-0a31-4c93-bdff-222651df45a0 +// 89401022-94b3-413e-a6b8-2203dab824f3 #define NS_ILOOKANDFEEL_IID \ -{ 0x2e89c566, 0x0a31, 0x4c93, \ - { 0xbd, 0xff, 0x22, 0x26, 0x51, 0xdf, 0x45, 0xa0 } } +{ 0x89401022, 0x94b3, 0x413e, \ + { 0xa6, 0xb8, 0x22, 0x03, 0xda, 0xb8, 0x24, 0xf3 } } class nsILookAndFeel: public nsISupports { public: @@ -326,6 +326,7 @@ public: }; enum { + eMetric_ScrollArrowNone = 0, eMetric_ScrollArrowStartBackward = 0x1000, eMetric_ScrollArrowStartForward = 0x0100, eMetric_ScrollArrowEndBackward = 0x0010, diff --git a/widget/src/cocoa/nsLookAndFeel.mm b/widget/src/cocoa/nsLookAndFeel.mm index f4e49f2e517e..576d91b761db 100644 --- a/widget/src/cocoa/nsLookAndFeel.mm +++ b/widget/src/cocoa/nsLookAndFeel.mm @@ -343,22 +343,25 @@ NS_IMETHODIMP nsLookAndFeel::GetMetric(const nsMetricID aID, PRInt32 & aMetric) aMetric = 4; break; case eMetric_ScrollArrowStyle: - { - NSString *buttonPlacement = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleScrollBarVariant"]; - if ([buttonPlacement isEqualToString:@"Single"]) { - aMetric = eMetric_ScrollArrowStyleSingle; - } else if ([buttonPlacement isEqualToString:@"DoubleMin"]) { - aMetric = eMetric_ScrollArrowStyleBothAtTop; - } else if ([buttonPlacement isEqualToString:@"DoubleBoth"]) { - aMetric = eMetric_ScrollArrowStyleBothAtEachEnd; + if (nsToolkit::OnLionOrLater()) { + // OS X Lion's scrollbars have no arrows + aMetric = eMetric_ScrollArrowNone; } else { - aMetric = eMetric_ScrollArrowStyleBothAtBottom; // The default is BothAtBottom. + NSString *buttonPlacement = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleScrollBarVariant"]; + if ([buttonPlacement isEqualToString:@"Single"]) { + aMetric = eMetric_ScrollArrowStyleSingle; + } else if ([buttonPlacement isEqualToString:@"DoubleMin"]) { + aMetric = eMetric_ScrollArrowStyleBothAtTop; + } else if ([buttonPlacement isEqualToString:@"DoubleBoth"]) { + aMetric = eMetric_ScrollArrowStyleBothAtEachEnd; + } else { + aMetric = eMetric_ScrollArrowStyleBothAtBottom; // The default is BothAtBottom. + } } - } - break; + break; case eMetric_ScrollSliderStyle: - aMetric = eMetric_ScrollThumbStyleProportional; - break; + aMetric = eMetric_ScrollThumbStyleProportional; + break; case eMetric_TreeOpenDelay: aMetric = 1000; break; diff --git a/widget/src/cocoa/nsNativeThemeCocoa.mm b/widget/src/cocoa/nsNativeThemeCocoa.mm index fe4255384eee..a0bfc88c5f2d 100644 --- a/widget/src/cocoa/nsNativeThemeCocoa.mm +++ b/widget/src/cocoa/nsNativeThemeCocoa.mm @@ -1428,9 +1428,12 @@ nsNativeThemeCocoa::GetScrollbarDrawInfo(HIThemeTrackDrawInfo& aTdi, nsIFrame *a aTdi.trackInfo.scrollbar.pressState = 0; - // Only go get these scrollbar button states if we need it. For example, there's no reaon to look up scrollbar button - // states when we're only creating a TrackDrawInfo to determine the size of the thumb. - if (aShouldGetButtonStates) { + // Only go get these scrollbar button states if we need it. For example, + // there's no reason to look up scrollbar button states when we're only + // creating a TrackDrawInfo to determine the size of the thumb. There's + // also no reason to do this on Lion or later, whose scrollbars have no + // arrow buttons. + if (aShouldGetButtonStates && !nsToolkit::OnLionOrLater()) { nsEventStates buttonStates[4]; GetScrollbarPressStates(aFrame, buttonStates); NSString *buttonPlacement = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleScrollBarVariant"]; @@ -2155,23 +2158,26 @@ nsNativeThemeCocoa::GetWidgetBorder(nsDeviceContext* aContext, case NS_THEME_SCROLLBAR_TRACK_HORIZONTAL: case NS_THEME_SCROLLBAR_TRACK_VERTICAL: { - // There's only an endcap to worry about when both arrows are on the bottom - NSString *buttonPlacement = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleScrollBarVariant"]; - if (!buttonPlacement || [buttonPlacement isEqualToString:@"DoubleMax"]) { - PRBool isHorizontal = (aWidgetType == NS_THEME_SCROLLBAR_TRACK_HORIZONTAL); + // On Lion and later, scrollbars have no arrows. + if (!nsToolkit::OnLionOrLater()) { + // There's only an endcap to worry about when both arrows are on the bottom + NSString *buttonPlacement = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleScrollBarVariant"]; + if (!buttonPlacement || [buttonPlacement isEqualToString:@"DoubleMax"]) { + PRBool isHorizontal = (aWidgetType == NS_THEME_SCROLLBAR_TRACK_HORIZONTAL); - nsIFrame *scrollbarFrame = GetParentScrollbarFrame(aFrame); - if (!scrollbarFrame) return NS_ERROR_FAILURE; - PRBool isSmall = (scrollbarFrame->GetStyleDisplay()->mAppearance == NS_THEME_SCROLLBAR_SMALL); + nsIFrame *scrollbarFrame = GetParentScrollbarFrame(aFrame); + if (!scrollbarFrame) return NS_ERROR_FAILURE; + PRBool isSmall = (scrollbarFrame->GetStyleDisplay()->mAppearance == NS_THEME_SCROLLBAR_SMALL); - // There isn't a metric for this, so just hardcode a best guess at the value. - // This value is even less exact due to the fact that the endcap is partially concave. - PRInt32 endcapSize = isSmall ? 5 : 6; + // There isn't a metric for this, so just hardcode a best guess at the value. + // This value is even less exact due to the fact that the endcap is partially concave. + PRInt32 endcapSize = isSmall ? 5 : 6; - if (isHorizontal) - aResult->SizeTo(endcapSize, 0, 0, 0); - else - aResult->SizeTo(0, endcapSize, 0, 0); + if (isHorizontal) + aResult->SizeTo(endcapSize, 0, 0, 0); + else + aResult->SizeTo(0, endcapSize, 0, 0); + } } break; } diff --git a/widget/src/cocoa/nsToolkit.h b/widget/src/cocoa/nsToolkit.h index c849facc029c..e19e2e397865 100644 --- a/widget/src/cocoa/nsToolkit.h +++ b/widget/src/cocoa/nsToolkit.h @@ -48,6 +48,7 @@ #define MAC_OS_X_VERSION_10_5_HEX 0x00001050 #define MAC_OS_X_VERSION_10_6_HEX 0x00001060 +#define MAC_OS_X_VERSION_10_7_HEX 0x00001070 class nsToolkit : public nsIToolkit { @@ -60,6 +61,7 @@ public: static PRInt32 OSXVersion(); static PRBool OnSnowLeopardOrLater(); + static PRBool OnLionOrLater(); static void PostSleepWakeNotification(const char* aNotification); diff --git a/widget/src/cocoa/nsToolkit.mm b/widget/src/cocoa/nsToolkit.mm index 2142654317e9..041f29974d17 100644 --- a/widget/src/cocoa/nsToolkit.mm +++ b/widget/src/cocoa/nsToolkit.mm @@ -407,6 +407,11 @@ PRBool nsToolkit::OnSnowLeopardOrLater() return (OSXVersion() >= MAC_OS_X_VERSION_10_6_HEX); } +PRBool nsToolkit::OnLionOrLater() +{ + return (OSXVersion() >= MAC_OS_X_VERSION_10_7_HEX); +} + // An alternative to [NSObject poseAsClass:] that isn't deprecated on OS X // Leopard and is available to 64-bit binaries on Leopard and above. Based on // ideas and code from http://www.cocoadev.com/index.pl?MethodSwizzling. From 80cbe9d66f7fe001ab8821b46c1de52de842f6a3 Mon Sep 17 00:00:00 2001 From: Joe Drew Date: Mon, 16 May 2011 15:24:54 -0400 Subject: [PATCH 130/282] Bug 473841 - "ASSERTION: NULL mIconRequest! Multiple calls to OnStopRequest()?"; r=josh,bzbarsky --- widget/src/cocoa/nsMenuItemIconX.mm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/widget/src/cocoa/nsMenuItemIconX.mm b/widget/src/cocoa/nsMenuItemIconX.mm index 3605a8c89d23..107a10ba12da 100644 --- a/widget/src/cocoa/nsMenuItemIconX.mm +++ b/widget/src/cocoa/nsMenuItemIconX.mm @@ -548,8 +548,7 @@ NS_IMETHODIMP nsMenuItemIconX::OnStopRequest(imgIRequest* aRequest, PRBool aIsLastPart) { - NS_ASSERTION(mIconRequest, "NULL mIconRequest! Multiple calls to OnStopRequest()?"); - if (mIconRequest) { + if (mIconRequest && mIconRequest == aRequest) { mIconRequest->Cancel(NS_BINDING_ABORTED); mIconRequest = nsnull; } From 0a1ed803a8ab6a12fb295cb0530356ce154e225d Mon Sep 17 00:00:00 2001 From: Gavin Sharp Date: Thu, 12 May 2011 10:52:25 -0700 Subject: [PATCH 131/282] Bug 656433: don't allow URIs loaded into the location bar to inherit the currently loaded document's principal, r=bz, r=dao --HG-- extra : rebase_source : 3eed0612c5740d6a52ba5898d7ae130cfadd9641 --- browser/base/content/test/Makefile.in | 1 + .../test/browser_locationBarExternalLoad.js | 51 +++++++++++++++++++ browser/base/content/urlbarBindings.xml | 8 ++- docshell/base/nsDocShell.cpp | 2 +- docshell/base/nsIWebNavigation.idl | 5 ++ docshell/test/browser/Makefile.in | 1 + .../browser/browser_loadDisallowInherit.js | 48 +++++++++++++++++ 7 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 browser/base/content/test/browser_locationBarExternalLoad.js create mode 100644 docshell/test/browser/browser_loadDisallowInherit.js diff --git a/browser/base/content/test/Makefile.in b/browser/base/content/test/Makefile.in index e8bc6f32657d..473c5b423535 100644 --- a/browser/base/content/test/Makefile.in +++ b/browser/base/content/test/Makefile.in @@ -200,6 +200,7 @@ _BROWSER_FILES = \ browser_scratchpad_ui.js \ browser_scratchpad_bug_646070_chrome_context_pref.js \ browser_overflowScroll.js \ + browser_locationBarExternalLoad.js \ browser_pageInfo.js \ browser_page_style_menu.js \ browser_pinnedTabs.js \ diff --git a/browser/base/content/test/browser_locationBarExternalLoad.js b/browser/base/content/test/browser_locationBarExternalLoad.js new file mode 100644 index 000000000000..41ffc8910634 --- /dev/null +++ b/browser/base/content/test/browser_locationBarExternalLoad.js @@ -0,0 +1,51 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +function test() { + waitForExplicitFinish(); + + nextTest(); +} + +let gTests = [ +// XXX bug 656815: javascript: URIs can't currently execute without inheriting +// the page principal +// { +// url: "javascript:document.domain;" +// }, + { + url: "data:text/html," + }, +]; + +function nextTest() { + let test = gTests.shift(); + if (test) + testURL(test.url, nextTest); + else + finish(); +} + +function testURL(newURL, func) { + let tab = gBrowser.selectedTab = gBrowser.addTab(); + registerCleanupFunction(function () { + gBrowser.removeTab(tab); + }); + addPageShowListener(function () { + let pagePrincipal = gBrowser.contentPrincipal; + gURLBar.value = newURL; + gURLBar.handleCommand(); + + addPageShowListener(function () { + ok(!gBrowser.contentPrincipal.equals(pagePrincipal), "load of " + newURL + " produced a page with a different principal"); + func(); + }); + }); +} + +function addPageShowListener(func) { + gBrowser.selectedBrowser.addEventListener("pageshow", function loadListener() { + gBrowser.selectedBrowser.removeEventListener("pageshow", loadListener, false); + func(); + }); +} diff --git a/browser/base/content/urlbarBindings.xml b/browser/base/content/urlbarBindings.xml index d9c1564b18be..366063a9a16f 100644 --- a/browser/base/content/urlbarBindings.xml +++ b/browser/base/content/urlbarBindings.xml @@ -316,9 +316,13 @@ allowThirdPartyFixup: true}); aTriggeringEvent.preventDefault(); aTriggeringEvent.stopPropagation(); + } else { + // Pass LOAD_FLAGS_DISALLOW_INHERIT_OWNER to prevent any loads from + // inheriting the currently loaded document's principal. + let flags = Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP | + Ci.nsIWebNavigation.LOAD_FLAGS_DISALLOW_INHERIT_OWNER; + gBrowser.loadURIWithFlags(url, flags, null, null, postData); } - else - loadURI(url, null, postData, true /* allow third party fixup */); gBrowser.selectedBrowser.focus(); ]]> diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index 61b273d6c881..0646236c94dc 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -1391,7 +1391,7 @@ nsDocShell::LoadURI(nsIURI * aURI, PRUint32 flags = 0; - if (inheritOwner) + if (inheritOwner && !(aLoadFlags & LOAD_FLAGS_DISALLOW_INHERIT_OWNER)) flags |= INTERNAL_LOAD_FLAGS_INHERIT_OWNER; if (!sendReferrer) diff --git a/docshell/base/nsIWebNavigation.idl b/docshell/base/nsIWebNavigation.idl index 40bba8fc331e..0710e38f495d 100644 --- a/docshell/base/nsIWebNavigation.idl +++ b/docshell/base/nsIWebNavigation.idl @@ -214,6 +214,11 @@ interface nsIWebNavigation : nsISupports */ const unsigned long LOAD_FLAGS_FORCE_ALLOW_COOKIES = 0x20000; + /** + * Prevent the owner principal from being inherited for this load. + */ + const unsigned long LOAD_FLAGS_DISALLOW_INHERIT_OWNER = 0x40000; + /** * Loads a given URI. This will give priority to loading the requested URI * in the object implementing this interface. If it can't be loaded here diff --git a/docshell/test/browser/Makefile.in b/docshell/test/browser/Makefile.in index 9690fbd9e3cc..a8a76dbb3e2d 100644 --- a/docshell/test/browser/Makefile.in +++ b/docshell/test/browser/Makefile.in @@ -52,6 +52,7 @@ _BROWSER_TEST_FILES = \ browser_bug388121-2.js \ browser_bug441169.js \ browser_bug503832.js \ + browser_loadDisallowInherit.js \ file_bug503832.html \ browser_bug554155.js \ $(NULL) diff --git a/docshell/test/browser/browser_loadDisallowInherit.js b/docshell/test/browser/browser_loadDisallowInherit.js new file mode 100644 index 000000000000..a11b224dc072 --- /dev/null +++ b/docshell/test/browser/browser_loadDisallowInherit.js @@ -0,0 +1,48 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +function test() { + waitForExplicitFinish(); + + let tab = gBrowser.selectedTab = gBrowser.addTab(); + registerCleanupFunction(function () { + gBrowser.removeTab(tab); + }); + + let browser = gBrowser.getBrowserForTab(tab); + + function loadURL(url, flags, func) { + browser.addEventListener("load", function loadListener(e) { + if (browser.currentURI.spec != url) + return; + browser.removeEventListener(e.type, loadListener, true); + func(); + }, true); + browser.loadURIWithFlags(url, flags, null, null, null); + } + + // Load a normal http URL + loadURL("http://example.com/", 0, function () { + let pagePrincipal = browser.contentPrincipal; + + // Now load a data URI normally + loadURL("data:text/html,inherit", 0, function () { + let dataPrincipal = browser.contentPrincipal; + ok(dataPrincipal.equals(pagePrincipal), "data URI should inherit principal"); + + // Load a normal http URL + loadURL("http://example.com/", 0, function () { + let innerPagePrincipal = browser.contentPrincipal; + + // Now load a data URI and disallow inheriting the principal + let webNav = Components.interfaces.nsIWebNavigation; + loadURL("data:text/html,noinherit", webNav.LOAD_FLAGS_DISALLOW_INHERIT_OWNER, function () { + let innerDataPrincipal = browser.contentPrincipal; + ok(!innerDataPrincipal.equals(innerPagePrincipal), "data URI should not inherit principal"); + + finish(); + }); + }); + }); + }); +} From 479d8a0b0ca2acbac259610dc5cf2b2e8ea5289f Mon Sep 17 00:00:00 2001 From: Gavin Sharp Date: Fri, 13 May 2011 10:40:22 -0700 Subject: [PATCH 132/282] Bug 656815: make loading javascript: URIs in a docshell work for DISALLOW_INHERIT_OWNER loads, r=bz --HG-- extra : rebase_source : 6b0e289ac80ffab967813b06e2e28f2842921b70 --- .../test/browser_locationBarExternalLoad.js | 18 +++---- docshell/base/nsDocShell.cpp | 7 ++- .../browser/browser_loadDisallowInherit.js | 49 ++++++++++++------- 3 files changed, 44 insertions(+), 30 deletions(-) diff --git a/browser/base/content/test/browser_locationBarExternalLoad.js b/browser/base/content/test/browser_locationBarExternalLoad.js index 41ffc8910634..8d1d470a04c8 100644 --- a/browser/base/content/test/browser_locationBarExternalLoad.js +++ b/browser/base/content/test/browser_locationBarExternalLoad.js @@ -7,21 +7,15 @@ function test() { nextTest(); } -let gTests = [ -// XXX bug 656815: javascript: URIs can't currently execute without inheriting -// the page principal -// { -// url: "javascript:document.domain;" -// }, - { - url: "data:text/html," - }, +let urls = [ + "javascript:'foopy';", + "data:text/html," ]; function nextTest() { - let test = gTests.shift(); - if (test) - testURL(test.url, nextTest); + let url = urls.shift(); + if (url) + testURL(url, nextTest); else finish(); } diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index 0646236c94dc..0051ce5cd446 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -1389,9 +1389,14 @@ nsDocShell::LoadURI(nsIURI * aURI, } } + if (aLoadFlags & LOAD_FLAGS_DISALLOW_INHERIT_OWNER) { + inheritOwner = PR_FALSE; + owner = do_CreateInstance("@mozilla.org/nullprincipal;1"); + } + PRUint32 flags = 0; - if (inheritOwner && !(aLoadFlags & LOAD_FLAGS_DISALLOW_INHERIT_OWNER)) + if (inheritOwner) flags |= INTERNAL_LOAD_FLAGS_INHERIT_OWNER; if (!sendReferrer) diff --git a/docshell/test/browser/browser_loadDisallowInherit.js b/docshell/test/browser/browser_loadDisallowInherit.js index a11b224dc072..22a5edfe63a6 100644 --- a/docshell/test/browser/browser_loadDisallowInherit.js +++ b/docshell/test/browser/browser_loadDisallowInherit.js @@ -22,27 +22,42 @@ function test() { } // Load a normal http URL - loadURL("http://example.com/", 0, function () { - let pagePrincipal = browser.contentPrincipal; + function testURL(url, func) { + loadURL("http://example.com/", 0, function () { + let pagePrincipal = browser.contentPrincipal; + ok(pagePrincipal, "got principal for http:// page"); - // Now load a data URI normally - loadURL("data:text/html,inherit", 0, function () { - let dataPrincipal = browser.contentPrincipal; - ok(dataPrincipal.equals(pagePrincipal), "data URI should inherit principal"); + // Now load the URL normally + loadURL(url, 0, function () { + ok(browser.contentPrincipal.equals(pagePrincipal), url + " should inherit principal"); - // Load a normal http URL - loadURL("http://example.com/", 0, function () { - let innerPagePrincipal = browser.contentPrincipal; - - // Now load a data URI and disallow inheriting the principal + // Now load the URL and disallow inheriting the principal let webNav = Components.interfaces.nsIWebNavigation; - loadURL("data:text/html,noinherit", webNav.LOAD_FLAGS_DISALLOW_INHERIT_OWNER, function () { - let innerDataPrincipal = browser.contentPrincipal; - ok(!innerDataPrincipal.equals(innerPagePrincipal), "data URI should not inherit principal"); - - finish(); + loadURL(url, webNav.LOAD_FLAGS_DISALLOW_INHERIT_OWNER, function () { + let newPrincipal = browser.contentPrincipal; + ok(newPrincipal, "got inner principal"); + ok(!newPrincipal.equals(pagePrincipal), + url + " should not inherit principal when loaded with DISALLOW_INHERIT_OWNER"); + + func(); }); }); }); - }); + } + + let urls = [ + "data:text/html,hi", + "javascript:1;" + ]; + + function nextTest() { + let url = urls.shift(); + if (url) + testURL(url, nextTest); + else + finish(); + } + + nextTest(); } + From c5a1b0eda25974d24e58a7e69f42a54f75f0f361 Mon Sep 17 00:00:00 2001 From: Mounir Lamouri Date: Mon, 16 May 2011 12:56:06 +0200 Subject: [PATCH 133/282] Bug 638540 - Progress element should be shown vertically when -moz-orient value is 'vertical'. r=roc --HG-- rename : layout/reftests/forms/progress/bar-pseudo-element-ref.html => layout/reftests/forms/progress/bar-pseudo-element-vertical-ref.html rename : layout/reftests/forms/progress/bar-pseudo-element.html => layout/reftests/forms/progress/bar-pseudo-element-vertical-rtl.html rename : layout/reftests/forms/progress/bar-pseudo-element.html => layout/reftests/forms/progress/bar-pseudo-element-vertical.html rename : layout/reftests/forms/progress/indeterminate-style-width-ref.html => layout/reftests/forms/progress/indeterminate-style-height-ref.html rename : layout/reftests/forms/progress/indeterminate-style-width.html => layout/reftests/forms/progress/indeterminate-style-height.html rename : layout/reftests/forms/progress/margin-padding-ref.html => layout/reftests/forms/progress/margin-padding-vertical-ref.html rename : layout/reftests/forms/progress/margin-padding-rtl-ref.html => layout/reftests/forms/progress/margin-padding-vertical-rtl-ref.html rename : layout/reftests/forms/progress/margin-padding-rtl.html => layout/reftests/forms/progress/margin-padding-vertical-rtl.html rename : layout/reftests/forms/progress/margin-padding.html => layout/reftests/forms/progress/margin-padding-vertical.html rename : layout/reftests/forms/progress/values-ref.html => layout/reftests/forms/progress/values-vertical-ref.html rename : layout/reftests/forms/progress/values-ref.html => layout/reftests/forms/progress/values-vertical-rtl-ref.html rename : layout/reftests/forms/progress/values.html => layout/reftests/forms/progress/values-vertical-rtl.html rename : layout/reftests/forms/progress/values.html => layout/reftests/forms/progress/values-vertical.html --- layout/forms/nsProgressFrame.cpp | 45 +++++++--- .../bar-pseudo-element-vertical-ref.html | 89 +++++++++++++++++++ .../bar-pseudo-element-vertical-rtl-ref.html | 89 +++++++++++++++++++ .../bar-pseudo-element-vertical-rtl.html | 46 ++++++++++ .../progress/bar-pseudo-element-vertical.html | 46 ++++++++++ .../indeterminate-style-height-ref.html | 46 ++++++++++ .../progress/indeterminate-style-height.html | 24 +++++ .../progress/margin-padding-vertical-ref.html | 88 ++++++++++++++++++ .../margin-padding-vertical-rtl-ref.html | 88 ++++++++++++++++++ .../progress/margin-padding-vertical-rtl.html | 43 +++++++++ .../progress/margin-padding-vertical.html | 43 +++++++++ layout/reftests/forms/progress/reftest.list | 9 ++ .../forms/progress/values-vertical-ref.html | 58 ++++++++++++ .../progress/values-vertical-rtl-ref.html | 58 ++++++++++++ .../forms/progress/values-vertical-rtl.html | 21 +++++ .../forms/progress/values-vertical.html | 21 +++++ 16 files changed, 800 insertions(+), 14 deletions(-) create mode 100644 layout/reftests/forms/progress/bar-pseudo-element-vertical-ref.html create mode 100644 layout/reftests/forms/progress/bar-pseudo-element-vertical-rtl-ref.html create mode 100644 layout/reftests/forms/progress/bar-pseudo-element-vertical-rtl.html create mode 100644 layout/reftests/forms/progress/bar-pseudo-element-vertical.html create mode 100644 layout/reftests/forms/progress/indeterminate-style-height-ref.html create mode 100644 layout/reftests/forms/progress/indeterminate-style-height.html create mode 100644 layout/reftests/forms/progress/margin-padding-vertical-ref.html create mode 100644 layout/reftests/forms/progress/margin-padding-vertical-rtl-ref.html create mode 100644 layout/reftests/forms/progress/margin-padding-vertical-rtl.html create mode 100644 layout/reftests/forms/progress/margin-padding-vertical.html create mode 100644 layout/reftests/forms/progress/values-vertical-ref.html create mode 100644 layout/reftests/forms/progress/values-vertical-rtl-ref.html create mode 100644 layout/reftests/forms/progress/values-vertical-rtl.html create mode 100644 layout/reftests/forms/progress/values-vertical.html diff --git a/layout/forms/nsProgressFrame.cpp b/layout/forms/nsProgressFrame.cpp index 12eb1305caea..c38447a880a7 100644 --- a/layout/forms/nsProgressFrame.cpp +++ b/layout/forms/nsProgressFrame.cpp @@ -171,10 +171,12 @@ nsProgressFrame::ReflowBarFrame(nsIFrame* aBarFrame, const nsHTMLReflowState& aReflowState, nsReflowStatus& aStatus) { + bool vertical = GetStyleDisplay()->mOrient == NS_STYLE_ORIENT_VERTICAL; nsHTMLReflowState reflowState(aPresContext, aReflowState, aBarFrame, nsSize(aReflowState.ComputedWidth(), NS_UNCONSTRAINEDSIZE)); - nscoord width = aReflowState.ComputedWidth(); + nscoord size = vertical ? aReflowState.ComputedHeight() + : aReflowState.ComputedWidth(); nscoord xoffset = aReflowState.mComputedBorderPadding.left; nscoord yoffset = aReflowState.mComputedBorderPadding.top; @@ -183,28 +185,43 @@ nsProgressFrame::ReflowBarFrame(nsIFrame* aBarFrame, do_QueryInterface(mContent); progressElement->GetPosition(&position); - // Force the bar's width to match the current progress. - // When indeterminate, the progress' width will be 100%. + // Force the bar's size to match the current progress. + // When indeterminate, the progress' size will be 100%. if (position >= 0.0) { - width *= position; + size *= position; } - if (GetStyleVisibility()->mDirection == NS_STYLE_DIRECTION_RTL) { - xoffset += aReflowState.ComputedWidth() - width; + if (!vertical && GetStyleVisibility()->mDirection == NS_STYLE_DIRECTION_RTL) { + xoffset += aReflowState.ComputedWidth() - size; } - // The bar width is fixed in these cases: - // - the progress position is determined: the bar width is fixed according + // The bar size is fixed in these cases: + // - the progress position is determined: the bar size is fixed according // to it's value. // - the progress position is indeterminate and the bar appearance should be - // shown as native: the bar width is forced to 100%. + // shown as native: the bar size is forced to 100%. // Otherwise (when the progress is indeterminate and the bar appearance isn't - // native), the bar width isn't fixed and can be set by the author. + // native), the bar size isn't fixed and can be set by the author. if (position != -1 || ShouldUseNativeStyle()) { - width -= reflowState.mComputedMargin.LeftRight() + - reflowState.mComputedBorderPadding.LeftRight(); - width = NS_MAX(width, 0); - reflowState.SetComputedWidth(width); + if (vertical) { + // We want the bar to begin at the bottom. + yoffset += aReflowState.ComputedHeight() - size; + + size -= reflowState.mComputedMargin.TopBottom() + + reflowState.mComputedBorderPadding.TopBottom(); + size = NS_MAX(size, 0); + reflowState.SetComputedHeight(size); + } else { + size -= reflowState.mComputedMargin.LeftRight() + + reflowState.mComputedBorderPadding.LeftRight(); + size = NS_MAX(size, 0); + reflowState.SetComputedWidth(size); + } + } else if (vertical) { + // For vertical progress bars, we need to position the bar specificly when + // the width isn't constrained (position == -1 and !ShouldUseNativeStyle()) + // because aReflowState.ComputedHeight() - size == 0. + yoffset += aReflowState.ComputedHeight() - reflowState.ComputedHeight(); } xoffset += reflowState.mComputedMargin.left; diff --git a/layout/reftests/forms/progress/bar-pseudo-element-vertical-ref.html b/layout/reftests/forms/progress/bar-pseudo-element-vertical-ref.html new file mode 100644 index 000000000000..e666e84db2f2 --- /dev/null +++ b/layout/reftests/forms/progress/bar-pseudo-element-vertical-ref.html @@ -0,0 +1,89 @@ + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/layout/reftests/forms/progress/bar-pseudo-element-vertical-rtl-ref.html b/layout/reftests/forms/progress/bar-pseudo-element-vertical-rtl-ref.html new file mode 100644 index 000000000000..2afb7c8a8c43 --- /dev/null +++ b/layout/reftests/forms/progress/bar-pseudo-element-vertical-rtl-ref.html @@ -0,0 +1,89 @@ + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/layout/reftests/forms/progress/bar-pseudo-element-vertical-rtl.html b/layout/reftests/forms/progress/bar-pseudo-element-vertical-rtl.html new file mode 100644 index 000000000000..222b731e65d5 --- /dev/null +++ b/layout/reftests/forms/progress/bar-pseudo-element-vertical-rtl.html @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/layout/reftests/forms/progress/bar-pseudo-element-vertical.html b/layout/reftests/forms/progress/bar-pseudo-element-vertical.html new file mode 100644 index 000000000000..d34ec4d33a04 --- /dev/null +++ b/layout/reftests/forms/progress/bar-pseudo-element-vertical.html @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/layout/reftests/forms/progress/indeterminate-style-height-ref.html b/layout/reftests/forms/progress/indeterminate-style-height-ref.html new file mode 100644 index 000000000000..d53eb069c40a --- /dev/null +++ b/layout/reftests/forms/progress/indeterminate-style-height-ref.html @@ -0,0 +1,46 @@ + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + diff --git a/layout/reftests/forms/progress/indeterminate-style-height.html b/layout/reftests/forms/progress/indeterminate-style-height.html new file mode 100644 index 000000000000..ddefd0afafaf --- /dev/null +++ b/layout/reftests/forms/progress/indeterminate-style-height.html @@ -0,0 +1,24 @@ + + + + + + + + + + + + + diff --git a/layout/reftests/forms/progress/margin-padding-vertical-ref.html b/layout/reftests/forms/progress/margin-padding-vertical-ref.html new file mode 100644 index 000000000000..33f35c306c79 --- /dev/null +++ b/layout/reftests/forms/progress/margin-padding-vertical-ref.html @@ -0,0 +1,88 @@ + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/layout/reftests/forms/progress/margin-padding-vertical-rtl-ref.html b/layout/reftests/forms/progress/margin-padding-vertical-rtl-ref.html new file mode 100644 index 000000000000..dcf76f0f3b8b --- /dev/null +++ b/layout/reftests/forms/progress/margin-padding-vertical-rtl-ref.html @@ -0,0 +1,88 @@ + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/layout/reftests/forms/progress/margin-padding-vertical-rtl.html b/layout/reftests/forms/progress/margin-padding-vertical-rtl.html new file mode 100644 index 000000000000..7be45b2c1ced --- /dev/null +++ b/layout/reftests/forms/progress/margin-padding-vertical-rtl.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/layout/reftests/forms/progress/margin-padding-vertical.html b/layout/reftests/forms/progress/margin-padding-vertical.html new file mode 100644 index 000000000000..8e4d48565923 --- /dev/null +++ b/layout/reftests/forms/progress/margin-padding-vertical.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/layout/reftests/forms/progress/reftest.list b/layout/reftests/forms/progress/reftest.list index 1412ed7d90a9..76ea026338ca 100644 --- a/layout/reftests/forms/progress/reftest.list +++ b/layout/reftests/forms/progress/reftest.list @@ -6,6 +6,15 @@ == bar-pseudo-element-rtl.html bar-pseudo-element-rtl-ref.html == indeterminate-style-width.html indeterminate-style-width-ref.html +# vertical tests +== values-vertical.html values-vertical-ref.html +== values-vertical-rtl.html values-vertical-rtl-ref.html +== margin-padding-vertical.html margin-padding-vertical-ref.html +== margin-padding-vertical-rtl.html margin-padding-vertical-rtl-ref.html +== bar-pseudo-element-vertical.html bar-pseudo-element-vertical-ref.html +== bar-pseudo-element-vertical-rtl.html bar-pseudo-element-vertical-rtl-ref.html +== indeterminate-style-height.html indeterminate-style-height-ref.html + # The following test is disabled but kept in the repository because the # transformations will not behave exactly the same for and two divs. # However, it would be possible to manually check those. diff --git a/layout/reftests/forms/progress/values-vertical-ref.html b/layout/reftests/forms/progress/values-vertical-ref.html new file mode 100644 index 000000000000..61b1084e620a --- /dev/null +++ b/layout/reftests/forms/progress/values-vertical-ref.html @@ -0,0 +1,58 @@ + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/layout/reftests/forms/progress/values-vertical-rtl-ref.html b/layout/reftests/forms/progress/values-vertical-rtl-ref.html new file mode 100644 index 000000000000..c9c0f51ed781 --- /dev/null +++ b/layout/reftests/forms/progress/values-vertical-rtl-ref.html @@ -0,0 +1,58 @@ + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/layout/reftests/forms/progress/values-vertical-rtl.html b/layout/reftests/forms/progress/values-vertical-rtl.html new file mode 100644 index 000000000000..b50db9ad2de4 --- /dev/null +++ b/layout/reftests/forms/progress/values-vertical-rtl.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + diff --git a/layout/reftests/forms/progress/values-vertical.html b/layout/reftests/forms/progress/values-vertical.html new file mode 100644 index 000000000000..47294fdeb326 --- /dev/null +++ b/layout/reftests/forms/progress/values-vertical.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + From a674d14bbe54693e22b1d4f20f7821fbb553ac22 Mon Sep 17 00:00:00 2001 From: Mounir Lamouri Date: Mon, 16 May 2011 12:59:10 +0200 Subject: [PATCH 134/282] Bug 655313 - Use a native rendering for indeterminate vertical progress bar in GTK. r=roc,karlt --- widget/src/gtk2/gtk2drawing.c | 30 +++++++++++++++++++--------- widget/src/gtk2/gtkdrawing.h | 2 ++ widget/src/gtk2/nsNativeThemeGTK.cpp | 7 +++++-- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/widget/src/gtk2/gtk2drawing.c b/widget/src/gtk2/gtk2drawing.c index d824ed65d8bd..4417a101dfe7 100644 --- a/widget/src/gtk2/gtk2drawing.c +++ b/widget/src/gtk2/gtk2drawing.c @@ -2248,28 +2248,38 @@ moz_gtk_progress_chunk_paint(GdkDrawable* drawable, GdkRectangle* rect, TSOffsetStyleGCs(style, rect->x, rect->y); - if (widget == MOZ_GTK_PROGRESS_CHUNK_INDETERMINATE) { + if (widget == MOZ_GTK_PROGRESS_CHUNK_INDETERMINATE || + widget == MOZ_GTK_PROGRESS_CHUNK_VERTICAL_INDETERMINATE) { /** - * The bar's width and the bar speed are set depending of the progress - * bar size. These could also be constant for all progress bars easily. + * The bar's size and the bar speed are set depending of the progress' + * size. These could also be constant for all progress bars easily. */ + gboolean vertical = (widget == MOZ_GTK_PROGRESS_CHUNK_VERTICAL_INDETERMINATE); + + /* The size of the dimension we are going to use for the animation. */ + const gint progressSize = vertical ? rect->height : rect->width; /* The bar is using a fifth of the element size, based on GtkProgressBar * activity-blocks property. */ - const gint barWidth = MAX(1, rect->width / 5); + const gint barSize = MAX(1, progressSize / 5); /* Represents the travel that has to be done for a complete cycle. */ - const gint travel = 2 * (rect->width - barWidth); + const gint travel = 2 * (progressSize - barSize); /* period equals to travel / pixelsPerMillisecond - * where pixelsPerMillisecond equals rect->width / 1000.0. + * where pixelsPerMillisecond equals progressSize / 1000.0. * This is equivalent to 1600. */ - const guint period = 1600; + static const guint period = 1600; const gint t = PR_IntervalToMilliseconds(PR_IntervalNow()) % period; const gint dx = travel * t / period; - rect->x += (dx < travel / 2) ? dx : travel - dx; - rect->width = barWidth; + if (vertical) { + rect->y += (dx < travel / 2) ? dx : travel - dx; + rect->height = barSize; + } else { + rect->x += (dx < travel / 2) ? dx : travel - dx; + rect->width = barSize; + } } gtk_paint_box(style, drawable, GTK_STATE_PRELIGHT, GTK_SHADOW_OUT, @@ -2986,6 +2996,7 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, case MOZ_GTK_GRIPPER: case MOZ_GTK_PROGRESS_CHUNK: case MOZ_GTK_PROGRESS_CHUNK_INDETERMINATE: + case MOZ_GTK_PROGRESS_CHUNK_VERTICAL_INDETERMINATE: case MOZ_GTK_EXPANDER: case MOZ_GTK_TREEVIEW_EXPANDER: case MOZ_GTK_TOOLBAR_SEPARATOR: @@ -3333,6 +3344,7 @@ moz_gtk_widget_paint(GtkThemeWidgetType widget, GdkDrawable* drawable, break; case MOZ_GTK_PROGRESS_CHUNK: case MOZ_GTK_PROGRESS_CHUNK_INDETERMINATE: + case MOZ_GTK_PROGRESS_CHUNK_VERTICAL_INDETERMINATE: return moz_gtk_progress_chunk_paint(drawable, rect, cliprect, direction, widget); break; diff --git a/widget/src/gtk2/gtkdrawing.h b/widget/src/gtk2/gtkdrawing.h index 32bdc719f798..74763d2bbbe4 100644 --- a/widget/src/gtk2/gtkdrawing.h +++ b/widget/src/gtk2/gtkdrawing.h @@ -180,6 +180,8 @@ typedef enum { MOZ_GTK_PROGRESS_CHUNK, /* Paints a progress chunk of an indeterminated GtkProgressBar. */ MOZ_GTK_PROGRESS_CHUNK_INDETERMINATE, + /* Paints a progress chunk of a vertical indeterminated GtkProgressBar. */ + MOZ_GTK_PROGRESS_CHUNK_VERTICAL_INDETERMINATE, /* Paints a tab of a GtkNotebook. flags is a GtkTabFlags, defined above. */ MOZ_GTK_TAB, /* Paints the background and border of a GtkNotebook. */ diff --git a/widget/src/gtk2/nsNativeThemeGTK.cpp b/widget/src/gtk2/nsNativeThemeGTK.cpp index 9ff182139095..800271f122e8 100644 --- a/widget/src/gtk2/nsNativeThemeGTK.cpp +++ b/widget/src/gtk2/nsNativeThemeGTK.cpp @@ -571,7 +571,9 @@ nsNativeThemeGTK::GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame, nsEventStates eventStates = GetContentState(stateFrame, aWidgetType); aGtkWidgetType = IsIndeterminateProgress(stateFrame, eventStates) - ? MOZ_GTK_PROGRESS_CHUNK_INDETERMINATE + ? (stateFrame->GetStyleDisplay()->mOrient == NS_STYLE_ORIENT_VERTICAL) + ? MOZ_GTK_PROGRESS_CHUNK_VERTICAL_INDETERMINATE + : MOZ_GTK_PROGRESS_CHUNK_INDETERMINATE : MOZ_GTK_PROGRESS_CHUNK; } break; @@ -881,7 +883,8 @@ nsNativeThemeGTK::DrawWidgetBackground(nsRenderingContext* aContext, } // Indeterminate progress bar are animated. - if (gtkWidgetType == MOZ_GTK_PROGRESS_CHUNK_INDETERMINATE) { + if (gtkWidgetType == MOZ_GTK_PROGRESS_CHUNK_INDETERMINATE || + gtkWidgetType == MOZ_GTK_PROGRESS_CHUNK_VERTICAL_INDETERMINATE) { if (!QueueAnimatedContentForRefresh(aFrame->GetContent(), 30)) { NS_WARNING("unable to animate widget!"); } From 1f8a3e8ae5fd2ef7c129d5d1d3d2b57abe718cf4 Mon Sep 17 00:00:00 2001 From: Mounir Lamouri Date: Mon, 16 May 2011 12:58:55 +0200 Subject: [PATCH 135/282] Bug 655960 - Use a native rendering for vertical progress bar in Cocoa. r=mstange --- widget/src/cocoa/nsNativeThemeCocoa.mm | 94 +++++++++++++++++++------- 1 file changed, 68 insertions(+), 26 deletions(-) diff --git a/widget/src/cocoa/nsNativeThemeCocoa.mm b/widget/src/cocoa/nsNativeThemeCocoa.mm index a0bfc88c5f2d..4831fe9b396d 100644 --- a/widget/src/cocoa/nsNativeThemeCocoa.mm +++ b/widget/src/cocoa/nsNativeThemeCocoa.mm @@ -1137,40 +1137,82 @@ nsNativeThemeCocoa::DrawFrame(CGContextRef cgContext, HIThemeFrameKind inKind, NS_OBJC_END_TRY_ABORT_BLOCK; } -static const CellRenderSettings progressSettings[2] = { - // Determined settings. +static const CellRenderSettings progressSettings[2][2] = { + // Vertical progress bar. { + // Determined settings. { - NSZeroSize, // mini - NSMakeSize(0, 10), // small - NSMakeSize(0, 16) // regular + { + NSZeroSize, // mini + NSMakeSize(10, 0), // small + NSMakeSize(16, 0) // regular + }, + { + NSZeroSize, NSZeroSize, NSZeroSize + }, + { + { // Leopard + {0, 0, 0, 0}, // mini + {1, 1, 1, 1}, // small + {1, 1, 1, 1} // regular + } + } }, + // There is no horizontal margin in regular undetermined size. { - NSZeroSize, NSZeroSize, NSZeroSize - }, - { - { // Leopard - {0, 0, 0, 0}, // mini - {1, 1, 1, 1}, // small - {1, 1, 1, 1} // regular + { + NSZeroSize, // mini + NSMakeSize(10, 0), // small + NSMakeSize(16, 0) // regular + }, + { + NSZeroSize, NSZeroSize, NSZeroSize + }, + { + { // Leopard + {0, 0, 0, 0}, // mini + {1, 1, 1, 1}, // small + {1, 0, 1, 0} // regular + } } } }, - // There is no horizontal margin in regular undetermined size. + // Horizontal progress bar. { + // Determined settings. { - NSZeroSize, // mini - NSMakeSize(0, 10), // small - NSMakeSize(0, 16) // regular + { + NSZeroSize, // mini + NSMakeSize(0, 10), // small + NSMakeSize(0, 16) // regular + }, + { + NSZeroSize, NSZeroSize, NSZeroSize + }, + { + { // Leopard + {0, 0, 0, 0}, // mini + {1, 1, 1, 1}, // small + {1, 1, 1, 1} // regular + } + } }, + // There is no horizontal margin in regular undetermined size. { - NSZeroSize, NSZeroSize, NSZeroSize - }, - { - { // Leopard - {0, 0, 0, 0}, // mini - {1, 1, 1, 1}, // small - {0, 1, 0, 1} // regular + { + NSZeroSize, // mini + NSMakeSize(0, 10), // small + NSMakeSize(0, 16) // regular + }, + { + NSZeroSize, NSZeroSize, NSZeroSize + }, + { + { // Leopard + {0, 0, 0, 0}, // mini + {1, 1, 1, 1}, // small + {0, 1, 0, 1} // regular + } } } } @@ -1194,7 +1236,7 @@ nsNativeThemeCocoa::DrawProgress(CGContextRef cgContext, const HIRect& inBoxRect : NSClearControlTint)]; DrawCellWithSnapping(cell, cgContext, inBoxRect, - progressSettings[inIsIndeterminate], + progressSettings[inIsHorizontal][inIsIndeterminate], VerticalAlignFactor(aFrame), mCellDrawView, IsFrameRTL(aFrame)); @@ -1895,8 +1937,8 @@ nsNativeThemeCocoa::DrawWidgetBackground(nsRenderingContext* aContext, NS_WARNING("Unable to animate progressbar!"); } DrawProgress(cgContext, macRect, IsIndeterminateProgress(aFrame, eventState), - PR_TRUE, GetProgressValue(aFrame), - GetProgressMaxValue(aFrame), aFrame); + aFrame->GetStyleDisplay()->mOrient != NS_STYLE_ORIENT_VERTICAL, + GetProgressValue(aFrame), GetProgressMaxValue(aFrame), aFrame); break; case NS_THEME_PROGRESSBAR_VERTICAL: From 97c08e433107b8ecd6a8801d966a8b62892dfb9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20=C3=81vila=20de=20Esp=C3=ADndola?= Date: Wed, 18 May 2011 11:56:06 +0200 Subject: [PATCH 136/282] Bug 657364 - Put dom/tests/mochitest/dom-level2-html/files/document.html applet in a new file. r=ehsan --- .../dom-level2-html/files/Makefile.in | 1 + .../files/document-with-applet.html | 36 +++++++++++++++++++ .../dom-level2-html/files/document.html | 2 -- .../dom-level2-html/test_HTMLDocument08.html | 6 ++-- 4 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 dom/tests/mochitest/dom-level2-html/files/document-with-applet.html diff --git a/dom/tests/mochitest/dom-level2-html/files/Makefile.in b/dom/tests/mochitest/dom-level2-html/files/Makefile.in index bff12da10bfe..4b672ca12fa3 100644 --- a/dom/tests/mochitest/dom-level2-html/files/Makefile.in +++ b/dom/tests/mochitest/dom-level2-html/files/Makefile.in @@ -92,6 +92,7 @@ _TEST_FILES = \ dl.xhtml \ dl.xml \ document.html \ + document-with-applet.html \ document.xhtml \ document.xml \ element.html \ diff --git a/dom/tests/mochitest/dom-level2-html/files/document-with-applet.html b/dom/tests/mochitest/dom-level2-html/files/document-with-applet.html new file mode 100644 index 000000000000..4e6025b2d7a0 --- /dev/null +++ b/dom/tests/mochitest/dom-level2-html/files/document-with-applet.html @@ -0,0 +1,36 @@ + + + + +NIST DOM HTML Test - DOCUMENT + + +
    +

    + + + +

    +
    +

    + +Domain +Domain + +

    +

    +DTS IMAGE LOGO +

    +

    + + + + + + +

    +

    +View Submit Button +

    + + diff --git a/dom/tests/mochitest/dom-level2-html/files/document.html b/dom/tests/mochitest/dom-level2-html/files/document.html index 4e6025b2d7a0..530b92f1898b 100644 --- a/dom/tests/mochitest/dom-level2-html/files/document.html +++ b/dom/tests/mochitest/dom-level2-html/files/document.html @@ -23,10 +23,8 @@

    - -

    diff --git a/dom/tests/mochitest/dom-level2-html/test_HTMLDocument08.html b/dom/tests/mochitest/dom-level2-html/test_HTMLDocument08.html index b3d031c92185..474044b13817 100644 --- a/dom/tests/mochitest/dom-level2-html/test_HTMLDocument08.html +++ b/dom/tests/mochitest/dom-level2-html/test_HTMLDocument08.html @@ -38,7 +38,7 @@ function setUpPage() { if (typeof(this.doc) != 'undefined') { docRef = this.doc; } - docsLoaded += preload(docRef, "doc", "document"); + docsLoaded += preload(docRef, "doc", "document-with-applet"); if (docsLoaded == 1) { setUpPage = 'complete'; @@ -91,7 +91,7 @@ function HTMLDocument08() { if (typeof(this.doc) != 'undefined') { docRef = this.doc; } - doc = load(docRef, "doc", "document"); + doc = load(docRef, "doc", "document-with-applet"); vapplets = doc.applets; vlength = vapplets.length; @@ -129,7 +129,7 @@ function HTMLDocument08() {

    See W3C License http://www.w3.org/Consortium/Legal/ for more details.

    - +
    From 797d012a5193f050e262e30d4744ee93d014d70d Mon Sep 17 00:00:00 2001 From: Raymond Lee Date: Mon, 16 May 2011 20:40:09 +0800 Subject: [PATCH 137/282] Bug 657331 - Fix the registerCleanupFunction() in browser_tabview_bug625195.js r=ian --- .../base/content/test/tabview/browser_tabview_bug625195.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/browser/base/content/test/tabview/browser_tabview_bug625195.js b/browser/base/content/test/tabview/browser_tabview_bug625195.js index 29fa5e523622..9b857090436c 100644 --- a/browser/base/content/test/tabview/browser_tabview_bug625195.js +++ b/browser/base/content/test/tabview/browser_tabview_bug625195.js @@ -16,10 +16,8 @@ function test() { showTabView(function() { registerCleanupFunction(function () { - if (gBrowser.tabs[1]) + while (gBrowser.tabs.length > 1) gBrowser.removeTab(gBrowser.tabs[1]); - if (gBrowser.tabs[2]) - gBrowser.removeTab(gBrowser.tabs[2]); TabView.hide(); }); From 78edb678a3e64dcd7316e89d79c68ce25bb22c23 Mon Sep 17 00:00:00 2001 From: Taras Glek Date: Mon, 16 May 2011 13:07:45 -0700 Subject: [PATCH 138/282] Bug 657411 - Telemetry doesn't register for idle-daily r=mak --- toolkit/components/telemetry/TelemetryPing.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/toolkit/components/telemetry/TelemetryPing.js b/toolkit/components/telemetry/TelemetryPing.js index d45c16015474..58ad8c35c9ba 100644 --- a/toolkit/components/telemetry/TelemetryPing.js +++ b/toolkit/components/telemetry/TelemetryPing.js @@ -234,7 +234,8 @@ TelemetryPing.prototype = { let timerCallback = function() { let idleService = Cc["@mozilla.org/widget/idleservice;1"]. getService(Ci.nsIIdleService); - idleService.addIdleObserver(self, TELEMETRY_INTERVAL); + idleService.addIdleObserver(self, TELEMETRY_INTERVAL); + Services.obs.addObserver(self, "idle-daily", null); self.gatherMemory(); } this._timer.initWithCallback(timerCallback, TELEMETRY_DELAY, Ci.nsITimer.TYPE_ONE_SHOT); From fc4cd2c7f1762df3f1b99802cb69a23f00c9afd5 Mon Sep 17 00:00:00 2001 From: Justin Lebar Date: Mon, 16 May 2011 16:36:12 -0400 Subject: [PATCH 139/282] Bug 656991 - Followup. Use JS_free instead of free. r=bz --HG-- extra : rebase_source : 00e5cc27f067a191e7a834852faee8c788feb061 --- dom/base/nsStructuredCloneContainer.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dom/base/nsStructuredCloneContainer.cpp b/dom/base/nsStructuredCloneContainer.cpp index 848991486393..b8ce3d0bd6ec 100644 --- a/dom/base/nsStructuredCloneContainer.cpp +++ b/dom/base/nsStructuredCloneContainer.cpp @@ -97,7 +97,10 @@ nsStructuredCloneContainer::InitFromVariant(nsIVariant *aData, JSContext *aCx) if (!mData) { mSize = 0; mVersion = 0; - free(jsBytes); + + // FIXME This should really be js::Foreground::Free, but that's not public. + JS_free(aCx, jsBytes); + return NS_ERROR_FAILURE; } else { @@ -105,7 +108,9 @@ nsStructuredCloneContainer::InitFromVariant(nsIVariant *aData, JSContext *aCx) } memcpy(mData, jsBytes, mSize); - free(jsBytes); + + // FIXME Similarly, this should be js::Foreground::free. + JS_free(aCx, jsBytes); return NS_OK; } From 1960414b5f2691e9e04d0a9fb469c0ea37f56946 Mon Sep 17 00:00:00 2001 From: Benoit Jacob Date: Mon, 16 May 2011 17:18:04 -0400 Subject: [PATCH 140/282] Bug 656752 - WebGL crash [@gleRunVertexSubmitImmediate()] - r=jrmuizel, a=clegnitto Fix bookkeeping in webgl.bindBuffer() --- content/canvas/src/WebGLContextGL.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/content/canvas/src/WebGLContextGL.cpp b/content/canvas/src/WebGLContextGL.cpp index 2788a603f8c6..0c184c2478fc 100644 --- a/content/canvas/src/WebGLContextGL.cpp +++ b/content/canvas/src/WebGLContextGL.cpp @@ -202,12 +202,10 @@ WebGLContext::BindBuffer(WebGLenum target, nsIWebGLBuffer *bobj) if (!GetConcreteObjectAndGLName("bindBuffer", bobj, &buf, &bufname, &isNull)) return NS_OK; - if (target == LOCAL_GL_ARRAY_BUFFER) { - mBoundArrayBuffer = buf; - } else if (target == LOCAL_GL_ELEMENT_ARRAY_BUFFER) { - mBoundElementArrayBuffer = buf; - } else { - return ErrorInvalidEnumInfo("BindBuffer: target", target); + if (target != LOCAL_GL_ARRAY_BUFFER && + target != LOCAL_GL_ELEMENT_ARRAY_BUFFER) + { + return ErrorInvalidEnumInfo("bindBuffer: target", target); } if (!isNull) { @@ -217,6 +215,14 @@ WebGLContext::BindBuffer(WebGLenum target, nsIWebGLBuffer *bobj) buf->SetHasEverBeenBound(PR_TRUE); } + // we really want to do this AFTER all the validation is done, otherwise our bookkeeping could get confused. + // see bug 656752 + if (target == LOCAL_GL_ARRAY_BUFFER) { + mBoundArrayBuffer = buf; + } else if (target == LOCAL_GL_ELEMENT_ARRAY_BUFFER) { + mBoundElementArrayBuffer = buf; + } + MakeContextCurrent(); gl->fBindBuffer(target, bufname); From ff4a04b32c99ad9a50509778f01545417ab53732 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 17 May 2011 11:04:53 +1200 Subject: [PATCH 141/282] Bug 640899. Have test_leaf_layers_partition_browser_window.xul test maximized windows as well as normal windows; on Windows XP, don't test normal windows because we know the resizer overlaps there. r=tnikkel --- ...t_leaf_layers_partition_browser_window.xul | 49 ++++++++++++++----- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/layout/base/tests/chrome/test_leaf_layers_partition_browser_window.xul b/layout/base/tests/chrome/test_leaf_layers_partition_browser_window.xul index 36d8ea441e09..55aaabfe750a 100644 --- a/layout/base/tests/chrome/test_leaf_layers_partition_browser_window.xul +++ b/layout/base/tests/chrome/test_leaf_layers_partition_browser_window.xul @@ -17,46 +17,69 @@ ", - "", "scrollbars=yes,toolbar,menubar,width=500,height=500"); - win.addEventListener('load', doTest, false); + function nextTest() { + if (testIndex >= tests.length) { + SimpleTest.finish(); + return; + } + // Skip non-maximized tests on WinXP since the resizer causes overlapping layers + if (winXP && !tests[testIndex].maximize) { + ++testIndex; + nextTest(); + return; + } + + // Run the test in a separate window so we get a clean browser window. + win = window.open("data:text/html,", + "", "scrollbars=yes,toolbar,menubar,width=500,height=500"); + win.addEventListener('load', doTest, false); } + + nextTest(); ]]>
    From 7824486811ab5a39c0ef1ba964dfe1566ff50d6c Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 17 May 2011 11:05:46 +1200 Subject: [PATCH 142/282] Bug 656749. Only optimize away zero-opacity elements when we're painting, not for any other kind of display list construction such as plugin geometry. r=tnikkel --- layout/generic/nsFrame.cpp | 4 +- modules/plugin/test/mochitest/Makefile.in | 1 + .../test/mochitest/test_zero_opacity.html | 40 +++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 modules/plugin/test/mochitest/test_zero_opacity.html diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp index e2b7f55eff08..1125d16880d1 100644 --- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -1466,8 +1466,8 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder, nsRect absPosClip; const nsStyleDisplay* disp = GetStyleDisplay(); // We can stop right away if this is a zero-opacity stacking context and - // we're not checking for event handling. - if (disp->mOpacity == 0.0 && !aBuilder->IsForEventDelivery()) + // we're painting. + if (disp->mOpacity == 0.0 && aBuilder->IsForPainting()) return NS_OK; PRBool applyAbsPosClipping = diff --git a/modules/plugin/test/mochitest/Makefile.in b/modules/plugin/test/mochitest/Makefile.in index ac98f2acca99..bcdb3a49cae7 100644 --- a/modules/plugin/test/mochitest/Makefile.in +++ b/modules/plugin/test/mochitest/Makefile.in @@ -99,6 +99,7 @@ _MOCHITEST_FILES = \ 307-xo-redirect.sjs \ test_redirect_handling.html \ test_clear_site_data.html \ + test_zero_opacity.html \ $(NULL) # test_plugin_scroll_painting.html \ bug 596491 diff --git a/modules/plugin/test/mochitest/test_zero_opacity.html b/modules/plugin/test/mochitest/test_zero_opacity.html new file mode 100644 index 000000000000..fad5c9db45b6 --- /dev/null +++ b/modules/plugin/test/mochitest/test_zero_opacity.html @@ -0,0 +1,40 @@ + + + + Test whether windowed plugins with opacity:0 get their window set correctly + + + + + +

    + + + + From ee46b561861297d901f2dc3ffbc17618df026b54 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 17 May 2011 11:05:56 +1200 Subject: [PATCH 143/282] Bug 648483. Record the transform used when we last painted a layer and use that to control what needs to be invalidated in the layer. r=tnikkel --- layout/base/FrameLayerBuilder.cpp | 37 ++++++++-- layout/base/FrameLayerBuilder.h | 19 +++++- .../scrolling/layer-change-1-frame.html | 68 +++++++++++++++++++ .../scrolling/layer-change-1-ref.html | 7 ++ layout/reftests/scrolling/layer-change-1.html | 18 +++++ 5 files changed, 142 insertions(+), 7 deletions(-) create mode 100644 layout/reftests/scrolling/layer-change-1-frame.html create mode 100644 layout/reftests/scrolling/layer-change-1-ref.html create mode 100644 layout/reftests/scrolling/layer-change-1.html diff --git a/layout/base/FrameLayerBuilder.cpp b/layout/base/FrameLayerBuilder.cpp index 2d6d80caa21c..81f1c7391235 100644 --- a/layout/base/FrameLayerBuilder.cpp +++ b/layout/base/FrameLayerBuilder.cpp @@ -715,16 +715,17 @@ FrameLayerBuilder::GetOldLayerFor(nsIFrame* aFrame, PRUint32 aDisplayItemKey) /** * Invalidate aRegion in aLayer. aLayer is in the coordinate system - * *after* aLayer's transform has been applied, so we need to + * *after* aTransform has been applied, so we need to * apply the inverse of that transform before calling InvalidateRegion. * Currently we assume that the transform is just an integer translation, * since that's all we need for scrolling. */ static void -InvalidatePostTransformRegion(ThebesLayer* aLayer, const nsIntRegion& aRegion) +InvalidatePostTransformRegion(ThebesLayer* aLayer, const nsIntRegion& aRegion, + const gfx3DMatrix& aTransform) { gfxMatrix transform; - if (aLayer->GetTransform().Is2D(&transform)) { + if (aTransform.Is2D(&transform)) { NS_ASSERTION(!transform.HasNonIntegerTranslation(), "Matrix not just an integer translation?"); // Convert the region from the coordinates of the container layer @@ -807,7 +808,8 @@ ContainerState::CreateOrRecycleThebesLayer(nsIFrame* aActiveScrolledRoot) nsIntRect invalidate = layer->GetValidRegion().GetBounds(); layer->InvalidateRegion(invalidate); } else { - InvalidatePostTransformRegion(layer, mInvalidThebesContent); + InvalidatePostTransformRegion(layer, mInvalidThebesContent, + layer->GetTransform()); } // We do not need to Invalidate these areas in the widget because we // assume the caller of InvalidateThebesLayerContents has ensured @@ -822,6 +824,8 @@ ContainerState::CreateOrRecycleThebesLayer(nsIFrame* aActiveScrolledRoot) new ThebesDisplayItemLayerUserData()); } + mBuilder->LayerBuilder()->SaveLastPaintTransform(layer, layer->GetTransform()); + // Set up transform so that 0,0 in the Thebes layer corresponds to the // (pixel-snapped) top-left of the aActiveScrolledRoot. nsPoint offset = mBuilder->ToReferenceFrame(aActiveScrolledRoot); @@ -1419,12 +1423,13 @@ ContainerState::InvalidateForLayerChange(nsDisplayItem* aItem, Layer* aNewLayer) ThebesLayer* t = oldLayer->AsThebesLayer(); if (t) { - InvalidatePostTransformRegion(t, r); + InvalidatePostTransformRegion(t, r, + mBuilder->LayerBuilder()->GetLastPaintTransform(t)); } if (aNewLayer) { ThebesLayer* newLayer = aNewLayer->AsThebesLayer(); if (newLayer) { - InvalidatePostTransformRegion(newLayer, r); + InvalidatePostTransformRegion(newLayer, r, newLayer->GetTransform()); } } @@ -1479,6 +1484,26 @@ FrameLayerBuilder::AddLayerDisplayItem(Layer* aLayer, } } +const gfx3DMatrix& +FrameLayerBuilder::GetLastPaintTransform(ThebesLayer* aLayer) +{ + ThebesLayerItemsEntry* entry = mThebesLayerItems.PutEntry(aLayer); + if (entry && entry->mHasExplicitLastPaintTransform) + return entry->mLastPaintTransform; + return aLayer->GetTransform(); +} + +void +FrameLayerBuilder::SaveLastPaintTransform(ThebesLayer* aLayer, + const gfx3DMatrix& aMatrix) +{ + ThebesLayerItemsEntry* entry = mThebesLayerItems.PutEntry(aLayer); + if (entry) { + entry->mLastPaintTransform = aMatrix; + entry->mHasExplicitLastPaintTransform = PR_TRUE; + } +} + nscolor FrameLayerBuilder::FindOpaqueColorCovering(nsDisplayListBuilder* aBuilder, ThebesLayer* aLayer, diff --git a/layout/base/FrameLayerBuilder.h b/layout/base/FrameLayerBuilder.h index c91842064655..c19a598d6125 100644 --- a/layout/base/FrameLayerBuilder.h +++ b/layout/base/FrameLayerBuilder.h @@ -296,6 +296,17 @@ public: */ static PRBool HasRetainedLayerFor(nsIFrame* aFrame, PRUint32 aDisplayItemKey); + /** + * Save aMatrix as the transform that was in aLayer when we last painted. + */ + void SaveLastPaintTransform(ThebesLayer* aLayer, const gfx3DMatrix& aMatrix); + /** + * Get the transform that was in aLayer when we last painted. It's either + * the transform saved by SaveLastPaintTransform, or else the transform + * that's currently in the layer. + */ + const gfx3DMatrix& GetLastPaintTransform(ThebesLayer* aLayer); + /** * Clip represents the intersection of an optional rectangle with a * list of rounded rectangles. @@ -438,7 +449,9 @@ protected: */ class ThebesLayerItemsEntry : public nsPtrHashKey { public: - ThebesLayerItemsEntry(const ThebesLayer *key) : nsPtrHashKey(key) {} + ThebesLayerItemsEntry(const ThebesLayer *key) : + nsPtrHashKey(key), mContainerLayerFrame(nsnull), + mHasExplicitLastPaintTransform(PR_FALSE) {} ThebesLayerItemsEntry(const ThebesLayerItemsEntry &toCopy) : nsPtrHashKey(toCopy.mKey), mItems(toCopy.mItems) { @@ -447,6 +460,10 @@ protected: nsTArray mItems; nsIFrame* mContainerLayerFrame; + // The transform set on this ThebesLayer before we started updating the + // layer tree. + gfx3DMatrix mLastPaintTransform; + PRPackedBool mHasExplicitLastPaintTransform; enum { ALLOW_MEMMOVE = PR_TRUE }; }; diff --git a/layout/reftests/scrolling/layer-change-1-frame.html b/layout/reftests/scrolling/layer-change-1-frame.html new file mode 100644 index 000000000000..3e97d3c1ec4f --- /dev/null +++ b/layout/reftests/scrolling/layer-change-1-frame.html @@ -0,0 +1,68 @@ + + + + + + +
    dddddddddddddddddddddddddddddddddddddddddddddddddddddd
    +
    +
  • + When I use an iPhone and an Android phone at the same time, I +often find that apps from the same company look a lot different on these + two platforms - the ones on Android usually look much worse. + When I use an iPhone and an Android phone at the same time, I +often find that apps from the same company look a lot different on these + two platforms - the ones on Android usually look much worse. + When I use an iPhone and an Android phone at the same time, I +often find that apps from the same company look a lot different on these + two platforms - the ones on Android usually look much worse. +When I use an iPhone and an Android phone at the same time, I +often find that apps from the same company look a lot different on these + two platforms - the ones on Android usually look much worse. + When I use an iPhone and an Android phone at the same time, I +often find that apps from the same company look a lot different on these + two platforms - the ones on Android usually look much worse. + When I use an iPhone and an Android phone at the same time, I +often find that apps from the same company look a lot different on these + two platforms - the ones on Android usually look much worse. + When I use an iPhone and an Android phone at the same time, I +often find that apps from the same company look a lot different on these + two platforms - the ones on Android usually look much worse. +When I use an iPhone and an Android phone at the same time, I +often find that apps from the same company look a lot different on these + two platforms - the ones on Android usually look much worse. +
  • +
    + +
    + + diff --git a/layout/reftests/scrolling/layer-change-1-ref.html b/layout/reftests/scrolling/layer-change-1-ref.html new file mode 100644 index 000000000000..d2cb43491c0c --- /dev/null +++ b/layout/reftests/scrolling/layer-change-1-ref.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/layout/reftests/scrolling/layer-change-1.html b/layout/reftests/scrolling/layer-change-1.html new file mode 100644 index 000000000000..7cd62e68e0e6 --- /dev/null +++ b/layout/reftests/scrolling/layer-change-1.html @@ -0,0 +1,18 @@ + + + + + + + + From 294c64934324d61b16c7026e02e734f902b2c745 Mon Sep 17 00:00:00 2001 From: Paul ADENOT Date: Tue, 17 May 2011 11:14:40 +1200 Subject: [PATCH 144/282] Bug 657447 : adding include guard aroung nsTimeRanges class. --- content/html/content/src/nsTimeRanges.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/content/html/content/src/nsTimeRanges.h b/content/html/content/src/nsTimeRanges.h index 0b473a858167..172cadb5b85f 100644 --- a/content/html/content/src/nsTimeRanges.h +++ b/content/html/content/src/nsTimeRanges.h @@ -36,6 +36,9 @@ * * ***** END LICENSE BLOCK ***** */ +#ifndef nsTimeRanges_h__ +#define nsTimeRanges_h__ + #include "nsIDOMTimeRanges.h" #include "nsISupports.h" #include "nsTArray.h" @@ -64,3 +67,5 @@ private: nsAutoTArray mRanges; }; + +#endif // nsTimeRanges_h__ From 9d0eeccd2c086e9908372a78a83028001e8f34e4 Mon Sep 17 00:00:00 2001 From: Ian Moody Date: Tue, 17 May 2011 11:20:08 +1200 Subject: [PATCH 145/282] Bug 657143 - Reorder mature CSS properties in nsComputedDOMStyle.cpp --- layout/style/nsComputedDOMStyle.cpp | 53 ++++++++++++++++------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/layout/style/nsComputedDOMStyle.cpp b/layout/style/nsComputedDOMStyle.cpp index 158d9b9f93f6..3b717fb7f0e4 100644 --- a/layout/style/nsComputedDOMStyle.cpp +++ b/layout/style/nsComputedDOMStyle.cpp @@ -4184,19 +4184,24 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength) * Properties commented out with //// are shorthands and not queryable * \* ******************************************************************* */ static const ComputedStyleMapEntry map[] = { - /* ****************************** *\ - * Implementations of CSS2 styles * - \* ****************************** */ + /* ***************************** *\ + * Implementations of CSS styles * + \* ***************************** */ //// COMPUTED_STYLE_MAP_ENTRY(background, Background), COMPUTED_STYLE_MAP_ENTRY(background_attachment, BackgroundAttachment), + COMPUTED_STYLE_MAP_ENTRY(background_clip, BackgroundClip), COMPUTED_STYLE_MAP_ENTRY(background_color, BackgroundColor), COMPUTED_STYLE_MAP_ENTRY(background_image, BackgroundImage), + COMPUTED_STYLE_MAP_ENTRY(background_origin, BackgroundOrigin), COMPUTED_STYLE_MAP_ENTRY(background_position, BackgroundPosition), COMPUTED_STYLE_MAP_ENTRY(background_repeat, BackgroundRepeat), + COMPUTED_STYLE_MAP_ENTRY(background_size, MozBackgroundSize), //// COMPUTED_STYLE_MAP_ENTRY(border, Border), //// COMPUTED_STYLE_MAP_ENTRY(border_bottom, BorderBottom), COMPUTED_STYLE_MAP_ENTRY(border_bottom_color, BorderBottomColor), + COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_bottom_left_radius, BorderBottomLeftRadius), + COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_bottom_right_radius,BorderBottomRightRadius), COMPUTED_STYLE_MAP_ENTRY(border_bottom_style, BorderBottomStyle), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_bottom_width, BorderBottomWidth), COMPUTED_STYLE_MAP_ENTRY(border_collapse, BorderCollapse), @@ -4213,10 +4218,13 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength) //// COMPUTED_STYLE_MAP_ENTRY(border_style, BorderStyle), //// COMPUTED_STYLE_MAP_ENTRY(border_top, BorderTop), COMPUTED_STYLE_MAP_ENTRY(border_top_color, BorderTopColor), + COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_top_left_radius, BorderTopLeftRadius), + COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_top_right_radius, BorderTopRightRadius), COMPUTED_STYLE_MAP_ENTRY(border_top_style, BorderTopStyle), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_top_width, BorderTopWidth), //// COMPUTED_STYLE_MAP_ENTRY(border_width, BorderWidth), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(bottom, Bottom), + COMPUTED_STYLE_MAP_ENTRY(box_shadow, BoxShadow), COMPUTED_STYLE_MAP_ENTRY(caption_side, CaptionSide), COMPUTED_STYLE_MAP_ENTRY(clear, Clear), COMPUTED_STYLE_MAP_ENTRY(clip, Clip), @@ -4279,6 +4287,7 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength) COMPUTED_STYLE_MAP_ENTRY(pointer_events, PointerEvents), COMPUTED_STYLE_MAP_ENTRY(position, Position), COMPUTED_STYLE_MAP_ENTRY(quotes, Quotes), + COMPUTED_STYLE_MAP_ENTRY(resize, Resize), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(right, Right), //// COMPUTED_STYLE_MAP_ENTRY(size, Size), COMPUTED_STYLE_MAP_ENTRY(table_layout, TableLayout), @@ -4295,6 +4304,7 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength) // COMPUTED_STYLE_MAP_ENTRY(widows, Widows), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(width, Width), COMPUTED_STYLE_MAP_ENTRY(word_spacing, WordSpacing), + COMPUTED_STYLE_MAP_ENTRY(word_wrap, WordWrap), COMPUTED_STYLE_MAP_ENTRY(z_index, ZIndex), /* ******************************* *\ @@ -4312,27 +4322,19 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength) COMPUTED_STYLE_MAP_ENTRY(animation_timing_function, AnimationTimingFunction), #endif COMPUTED_STYLE_MAP_ENTRY(appearance, Appearance), - COMPUTED_STYLE_MAP_ENTRY(background_clip, BackgroundClip), COMPUTED_STYLE_MAP_ENTRY(_moz_background_inline_policy, BackgroundInlinePolicy), - COMPUTED_STYLE_MAP_ENTRY(background_origin, BackgroundOrigin), - COMPUTED_STYLE_MAP_ENTRY(background_size, MozBackgroundSize), COMPUTED_STYLE_MAP_ENTRY(binding, Binding), COMPUTED_STYLE_MAP_ENTRY(border_bottom_colors, BorderBottomColors), COMPUTED_STYLE_MAP_ENTRY(border_image, BorderImage), COMPUTED_STYLE_MAP_ENTRY(border_left_colors, BorderLeftColors), COMPUTED_STYLE_MAP_ENTRY(border_right_colors, BorderRightColors), COMPUTED_STYLE_MAP_ENTRY(border_top_colors, BorderTopColors), - COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_bottom_left_radius, BorderBottomLeftRadius), - COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_bottom_right_radius,BorderBottomRightRadius), - COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_top_left_radius, BorderTopLeftRadius), - COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_top_right_radius, BorderTopRightRadius), COMPUTED_STYLE_MAP_ENTRY(box_align, BoxAlign), COMPUTED_STYLE_MAP_ENTRY(box_direction, BoxDirection), COMPUTED_STYLE_MAP_ENTRY(box_flex, BoxFlex), COMPUTED_STYLE_MAP_ENTRY(box_ordinal_group, BoxOrdinalGroup), COMPUTED_STYLE_MAP_ENTRY(box_orient, BoxOrient), COMPUTED_STYLE_MAP_ENTRY(box_pack, BoxPack), - COMPUTED_STYLE_MAP_ENTRY(box_shadow, BoxShadow), COMPUTED_STYLE_MAP_ENTRY(box_sizing, BoxSizing), COMPUTED_STYLE_MAP_ENTRY(_moz_column_count, ColumnCount), COMPUTED_STYLE_MAP_ENTRY(_moz_column_width, ColumnWidth), @@ -4344,28 +4346,35 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength) COMPUTED_STYLE_MAP_ENTRY(float_edge, FloatEdge), COMPUTED_STYLE_MAP_ENTRY(font_feature_settings, MozFontFeatureSettings), COMPUTED_STYLE_MAP_ENTRY(font_language_override, MozFontLanguageOverride), - COMPUTED_STYLE_MAP_ENTRY(force_broken_image_icon, ForceBrokenImageIcon), + COMPUTED_STYLE_MAP_ENTRY(force_broken_image_icon, ForceBrokenImageIcon), + COMPUTED_STYLE_MAP_ENTRY(hyphens, Hyphens), COMPUTED_STYLE_MAP_ENTRY(image_region, ImageRegion), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_outline_radius_bottomLeft, OutlineRadiusBottomLeft), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_outline_radius_bottomRight,OutlineRadiusBottomRight), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_outline_radius_topLeft, OutlineRadiusTopLeft), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_outline_radius_topRight, OutlineRadiusTopRight), - COMPUTED_STYLE_MAP_ENTRY(resize, Resize), COMPUTED_STYLE_MAP_ENTRY(stack_sizing, StackSizing), COMPUTED_STYLE_MAP_ENTRY(_moz_tab_size, MozTabSize), + COMPUTED_STYLE_MAP_ENTRY(text_blink, MozTextBlink), + COMPUTED_STYLE_MAP_ENTRY(text_decoration_color, MozTextDecorationColor), + COMPUTED_STYLE_MAP_ENTRY(text_decoration_line, MozTextDecorationLine), + COMPUTED_STYLE_MAP_ENTRY(text_decoration_style, MozTextDecorationStyle), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_transform, MozTransform), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_transform_origin, MozTransformOrigin), - COMPUTED_STYLE_MAP_ENTRY(user_focus, UserFocus), - COMPUTED_STYLE_MAP_ENTRY(user_input, UserInput), - COMPUTED_STYLE_MAP_ENTRY(user_modify, UserModify), - COMPUTED_STYLE_MAP_ENTRY(user_select, UserSelect), COMPUTED_STYLE_MAP_ENTRY(transition_delay, TransitionDelay), COMPUTED_STYLE_MAP_ENTRY(transition_duration, TransitionDuration), COMPUTED_STYLE_MAP_ENTRY(transition_property, TransitionProperty), COMPUTED_STYLE_MAP_ENTRY(transition_timing_function, TransitionTimingFunction), + COMPUTED_STYLE_MAP_ENTRY(user_focus, UserFocus), + COMPUTED_STYLE_MAP_ENTRY(user_input, UserInput), + COMPUTED_STYLE_MAP_ENTRY(user_modify, UserModify), + COMPUTED_STYLE_MAP_ENTRY(user_select, UserSelect), COMPUTED_STYLE_MAP_ENTRY(_moz_window_shadow, WindowShadow), - COMPUTED_STYLE_MAP_ENTRY(word_wrap, WordWrap), - COMPUTED_STYLE_MAP_ENTRY(hyphens, Hyphens), + + /* ***************************** *\ + * Implementations of SVG styles * + \* ***************************** */ + COMPUTED_STYLE_MAP_ENTRY(clip_path, ClipPath), COMPUTED_STYLE_MAP_ENTRY(clip_rule, ClipRule), COMPUTED_STYLE_MAP_ENTRY(color_interpolation, ColorInterpolation), @@ -4395,11 +4404,7 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength) COMPUTED_STYLE_MAP_ENTRY(stroke_opacity, StrokeOpacity), COMPUTED_STYLE_MAP_ENTRY(stroke_width, StrokeWidth), COMPUTED_STYLE_MAP_ENTRY(text_anchor, TextAnchor), - COMPUTED_STYLE_MAP_ENTRY(text_rendering, TextRendering), - COMPUTED_STYLE_MAP_ENTRY(text_blink, MozTextBlink), - COMPUTED_STYLE_MAP_ENTRY(text_decoration_color, MozTextDecorationColor), - COMPUTED_STYLE_MAP_ENTRY(text_decoration_line, MozTextDecorationLine), - COMPUTED_STYLE_MAP_ENTRY(text_decoration_style, MozTextDecorationStyle) + COMPUTED_STYLE_MAP_ENTRY(text_rendering, TextRendering) }; From e8c9f1c8a5910531d8f7261c8b3d98516f545306 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 17 May 2011 11:41:39 +1200 Subject: [PATCH 146/282] Bug 629866. Part 2: Make MarkLeafLayersHidden actually hide layers that aren't in the dirty region. Don't consider hidden layers when deciding whether double-buffering is needed. r=cjones --- gfx/layers/basic/BasicLayers.cpp | 128 ++++++++++++++++++++----------- gfx/layers/basic/BasicLayers.h | 4 + 2 files changed, 88 insertions(+), 44 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index bdae2c8e90e1..68d1572ad09e 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -92,7 +92,7 @@ class ShadowableLayer; */ class BasicImplData { public: - BasicImplData() + BasicImplData() : mHidden(PR_FALSE) { MOZ_COUNT_CTOR(BasicImplData); } @@ -136,16 +136,13 @@ public: virtual void ClearCachedResources() {} /** - * This variable is used by layer manager in order to - * MarkLeafLayersCoveredByOpaque() before painting. - * We keep it here for now. Once we need to cull completely covered - * non-Basic layers, mCoveredByOpaque should be moved to Layer. + * This variable is set by MarkLeafLayersHidden() before painting. */ - void SetCoveredByOpaque(PRBool aCovered) { mCoveredByOpaque = aCovered; } - PRBool IsCoveredByOpaque() const { return mCoveredByOpaque; } + void SetHidden(PRBool aCovered) { mHidden = aCovered; } + PRBool IsHidden() const { return PR_FALSE; } protected: - PRPackedBool mCoveredByOpaque; + PRPackedBool mHidden; }; static BasicImplData* @@ -554,7 +551,7 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, mBuffer.Clear(); nsIntRegion toDraw = IntersectWithClip(mVisibleRegion, aContext); - if (!toDraw.IsEmpty()) { + if (!toDraw.IsEmpty() && !IsHidden()) { if (!aCallback) { BasicManager()->SetTransactionIncomplete(); return; @@ -620,7 +617,9 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, } } - mBuffer.DrawTo(this, aContext, opacity); + if (!IsHidden()) { + mBuffer.DrawTo(this, aContext, opacity); + } for (PRUint32 i = 0; i < readbackUpdates.Length(); ++i) { ReadbackProcessor::Update& update = readbackUpdates[i]; @@ -739,6 +738,8 @@ protected: void BasicImageLayer::Paint(gfxContext* aContext) { + if (IsHidden()) + return; nsRefPtr dontcare = GetAndPaintCurrentImage(aContext, GetEffectiveOpacity()); } @@ -850,6 +851,8 @@ public: virtual void Paint(gfxContext* aContext) { + if (IsHidden()) + return; PaintColorTo(mColor, GetEffectiveOpacity(), aContext); } @@ -994,6 +997,8 @@ BasicCanvasLayer::UpdateSurface() void BasicCanvasLayer::Paint(gfxContext* aContext) { + if (IsHidden()) + return; UpdateSurface(); FireDidTransactionCallback(); PaintWithOpacity(aContext, GetEffectiveOpacity()); @@ -1084,6 +1089,11 @@ MayHaveOverlappingOrTransparentLayers(Layer* aLayer, const nsIntRect& aBounds, nsIntRegion* aDirtyVisibleRegionInContainer) { + if (static_cast(aLayer->ImplData())->IsHidden()) { + // This layer won't be painted, so just ignore it. + return PR_FALSE; + } + if (!(aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE)) { return PR_TRUE; } @@ -1244,17 +1254,27 @@ TransformIntRect(nsIntRect& aRect, const gfxMatrix& aMatrix, aRect = (*aRoundMethod)(gr); } -// This implementation assumes that GetEffectiveTransform transforms -// all layers to the same coordinate system. It can't be used as is -// by accelerated layers because of intermediate surfaces. -// aClipRect and aRegion are in that global coordinate system. +/** + * This function assumes that GetEffectiveTransform transforms + * all layers to the same coordinate system (the "root coordinate system"). + * It can't be used as is by accelerated layers because of intermediate surfaces. + * This must set the hidden flag to true or false on *all* layers in the subtree. + * @param aClipRect the cliprect, in the root coordinate system. We assume + * that any layer drawing is clipped to this rect. It is therefore not + * allowed to add to the opaque region outside that rect. + * @param aDirtyRect the dirty rect that will be painted, in the root + * coordinate system. Layers outside this rect should be hidden. + * @param aOpaqueRegion the opaque region covering aLayer, in the + * root coordinate system. + */ static void -MarkLeafLayersCoveredByOpaque(Layer* aLayer, const nsIntRect& aClipRect, - nsIntRegion& aRegion) +MarkLeafLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, + const nsIntRect& aDirtyRect, + nsIntRegion& aOpaqueRegion) { Layer* child = aLayer->GetLastChild(); BasicImplData* data = ToData(aLayer); - data->SetCoveredByOpaque(PR_FALSE); + data->SetHidden(PR_FALSE); nsIntRect newClipRect(aClipRect); @@ -1274,6 +1294,8 @@ MarkLeafLayersCoveredByOpaque(Layer* aLayer, const nsIntRect& aClipRect, if (aLayer->GetParent()) { gfxMatrix tr; if (aLayer->GetParent()->GetEffectiveTransform().Is2D(&tr)) { + // Clip rect is applied after aLayer's transform, i.e., in the coordinate + // system of aLayer's parent. TransformIntRect(cr, tr, ToInsideIntRect); } else { cr.SetRect(0, 0, 0, 0); @@ -1292,7 +1314,8 @@ MarkLeafLayersCoveredByOpaque(Layer* aLayer, const nsIntRect& aClipRect, nsIntRegion region = aLayer->GetEffectiveVisibleRegion(); nsIntRect r = region.GetBounds(); TransformIntRect(r, transform, ToOutsideIntRect); - data->SetCoveredByOpaque(aRegion.Contains(r)); + r.IntersectRect(r, aDirtyRect); + data->SetHidden(aOpaqueRegion.Contains(r)); // Allow aLayer to cover underlying layers only if aLayer's // content is opaque @@ -1307,12 +1330,12 @@ MarkLeafLayersCoveredByOpaque(Layer* aLayer, const nsIntRect& aClipRect, r.IntersectRect(r, newClipRect); if (!r.IsEmpty()) { - aRegion.Or(aRegion, r); + aOpaqueRegion.Or(aOpaqueRegion, r); } } } else { for (; child; child = child->GetPrevSibling()) { - MarkLeafLayersCoveredByOpaque(child, newClipRect, aRegion); + MarkLeafLayersHidden(child, newClipRect, aDirtyRect, aOpaqueRegion); } } } @@ -1341,29 +1364,48 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, mTransactionIncomplete = false; if (mTarget && mRoot) { - nsRefPtr finalTarget = mTarget; - gfxPoint cachedSurfaceOffset; - - nsIntRegion rootRegion; - PRBool useDoubleBuffering = mUsingDefaultTarget && - mDoubleBuffering != BUFFER_NONE && - MayHaveOverlappingOrTransparentLayers(mRoot, - ToOutsideIntRect(mTarget->GetClipExtents()), - &rootRegion); - if (useDoubleBuffering) { - nsRefPtr targetSurface = mTarget->CurrentSurface(); - mTarget = PushGroupWithCachedSurface(mTarget, targetSurface->GetContentType(), - &cachedSurfaceOffset); + nsIntRect clipRect; + if (HasShadowManager()) { + // If this has a shadow manager, the clip extents of mTarget are meaningless. + // So instead just use the root layer's visible region bounds. + const nsIntRect& bounds = mRoot->GetVisibleRegion().GetBounds(); + gfxRect deviceRect = + mTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height)); + clipRect = ToOutsideIntRect(deviceRect); + } else { + gfxContextMatrixAutoSaveRestore save(mTarget); + mTarget->SetMatrix(gfxMatrix()); + clipRect = ToOutsideIntRect(mTarget->GetClipExtents()); } + // Need to do this before we call MarkLeafLayersHidden, + // which depends on correct effective transforms mSnapEffectiveTransforms = !(mTarget->GetFlags() & gfxContext::FLAG_DISABLE_SNAPPING); mRoot->ComputeEffectiveTransforms(gfx3DMatrix::From2D(mTarget->CurrentMatrix())); - nsIntRegion region; - MarkLeafLayersCoveredByOpaque(mRoot, - mRoot->GetEffectiveVisibleRegion().GetBounds(), - region); + // Need to do this before we call MayHaveOverlappingOrTransparentLayers, + // which uses information about which layers are going to be drawn. + if (IsRetained()) { + nsIntRegion region; + MarkLeafLayersHidden(mRoot, clipRect, clipRect, region); + } + + nsRefPtr finalTarget = mTarget; + gfxPoint cachedSurfaceOffset; + nsIntRegion rootRegion; + PRBool useDoubleBuffering = mUsingDefaultTarget && + mDoubleBuffering != BUFFER_NONE && + MayHaveOverlappingOrTransparentLayers(mRoot, clipRect, &rootRegion); + + if (useDoubleBuffering) { + nsRefPtr targetSurface = mTarget->CurrentSurface(); + mTarget = PushGroupWithCachedSurface(mTarget, targetSurface->GetContentType(), + &cachedSurfaceOffset); + // Recompute effective transforms since the gfxContext matrix has changed + mRoot->ComputeEffectiveTransforms(gfx3DMatrix::From2D(mTarget->CurrentMatrix())); + } + PaintLayer(mRoot, aCallback, aCallbackData, nsnull); // If we're doing manual double-buffering, we need to avoid drawing @@ -1495,14 +1537,12 @@ BasicLayerManager::PaintLayer(Layer* aLayer, BasicImplData* data = ToData(aLayer); #ifdef MOZ_LAYERS_HAVE_LOG MOZ_LAYERS_LOG(("%s (0x%p) is covered: %i\n", __FUNCTION__, - (void*)aLayer, data->IsCoveredByOpaque())); + (void*)aLayer, data->IsHidden())); #endif - if (!data->IsCoveredByOpaque()) { - if (aLayer->AsThebesLayer()) { - data->PaintThebes(mTarget, aCallback, aCallbackData, aReadback); - } else { - data->Paint(mTarget); - } + if (aLayer->AsThebesLayer()) { + data->PaintThebes(mTarget, aCallback, aCallbackData, aReadback); + } else { + data->Paint(mTarget); } } else { ReadbackProcessor readback; diff --git a/gfx/layers/basic/BasicLayers.h b/gfx/layers/basic/BasicLayers.h index 392479d38e80..41c684ffa88a 100644 --- a/gfx/layers/basic/BasicLayers.h +++ b/gfx/layers/basic/BasicLayers.h @@ -181,6 +181,8 @@ public: void SetTransactionIncomplete() { mTransactionIncomplete = true; } virtual PRBool IsCompositingCheap() { return PR_FALSE; } + virtual bool HasShadowManagerInternal() const { return false; } + bool HasShadowManager() const { return HasShadowManagerInternal(); } protected: #ifdef DEBUG @@ -260,6 +262,7 @@ public: ShadowableLayer* Hold(Layer* aLayer); + bool HasShadowManager() const { return ShadowLayerForwarder::HasShadowManager(); } PLayersChild* GetShadowManager() const { return mShadowManager; } void SetShadowManager(PLayersChild* aShadowManager) @@ -268,6 +271,7 @@ public: } virtual PRBool IsCompositingCheap(); + virtual bool HasShadowManagerInternal() const { return HasShadowManager(); } private: /** From 6f33d6ea534e44b0f4ef770cce694de92a69d834 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 17 May 2011 11:41:48 +1200 Subject: [PATCH 147/282] Bug 647560. Clean up MarkLeafLayersHidden and make it set the hidden state on container layers. r=tnikkel Instead of doing tricks with the cliprect to prevent layer content from adding to aOpaqueRegion, pass an explicit flag to control that. Mark a ContainerLayer hidden if all its children are hidden. This will need to be changed if/when we add layer properties that result in a ContainerLayer drawing content even if it has no children. --- gfx/layers/basic/BasicLayers.cpp | 51 ++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index 68d1572ad09e..2b72928bfe1e 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -1267,22 +1267,22 @@ TransformIntRect(nsIntRect& aRect, const gfxMatrix& aMatrix, * @param aOpaqueRegion the opaque region covering aLayer, in the * root coordinate system. */ +enum { + ALLOW_OPAQUE = 0x01, +}; static void -MarkLeafLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, - const nsIntRect& aDirtyRect, - nsIntRegion& aOpaqueRegion) +MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, + const nsIntRect& aDirtyRect, + nsIntRegion& aOpaqueRegion, + PRUint32 aFlags) { - Layer* child = aLayer->GetLastChild(); - BasicImplData* data = ToData(aLayer); - data->SetHidden(PR_FALSE); - nsIntRect newClipRect(aClipRect); + PRUint32 newFlags = aFlags; // Allow aLayer or aLayer's descendants to cover underlying layers - // only if it's opaque. GetEffectiveOpacity() could be used instead, - // but it does extra passes from descendant to ancestor. + // only if it's opaque. if (aLayer->GetOpacity() != 1.0f) { - newClipRect.SetRect(0, 0, 0, 0); + newFlags &= ~ALLOW_OPAQUE; } { @@ -1305,9 +1305,12 @@ MarkLeafLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, } } + BasicImplData* data = ToData(aLayer); + Layer* child = aLayer->GetLastChild(); if (!child) { gfxMatrix transform; if (!aLayer->GetEffectiveTransform().Is2D(&transform)) { + data->SetHidden(PR_FALSE); return; } @@ -1319,24 +1322,26 @@ MarkLeafLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, // Allow aLayer to cover underlying layers only if aLayer's // content is opaque - if (!(aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE)) { - return; - } + if ((aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE) && + (newFlags & ALLOW_OPAQUE)) { + nsIntRegionRectIterator it(region); + while (const nsIntRect* sr = it.Next()) { + r = *sr; + TransformIntRect(r, transform, ToInsideIntRect); - nsIntRegionRectIterator it(region); - while (const nsIntRect* sr = it.Next()) { - r = *sr; - TransformIntRect(r, transform, ToInsideIntRect); - - r.IntersectRect(r, newClipRect); - if (!r.IsEmpty()) { + r.IntersectRect(r, newClipRect); aOpaqueRegion.Or(aOpaqueRegion, r); } } } else { + PRBool allHidden = PR_TRUE; for (; child; child = child->GetPrevSibling()) { - MarkLeafLayersHidden(child, newClipRect, aDirtyRect, aOpaqueRegion); + MarkLayersHidden(child, newClipRect, aDirtyRect, aOpaqueRegion, newFlags); + if (!ToData(child)->IsHidden()) { + allHidden = PR_FALSE; + } } + data->SetHidden(allHidden); } } @@ -1378,7 +1383,7 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, clipRect = ToOutsideIntRect(mTarget->GetClipExtents()); } - // Need to do this before we call MarkLeafLayersHidden, + // Need to do this before we call MarkLayersHidden, // which depends on correct effective transforms mSnapEffectiveTransforms = !(mTarget->GetFlags() & gfxContext::FLAG_DISABLE_SNAPPING); @@ -1388,7 +1393,7 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, // which uses information about which layers are going to be drawn. if (IsRetained()) { nsIntRegion region; - MarkLeafLayersHidden(mRoot, clipRect, clipRect, region); + MarkLayersHidden(mRoot, clipRect, clipRect, region, ALLOW_OPAQUE); } nsRefPtr finalTarget = mTarget; From 4005a3a44709f448bfba4bc61d89e0b52d2710dd Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 17 May 2011 11:41:57 +1200 Subject: [PATCH 148/282] Bug 647560. Add support for compositing BasicLayers with OPERATOR_SOURCE. r=tnikkel We'll need this for the improved backbuffer code in the next patch. When a layer tree's leaf layers don't overlap and cover the window, the next patch will avoid double-buffering by blitting those layers directly to the window. If the window has transparent parts (e.g. with Aero Glass), we need to draw the layers for those transparent parts using OPERATOR_SOURCE so that the alpha values in the window are reset. --- gfx/layers/basic/BasicLayers.cpp | 93 ++++++++++++++++++++++++-------- 1 file changed, 71 insertions(+), 22 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index 2b72928bfe1e..f675a6a7e47c 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -92,7 +92,7 @@ class ShadowableLayer; */ class BasicImplData { public: - BasicImplData() : mHidden(PR_FALSE) + BasicImplData() : mHidden(PR_FALSE), mOperator(gfxContext::OPERATOR_OVER) { MOZ_COUNT_CTOR(BasicImplData); } @@ -136,13 +136,45 @@ public: virtual void ClearCachedResources() {} /** - * This variable is set by MarkLeafLayersHidden() before painting. + * This variable is set by MarkLayersHidden() before painting. It indicates + * that the layer should not be composited during this transaction. */ void SetHidden(PRBool aCovered) { mHidden = aCovered; } PRBool IsHidden() const { return PR_FALSE; } + /** + * This variable is set by MarkLayersHidden() before painting. This is + * the operator to be used when compositing the layer in this transaction. It must + * be OVER or SOURCE. + */ + void SetOperator(gfxContext::GraphicsOperator aOperator) + { + NS_ASSERTION(aOperator == gfxContext::OPERATOR_OVER || + aOperator == gfxContext::OPERATOR_SOURCE, + "Bad composition operator"); + mOperator = aOperator; + } + gfxContext::GraphicsOperator GetOperator() const { return mOperator; } protected: PRPackedBool mHidden; + gfxContext::GraphicsOperator mOperator; +}; + +class AutoSetOperator { +public: + AutoSetOperator(gfxContext* aContext, gfxContext::GraphicsOperator aOperator) { + if (aOperator != gfxContext::OPERATOR_OVER) { + aContext->SetOperator(aOperator); + mContext = aContext; + } + } + ~AutoSetOperator() { + if (mContext) { + mContext->SetOperator(gfxContext::OPERATOR_OVER); + } + } +private: + nsRefPtr mContext; }; static BasicImplData* @@ -156,7 +188,7 @@ static void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aConta template static void ContainerRemoveChild(Layer* aChild, Container* aContainer); -class BasicContainerLayer : public ContainerLayer, BasicImplData { +class BasicContainerLayer : public ContainerLayer, public BasicImplData { template friend void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aContainer); template @@ -358,7 +390,7 @@ private: BasicThebesLayer* mLayer; }; -class BasicThebesLayer : public ThebesLayer, BasicImplData { +class BasicThebesLayer : public ThebesLayer, public BasicImplData { public: typedef BasicThebesLayerBuffer Buffer; @@ -550,7 +582,7 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, mValidRegion.SetEmpty(); mBuffer.Clear(); - nsIntRegion toDraw = IntersectWithClip(mVisibleRegion, aContext); + nsIntRegion toDraw = IntersectWithClip(GetEffectiveVisibleRegion(), aContext); if (!toDraw.IsEmpty() && !IsHidden()) { if (!aCallback) { BasicManager()->SetTransactionIncomplete(); @@ -560,16 +592,20 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, aContext->Save(); PRBool needsClipToVisibleRegion = PR_FALSE; - if (opacity != 1.0) { - needsClipToVisibleRegion = PushGroupForLayer(aContext, this, toDraw); + PRBool needsGroup = + opacity != 1.0 || GetOperator() != gfxContext::OPERATOR_OVER; + if (needsGroup) { + needsClipToVisibleRegion = PushGroupForLayer(aContext, this, toDraw) || + GetOperator() != gfxContext::OPERATOR_OVER; } SetAntialiasingFlags(this, aContext); aCallback(this, aContext, toDraw, nsIntRegion(), aCallbackData); - if (opacity != 1.0) { + if (needsGroup) { aContext->PopGroupToSource(); if (needsClipToVisibleRegion) { gfxUtils::ClipToRegion(aContext, toDraw); } + AutoSetOperator setOperator(aContext, GetOperator()); aContext->Paint(opacity); } @@ -598,7 +634,8 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, // (this could be the whole visible area if our buffer switched // from RGB to RGBA, because we might need to repaint with // subpixel AA) - state.mRegionToInvalidate.And(state.mRegionToInvalidate, mVisibleRegion); + state.mRegionToInvalidate.And(state.mRegionToInvalidate, + GetEffectiveVisibleRegion()); nsIntRegion extendedDrawRegion = state.mRegionToDraw; extendedDrawRegion.ExtendForScaling(paintXRes, paintYRes); mXResolution = paintXRes; @@ -618,6 +655,7 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, } if (!IsHidden()) { + AutoSetOperator setOperator(aContext, GetOperator()); mBuffer.DrawTo(this, aContext, opacity); } @@ -655,13 +693,13 @@ BasicThebesLayerBuffer::DrawTo(ThebesLayer* aLayer, // no need to clip. But we'll still clip if clipping is cheap --- // that might let us copy a smaller region of the buffer. if (!aLayer->GetValidRegion().Contains(BufferRect()) || - IsClippingCheap(aTarget, aLayer->GetVisibleRegion())) { + IsClippingCheap(aTarget, aLayer->GetEffectiveVisibleRegion())) { // We don't want to draw invalid stuff, so we need to clip. Might as // well clip to the smallest area possible --- the visible region. // Bug 599189 if there is a non-integer-translation transform in aTarget, - // we might sample pixels outside GetVisibleRegion(), which is wrong + // we might sample pixels outside GetEffectiveVisibleRegion(), which is wrong // and may cause gray lines. - gfxUtils::ClipToRegionSnapped(aTarget, aLayer->GetVisibleRegion()); + gfxUtils::ClipToRegionSnapped(aTarget, aLayer->GetEffectiveVisibleRegion()); } DrawBufferWithRotation(aTarget, aOpacity, aLayer->GetXResolution(), aLayer->GetYResolution()); @@ -694,7 +732,7 @@ BasicThebesLayerBuffer::SetBackingBufferAndUpdateFrom( srcBuffer.DrawBufferWithRotation(destCtx, 1.0, aXResolution, aYResolution); } -class BasicImageLayer : public ImageLayer, BasicImplData { +class BasicImageLayer : public ImageLayer, public BasicImplData { public: BasicImageLayer(BasicLayerManager* aLayerManager) : ImageLayer(aLayerManager, static_cast(this)), @@ -769,6 +807,7 @@ BasicImageLayer::GetAndPaintCurrentImage(gfxContext* aContext, // tiling, we don't want to draw into that area, so just draw within // the image bounds. const nsIntRect* tileSrcRect = GetTileSourceRect(); + AutoSetOperator setOperator(aContext, GetOperator()); PaintContext(pat, tileSrcRect ? GetVisibleRegion() : nsIntRegion(nsIntRect(0, 0, mSize.width, mSize.height)), tileSrcRect, @@ -830,7 +869,7 @@ BasicImageLayer::PaintContext(gfxPattern* aPattern, aPattern->SetExtend(extend); } -class BasicColorLayer : public ColorLayer, BasicImplData { +class BasicColorLayer : public ColorLayer, public BasicImplData { public: BasicColorLayer(BasicLayerManager* aLayerManager) : ColorLayer(aLayerManager, static_cast(this)) @@ -853,6 +892,7 @@ public: { if (IsHidden()) return; + AutoSetOperator setOperator(aContext, GetOperator()); PaintColorTo(mColor, GetEffectiveOpacity(), aContext); } @@ -875,7 +915,7 @@ BasicColorLayer::PaintColorTo(gfxRGBA aColor, float aOpacity, } class BasicCanvasLayer : public CanvasLayer, - BasicImplData + public BasicImplData { public: BasicCanvasLayer(BasicLayerManager* aLayerManager) : @@ -1023,6 +1063,7 @@ BasicCanvasLayer::PaintWithOpacity(gfxContext* aContext, aContext->Scale(1.0, -1.0); } + AutoSetOperator setOperator(aContext, GetOperator()); aContext->NewPath(); // No need to snap here; our transform is already set up to snap our rect aContext->Rectangle(gfxRect(0, 0, mBounds.width, mBounds.height)); @@ -1035,7 +1076,7 @@ BasicCanvasLayer::PaintWithOpacity(gfxContext* aContext, } class BasicReadbackLayer : public ReadbackLayer, - BasicImplData + public BasicImplData { public: BasicReadbackLayer(BasicLayerManager* aLayerManager) : @@ -1487,8 +1528,13 @@ BasicLayerManager::PaintLayer(Layer* aLayer, { const nsIntRect* clipRect = aLayer->GetEffectiveClipRect(); const gfx3DMatrix& effectiveTransform = aLayer->GetEffectiveTransform(); + BasicContainerLayer* container = static_cast(aLayer); PRBool needsGroup = aLayer->GetFirstChild() && - static_cast(aLayer)->UseIntermediateSurface(); + container->UseIntermediateSurface(); + NS_ASSERTION(needsGroup || !aLayer->GetFirstChild() || + container->GetOperator() == gfxContext::OPERATOR_OVER, + "non-OVER operator should have forced UseIntermediateSurface"); + // If needsSaveRestore is false, we should still save and restore // the CTM PRBool needsSaveRestore = needsGroup || clipRect; @@ -1568,6 +1614,7 @@ BasicLayerManager::PaintLayer(Layer* aLayer, if (needsClipToVisibleRegion) { gfxUtils::ClipToRegion(mTarget, aLayer->GetEffectiveVisibleRegion()); } + AutoSetOperator setOperator(mTarget, container->GetOperator()); mTarget->Paint(aLayer->GetEffectiveOpacity()); } @@ -2339,7 +2386,7 @@ protected: }; -class BasicShadowThebesLayer : public ShadowThebesLayer, BasicImplData { +class BasicShadowThebesLayer : public ShadowThebesLayer, public BasicImplData { public: BasicShadowThebesLayer(BasicShadowLayerManager* aLayerManager) : ShadowThebesLayer(aLayerManager, static_cast(this)) @@ -2513,7 +2560,7 @@ BasicShadowThebesLayer::PaintThebes(gfxContext* aContext, mFrontBuffer.DrawTo(this, target, GetEffectiveOpacity()); } -class BasicShadowContainerLayer : public ShadowContainerLayer, BasicImplData { +class BasicShadowContainerLayer : public ShadowContainerLayer, public BasicImplData { template friend void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aContainer); template @@ -2559,7 +2606,7 @@ public: } }; -class BasicShadowImageLayer : public ShadowImageLayer, BasicImplData { +class BasicShadowImageLayer : public ShadowImageLayer, public BasicImplData { public: BasicShadowImageLayer(BasicShadowLayerManager* aLayerManager) : ShadowImageLayer(aLayerManager, static_cast(this)) @@ -2632,6 +2679,7 @@ BasicShadowImageLayer::Paint(gfxContext* aContext) // tiling, we don't want to draw into that area, so just draw within // the image bounds. const nsIntRect* tileSrcRect = GetTileSourceRect(); + AutoSetOperator setOperator(aContext, GetOperator()); BasicImageLayer::PaintContext(pat, tileSrcRect ? GetEffectiveVisibleRegion() : nsIntRegion(nsIntRect(0, 0, mSize.width, mSize.height)), tileSrcRect, @@ -2639,7 +2687,7 @@ BasicShadowImageLayer::Paint(gfxContext* aContext) } class BasicShadowColorLayer : public ShadowColorLayer, - BasicImplData + public BasicImplData { public: BasicShadowColorLayer(BasicShadowLayerManager* aLayerManager) : @@ -2654,12 +2702,13 @@ public: virtual void Paint(gfxContext* aContext) { + AutoSetOperator setOperator(aContext, GetOperator()); BasicColorLayer::PaintColorTo(mColor, GetEffectiveOpacity(), aContext); } }; class BasicShadowCanvasLayer : public ShadowCanvasLayer, - BasicImplData + public BasicImplData { public: BasicShadowCanvasLayer(BasicShadowLayerManager* aLayerManager) : From b021c0ce1bb179f71ffe1c4add233255b82dc3b9 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 17 May 2011 11:42:05 +1200 Subject: [PATCH 149/282] Bug 647560. Create ApplyDoubleBuffering to recursively walk layer tree and implement double-buffering by setting mUseIntermediateSurface on ContainerLayers where necessary. r=tnikkel The idea here is to do double-buffering just by setting mUseIntermediateSurface on ContainerLayers when needed. When we need to double-buffer compositing of a layer tree, ApplyDoubleBuffering examines the root container layer. If the child layers don't overlap and together cover the window, we don't need to double-buffer in that container, instead we can double-buffer each child layer separately --- so we recursively call ApplyDoubleBuffering on the child layers. When a container has children that overlap or that don't cover the container's visible rect (the latter case probably can't happen in practice), we force it to have an intermediate surface. This change fixes this bug because in normal browser windows the Web content layer double-buffers --- gfx/layers/basic/BasicLayers.cpp | 174 ++++++++++++++++++++++++------- 1 file changed, 136 insertions(+), 38 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index f675a6a7e47c..8f6a6fcc1bff 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -242,6 +242,23 @@ public: mUseIntermediateSurface = GetEffectiveOpacity() != 1.0 && HasMultipleChildren(); } + /** + * Returns true when: + * a) no (non-hidden) childrens' visible areas overlap in + * (aInRect intersected with this layer's visible region). + * b) the (non-hidden) childrens' visible areas cover + * (aInRect intersected with this layer's visible region). + * c) this layer and all (non-hidden) children have transforms that are translations + * by integers. + * aInRect is in the root coordinate system. + * Child layers with opacity do not contribute to the covered area in check b). + * This method can be conservative; it's OK to return false under any + * circumstances. + */ + PRBool ChildrenPartitionVisibleRegion(const nsIntRect& aInRect); + + void ForceIntermediateSurface() { mUseIntermediateSurface = PR_TRUE; } + protected: BasicLayerManager* BasicManager() { @@ -258,6 +275,43 @@ BasicContainerLayer::~BasicContainerLayer() MOZ_COUNT_DTOR(BasicContainerLayer); } +PRBool +BasicContainerLayer::ChildrenPartitionVisibleRegion(const nsIntRect& aInRect) +{ + gfxMatrix transform; + if (!GetEffectiveTransform().Is2D(&transform) || + transform.HasNonIntegerTranslation()) + return PR_FALSE; + + nsIntPoint offset(PRInt32(transform.x0), PRInt32(transform.y0)); + nsIntRect rect = aInRect.Intersect(GetEffectiveVisibleRegion().GetBounds() + offset); + nsIntRegion covered; + + for (Layer* l = mFirstChild; l; l = l->GetNextSibling()) { + if (ToData(l)->IsHidden()) + continue; + + gfxMatrix childTransform; + if (!l->GetEffectiveTransform().Is2D(&childTransform) || + childTransform.HasNonIntegerTranslation() || + l->GetEffectiveOpacity() != 1.0) + return PR_FALSE; + nsIntRegion childRegion = l->GetEffectiveVisibleRegion(); + childRegion.MoveBy(PRInt32(childTransform.x0), PRInt32(childTransform.y0)); + childRegion.And(childRegion, rect); + if (l->GetClipRect()) { + childRegion.And(childRegion, *l->GetClipRect() + offset); + } + nsIntRegion intersection; + intersection.And(covered, childRegion); + if (!intersection.IsEmpty()) + return PR_FALSE; + covered.Or(covered, childRegion); + } + + return covered.Contains(rect); +} + template static void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aContainer) @@ -1300,6 +1354,7 @@ TransformIntRect(nsIntRect& aRect, const gfxMatrix& aMatrix, * all layers to the same coordinate system (the "root coordinate system"). * It can't be used as is by accelerated layers because of intermediate surfaces. * This must set the hidden flag to true or false on *all* layers in the subtree. + * It also sets the operator for all layers to "OVER". * @param aClipRect the cliprect, in the root coordinate system. We assume * that any layer drawing is clipped to this rect. It is therefore not * allowed to add to the opaque region outside that rect. @@ -1347,8 +1402,9 @@ MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, } BasicImplData* data = ToData(aLayer); - Layer* child = aLayer->GetLastChild(); - if (!child) { + data->SetOperator(gfxContext::OPERATOR_OVER); + + if (!aLayer->AsContainerLayer()) { gfxMatrix transform; if (!aLayer->GetEffectiveTransform().Is2D(&transform)) { data->SetHidden(PR_FALSE); @@ -1375,6 +1431,7 @@ MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, } } } else { + Layer* child = aLayer->GetLastChild(); PRBool allHidden = PR_TRUE; for (; child; child = child->GetPrevSibling()) { MarkLayersHidden(child, newClipRect, aDirtyRect, aOpaqueRegion, newFlags); @@ -1386,6 +1443,64 @@ MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, } } +/** + * This function assumes that GetEffectiveTransform transforms + * all layers to the same coordinate system (the "root coordinate system"). + * MarkLayersHidden must be called before calling this. + * @param aVisibleRect the rectangle of aLayer that is visible (i.e. not + * clipped and in the dirty rect), in the root coordinate system. + */ +static void +ApplyDoubleBuffering(Layer* aLayer, const nsIntRect& aVisibleRect) +{ + BasicImplData* data = ToData(aLayer); + if (data->IsHidden()) + return; + + nsIntRect newVisibleRect(aVisibleRect); + + { + const nsIntRect* clipRect = aLayer->GetEffectiveClipRect(); + if (clipRect) { + nsIntRect cr = *clipRect; + // clipRect is in the container's coordinate system. Get it into the + // global coordinate system. + if (aLayer->GetParent()) { + gfxMatrix tr; + if (aLayer->GetParent()->GetEffectiveTransform().Is2D(&tr)) { + NS_ASSERTION(!tr.HasNonIntegerTranslation(), + "Parent can only have an integer translation"); + cr += nsIntPoint(PRInt32(tr.x0), PRInt32(tr.y0)); + } else { + NS_ERROR("Parent can only have an integer translation"); + } + } + newVisibleRect.IntersectRect(newVisibleRect, cr); + } + } + + BasicContainerLayer* container = + static_cast(aLayer->AsContainerLayer()); + // Layers that act as their own backbuffers should be drawn to the destination + // using OPERATOR_SOURCE to ensure that alpha values in a transparent window + // are cleared. This can also be faster than OPERATOR_OVER. + if (!container) { + data->SetOperator(gfxContext::OPERATOR_SOURCE); + } else { + if (container->UseIntermediateSurface() || + !container->ChildrenPartitionVisibleRegion(newVisibleRect)) { + // We need to double-buffer this container. + data->SetOperator(gfxContext::OPERATOR_SOURCE); + container->ForceIntermediateSurface(); + } else { + for (Layer* child = aLayer->GetFirstChild(); child; + child = child->GetNextSibling()) { + ApplyDoubleBuffering(child, newVisibleRect); + } + } + } +} + void BasicLayerManager::EndTransaction(DrawThebesLayerCallback aCallback, void* aCallbackData) @@ -1424,7 +1539,7 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, clipRect = ToOutsideIntRect(mTarget->GetClipExtents()); } - // Need to do this before we call MarkLayersHidden, + // Need to do this before we call ApplyDoubleBuffering, // which depends on correct effective transforms mSnapEffectiveTransforms = !(mTarget->GetFlags() & gfxContext::FLAG_DISABLE_SNAPPING); @@ -1435,44 +1550,16 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, if (IsRetained()) { nsIntRegion region; MarkLayersHidden(mRoot, clipRect, clipRect, region, ALLOW_OPAQUE); - } - - nsRefPtr finalTarget = mTarget; - gfxPoint cachedSurfaceOffset; - nsIntRegion rootRegion; - PRBool useDoubleBuffering = mUsingDefaultTarget && - mDoubleBuffering != BUFFER_NONE && - MayHaveOverlappingOrTransparentLayers(mRoot, clipRect, &rootRegion); - - if (useDoubleBuffering) { - nsRefPtr targetSurface = mTarget->CurrentSurface(); - mTarget = PushGroupWithCachedSurface(mTarget, targetSurface->GetContentType(), - &cachedSurfaceOffset); - // Recompute effective transforms since the gfxContext matrix has changed - mRoot->ComputeEffectiveTransforms(gfx3DMatrix::From2D(mTarget->CurrentMatrix())); + if (mUsingDefaultTarget && mDoubleBuffering != BUFFER_NONE) { + ApplyDoubleBuffering(mRoot, deviceSpaceClipExtents); + } } PaintLayer(mRoot, aCallback, aCallbackData, nsnull); - // If we're doing manual double-buffering, we need to avoid drawing - // the results of an incomplete transaction to the destination surface. - // If the transaction is incomplete and we're not double-buffering then - // either the system is double-buffering our window (in which case the - // followup EndTransaction will be drawn over the top of our incomplete - // transaction before the system updates the window), or we have no - // overlapping or transparent layers in the update region, in which case - // our partial transaction drawing will look fine. - if (useDoubleBuffering && !mTransactionIncomplete) { - finalTarget->SetOperator(gfxContext::OPERATOR_SOURCE); - PopGroupWithCachedSurface(finalTarget, cachedSurfaceOffset); - } - if (!mTransactionIncomplete) { // Clear out target if we have a complete transaction. mTarget = nsnull; - } else { - // If we don't have a complete transaction set back to the old mTarget. - mTarget = finalTarget; } } @@ -1611,11 +1698,22 @@ BasicLayerManager::PaintLayer(Layer* aLayer, if (needsGroup) { mTarget->PopGroupToSource(); - if (needsClipToVisibleRegion) { - gfxUtils::ClipToRegion(mTarget, aLayer->GetEffectiveVisibleRegion()); + // If we're doing our own double-buffering, we need to avoid drawing + // the results of an incomplete transaction to the destination surface --- + // that could cause flicker. Double-buffering is implemented using a + // temporary surface for one or more container layers, so we need to stop + // those temporary surfaces from being composited to mTarget. + // ApplyDoubleBuffering guarantees that this container layer can't + // intersect any other leaf layers, so if the transaction is not yet marked + // incomplete, the contents of this container layer are the final contents + // for the window. + if (!mTransactionIncomplete) { + if (needsClipToVisibleRegion) { + gfxUtils::ClipToRegion(mTarget, aLayer->GetEffectiveVisibleRegion()); + } + AutoSetOperator setOperator(mTarget, container->GetOperator()); + mTarget->Paint(aLayer->GetEffectiveOpacity()); } - AutoSetOperator setOperator(mTarget, container->GetOperator()); - mTarget->Paint(aLayer->GetEffectiveOpacity()); } if (pushedTargetOpaqueRect) { From 5649b24aa6210a492b0dd0db747d3cbdcc87086f Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 17 May 2011 11:42:11 +1200 Subject: [PATCH 150/282] Bug 647560. Cache temporary backbuffer surfaces. r=karlt --- gfx/layers/basic/BasicLayers.cpp | 127 ++++++++++++++++------------ gfx/layers/basic/BasicLayers.h | 17 ++-- gfx/thebes/gfxCachedTempSurface.cpp | 11 +-- gfx/thebes/gfxCachedTempSurface.h | 4 +- 4 files changed, 92 insertions(+), 67 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index 8f6a6fcc1bff..21a7fc4655ac 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -583,15 +583,16 @@ SetAntialiasingFlags(Layer* aLayer, gfxContext* aTarget) aTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height)))); } -static PRBool -PushGroupForLayer(gfxContext* aContext, Layer* aLayer, const nsIntRegion& aRegion) +already_AddRefed +BasicLayerManager::PushGroupForLayer(gfxContext* aContext, Layer* aLayer, + const nsIntRegion& aRegion, + PRBool* aNeedsClipToVisibleRegion) { // If we need to call PushGroup, we should clip to the smallest possible // area first to minimize the size of the temporary surface. PRBool didCompleteClip = ClipToContain(aContext, aRegion.GetBounds()); - gfxASurface::gfxContentType contentType = gfxASurface::CONTENT_COLOR_ALPHA; - PRBool needsClipToVisibleRegion = PR_FALSE; + nsRefPtr result; if (aLayer->CanUseOpaqueSurface() && ((didCompleteClip && aRegion.GetNumRects() == 1) || !aContext->CurrentMatrix().HasNonIntegerTranslation())) { @@ -599,11 +600,14 @@ PushGroupForLayer(gfxContext* aContext, Layer* aLayer, const nsIntRegion& aRegio // group. We need to make sure that only pixels inside the layer's visible // region are copied back to the destination. Remember if we've already // clipped precisely to the visible region. - needsClipToVisibleRegion = !didCompleteClip || aRegion.GetNumRects() > 1; - contentType = gfxASurface::CONTENT_COLOR; + *aNeedsClipToVisibleRegion = !didCompleteClip || aRegion.GetNumRects() > 1; + result = PushGroupWithCachedSurface(aContext, gfxASurface::CONTENT_COLOR); + } else { + *aNeedsClipToVisibleRegion = PR_FALSE; + result = aContext; + aContext->PushGroupAndCopyBackground(gfxASurface::CONTENT_COLOR_ALPHA); } - aContext->PushGroupAndCopyBackground(contentType); - return needsClipToVisibleRegion; + return result.forget(); } void @@ -648,14 +652,21 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, PRBool needsClipToVisibleRegion = PR_FALSE; PRBool needsGroup = opacity != 1.0 || GetOperator() != gfxContext::OPERATOR_OVER; + nsRefPtr groupContext; if (needsGroup) { - needsClipToVisibleRegion = PushGroupForLayer(aContext, this, toDraw) || - GetOperator() != gfxContext::OPERATOR_OVER; + groupContext = + BasicManager()->PushGroupForLayer(aContext, this, toDraw, + &needsClipToVisibleRegion); + if (GetOperator() != gfxContext::OPERATOR_OVER) { + needsClipToVisibleRegion = PR_TRUE; + } + } else { + groupContext = aContext; } - SetAntialiasingFlags(this, aContext); - aCallback(this, aContext, toDraw, nsIntRegion(), aCallbackData); + SetAntialiasingFlags(this, groupContext); + aCallback(this, groupContext, toDraw, nsIntRegion(), aCallbackData); if (needsGroup) { - aContext->PopGroupToSource(); + BasicManager()->PopGroupToSourceWithCachedSurface(aContext, groupContext); if (needsClipToVisibleRegion) { gfxUtils::ClipToRegion(aContext, toDraw); } @@ -1244,6 +1255,7 @@ BasicLayerManager::BasicLayerManager(nsIWidget* aWidget) : , mYResolution(1.0) , mWidget(aWidget) , mDoubleBuffering(BUFFER_NONE), mUsingDefaultTarget(PR_FALSE) + , mCachedSurfaceInUse(PR_FALSE) , mTransactionIncomplete(false) { MOZ_COUNT_CTOR(BasicLayerManager); @@ -1290,9 +1302,15 @@ BasicLayerManager::BeginTransaction() already_AddRefed BasicLayerManager::PushGroupWithCachedSurface(gfxContext *aTarget, - gfxASurface::gfxContentType aContent, - gfxPoint *aSavedOffset) + gfxASurface::gfxContentType aContent) { + if (mCachedSurfaceInUse) { + aTarget->PushGroup(aContent); + nsRefPtr result = aTarget; + return result.forget(); + } + mCachedSurfaceInUse = PR_TRUE; + gfxContextMatrixAutoSaveRestore saveMatrix(aTarget); aTarget->IdentityMatrix(); @@ -1300,29 +1318,26 @@ BasicLayerManager::PushGroupWithCachedSurface(gfxContext *aTarget, gfxRect clip = aTarget->GetClipExtents(); clip.RoundOut(); - nsRefPtr ctx = - mCachedSurface.Get(aContent, - gfxIntSize(clip.Width(), clip.Height()), - currentSurf); + nsRefPtr ctx = mCachedSurface.Get(aContent, clip, currentSurf); /* Align our buffer for the original surface */ - ctx->Translate(-clip.TopLeft()); - *aSavedOffset = clip.TopLeft(); - ctx->Multiply(saveMatrix.Matrix()); + ctx->SetMatrix(saveMatrix.Matrix()); return ctx.forget(); } void -BasicLayerManager::PopGroupWithCachedSurface(gfxContext *aTarget, - const gfxPoint& aSavedOffset) +BasicLayerManager::PopGroupToSourceWithCachedSurface(gfxContext *aTarget, gfxContext *aPushed) { - if (!mTarget) + if (!aTarget) return; - - gfxContextMatrixAutoSaveRestore saveMatrix(aTarget); - aTarget->IdentityMatrix(); - - aTarget->SetSource(mTarget->OriginalSurface(), aSavedOffset); - aTarget->Paint(); + nsRefPtr current = aPushed->CurrentSurface(); + if (mCachedSurface.IsSurface(current)) { + gfxContextMatrixAutoSaveRestore saveMatrix(aTarget); + aTarget->IdentityMatrix(); + aTarget->SetSource(current); + mCachedSurfaceInUse = PR_FALSE; + } else { + aTarget->PopGroupToSource(); + } } void @@ -1551,11 +1566,11 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, nsIntRegion region; MarkLayersHidden(mRoot, clipRect, clipRect, region, ALLOW_OPAQUE); if (mUsingDefaultTarget && mDoubleBuffering != BUFFER_NONE) { - ApplyDoubleBuffering(mRoot, deviceSpaceClipExtents); + ApplyDoubleBuffering(mRoot, clipRect); } } - PaintLayer(mRoot, aCallback, aCallbackData, nsnull); + PaintLayer(mTarget, mRoot, aCallback, aCallbackData, nsnull); if (!mTransactionIncomplete) { // Clear out target if we have a complete transaction. @@ -1608,7 +1623,8 @@ BasicLayerManager::SetRoot(Layer* aLayer) } void -BasicLayerManager::PaintLayer(Layer* aLayer, +BasicLayerManager::PaintLayer(gfxContext* aTarget, + Layer* aLayer, DrawThebesLayerCallback aCallback, void* aCallbackData, ReadbackProcessor* aReadback) @@ -1628,15 +1644,15 @@ BasicLayerManager::PaintLayer(Layer* aLayer, gfxMatrix savedMatrix; if (needsSaveRestore) { - mTarget->Save(); + aTarget->Save(); if (clipRect) { - mTarget->NewPath(); - mTarget->Rectangle(gfxRect(clipRect->x, clipRect->y, clipRect->width, clipRect->height), PR_TRUE); - mTarget->Clip(); + aTarget->NewPath(); + aTarget->Rectangle(gfxRect(clipRect->x, clipRect->y, clipRect->width, clipRect->height), PR_TRUE); + aTarget->Clip(); } } else { - savedMatrix = mTarget->CurrentMatrix(); + savedMatrix = aTarget->CurrentMatrix(); } gfxMatrix transform; @@ -1645,11 +1661,11 @@ BasicLayerManager::PaintLayer(Layer* aLayer, NS_ASSERTION(effectiveTransform.Is2D(), "Only 2D transforms supported currently"); effectiveTransform.Is2D(&transform); - mTarget->SetMatrix(transform); + aTarget->SetMatrix(transform); PRBool pushedTargetOpaqueRect = PR_FALSE; const nsIntRegion& visibleRegion = aLayer->GetEffectiveVisibleRegion(); - nsRefPtr currentSurface = mTarget->CurrentSurface(); + nsRefPtr currentSurface = aTarget->CurrentSurface(); const gfxRect& targetOpaqueRect = currentSurface->GetOpaqueRect(); // Try to annotate currentSurface with a region of pixels that have been @@ -1659,14 +1675,17 @@ BasicLayerManager::PaintLayer(Layer* aLayer, !transform.HasNonAxisAlignedTransform()) { const nsIntRect& bounds = visibleRegion.GetBounds(); currentSurface->SetOpaqueRect( - mTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height))); + aTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height))); pushedTargetOpaqueRect = PR_TRUE; } PRBool needsClipToVisibleRegion = PR_FALSE; + nsRefPtr groupTarget; if (needsGroup) { - needsClipToVisibleRegion = - PushGroupForLayer(mTarget, aLayer, aLayer->GetEffectiveVisibleRegion()); + groupTarget = PushGroupForLayer(aTarget, aLayer, aLayer->GetEffectiveVisibleRegion(), + &needsClipToVisibleRegion); + } else { + groupTarget = aTarget; } /* Only paint ourself, or our children - This optimization relies on this! */ @@ -1678,9 +1697,9 @@ BasicLayerManager::PaintLayer(Layer* aLayer, (void*)aLayer, data->IsHidden())); #endif if (aLayer->AsThebesLayer()) { - data->PaintThebes(mTarget, aCallback, aCallbackData, aReadback); + data->PaintThebes(groupTarget, aCallback, aCallbackData, aReadback); } else { - data->Paint(mTarget); + data->Paint(groupTarget); } } else { ReadbackProcessor readback; @@ -1690,29 +1709,29 @@ BasicLayerManager::PaintLayer(Layer* aLayer, } for (; child; child = child->GetNextSibling()) { - PaintLayer(child, aCallback, aCallbackData, &readback); + PaintLayer(groupTarget, child, aCallback, aCallbackData, &readback); if (mTransactionIncomplete) break; } } if (needsGroup) { - mTarget->PopGroupToSource(); + PopGroupToSourceWithCachedSurface(aTarget, groupTarget); // If we're doing our own double-buffering, we need to avoid drawing // the results of an incomplete transaction to the destination surface --- // that could cause flicker. Double-buffering is implemented using a // temporary surface for one or more container layers, so we need to stop - // those temporary surfaces from being composited to mTarget. + // those temporary surfaces from being composited to aTarget. // ApplyDoubleBuffering guarantees that this container layer can't // intersect any other leaf layers, so if the transaction is not yet marked // incomplete, the contents of this container layer are the final contents // for the window. if (!mTransactionIncomplete) { if (needsClipToVisibleRegion) { - gfxUtils::ClipToRegion(mTarget, aLayer->GetEffectiveVisibleRegion()); + gfxUtils::ClipToRegion(aTarget, aLayer->GetEffectiveVisibleRegion()); } - AutoSetOperator setOperator(mTarget, container->GetOperator()); - mTarget->Paint(aLayer->GetEffectiveOpacity()); + AutoSetOperator setOperator(aTarget, container->GetOperator()); + aTarget->Paint(aLayer->GetEffectiveOpacity()); } } @@ -1721,9 +1740,9 @@ BasicLayerManager::PaintLayer(Layer* aLayer, } if (needsSaveRestore) { - mTarget->Restore(); + aTarget->Restore(); } else { - mTarget->SetMatrix(savedMatrix); + aTarget->SetMatrix(savedMatrix); } } diff --git a/gfx/layers/basic/BasicLayers.h b/gfx/layers/basic/BasicLayers.h index 41c684ffa88a..2704b9c30bf6 100644 --- a/gfx/layers/basic/BasicLayers.h +++ b/gfx/layers/basic/BasicLayers.h @@ -180,6 +180,13 @@ public: void SetTransactionIncomplete() { mTransactionIncomplete = true; } + already_AddRefed PushGroupForLayer(gfxContext* aContext, Layer* aLayer, + const nsIntRegion& aRegion, + PRBool* aNeedsClipToVisibleRegion); + already_AddRefed PushGroupWithCachedSurface(gfxContext *aTarget, + gfxASurface::gfxContentType aContent); + void PopGroupToSourceWithCachedSurface(gfxContext *aTarget, gfxContext *aPushed); + virtual PRBool IsCompositingCheap() { return PR_FALSE; } virtual bool HasShadowManagerInternal() const { return false; } bool HasShadowManager() const { return HasShadowManagerInternal(); } @@ -193,7 +200,8 @@ protected: #endif // Paints aLayer to mTarget. - void PaintLayer(Layer* aLayer, + void PaintLayer(gfxContext* aTarget, + Layer* aLayer, DrawThebesLayerCallback aCallback, void* aCallbackData, ReadbackProcessor* aReadback); @@ -201,12 +209,6 @@ protected: // Clear the contents of a layer void ClearLayer(Layer* aLayer); - already_AddRefed PushGroupWithCachedSurface(gfxContext *aTarget, - gfxASurface::gfxContentType aContent, - gfxPoint *aSavedOffset); - void PopGroupWithCachedSurface(gfxContext *aTarget, - const gfxPoint& aSavedOffset); - bool EndTransactionInternal(DrawThebesLayerCallback aCallback, void* aCallbackData); @@ -227,6 +229,7 @@ protected: BufferMode mDoubleBuffering; PRPackedBool mUsingDefaultTarget; + PRPackedBool mCachedSurfaceInUse; bool mTransactionIncomplete; }; diff --git a/gfx/thebes/gfxCachedTempSurface.cpp b/gfx/thebes/gfxCachedTempSurface.cpp index a165175e4780..b480174315ae 100644 --- a/gfx/thebes/gfxCachedTempSurface.cpp +++ b/gfx/thebes/gfxCachedTempSurface.cpp @@ -98,12 +98,12 @@ gfxCachedTempSurface::~gfxCachedTempSurface() already_AddRefed gfxCachedTempSurface::Get(gfxASurface::gfxContentType aContentType, - const gfxIntSize& aSize, + const gfxRect& aRect, gfxASurface* aSimilarTo) { if (mSurface) { /* Verify the current buffer is valid for this purpose */ - if (mSize.width < aSize.width || mSize.height < aSize.height + if (mSize.width < aRect.width || mSize.height < aRect.height || mSurface->GetContentType() != aContentType) { mSurface = nsnull; } else { @@ -114,8 +114,8 @@ gfxCachedTempSurface::Get(gfxASurface::gfxContentType aContentType, PRBool cleared = PR_FALSE; if (!mSurface) { - mSize = aSize; - mSurface = aSimilarTo->CreateSimilarSurface(aContentType, aSize); + mSize = gfxIntSize(PRInt32(NS_ceil(aRect.width)), PRInt32(NS_ceil(aRect.height))); + mSurface = aSimilarTo->CreateSimilarSurface(aContentType, mSize); if (!mSurface) return nsnull; @@ -124,9 +124,10 @@ gfxCachedTempSurface::Get(gfxASurface::gfxContentType aContentType, mType = aSimilarTo->GetType(); #endif } + mSurface->SetDeviceOffset(-aRect.TopLeft()); nsRefPtr ctx = new gfxContext(mSurface); - ctx->Rectangle(gfxRect(0, 0, aSize.width, aSize.height)); + ctx->Rectangle(aRect); ctx->Clip(); if (!cleared && aContentType != gfxASurface::CONTENT_COLOR) { ctx->SetOperator(gfxContext::OPERATOR_CLEAR); diff --git a/gfx/thebes/gfxCachedTempSurface.h b/gfx/thebes/gfxCachedTempSurface.h index b3dbce37f397..3904cbe32ffb 100644 --- a/gfx/thebes/gfxCachedTempSurface.h +++ b/gfx/thebes/gfxCachedTempSurface.h @@ -71,13 +71,15 @@ public: * different format. */ already_AddRefed Get(gfxASurface::gfxContentType aContentType, - const gfxIntSize& aSize, + const gfxRect& aRect, gfxASurface* aSimilarTo); void Expire() { mSurface = nsnull; } nsExpirationState* GetExpirationState() { return &mExpirationState; } ~gfxCachedTempSurface(); + PRBool IsSurface(gfxASurface* aSurface) { return mSurface == aSurface; } + private: nsRefPtr mSurface; gfxIntSize mSize; From bfdfab0931660c258f5e0ab397dec11a4719ff24 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 17 May 2011 11:42:19 +1200 Subject: [PATCH 151/282] Bug 647560. Remove unused MayHaveOverlappingOrTransparentLayers. r=tnikkel --- gfx/layers/basic/BasicLayers.cpp | 65 -------------------------------- 1 file changed, 65 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index 21a7fc4655ac..65c723a1aa10 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -1184,69 +1184,6 @@ ToInsideIntRect(const gfxRect& aRect) return nsIntRect(r.X(), r.Y(), r.Width(), r.Height()); } -/** - * Returns false if there is at most one leaf layer overlapping aBounds - * and that layer is opaque. - * aDirtyVisibleRegionInContainer is filled in only if we return false. - * It contains the union of the visible regions of leaf layers under aLayer. - */ -static PRBool -MayHaveOverlappingOrTransparentLayers(Layer* aLayer, - const nsIntRect& aBounds, - nsIntRegion* aDirtyVisibleRegionInContainer) -{ - if (static_cast(aLayer->ImplData())->IsHidden()) { - // This layer won't be painted, so just ignore it. - return PR_FALSE; - } - - if (!(aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE)) { - return PR_TRUE; - } - - gfxMatrix matrix; - if (!aLayer->GetTransform().Is2D(&matrix) || - matrix.HasNonIntegerTranslation()) { - return PR_TRUE; - } - - nsIntPoint translation = nsIntPoint(PRInt32(matrix.x0), PRInt32(matrix.y0)); - nsIntRect bounds = aBounds - translation; - - nsIntRect clippedDirtyRect = bounds; - const nsIntRect* clipRect = aLayer->GetClipRect(); - if (clipRect) { - clippedDirtyRect.IntersectRect(clippedDirtyRect, *clipRect - translation); - } - aDirtyVisibleRegionInContainer->And(aLayer->GetVisibleRegion(), clippedDirtyRect); - aDirtyVisibleRegionInContainer->MoveBy(translation); - - /* Ignore layers outside the clip rect */ - if (aDirtyVisibleRegionInContainer->IsEmpty()) { - return PR_FALSE; - } - - nsIntRegion region; - - for (Layer* child = aLayer->GetFirstChild(); child; - child = child->GetNextSibling()) { - nsIntRegion childRegion; - if (MayHaveOverlappingOrTransparentLayers(child, bounds, &childRegion)) { - return PR_TRUE; - } - - nsIntRegion tmp; - tmp.And(region, childRegion); - if (!tmp.IsEmpty()) { - return PR_TRUE; - } - - region.Or(region, childRegion); - } - - return PR_FALSE; -} - BasicLayerManager::BasicLayerManager(nsIWidget* aWidget) : #ifdef DEBUG mPhase(PHASE_NONE), @@ -1560,8 +1497,6 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, !(mTarget->GetFlags() & gfxContext::FLAG_DISABLE_SNAPPING); mRoot->ComputeEffectiveTransforms(gfx3DMatrix::From2D(mTarget->CurrentMatrix())); - // Need to do this before we call MayHaveOverlappingOrTransparentLayers, - // which uses information about which layers are going to be drawn. if (IsRetained()) { nsIntRegion region; MarkLayersHidden(mRoot, clipRect, clipRect, region, ALLOW_OPAQUE); From 2f6db18989f18c09f4037602e6ca3fb42216dba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20=C3=81vila=20de=20Esp=C3=ADndola?= Date: Mon, 16 May 2011 21:07:06 -0400 Subject: [PATCH 152/282] Bug 657528 - Use a volatile pointer to force a trap; r=ehsan Clang issues the warning: mozalloc_abort.cpp:64:22: warning: indirection of non-volatile null pointer will be deleted, not trap [-Wnull-dereference] And sure enough, TouchBadMemory is currently broken with clang. That breaks mozalloc_abort which breaks NS_DebugBreak which breaks the crashreport test. --- memory/mozalloc/mozalloc_abort.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/memory/mozalloc/mozalloc_abort.cpp b/memory/mozalloc/mozalloc_abort.cpp index 8da70acd8720..d87f8a0b2085 100644 --- a/memory/mozalloc/mozalloc_abort.cpp +++ b/memory/mozalloc/mozalloc_abort.cpp @@ -61,8 +61,9 @@ static void TouchBadMemory() { // XXX this should use the frame poisoning code - gDummyCounter += *((int *) 0); // TODO annotation saying we know - // this is crazy + volatile int *p = 0; + gDummyCounter += *p; // TODO annotation saying we know + // this is crazy } void From 26bbeb07e57152367b7b40218ec4609cfca145a2 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 17 May 2011 19:03:02 +1200 Subject: [PATCH 153/282] Bug 656749. Fix Mac test failure --- modules/plugin/test/mochitest/test_zero_opacity.html | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/plugin/test/mochitest/test_zero_opacity.html b/modules/plugin/test/mochitest/test_zero_opacity.html index fad5c9db45b6..4e9aa7865fe2 100644 --- a/modules/plugin/test/mochitest/test_zero_opacity.html +++ b/modules/plugin/test/mochitest/test_zero_opacity.html @@ -17,6 +17,12 @@ var p = document.getElementById('theplugin'); function startTest() { + if (!p.hasWidget()) { + todo(false, "This test is only relevant for windowed plugins"); + SimpleTest.finish(); + return; + } + // Wait for the plugin to have painted once. var interval = setInterval(function() { if (!p.getPaintCount()) @@ -29,10 +35,6 @@ } function doTest() { - if (!p.hasWidget()) { - todo(false, "This test is only relevant for windowed plugins"); - return; - } is(p.getClipRegionRectCount(), 1, "getClipRegionRectCount should be a single rect"); is(p.getClipRegionRectEdge(0,2) - p.getClipRegionRectEdge(0,0), 100, "width of clip region rect"); is(p.getClipRegionRectEdge(0,3) - p.getClipRegionRectEdge(0,1), 50, "height of clip region rect"); From 78538a4bce9aeeb584bcd0e1c2140da26754f805 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 17 May 2011 19:05:23 +1200 Subject: [PATCH 154/282] Backout 647560 --- changesets 32a13c864e55 c2dbc3747034 3d845440cbc7 13c5fa1bdfb0 8cf18f0d9e7e 863cd05ae581 --- gfx/layers/basic/BasicLayers.cpp | 550 ++++++++++------------------ gfx/layers/basic/BasicLayers.h | 21 +- gfx/thebes/gfxCachedTempSurface.cpp | 11 +- gfx/thebes/gfxCachedTempSurface.h | 4 +- 4 files changed, 215 insertions(+), 371 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index 65c723a1aa10..bdae2c8e90e1 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -92,7 +92,7 @@ class ShadowableLayer; */ class BasicImplData { public: - BasicImplData() : mHidden(PR_FALSE), mOperator(gfxContext::OPERATOR_OVER) + BasicImplData() { MOZ_COUNT_CTOR(BasicImplData); } @@ -136,45 +136,16 @@ public: virtual void ClearCachedResources() {} /** - * This variable is set by MarkLayersHidden() before painting. It indicates - * that the layer should not be composited during this transaction. + * This variable is used by layer manager in order to + * MarkLeafLayersCoveredByOpaque() before painting. + * We keep it here for now. Once we need to cull completely covered + * non-Basic layers, mCoveredByOpaque should be moved to Layer. */ - void SetHidden(PRBool aCovered) { mHidden = aCovered; } - PRBool IsHidden() const { return PR_FALSE; } - /** - * This variable is set by MarkLayersHidden() before painting. This is - * the operator to be used when compositing the layer in this transaction. It must - * be OVER or SOURCE. - */ - void SetOperator(gfxContext::GraphicsOperator aOperator) - { - NS_ASSERTION(aOperator == gfxContext::OPERATOR_OVER || - aOperator == gfxContext::OPERATOR_SOURCE, - "Bad composition operator"); - mOperator = aOperator; - } - gfxContext::GraphicsOperator GetOperator() const { return mOperator; } + void SetCoveredByOpaque(PRBool aCovered) { mCoveredByOpaque = aCovered; } + PRBool IsCoveredByOpaque() const { return mCoveredByOpaque; } protected: - PRPackedBool mHidden; - gfxContext::GraphicsOperator mOperator; -}; - -class AutoSetOperator { -public: - AutoSetOperator(gfxContext* aContext, gfxContext::GraphicsOperator aOperator) { - if (aOperator != gfxContext::OPERATOR_OVER) { - aContext->SetOperator(aOperator); - mContext = aContext; - } - } - ~AutoSetOperator() { - if (mContext) { - mContext->SetOperator(gfxContext::OPERATOR_OVER); - } - } -private: - nsRefPtr mContext; + PRPackedBool mCoveredByOpaque; }; static BasicImplData* @@ -188,7 +159,7 @@ static void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aConta template static void ContainerRemoveChild(Layer* aChild, Container* aContainer); -class BasicContainerLayer : public ContainerLayer, public BasicImplData { +class BasicContainerLayer : public ContainerLayer, BasicImplData { template friend void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aContainer); template @@ -242,23 +213,6 @@ public: mUseIntermediateSurface = GetEffectiveOpacity() != 1.0 && HasMultipleChildren(); } - /** - * Returns true when: - * a) no (non-hidden) childrens' visible areas overlap in - * (aInRect intersected with this layer's visible region). - * b) the (non-hidden) childrens' visible areas cover - * (aInRect intersected with this layer's visible region). - * c) this layer and all (non-hidden) children have transforms that are translations - * by integers. - * aInRect is in the root coordinate system. - * Child layers with opacity do not contribute to the covered area in check b). - * This method can be conservative; it's OK to return false under any - * circumstances. - */ - PRBool ChildrenPartitionVisibleRegion(const nsIntRect& aInRect); - - void ForceIntermediateSurface() { mUseIntermediateSurface = PR_TRUE; } - protected: BasicLayerManager* BasicManager() { @@ -275,43 +229,6 @@ BasicContainerLayer::~BasicContainerLayer() MOZ_COUNT_DTOR(BasicContainerLayer); } -PRBool -BasicContainerLayer::ChildrenPartitionVisibleRegion(const nsIntRect& aInRect) -{ - gfxMatrix transform; - if (!GetEffectiveTransform().Is2D(&transform) || - transform.HasNonIntegerTranslation()) - return PR_FALSE; - - nsIntPoint offset(PRInt32(transform.x0), PRInt32(transform.y0)); - nsIntRect rect = aInRect.Intersect(GetEffectiveVisibleRegion().GetBounds() + offset); - nsIntRegion covered; - - for (Layer* l = mFirstChild; l; l = l->GetNextSibling()) { - if (ToData(l)->IsHidden()) - continue; - - gfxMatrix childTransform; - if (!l->GetEffectiveTransform().Is2D(&childTransform) || - childTransform.HasNonIntegerTranslation() || - l->GetEffectiveOpacity() != 1.0) - return PR_FALSE; - nsIntRegion childRegion = l->GetEffectiveVisibleRegion(); - childRegion.MoveBy(PRInt32(childTransform.x0), PRInt32(childTransform.y0)); - childRegion.And(childRegion, rect); - if (l->GetClipRect()) { - childRegion.And(childRegion, *l->GetClipRect() + offset); - } - nsIntRegion intersection; - intersection.And(covered, childRegion); - if (!intersection.IsEmpty()) - return PR_FALSE; - covered.Or(covered, childRegion); - } - - return covered.Contains(rect); -} - template static void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aContainer) @@ -444,7 +361,7 @@ private: BasicThebesLayer* mLayer; }; -class BasicThebesLayer : public ThebesLayer, public BasicImplData { +class BasicThebesLayer : public ThebesLayer, BasicImplData { public: typedef BasicThebesLayerBuffer Buffer; @@ -583,16 +500,15 @@ SetAntialiasingFlags(Layer* aLayer, gfxContext* aTarget) aTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height)))); } -already_AddRefed -BasicLayerManager::PushGroupForLayer(gfxContext* aContext, Layer* aLayer, - const nsIntRegion& aRegion, - PRBool* aNeedsClipToVisibleRegion) +static PRBool +PushGroupForLayer(gfxContext* aContext, Layer* aLayer, const nsIntRegion& aRegion) { // If we need to call PushGroup, we should clip to the smallest possible // area first to minimize the size of the temporary surface. PRBool didCompleteClip = ClipToContain(aContext, aRegion.GetBounds()); - nsRefPtr result; + gfxASurface::gfxContentType contentType = gfxASurface::CONTENT_COLOR_ALPHA; + PRBool needsClipToVisibleRegion = PR_FALSE; if (aLayer->CanUseOpaqueSurface() && ((didCompleteClip && aRegion.GetNumRects() == 1) || !aContext->CurrentMatrix().HasNonIntegerTranslation())) { @@ -600,14 +516,11 @@ BasicLayerManager::PushGroupForLayer(gfxContext* aContext, Layer* aLayer, // group. We need to make sure that only pixels inside the layer's visible // region are copied back to the destination. Remember if we've already // clipped precisely to the visible region. - *aNeedsClipToVisibleRegion = !didCompleteClip || aRegion.GetNumRects() > 1; - result = PushGroupWithCachedSurface(aContext, gfxASurface::CONTENT_COLOR); - } else { - *aNeedsClipToVisibleRegion = PR_FALSE; - result = aContext; - aContext->PushGroupAndCopyBackground(gfxASurface::CONTENT_COLOR_ALPHA); + needsClipToVisibleRegion = !didCompleteClip || aRegion.GetNumRects() > 1; + contentType = gfxASurface::CONTENT_COLOR; } - return result.forget(); + aContext->PushGroupAndCopyBackground(contentType); + return needsClipToVisibleRegion; } void @@ -640,8 +553,8 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, mValidRegion.SetEmpty(); mBuffer.Clear(); - nsIntRegion toDraw = IntersectWithClip(GetEffectiveVisibleRegion(), aContext); - if (!toDraw.IsEmpty() && !IsHidden()) { + nsIntRegion toDraw = IntersectWithClip(mVisibleRegion, aContext); + if (!toDraw.IsEmpty()) { if (!aCallback) { BasicManager()->SetTransactionIncomplete(); return; @@ -650,27 +563,16 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, aContext->Save(); PRBool needsClipToVisibleRegion = PR_FALSE; - PRBool needsGroup = - opacity != 1.0 || GetOperator() != gfxContext::OPERATOR_OVER; - nsRefPtr groupContext; - if (needsGroup) { - groupContext = - BasicManager()->PushGroupForLayer(aContext, this, toDraw, - &needsClipToVisibleRegion); - if (GetOperator() != gfxContext::OPERATOR_OVER) { - needsClipToVisibleRegion = PR_TRUE; - } - } else { - groupContext = aContext; + if (opacity != 1.0) { + needsClipToVisibleRegion = PushGroupForLayer(aContext, this, toDraw); } - SetAntialiasingFlags(this, groupContext); - aCallback(this, groupContext, toDraw, nsIntRegion(), aCallbackData); - if (needsGroup) { - BasicManager()->PopGroupToSourceWithCachedSurface(aContext, groupContext); + SetAntialiasingFlags(this, aContext); + aCallback(this, aContext, toDraw, nsIntRegion(), aCallbackData); + if (opacity != 1.0) { + aContext->PopGroupToSource(); if (needsClipToVisibleRegion) { gfxUtils::ClipToRegion(aContext, toDraw); } - AutoSetOperator setOperator(aContext, GetOperator()); aContext->Paint(opacity); } @@ -699,8 +601,7 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, // (this could be the whole visible area if our buffer switched // from RGB to RGBA, because we might need to repaint with // subpixel AA) - state.mRegionToInvalidate.And(state.mRegionToInvalidate, - GetEffectiveVisibleRegion()); + state.mRegionToInvalidate.And(state.mRegionToInvalidate, mVisibleRegion); nsIntRegion extendedDrawRegion = state.mRegionToDraw; extendedDrawRegion.ExtendForScaling(paintXRes, paintYRes); mXResolution = paintXRes; @@ -719,10 +620,7 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, } } - if (!IsHidden()) { - AutoSetOperator setOperator(aContext, GetOperator()); - mBuffer.DrawTo(this, aContext, opacity); - } + mBuffer.DrawTo(this, aContext, opacity); for (PRUint32 i = 0; i < readbackUpdates.Length(); ++i) { ReadbackProcessor::Update& update = readbackUpdates[i]; @@ -758,13 +656,13 @@ BasicThebesLayerBuffer::DrawTo(ThebesLayer* aLayer, // no need to clip. But we'll still clip if clipping is cheap --- // that might let us copy a smaller region of the buffer. if (!aLayer->GetValidRegion().Contains(BufferRect()) || - IsClippingCheap(aTarget, aLayer->GetEffectiveVisibleRegion())) { + IsClippingCheap(aTarget, aLayer->GetVisibleRegion())) { // We don't want to draw invalid stuff, so we need to clip. Might as // well clip to the smallest area possible --- the visible region. // Bug 599189 if there is a non-integer-translation transform in aTarget, - // we might sample pixels outside GetEffectiveVisibleRegion(), which is wrong + // we might sample pixels outside GetVisibleRegion(), which is wrong // and may cause gray lines. - gfxUtils::ClipToRegionSnapped(aTarget, aLayer->GetEffectiveVisibleRegion()); + gfxUtils::ClipToRegionSnapped(aTarget, aLayer->GetVisibleRegion()); } DrawBufferWithRotation(aTarget, aOpacity, aLayer->GetXResolution(), aLayer->GetYResolution()); @@ -797,7 +695,7 @@ BasicThebesLayerBuffer::SetBackingBufferAndUpdateFrom( srcBuffer.DrawBufferWithRotation(destCtx, 1.0, aXResolution, aYResolution); } -class BasicImageLayer : public ImageLayer, public BasicImplData { +class BasicImageLayer : public ImageLayer, BasicImplData { public: BasicImageLayer(BasicLayerManager* aLayerManager) : ImageLayer(aLayerManager, static_cast(this)), @@ -841,8 +739,6 @@ protected: void BasicImageLayer::Paint(gfxContext* aContext) { - if (IsHidden()) - return; nsRefPtr dontcare = GetAndPaintCurrentImage(aContext, GetEffectiveOpacity()); } @@ -872,7 +768,6 @@ BasicImageLayer::GetAndPaintCurrentImage(gfxContext* aContext, // tiling, we don't want to draw into that area, so just draw within // the image bounds. const nsIntRect* tileSrcRect = GetTileSourceRect(); - AutoSetOperator setOperator(aContext, GetOperator()); PaintContext(pat, tileSrcRect ? GetVisibleRegion() : nsIntRegion(nsIntRect(0, 0, mSize.width, mSize.height)), tileSrcRect, @@ -934,7 +829,7 @@ BasicImageLayer::PaintContext(gfxPattern* aPattern, aPattern->SetExtend(extend); } -class BasicColorLayer : public ColorLayer, public BasicImplData { +class BasicColorLayer : public ColorLayer, BasicImplData { public: BasicColorLayer(BasicLayerManager* aLayerManager) : ColorLayer(aLayerManager, static_cast(this)) @@ -955,9 +850,6 @@ public: virtual void Paint(gfxContext* aContext) { - if (IsHidden()) - return; - AutoSetOperator setOperator(aContext, GetOperator()); PaintColorTo(mColor, GetEffectiveOpacity(), aContext); } @@ -980,7 +872,7 @@ BasicColorLayer::PaintColorTo(gfxRGBA aColor, float aOpacity, } class BasicCanvasLayer : public CanvasLayer, - public BasicImplData + BasicImplData { public: BasicCanvasLayer(BasicLayerManager* aLayerManager) : @@ -1102,8 +994,6 @@ BasicCanvasLayer::UpdateSurface() void BasicCanvasLayer::Paint(gfxContext* aContext) { - if (IsHidden()) - return; UpdateSurface(); FireDidTransactionCallback(); PaintWithOpacity(aContext, GetEffectiveOpacity()); @@ -1128,7 +1018,6 @@ BasicCanvasLayer::PaintWithOpacity(gfxContext* aContext, aContext->Scale(1.0, -1.0); } - AutoSetOperator setOperator(aContext, GetOperator()); aContext->NewPath(); // No need to snap here; our transform is already set up to snap our rect aContext->Rectangle(gfxRect(0, 0, mBounds.width, mBounds.height)); @@ -1141,7 +1030,7 @@ BasicCanvasLayer::PaintWithOpacity(gfxContext* aContext, } class BasicReadbackLayer : public ReadbackLayer, - public BasicImplData + BasicImplData { public: BasicReadbackLayer(BasicLayerManager* aLayerManager) : @@ -1184,6 +1073,64 @@ ToInsideIntRect(const gfxRect& aRect) return nsIntRect(r.X(), r.Y(), r.Width(), r.Height()); } +/** + * Returns false if there is at most one leaf layer overlapping aBounds + * and that layer is opaque. + * aDirtyVisibleRegionInContainer is filled in only if we return false. + * It contains the union of the visible regions of leaf layers under aLayer. + */ +static PRBool +MayHaveOverlappingOrTransparentLayers(Layer* aLayer, + const nsIntRect& aBounds, + nsIntRegion* aDirtyVisibleRegionInContainer) +{ + if (!(aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE)) { + return PR_TRUE; + } + + gfxMatrix matrix; + if (!aLayer->GetTransform().Is2D(&matrix) || + matrix.HasNonIntegerTranslation()) { + return PR_TRUE; + } + + nsIntPoint translation = nsIntPoint(PRInt32(matrix.x0), PRInt32(matrix.y0)); + nsIntRect bounds = aBounds - translation; + + nsIntRect clippedDirtyRect = bounds; + const nsIntRect* clipRect = aLayer->GetClipRect(); + if (clipRect) { + clippedDirtyRect.IntersectRect(clippedDirtyRect, *clipRect - translation); + } + aDirtyVisibleRegionInContainer->And(aLayer->GetVisibleRegion(), clippedDirtyRect); + aDirtyVisibleRegionInContainer->MoveBy(translation); + + /* Ignore layers outside the clip rect */ + if (aDirtyVisibleRegionInContainer->IsEmpty()) { + return PR_FALSE; + } + + nsIntRegion region; + + for (Layer* child = aLayer->GetFirstChild(); child; + child = child->GetNextSibling()) { + nsIntRegion childRegion; + if (MayHaveOverlappingOrTransparentLayers(child, bounds, &childRegion)) { + return PR_TRUE; + } + + nsIntRegion tmp; + tmp.And(region, childRegion); + if (!tmp.IsEmpty()) { + return PR_TRUE; + } + + region.Or(region, childRegion); + } + + return PR_FALSE; +} + BasicLayerManager::BasicLayerManager(nsIWidget* aWidget) : #ifdef DEBUG mPhase(PHASE_NONE), @@ -1192,7 +1139,6 @@ BasicLayerManager::BasicLayerManager(nsIWidget* aWidget) : , mYResolution(1.0) , mWidget(aWidget) , mDoubleBuffering(BUFFER_NONE), mUsingDefaultTarget(PR_FALSE) - , mCachedSurfaceInUse(PR_FALSE) , mTransactionIncomplete(false) { MOZ_COUNT_CTOR(BasicLayerManager); @@ -1239,15 +1185,9 @@ BasicLayerManager::BeginTransaction() already_AddRefed BasicLayerManager::PushGroupWithCachedSurface(gfxContext *aTarget, - gfxASurface::gfxContentType aContent) + gfxASurface::gfxContentType aContent, + gfxPoint *aSavedOffset) { - if (mCachedSurfaceInUse) { - aTarget->PushGroup(aContent); - nsRefPtr result = aTarget; - return result.forget(); - } - mCachedSurfaceInUse = PR_TRUE; - gfxContextMatrixAutoSaveRestore saveMatrix(aTarget); aTarget->IdentityMatrix(); @@ -1255,26 +1195,29 @@ BasicLayerManager::PushGroupWithCachedSurface(gfxContext *aTarget, gfxRect clip = aTarget->GetClipExtents(); clip.RoundOut(); - nsRefPtr ctx = mCachedSurface.Get(aContent, clip, currentSurf); + nsRefPtr ctx = + mCachedSurface.Get(aContent, + gfxIntSize(clip.Width(), clip.Height()), + currentSurf); /* Align our buffer for the original surface */ - ctx->SetMatrix(saveMatrix.Matrix()); + ctx->Translate(-clip.TopLeft()); + *aSavedOffset = clip.TopLeft(); + ctx->Multiply(saveMatrix.Matrix()); return ctx.forget(); } void -BasicLayerManager::PopGroupToSourceWithCachedSurface(gfxContext *aTarget, gfxContext *aPushed) +BasicLayerManager::PopGroupWithCachedSurface(gfxContext *aTarget, + const gfxPoint& aSavedOffset) { - if (!aTarget) + if (!mTarget) return; - nsRefPtr current = aPushed->CurrentSurface(); - if (mCachedSurface.IsSurface(current)) { - gfxContextMatrixAutoSaveRestore saveMatrix(aTarget); - aTarget->IdentityMatrix(); - aTarget->SetSource(current); - mCachedSurfaceInUse = PR_FALSE; - } else { - aTarget->PopGroupToSource(); - } + + gfxContextMatrixAutoSaveRestore saveMatrix(aTarget); + aTarget->IdentityMatrix(); + + aTarget->SetSource(mTarget->OriginalSurface(), aSavedOffset); + aTarget->Paint(); } void @@ -1301,36 +1244,25 @@ TransformIntRect(nsIntRect& aRect, const gfxMatrix& aMatrix, aRect = (*aRoundMethod)(gr); } -/** - * This function assumes that GetEffectiveTransform transforms - * all layers to the same coordinate system (the "root coordinate system"). - * It can't be used as is by accelerated layers because of intermediate surfaces. - * This must set the hidden flag to true or false on *all* layers in the subtree. - * It also sets the operator for all layers to "OVER". - * @param aClipRect the cliprect, in the root coordinate system. We assume - * that any layer drawing is clipped to this rect. It is therefore not - * allowed to add to the opaque region outside that rect. - * @param aDirtyRect the dirty rect that will be painted, in the root - * coordinate system. Layers outside this rect should be hidden. - * @param aOpaqueRegion the opaque region covering aLayer, in the - * root coordinate system. - */ -enum { - ALLOW_OPAQUE = 0x01, -}; +// This implementation assumes that GetEffectiveTransform transforms +// all layers to the same coordinate system. It can't be used as is +// by accelerated layers because of intermediate surfaces. +// aClipRect and aRegion are in that global coordinate system. static void -MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, - const nsIntRect& aDirtyRect, - nsIntRegion& aOpaqueRegion, - PRUint32 aFlags) +MarkLeafLayersCoveredByOpaque(Layer* aLayer, const nsIntRect& aClipRect, + nsIntRegion& aRegion) { + Layer* child = aLayer->GetLastChild(); + BasicImplData* data = ToData(aLayer); + data->SetCoveredByOpaque(PR_FALSE); + nsIntRect newClipRect(aClipRect); - PRUint32 newFlags = aFlags; // Allow aLayer or aLayer's descendants to cover underlying layers - // only if it's opaque. + // only if it's opaque. GetEffectiveOpacity() could be used instead, + // but it does extra passes from descendant to ancestor. if (aLayer->GetOpacity() != 1.0f) { - newFlags &= ~ALLOW_OPAQUE; + newClipRect.SetRect(0, 0, 0, 0); } { @@ -1342,8 +1274,6 @@ MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, if (aLayer->GetParent()) { gfxMatrix tr; if (aLayer->GetParent()->GetEffectiveTransform().Is2D(&tr)) { - // Clip rect is applied after aLayer's transform, i.e., in the coordinate - // system of aLayer's parent. TransformIntRect(cr, tr, ToInsideIntRect); } else { cr.SetRect(0, 0, 0, 0); @@ -1353,102 +1283,36 @@ MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, } } - BasicImplData* data = ToData(aLayer); - data->SetOperator(gfxContext::OPERATOR_OVER); - - if (!aLayer->AsContainerLayer()) { + if (!child) { gfxMatrix transform; if (!aLayer->GetEffectiveTransform().Is2D(&transform)) { - data->SetHidden(PR_FALSE); return; } nsIntRegion region = aLayer->GetEffectiveVisibleRegion(); nsIntRect r = region.GetBounds(); TransformIntRect(r, transform, ToOutsideIntRect); - r.IntersectRect(r, aDirtyRect); - data->SetHidden(aOpaqueRegion.Contains(r)); + data->SetCoveredByOpaque(aRegion.Contains(r)); // Allow aLayer to cover underlying layers only if aLayer's // content is opaque - if ((aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE) && - (newFlags & ALLOW_OPAQUE)) { - nsIntRegionRectIterator it(region); - while (const nsIntRect* sr = it.Next()) { - r = *sr; - TransformIntRect(r, transform, ToInsideIntRect); + if (!(aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE)) { + return; + } - r.IntersectRect(r, newClipRect); - aOpaqueRegion.Or(aOpaqueRegion, r); + nsIntRegionRectIterator it(region); + while (const nsIntRect* sr = it.Next()) { + r = *sr; + TransformIntRect(r, transform, ToInsideIntRect); + + r.IntersectRect(r, newClipRect); + if (!r.IsEmpty()) { + aRegion.Or(aRegion, r); } } } else { - Layer* child = aLayer->GetLastChild(); - PRBool allHidden = PR_TRUE; for (; child; child = child->GetPrevSibling()) { - MarkLayersHidden(child, newClipRect, aDirtyRect, aOpaqueRegion, newFlags); - if (!ToData(child)->IsHidden()) { - allHidden = PR_FALSE; - } - } - data->SetHidden(allHidden); - } -} - -/** - * This function assumes that GetEffectiveTransform transforms - * all layers to the same coordinate system (the "root coordinate system"). - * MarkLayersHidden must be called before calling this. - * @param aVisibleRect the rectangle of aLayer that is visible (i.e. not - * clipped and in the dirty rect), in the root coordinate system. - */ -static void -ApplyDoubleBuffering(Layer* aLayer, const nsIntRect& aVisibleRect) -{ - BasicImplData* data = ToData(aLayer); - if (data->IsHidden()) - return; - - nsIntRect newVisibleRect(aVisibleRect); - - { - const nsIntRect* clipRect = aLayer->GetEffectiveClipRect(); - if (clipRect) { - nsIntRect cr = *clipRect; - // clipRect is in the container's coordinate system. Get it into the - // global coordinate system. - if (aLayer->GetParent()) { - gfxMatrix tr; - if (aLayer->GetParent()->GetEffectiveTransform().Is2D(&tr)) { - NS_ASSERTION(!tr.HasNonIntegerTranslation(), - "Parent can only have an integer translation"); - cr += nsIntPoint(PRInt32(tr.x0), PRInt32(tr.y0)); - } else { - NS_ERROR("Parent can only have an integer translation"); - } - } - newVisibleRect.IntersectRect(newVisibleRect, cr); - } - } - - BasicContainerLayer* container = - static_cast(aLayer->AsContainerLayer()); - // Layers that act as their own backbuffers should be drawn to the destination - // using OPERATOR_SOURCE to ensure that alpha values in a transparent window - // are cleared. This can also be faster than OPERATOR_OVER. - if (!container) { - data->SetOperator(gfxContext::OPERATOR_SOURCE); - } else { - if (container->UseIntermediateSurface() || - !container->ChildrenPartitionVisibleRegion(newVisibleRect)) { - // We need to double-buffer this container. - data->SetOperator(gfxContext::OPERATOR_SOURCE); - container->ForceIntermediateSurface(); - } else { - for (Layer* child = aLayer->GetFirstChild(); child; - child = child->GetNextSibling()) { - ApplyDoubleBuffering(child, newVisibleRect); - } + MarkLeafLayersCoveredByOpaque(child, newClipRect, aRegion); } } } @@ -1477,39 +1341,50 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, mTransactionIncomplete = false; if (mTarget && mRoot) { - nsIntRect clipRect; - if (HasShadowManager()) { - // If this has a shadow manager, the clip extents of mTarget are meaningless. - // So instead just use the root layer's visible region bounds. - const nsIntRect& bounds = mRoot->GetVisibleRegion().GetBounds(); - gfxRect deviceRect = - mTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height)); - clipRect = ToOutsideIntRect(deviceRect); - } else { - gfxContextMatrixAutoSaveRestore save(mTarget); - mTarget->SetMatrix(gfxMatrix()); - clipRect = ToOutsideIntRect(mTarget->GetClipExtents()); + nsRefPtr finalTarget = mTarget; + gfxPoint cachedSurfaceOffset; + + nsIntRegion rootRegion; + PRBool useDoubleBuffering = mUsingDefaultTarget && + mDoubleBuffering != BUFFER_NONE && + MayHaveOverlappingOrTransparentLayers(mRoot, + ToOutsideIntRect(mTarget->GetClipExtents()), + &rootRegion); + if (useDoubleBuffering) { + nsRefPtr targetSurface = mTarget->CurrentSurface(); + mTarget = PushGroupWithCachedSurface(mTarget, targetSurface->GetContentType(), + &cachedSurfaceOffset); } - // Need to do this before we call ApplyDoubleBuffering, - // which depends on correct effective transforms mSnapEffectiveTransforms = !(mTarget->GetFlags() & gfxContext::FLAG_DISABLE_SNAPPING); mRoot->ComputeEffectiveTransforms(gfx3DMatrix::From2D(mTarget->CurrentMatrix())); - if (IsRetained()) { - nsIntRegion region; - MarkLayersHidden(mRoot, clipRect, clipRect, region, ALLOW_OPAQUE); - if (mUsingDefaultTarget && mDoubleBuffering != BUFFER_NONE) { - ApplyDoubleBuffering(mRoot, clipRect); - } - } + nsIntRegion region; + MarkLeafLayersCoveredByOpaque(mRoot, + mRoot->GetEffectiveVisibleRegion().GetBounds(), + region); + PaintLayer(mRoot, aCallback, aCallbackData, nsnull); - PaintLayer(mTarget, mRoot, aCallback, aCallbackData, nsnull); + // If we're doing manual double-buffering, we need to avoid drawing + // the results of an incomplete transaction to the destination surface. + // If the transaction is incomplete and we're not double-buffering then + // either the system is double-buffering our window (in which case the + // followup EndTransaction will be drawn over the top of our incomplete + // transaction before the system updates the window), or we have no + // overlapping or transparent layers in the update region, in which case + // our partial transaction drawing will look fine. + if (useDoubleBuffering && !mTransactionIncomplete) { + finalTarget->SetOperator(gfxContext::OPERATOR_SOURCE); + PopGroupWithCachedSurface(finalTarget, cachedSurfaceOffset); + } if (!mTransactionIncomplete) { // Clear out target if we have a complete transaction. mTarget = nsnull; + } else { + // If we don't have a complete transaction set back to the old mTarget. + mTarget = finalTarget; } } @@ -1558,36 +1433,30 @@ BasicLayerManager::SetRoot(Layer* aLayer) } void -BasicLayerManager::PaintLayer(gfxContext* aTarget, - Layer* aLayer, +BasicLayerManager::PaintLayer(Layer* aLayer, DrawThebesLayerCallback aCallback, void* aCallbackData, ReadbackProcessor* aReadback) { const nsIntRect* clipRect = aLayer->GetEffectiveClipRect(); const gfx3DMatrix& effectiveTransform = aLayer->GetEffectiveTransform(); - BasicContainerLayer* container = static_cast(aLayer); PRBool needsGroup = aLayer->GetFirstChild() && - container->UseIntermediateSurface(); - NS_ASSERTION(needsGroup || !aLayer->GetFirstChild() || - container->GetOperator() == gfxContext::OPERATOR_OVER, - "non-OVER operator should have forced UseIntermediateSurface"); - + static_cast(aLayer)->UseIntermediateSurface(); // If needsSaveRestore is false, we should still save and restore // the CTM PRBool needsSaveRestore = needsGroup || clipRect; gfxMatrix savedMatrix; if (needsSaveRestore) { - aTarget->Save(); + mTarget->Save(); if (clipRect) { - aTarget->NewPath(); - aTarget->Rectangle(gfxRect(clipRect->x, clipRect->y, clipRect->width, clipRect->height), PR_TRUE); - aTarget->Clip(); + mTarget->NewPath(); + mTarget->Rectangle(gfxRect(clipRect->x, clipRect->y, clipRect->width, clipRect->height), PR_TRUE); + mTarget->Clip(); } } else { - savedMatrix = aTarget->CurrentMatrix(); + savedMatrix = mTarget->CurrentMatrix(); } gfxMatrix transform; @@ -1596,11 +1465,11 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget, NS_ASSERTION(effectiveTransform.Is2D(), "Only 2D transforms supported currently"); effectiveTransform.Is2D(&transform); - aTarget->SetMatrix(transform); + mTarget->SetMatrix(transform); PRBool pushedTargetOpaqueRect = PR_FALSE; const nsIntRegion& visibleRegion = aLayer->GetEffectiveVisibleRegion(); - nsRefPtr currentSurface = aTarget->CurrentSurface(); + nsRefPtr currentSurface = mTarget->CurrentSurface(); const gfxRect& targetOpaqueRect = currentSurface->GetOpaqueRect(); // Try to annotate currentSurface with a region of pixels that have been @@ -1610,17 +1479,14 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget, !transform.HasNonAxisAlignedTransform()) { const nsIntRect& bounds = visibleRegion.GetBounds(); currentSurface->SetOpaqueRect( - aTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height))); + mTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height))); pushedTargetOpaqueRect = PR_TRUE; } PRBool needsClipToVisibleRegion = PR_FALSE; - nsRefPtr groupTarget; if (needsGroup) { - groupTarget = PushGroupForLayer(aTarget, aLayer, aLayer->GetEffectiveVisibleRegion(), - &needsClipToVisibleRegion); - } else { - groupTarget = aTarget; + needsClipToVisibleRegion = + PushGroupForLayer(mTarget, aLayer, aLayer->GetEffectiveVisibleRegion()); } /* Only paint ourself, or our children - This optimization relies on this! */ @@ -1629,12 +1495,14 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget, BasicImplData* data = ToData(aLayer); #ifdef MOZ_LAYERS_HAVE_LOG MOZ_LAYERS_LOG(("%s (0x%p) is covered: %i\n", __FUNCTION__, - (void*)aLayer, data->IsHidden())); + (void*)aLayer, data->IsCoveredByOpaque())); #endif - if (aLayer->AsThebesLayer()) { - data->PaintThebes(groupTarget, aCallback, aCallbackData, aReadback); - } else { - data->Paint(groupTarget); + if (!data->IsCoveredByOpaque()) { + if (aLayer->AsThebesLayer()) { + data->PaintThebes(mTarget, aCallback, aCallbackData, aReadback); + } else { + data->Paint(mTarget); + } } } else { ReadbackProcessor readback; @@ -1644,30 +1512,18 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget, } for (; child; child = child->GetNextSibling()) { - PaintLayer(groupTarget, child, aCallback, aCallbackData, &readback); + PaintLayer(child, aCallback, aCallbackData, &readback); if (mTransactionIncomplete) break; } } if (needsGroup) { - PopGroupToSourceWithCachedSurface(aTarget, groupTarget); - // If we're doing our own double-buffering, we need to avoid drawing - // the results of an incomplete transaction to the destination surface --- - // that could cause flicker. Double-buffering is implemented using a - // temporary surface for one or more container layers, so we need to stop - // those temporary surfaces from being composited to aTarget. - // ApplyDoubleBuffering guarantees that this container layer can't - // intersect any other leaf layers, so if the transaction is not yet marked - // incomplete, the contents of this container layer are the final contents - // for the window. - if (!mTransactionIncomplete) { - if (needsClipToVisibleRegion) { - gfxUtils::ClipToRegion(aTarget, aLayer->GetEffectiveVisibleRegion()); - } - AutoSetOperator setOperator(aTarget, container->GetOperator()); - aTarget->Paint(aLayer->GetEffectiveOpacity()); + mTarget->PopGroupToSource(); + if (needsClipToVisibleRegion) { + gfxUtils::ClipToRegion(mTarget, aLayer->GetEffectiveVisibleRegion()); } + mTarget->Paint(aLayer->GetEffectiveOpacity()); } if (pushedTargetOpaqueRect) { @@ -1675,9 +1531,9 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget, } if (needsSaveRestore) { - aTarget->Restore(); + mTarget->Restore(); } else { - aTarget->SetMatrix(savedMatrix); + mTarget->SetMatrix(savedMatrix); } } @@ -2438,7 +2294,7 @@ protected: }; -class BasicShadowThebesLayer : public ShadowThebesLayer, public BasicImplData { +class BasicShadowThebesLayer : public ShadowThebesLayer, BasicImplData { public: BasicShadowThebesLayer(BasicShadowLayerManager* aLayerManager) : ShadowThebesLayer(aLayerManager, static_cast(this)) @@ -2612,7 +2468,7 @@ BasicShadowThebesLayer::PaintThebes(gfxContext* aContext, mFrontBuffer.DrawTo(this, target, GetEffectiveOpacity()); } -class BasicShadowContainerLayer : public ShadowContainerLayer, public BasicImplData { +class BasicShadowContainerLayer : public ShadowContainerLayer, BasicImplData { template friend void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aContainer); template @@ -2658,7 +2514,7 @@ public: } }; -class BasicShadowImageLayer : public ShadowImageLayer, public BasicImplData { +class BasicShadowImageLayer : public ShadowImageLayer, BasicImplData { public: BasicShadowImageLayer(BasicShadowLayerManager* aLayerManager) : ShadowImageLayer(aLayerManager, static_cast(this)) @@ -2731,7 +2587,6 @@ BasicShadowImageLayer::Paint(gfxContext* aContext) // tiling, we don't want to draw into that area, so just draw within // the image bounds. const nsIntRect* tileSrcRect = GetTileSourceRect(); - AutoSetOperator setOperator(aContext, GetOperator()); BasicImageLayer::PaintContext(pat, tileSrcRect ? GetEffectiveVisibleRegion() : nsIntRegion(nsIntRect(0, 0, mSize.width, mSize.height)), tileSrcRect, @@ -2739,7 +2594,7 @@ BasicShadowImageLayer::Paint(gfxContext* aContext) } class BasicShadowColorLayer : public ShadowColorLayer, - public BasicImplData + BasicImplData { public: BasicShadowColorLayer(BasicShadowLayerManager* aLayerManager) : @@ -2754,13 +2609,12 @@ public: virtual void Paint(gfxContext* aContext) { - AutoSetOperator setOperator(aContext, GetOperator()); BasicColorLayer::PaintColorTo(mColor, GetEffectiveOpacity(), aContext); } }; class BasicShadowCanvasLayer : public ShadowCanvasLayer, - public BasicImplData + BasicImplData { public: BasicShadowCanvasLayer(BasicShadowLayerManager* aLayerManager) : diff --git a/gfx/layers/basic/BasicLayers.h b/gfx/layers/basic/BasicLayers.h index 2704b9c30bf6..392479d38e80 100644 --- a/gfx/layers/basic/BasicLayers.h +++ b/gfx/layers/basic/BasicLayers.h @@ -180,16 +180,7 @@ public: void SetTransactionIncomplete() { mTransactionIncomplete = true; } - already_AddRefed PushGroupForLayer(gfxContext* aContext, Layer* aLayer, - const nsIntRegion& aRegion, - PRBool* aNeedsClipToVisibleRegion); - already_AddRefed PushGroupWithCachedSurface(gfxContext *aTarget, - gfxASurface::gfxContentType aContent); - void PopGroupToSourceWithCachedSurface(gfxContext *aTarget, gfxContext *aPushed); - virtual PRBool IsCompositingCheap() { return PR_FALSE; } - virtual bool HasShadowManagerInternal() const { return false; } - bool HasShadowManager() const { return HasShadowManagerInternal(); } protected: #ifdef DEBUG @@ -200,8 +191,7 @@ protected: #endif // Paints aLayer to mTarget. - void PaintLayer(gfxContext* aTarget, - Layer* aLayer, + void PaintLayer(Layer* aLayer, DrawThebesLayerCallback aCallback, void* aCallbackData, ReadbackProcessor* aReadback); @@ -209,6 +199,12 @@ protected: // Clear the contents of a layer void ClearLayer(Layer* aLayer); + already_AddRefed PushGroupWithCachedSurface(gfxContext *aTarget, + gfxASurface::gfxContentType aContent, + gfxPoint *aSavedOffset); + void PopGroupWithCachedSurface(gfxContext *aTarget, + const gfxPoint& aSavedOffset); + bool EndTransactionInternal(DrawThebesLayerCallback aCallback, void* aCallbackData); @@ -229,7 +225,6 @@ protected: BufferMode mDoubleBuffering; PRPackedBool mUsingDefaultTarget; - PRPackedBool mCachedSurfaceInUse; bool mTransactionIncomplete; }; @@ -265,7 +260,6 @@ public: ShadowableLayer* Hold(Layer* aLayer); - bool HasShadowManager() const { return ShadowLayerForwarder::HasShadowManager(); } PLayersChild* GetShadowManager() const { return mShadowManager; } void SetShadowManager(PLayersChild* aShadowManager) @@ -274,7 +268,6 @@ public: } virtual PRBool IsCompositingCheap(); - virtual bool HasShadowManagerInternal() const { return HasShadowManager(); } private: /** diff --git a/gfx/thebes/gfxCachedTempSurface.cpp b/gfx/thebes/gfxCachedTempSurface.cpp index b480174315ae..a165175e4780 100644 --- a/gfx/thebes/gfxCachedTempSurface.cpp +++ b/gfx/thebes/gfxCachedTempSurface.cpp @@ -98,12 +98,12 @@ gfxCachedTempSurface::~gfxCachedTempSurface() already_AddRefed gfxCachedTempSurface::Get(gfxASurface::gfxContentType aContentType, - const gfxRect& aRect, + const gfxIntSize& aSize, gfxASurface* aSimilarTo) { if (mSurface) { /* Verify the current buffer is valid for this purpose */ - if (mSize.width < aRect.width || mSize.height < aRect.height + if (mSize.width < aSize.width || mSize.height < aSize.height || mSurface->GetContentType() != aContentType) { mSurface = nsnull; } else { @@ -114,8 +114,8 @@ gfxCachedTempSurface::Get(gfxASurface::gfxContentType aContentType, PRBool cleared = PR_FALSE; if (!mSurface) { - mSize = gfxIntSize(PRInt32(NS_ceil(aRect.width)), PRInt32(NS_ceil(aRect.height))); - mSurface = aSimilarTo->CreateSimilarSurface(aContentType, mSize); + mSize = aSize; + mSurface = aSimilarTo->CreateSimilarSurface(aContentType, aSize); if (!mSurface) return nsnull; @@ -124,10 +124,9 @@ gfxCachedTempSurface::Get(gfxASurface::gfxContentType aContentType, mType = aSimilarTo->GetType(); #endif } - mSurface->SetDeviceOffset(-aRect.TopLeft()); nsRefPtr ctx = new gfxContext(mSurface); - ctx->Rectangle(aRect); + ctx->Rectangle(gfxRect(0, 0, aSize.width, aSize.height)); ctx->Clip(); if (!cleared && aContentType != gfxASurface::CONTENT_COLOR) { ctx->SetOperator(gfxContext::OPERATOR_CLEAR); diff --git a/gfx/thebes/gfxCachedTempSurface.h b/gfx/thebes/gfxCachedTempSurface.h index 3904cbe32ffb..b3dbce37f397 100644 --- a/gfx/thebes/gfxCachedTempSurface.h +++ b/gfx/thebes/gfxCachedTempSurface.h @@ -71,15 +71,13 @@ public: * different format. */ already_AddRefed Get(gfxASurface::gfxContentType aContentType, - const gfxRect& aRect, + const gfxIntSize& aSize, gfxASurface* aSimilarTo); void Expire() { mSurface = nsnull; } nsExpirationState* GetExpirationState() { return &mExpirationState; } ~gfxCachedTempSurface(); - PRBool IsSurface(gfxASurface* aSurface) { return mSurface == aSurface; } - private: nsRefPtr mSurface; gfxIntSize mSize; From 127ecf5ea33d4180c61bd1abf58ca0704ef108df Mon Sep 17 00:00:00 2001 From: Mounir Lamouri Date: Tue, 17 May 2011 11:44:17 +0200 Subject: [PATCH 155/282] Backout bug 629866 and bug 647560. --- gfx/layers/basic/BasicLayers.cpp | 550 ++++++++++------------------ gfx/layers/basic/BasicLayers.h | 21 +- gfx/thebes/gfxCachedTempSurface.cpp | 11 +- gfx/thebes/gfxCachedTempSurface.h | 4 +- 4 files changed, 215 insertions(+), 371 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index 65c723a1aa10..bdae2c8e90e1 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -92,7 +92,7 @@ class ShadowableLayer; */ class BasicImplData { public: - BasicImplData() : mHidden(PR_FALSE), mOperator(gfxContext::OPERATOR_OVER) + BasicImplData() { MOZ_COUNT_CTOR(BasicImplData); } @@ -136,45 +136,16 @@ public: virtual void ClearCachedResources() {} /** - * This variable is set by MarkLayersHidden() before painting. It indicates - * that the layer should not be composited during this transaction. + * This variable is used by layer manager in order to + * MarkLeafLayersCoveredByOpaque() before painting. + * We keep it here for now. Once we need to cull completely covered + * non-Basic layers, mCoveredByOpaque should be moved to Layer. */ - void SetHidden(PRBool aCovered) { mHidden = aCovered; } - PRBool IsHidden() const { return PR_FALSE; } - /** - * This variable is set by MarkLayersHidden() before painting. This is - * the operator to be used when compositing the layer in this transaction. It must - * be OVER or SOURCE. - */ - void SetOperator(gfxContext::GraphicsOperator aOperator) - { - NS_ASSERTION(aOperator == gfxContext::OPERATOR_OVER || - aOperator == gfxContext::OPERATOR_SOURCE, - "Bad composition operator"); - mOperator = aOperator; - } - gfxContext::GraphicsOperator GetOperator() const { return mOperator; } + void SetCoveredByOpaque(PRBool aCovered) { mCoveredByOpaque = aCovered; } + PRBool IsCoveredByOpaque() const { return mCoveredByOpaque; } protected: - PRPackedBool mHidden; - gfxContext::GraphicsOperator mOperator; -}; - -class AutoSetOperator { -public: - AutoSetOperator(gfxContext* aContext, gfxContext::GraphicsOperator aOperator) { - if (aOperator != gfxContext::OPERATOR_OVER) { - aContext->SetOperator(aOperator); - mContext = aContext; - } - } - ~AutoSetOperator() { - if (mContext) { - mContext->SetOperator(gfxContext::OPERATOR_OVER); - } - } -private: - nsRefPtr mContext; + PRPackedBool mCoveredByOpaque; }; static BasicImplData* @@ -188,7 +159,7 @@ static void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aConta template static void ContainerRemoveChild(Layer* aChild, Container* aContainer); -class BasicContainerLayer : public ContainerLayer, public BasicImplData { +class BasicContainerLayer : public ContainerLayer, BasicImplData { template friend void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aContainer); template @@ -242,23 +213,6 @@ public: mUseIntermediateSurface = GetEffectiveOpacity() != 1.0 && HasMultipleChildren(); } - /** - * Returns true when: - * a) no (non-hidden) childrens' visible areas overlap in - * (aInRect intersected with this layer's visible region). - * b) the (non-hidden) childrens' visible areas cover - * (aInRect intersected with this layer's visible region). - * c) this layer and all (non-hidden) children have transforms that are translations - * by integers. - * aInRect is in the root coordinate system. - * Child layers with opacity do not contribute to the covered area in check b). - * This method can be conservative; it's OK to return false under any - * circumstances. - */ - PRBool ChildrenPartitionVisibleRegion(const nsIntRect& aInRect); - - void ForceIntermediateSurface() { mUseIntermediateSurface = PR_TRUE; } - protected: BasicLayerManager* BasicManager() { @@ -275,43 +229,6 @@ BasicContainerLayer::~BasicContainerLayer() MOZ_COUNT_DTOR(BasicContainerLayer); } -PRBool -BasicContainerLayer::ChildrenPartitionVisibleRegion(const nsIntRect& aInRect) -{ - gfxMatrix transform; - if (!GetEffectiveTransform().Is2D(&transform) || - transform.HasNonIntegerTranslation()) - return PR_FALSE; - - nsIntPoint offset(PRInt32(transform.x0), PRInt32(transform.y0)); - nsIntRect rect = aInRect.Intersect(GetEffectiveVisibleRegion().GetBounds() + offset); - nsIntRegion covered; - - for (Layer* l = mFirstChild; l; l = l->GetNextSibling()) { - if (ToData(l)->IsHidden()) - continue; - - gfxMatrix childTransform; - if (!l->GetEffectiveTransform().Is2D(&childTransform) || - childTransform.HasNonIntegerTranslation() || - l->GetEffectiveOpacity() != 1.0) - return PR_FALSE; - nsIntRegion childRegion = l->GetEffectiveVisibleRegion(); - childRegion.MoveBy(PRInt32(childTransform.x0), PRInt32(childTransform.y0)); - childRegion.And(childRegion, rect); - if (l->GetClipRect()) { - childRegion.And(childRegion, *l->GetClipRect() + offset); - } - nsIntRegion intersection; - intersection.And(covered, childRegion); - if (!intersection.IsEmpty()) - return PR_FALSE; - covered.Or(covered, childRegion); - } - - return covered.Contains(rect); -} - template static void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aContainer) @@ -444,7 +361,7 @@ private: BasicThebesLayer* mLayer; }; -class BasicThebesLayer : public ThebesLayer, public BasicImplData { +class BasicThebesLayer : public ThebesLayer, BasicImplData { public: typedef BasicThebesLayerBuffer Buffer; @@ -583,16 +500,15 @@ SetAntialiasingFlags(Layer* aLayer, gfxContext* aTarget) aTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height)))); } -already_AddRefed -BasicLayerManager::PushGroupForLayer(gfxContext* aContext, Layer* aLayer, - const nsIntRegion& aRegion, - PRBool* aNeedsClipToVisibleRegion) +static PRBool +PushGroupForLayer(gfxContext* aContext, Layer* aLayer, const nsIntRegion& aRegion) { // If we need to call PushGroup, we should clip to the smallest possible // area first to minimize the size of the temporary surface. PRBool didCompleteClip = ClipToContain(aContext, aRegion.GetBounds()); - nsRefPtr result; + gfxASurface::gfxContentType contentType = gfxASurface::CONTENT_COLOR_ALPHA; + PRBool needsClipToVisibleRegion = PR_FALSE; if (aLayer->CanUseOpaqueSurface() && ((didCompleteClip && aRegion.GetNumRects() == 1) || !aContext->CurrentMatrix().HasNonIntegerTranslation())) { @@ -600,14 +516,11 @@ BasicLayerManager::PushGroupForLayer(gfxContext* aContext, Layer* aLayer, // group. We need to make sure that only pixels inside the layer's visible // region are copied back to the destination. Remember if we've already // clipped precisely to the visible region. - *aNeedsClipToVisibleRegion = !didCompleteClip || aRegion.GetNumRects() > 1; - result = PushGroupWithCachedSurface(aContext, gfxASurface::CONTENT_COLOR); - } else { - *aNeedsClipToVisibleRegion = PR_FALSE; - result = aContext; - aContext->PushGroupAndCopyBackground(gfxASurface::CONTENT_COLOR_ALPHA); + needsClipToVisibleRegion = !didCompleteClip || aRegion.GetNumRects() > 1; + contentType = gfxASurface::CONTENT_COLOR; } - return result.forget(); + aContext->PushGroupAndCopyBackground(contentType); + return needsClipToVisibleRegion; } void @@ -640,8 +553,8 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, mValidRegion.SetEmpty(); mBuffer.Clear(); - nsIntRegion toDraw = IntersectWithClip(GetEffectiveVisibleRegion(), aContext); - if (!toDraw.IsEmpty() && !IsHidden()) { + nsIntRegion toDraw = IntersectWithClip(mVisibleRegion, aContext); + if (!toDraw.IsEmpty()) { if (!aCallback) { BasicManager()->SetTransactionIncomplete(); return; @@ -650,27 +563,16 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, aContext->Save(); PRBool needsClipToVisibleRegion = PR_FALSE; - PRBool needsGroup = - opacity != 1.0 || GetOperator() != gfxContext::OPERATOR_OVER; - nsRefPtr groupContext; - if (needsGroup) { - groupContext = - BasicManager()->PushGroupForLayer(aContext, this, toDraw, - &needsClipToVisibleRegion); - if (GetOperator() != gfxContext::OPERATOR_OVER) { - needsClipToVisibleRegion = PR_TRUE; - } - } else { - groupContext = aContext; + if (opacity != 1.0) { + needsClipToVisibleRegion = PushGroupForLayer(aContext, this, toDraw); } - SetAntialiasingFlags(this, groupContext); - aCallback(this, groupContext, toDraw, nsIntRegion(), aCallbackData); - if (needsGroup) { - BasicManager()->PopGroupToSourceWithCachedSurface(aContext, groupContext); + SetAntialiasingFlags(this, aContext); + aCallback(this, aContext, toDraw, nsIntRegion(), aCallbackData); + if (opacity != 1.0) { + aContext->PopGroupToSource(); if (needsClipToVisibleRegion) { gfxUtils::ClipToRegion(aContext, toDraw); } - AutoSetOperator setOperator(aContext, GetOperator()); aContext->Paint(opacity); } @@ -699,8 +601,7 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, // (this could be the whole visible area if our buffer switched // from RGB to RGBA, because we might need to repaint with // subpixel AA) - state.mRegionToInvalidate.And(state.mRegionToInvalidate, - GetEffectiveVisibleRegion()); + state.mRegionToInvalidate.And(state.mRegionToInvalidate, mVisibleRegion); nsIntRegion extendedDrawRegion = state.mRegionToDraw; extendedDrawRegion.ExtendForScaling(paintXRes, paintYRes); mXResolution = paintXRes; @@ -719,10 +620,7 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, } } - if (!IsHidden()) { - AutoSetOperator setOperator(aContext, GetOperator()); - mBuffer.DrawTo(this, aContext, opacity); - } + mBuffer.DrawTo(this, aContext, opacity); for (PRUint32 i = 0; i < readbackUpdates.Length(); ++i) { ReadbackProcessor::Update& update = readbackUpdates[i]; @@ -758,13 +656,13 @@ BasicThebesLayerBuffer::DrawTo(ThebesLayer* aLayer, // no need to clip. But we'll still clip if clipping is cheap --- // that might let us copy a smaller region of the buffer. if (!aLayer->GetValidRegion().Contains(BufferRect()) || - IsClippingCheap(aTarget, aLayer->GetEffectiveVisibleRegion())) { + IsClippingCheap(aTarget, aLayer->GetVisibleRegion())) { // We don't want to draw invalid stuff, so we need to clip. Might as // well clip to the smallest area possible --- the visible region. // Bug 599189 if there is a non-integer-translation transform in aTarget, - // we might sample pixels outside GetEffectiveVisibleRegion(), which is wrong + // we might sample pixels outside GetVisibleRegion(), which is wrong // and may cause gray lines. - gfxUtils::ClipToRegionSnapped(aTarget, aLayer->GetEffectiveVisibleRegion()); + gfxUtils::ClipToRegionSnapped(aTarget, aLayer->GetVisibleRegion()); } DrawBufferWithRotation(aTarget, aOpacity, aLayer->GetXResolution(), aLayer->GetYResolution()); @@ -797,7 +695,7 @@ BasicThebesLayerBuffer::SetBackingBufferAndUpdateFrom( srcBuffer.DrawBufferWithRotation(destCtx, 1.0, aXResolution, aYResolution); } -class BasicImageLayer : public ImageLayer, public BasicImplData { +class BasicImageLayer : public ImageLayer, BasicImplData { public: BasicImageLayer(BasicLayerManager* aLayerManager) : ImageLayer(aLayerManager, static_cast(this)), @@ -841,8 +739,6 @@ protected: void BasicImageLayer::Paint(gfxContext* aContext) { - if (IsHidden()) - return; nsRefPtr dontcare = GetAndPaintCurrentImage(aContext, GetEffectiveOpacity()); } @@ -872,7 +768,6 @@ BasicImageLayer::GetAndPaintCurrentImage(gfxContext* aContext, // tiling, we don't want to draw into that area, so just draw within // the image bounds. const nsIntRect* tileSrcRect = GetTileSourceRect(); - AutoSetOperator setOperator(aContext, GetOperator()); PaintContext(pat, tileSrcRect ? GetVisibleRegion() : nsIntRegion(nsIntRect(0, 0, mSize.width, mSize.height)), tileSrcRect, @@ -934,7 +829,7 @@ BasicImageLayer::PaintContext(gfxPattern* aPattern, aPattern->SetExtend(extend); } -class BasicColorLayer : public ColorLayer, public BasicImplData { +class BasicColorLayer : public ColorLayer, BasicImplData { public: BasicColorLayer(BasicLayerManager* aLayerManager) : ColorLayer(aLayerManager, static_cast(this)) @@ -955,9 +850,6 @@ public: virtual void Paint(gfxContext* aContext) { - if (IsHidden()) - return; - AutoSetOperator setOperator(aContext, GetOperator()); PaintColorTo(mColor, GetEffectiveOpacity(), aContext); } @@ -980,7 +872,7 @@ BasicColorLayer::PaintColorTo(gfxRGBA aColor, float aOpacity, } class BasicCanvasLayer : public CanvasLayer, - public BasicImplData + BasicImplData { public: BasicCanvasLayer(BasicLayerManager* aLayerManager) : @@ -1102,8 +994,6 @@ BasicCanvasLayer::UpdateSurface() void BasicCanvasLayer::Paint(gfxContext* aContext) { - if (IsHidden()) - return; UpdateSurface(); FireDidTransactionCallback(); PaintWithOpacity(aContext, GetEffectiveOpacity()); @@ -1128,7 +1018,6 @@ BasicCanvasLayer::PaintWithOpacity(gfxContext* aContext, aContext->Scale(1.0, -1.0); } - AutoSetOperator setOperator(aContext, GetOperator()); aContext->NewPath(); // No need to snap here; our transform is already set up to snap our rect aContext->Rectangle(gfxRect(0, 0, mBounds.width, mBounds.height)); @@ -1141,7 +1030,7 @@ BasicCanvasLayer::PaintWithOpacity(gfxContext* aContext, } class BasicReadbackLayer : public ReadbackLayer, - public BasicImplData + BasicImplData { public: BasicReadbackLayer(BasicLayerManager* aLayerManager) : @@ -1184,6 +1073,64 @@ ToInsideIntRect(const gfxRect& aRect) return nsIntRect(r.X(), r.Y(), r.Width(), r.Height()); } +/** + * Returns false if there is at most one leaf layer overlapping aBounds + * and that layer is opaque. + * aDirtyVisibleRegionInContainer is filled in only if we return false. + * It contains the union of the visible regions of leaf layers under aLayer. + */ +static PRBool +MayHaveOverlappingOrTransparentLayers(Layer* aLayer, + const nsIntRect& aBounds, + nsIntRegion* aDirtyVisibleRegionInContainer) +{ + if (!(aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE)) { + return PR_TRUE; + } + + gfxMatrix matrix; + if (!aLayer->GetTransform().Is2D(&matrix) || + matrix.HasNonIntegerTranslation()) { + return PR_TRUE; + } + + nsIntPoint translation = nsIntPoint(PRInt32(matrix.x0), PRInt32(matrix.y0)); + nsIntRect bounds = aBounds - translation; + + nsIntRect clippedDirtyRect = bounds; + const nsIntRect* clipRect = aLayer->GetClipRect(); + if (clipRect) { + clippedDirtyRect.IntersectRect(clippedDirtyRect, *clipRect - translation); + } + aDirtyVisibleRegionInContainer->And(aLayer->GetVisibleRegion(), clippedDirtyRect); + aDirtyVisibleRegionInContainer->MoveBy(translation); + + /* Ignore layers outside the clip rect */ + if (aDirtyVisibleRegionInContainer->IsEmpty()) { + return PR_FALSE; + } + + nsIntRegion region; + + for (Layer* child = aLayer->GetFirstChild(); child; + child = child->GetNextSibling()) { + nsIntRegion childRegion; + if (MayHaveOverlappingOrTransparentLayers(child, bounds, &childRegion)) { + return PR_TRUE; + } + + nsIntRegion tmp; + tmp.And(region, childRegion); + if (!tmp.IsEmpty()) { + return PR_TRUE; + } + + region.Or(region, childRegion); + } + + return PR_FALSE; +} + BasicLayerManager::BasicLayerManager(nsIWidget* aWidget) : #ifdef DEBUG mPhase(PHASE_NONE), @@ -1192,7 +1139,6 @@ BasicLayerManager::BasicLayerManager(nsIWidget* aWidget) : , mYResolution(1.0) , mWidget(aWidget) , mDoubleBuffering(BUFFER_NONE), mUsingDefaultTarget(PR_FALSE) - , mCachedSurfaceInUse(PR_FALSE) , mTransactionIncomplete(false) { MOZ_COUNT_CTOR(BasicLayerManager); @@ -1239,15 +1185,9 @@ BasicLayerManager::BeginTransaction() already_AddRefed BasicLayerManager::PushGroupWithCachedSurface(gfxContext *aTarget, - gfxASurface::gfxContentType aContent) + gfxASurface::gfxContentType aContent, + gfxPoint *aSavedOffset) { - if (mCachedSurfaceInUse) { - aTarget->PushGroup(aContent); - nsRefPtr result = aTarget; - return result.forget(); - } - mCachedSurfaceInUse = PR_TRUE; - gfxContextMatrixAutoSaveRestore saveMatrix(aTarget); aTarget->IdentityMatrix(); @@ -1255,26 +1195,29 @@ BasicLayerManager::PushGroupWithCachedSurface(gfxContext *aTarget, gfxRect clip = aTarget->GetClipExtents(); clip.RoundOut(); - nsRefPtr ctx = mCachedSurface.Get(aContent, clip, currentSurf); + nsRefPtr ctx = + mCachedSurface.Get(aContent, + gfxIntSize(clip.Width(), clip.Height()), + currentSurf); /* Align our buffer for the original surface */ - ctx->SetMatrix(saveMatrix.Matrix()); + ctx->Translate(-clip.TopLeft()); + *aSavedOffset = clip.TopLeft(); + ctx->Multiply(saveMatrix.Matrix()); return ctx.forget(); } void -BasicLayerManager::PopGroupToSourceWithCachedSurface(gfxContext *aTarget, gfxContext *aPushed) +BasicLayerManager::PopGroupWithCachedSurface(gfxContext *aTarget, + const gfxPoint& aSavedOffset) { - if (!aTarget) + if (!mTarget) return; - nsRefPtr current = aPushed->CurrentSurface(); - if (mCachedSurface.IsSurface(current)) { - gfxContextMatrixAutoSaveRestore saveMatrix(aTarget); - aTarget->IdentityMatrix(); - aTarget->SetSource(current); - mCachedSurfaceInUse = PR_FALSE; - } else { - aTarget->PopGroupToSource(); - } + + gfxContextMatrixAutoSaveRestore saveMatrix(aTarget); + aTarget->IdentityMatrix(); + + aTarget->SetSource(mTarget->OriginalSurface(), aSavedOffset); + aTarget->Paint(); } void @@ -1301,36 +1244,25 @@ TransformIntRect(nsIntRect& aRect, const gfxMatrix& aMatrix, aRect = (*aRoundMethod)(gr); } -/** - * This function assumes that GetEffectiveTransform transforms - * all layers to the same coordinate system (the "root coordinate system"). - * It can't be used as is by accelerated layers because of intermediate surfaces. - * This must set the hidden flag to true or false on *all* layers in the subtree. - * It also sets the operator for all layers to "OVER". - * @param aClipRect the cliprect, in the root coordinate system. We assume - * that any layer drawing is clipped to this rect. It is therefore not - * allowed to add to the opaque region outside that rect. - * @param aDirtyRect the dirty rect that will be painted, in the root - * coordinate system. Layers outside this rect should be hidden. - * @param aOpaqueRegion the opaque region covering aLayer, in the - * root coordinate system. - */ -enum { - ALLOW_OPAQUE = 0x01, -}; +// This implementation assumes that GetEffectiveTransform transforms +// all layers to the same coordinate system. It can't be used as is +// by accelerated layers because of intermediate surfaces. +// aClipRect and aRegion are in that global coordinate system. static void -MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, - const nsIntRect& aDirtyRect, - nsIntRegion& aOpaqueRegion, - PRUint32 aFlags) +MarkLeafLayersCoveredByOpaque(Layer* aLayer, const nsIntRect& aClipRect, + nsIntRegion& aRegion) { + Layer* child = aLayer->GetLastChild(); + BasicImplData* data = ToData(aLayer); + data->SetCoveredByOpaque(PR_FALSE); + nsIntRect newClipRect(aClipRect); - PRUint32 newFlags = aFlags; // Allow aLayer or aLayer's descendants to cover underlying layers - // only if it's opaque. + // only if it's opaque. GetEffectiveOpacity() could be used instead, + // but it does extra passes from descendant to ancestor. if (aLayer->GetOpacity() != 1.0f) { - newFlags &= ~ALLOW_OPAQUE; + newClipRect.SetRect(0, 0, 0, 0); } { @@ -1342,8 +1274,6 @@ MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, if (aLayer->GetParent()) { gfxMatrix tr; if (aLayer->GetParent()->GetEffectiveTransform().Is2D(&tr)) { - // Clip rect is applied after aLayer's transform, i.e., in the coordinate - // system of aLayer's parent. TransformIntRect(cr, tr, ToInsideIntRect); } else { cr.SetRect(0, 0, 0, 0); @@ -1353,102 +1283,36 @@ MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, } } - BasicImplData* data = ToData(aLayer); - data->SetOperator(gfxContext::OPERATOR_OVER); - - if (!aLayer->AsContainerLayer()) { + if (!child) { gfxMatrix transform; if (!aLayer->GetEffectiveTransform().Is2D(&transform)) { - data->SetHidden(PR_FALSE); return; } nsIntRegion region = aLayer->GetEffectiveVisibleRegion(); nsIntRect r = region.GetBounds(); TransformIntRect(r, transform, ToOutsideIntRect); - r.IntersectRect(r, aDirtyRect); - data->SetHidden(aOpaqueRegion.Contains(r)); + data->SetCoveredByOpaque(aRegion.Contains(r)); // Allow aLayer to cover underlying layers only if aLayer's // content is opaque - if ((aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE) && - (newFlags & ALLOW_OPAQUE)) { - nsIntRegionRectIterator it(region); - while (const nsIntRect* sr = it.Next()) { - r = *sr; - TransformIntRect(r, transform, ToInsideIntRect); + if (!(aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE)) { + return; + } - r.IntersectRect(r, newClipRect); - aOpaqueRegion.Or(aOpaqueRegion, r); + nsIntRegionRectIterator it(region); + while (const nsIntRect* sr = it.Next()) { + r = *sr; + TransformIntRect(r, transform, ToInsideIntRect); + + r.IntersectRect(r, newClipRect); + if (!r.IsEmpty()) { + aRegion.Or(aRegion, r); } } } else { - Layer* child = aLayer->GetLastChild(); - PRBool allHidden = PR_TRUE; for (; child; child = child->GetPrevSibling()) { - MarkLayersHidden(child, newClipRect, aDirtyRect, aOpaqueRegion, newFlags); - if (!ToData(child)->IsHidden()) { - allHidden = PR_FALSE; - } - } - data->SetHidden(allHidden); - } -} - -/** - * This function assumes that GetEffectiveTransform transforms - * all layers to the same coordinate system (the "root coordinate system"). - * MarkLayersHidden must be called before calling this. - * @param aVisibleRect the rectangle of aLayer that is visible (i.e. not - * clipped and in the dirty rect), in the root coordinate system. - */ -static void -ApplyDoubleBuffering(Layer* aLayer, const nsIntRect& aVisibleRect) -{ - BasicImplData* data = ToData(aLayer); - if (data->IsHidden()) - return; - - nsIntRect newVisibleRect(aVisibleRect); - - { - const nsIntRect* clipRect = aLayer->GetEffectiveClipRect(); - if (clipRect) { - nsIntRect cr = *clipRect; - // clipRect is in the container's coordinate system. Get it into the - // global coordinate system. - if (aLayer->GetParent()) { - gfxMatrix tr; - if (aLayer->GetParent()->GetEffectiveTransform().Is2D(&tr)) { - NS_ASSERTION(!tr.HasNonIntegerTranslation(), - "Parent can only have an integer translation"); - cr += nsIntPoint(PRInt32(tr.x0), PRInt32(tr.y0)); - } else { - NS_ERROR("Parent can only have an integer translation"); - } - } - newVisibleRect.IntersectRect(newVisibleRect, cr); - } - } - - BasicContainerLayer* container = - static_cast(aLayer->AsContainerLayer()); - // Layers that act as their own backbuffers should be drawn to the destination - // using OPERATOR_SOURCE to ensure that alpha values in a transparent window - // are cleared. This can also be faster than OPERATOR_OVER. - if (!container) { - data->SetOperator(gfxContext::OPERATOR_SOURCE); - } else { - if (container->UseIntermediateSurface() || - !container->ChildrenPartitionVisibleRegion(newVisibleRect)) { - // We need to double-buffer this container. - data->SetOperator(gfxContext::OPERATOR_SOURCE); - container->ForceIntermediateSurface(); - } else { - for (Layer* child = aLayer->GetFirstChild(); child; - child = child->GetNextSibling()) { - ApplyDoubleBuffering(child, newVisibleRect); - } + MarkLeafLayersCoveredByOpaque(child, newClipRect, aRegion); } } } @@ -1477,39 +1341,50 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, mTransactionIncomplete = false; if (mTarget && mRoot) { - nsIntRect clipRect; - if (HasShadowManager()) { - // If this has a shadow manager, the clip extents of mTarget are meaningless. - // So instead just use the root layer's visible region bounds. - const nsIntRect& bounds = mRoot->GetVisibleRegion().GetBounds(); - gfxRect deviceRect = - mTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height)); - clipRect = ToOutsideIntRect(deviceRect); - } else { - gfxContextMatrixAutoSaveRestore save(mTarget); - mTarget->SetMatrix(gfxMatrix()); - clipRect = ToOutsideIntRect(mTarget->GetClipExtents()); + nsRefPtr finalTarget = mTarget; + gfxPoint cachedSurfaceOffset; + + nsIntRegion rootRegion; + PRBool useDoubleBuffering = mUsingDefaultTarget && + mDoubleBuffering != BUFFER_NONE && + MayHaveOverlappingOrTransparentLayers(mRoot, + ToOutsideIntRect(mTarget->GetClipExtents()), + &rootRegion); + if (useDoubleBuffering) { + nsRefPtr targetSurface = mTarget->CurrentSurface(); + mTarget = PushGroupWithCachedSurface(mTarget, targetSurface->GetContentType(), + &cachedSurfaceOffset); } - // Need to do this before we call ApplyDoubleBuffering, - // which depends on correct effective transforms mSnapEffectiveTransforms = !(mTarget->GetFlags() & gfxContext::FLAG_DISABLE_SNAPPING); mRoot->ComputeEffectiveTransforms(gfx3DMatrix::From2D(mTarget->CurrentMatrix())); - if (IsRetained()) { - nsIntRegion region; - MarkLayersHidden(mRoot, clipRect, clipRect, region, ALLOW_OPAQUE); - if (mUsingDefaultTarget && mDoubleBuffering != BUFFER_NONE) { - ApplyDoubleBuffering(mRoot, clipRect); - } - } + nsIntRegion region; + MarkLeafLayersCoveredByOpaque(mRoot, + mRoot->GetEffectiveVisibleRegion().GetBounds(), + region); + PaintLayer(mRoot, aCallback, aCallbackData, nsnull); - PaintLayer(mTarget, mRoot, aCallback, aCallbackData, nsnull); + // If we're doing manual double-buffering, we need to avoid drawing + // the results of an incomplete transaction to the destination surface. + // If the transaction is incomplete and we're not double-buffering then + // either the system is double-buffering our window (in which case the + // followup EndTransaction will be drawn over the top of our incomplete + // transaction before the system updates the window), or we have no + // overlapping or transparent layers in the update region, in which case + // our partial transaction drawing will look fine. + if (useDoubleBuffering && !mTransactionIncomplete) { + finalTarget->SetOperator(gfxContext::OPERATOR_SOURCE); + PopGroupWithCachedSurface(finalTarget, cachedSurfaceOffset); + } if (!mTransactionIncomplete) { // Clear out target if we have a complete transaction. mTarget = nsnull; + } else { + // If we don't have a complete transaction set back to the old mTarget. + mTarget = finalTarget; } } @@ -1558,36 +1433,30 @@ BasicLayerManager::SetRoot(Layer* aLayer) } void -BasicLayerManager::PaintLayer(gfxContext* aTarget, - Layer* aLayer, +BasicLayerManager::PaintLayer(Layer* aLayer, DrawThebesLayerCallback aCallback, void* aCallbackData, ReadbackProcessor* aReadback) { const nsIntRect* clipRect = aLayer->GetEffectiveClipRect(); const gfx3DMatrix& effectiveTransform = aLayer->GetEffectiveTransform(); - BasicContainerLayer* container = static_cast(aLayer); PRBool needsGroup = aLayer->GetFirstChild() && - container->UseIntermediateSurface(); - NS_ASSERTION(needsGroup || !aLayer->GetFirstChild() || - container->GetOperator() == gfxContext::OPERATOR_OVER, - "non-OVER operator should have forced UseIntermediateSurface"); - + static_cast(aLayer)->UseIntermediateSurface(); // If needsSaveRestore is false, we should still save and restore // the CTM PRBool needsSaveRestore = needsGroup || clipRect; gfxMatrix savedMatrix; if (needsSaveRestore) { - aTarget->Save(); + mTarget->Save(); if (clipRect) { - aTarget->NewPath(); - aTarget->Rectangle(gfxRect(clipRect->x, clipRect->y, clipRect->width, clipRect->height), PR_TRUE); - aTarget->Clip(); + mTarget->NewPath(); + mTarget->Rectangle(gfxRect(clipRect->x, clipRect->y, clipRect->width, clipRect->height), PR_TRUE); + mTarget->Clip(); } } else { - savedMatrix = aTarget->CurrentMatrix(); + savedMatrix = mTarget->CurrentMatrix(); } gfxMatrix transform; @@ -1596,11 +1465,11 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget, NS_ASSERTION(effectiveTransform.Is2D(), "Only 2D transforms supported currently"); effectiveTransform.Is2D(&transform); - aTarget->SetMatrix(transform); + mTarget->SetMatrix(transform); PRBool pushedTargetOpaqueRect = PR_FALSE; const nsIntRegion& visibleRegion = aLayer->GetEffectiveVisibleRegion(); - nsRefPtr currentSurface = aTarget->CurrentSurface(); + nsRefPtr currentSurface = mTarget->CurrentSurface(); const gfxRect& targetOpaqueRect = currentSurface->GetOpaqueRect(); // Try to annotate currentSurface with a region of pixels that have been @@ -1610,17 +1479,14 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget, !transform.HasNonAxisAlignedTransform()) { const nsIntRect& bounds = visibleRegion.GetBounds(); currentSurface->SetOpaqueRect( - aTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height))); + mTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height))); pushedTargetOpaqueRect = PR_TRUE; } PRBool needsClipToVisibleRegion = PR_FALSE; - nsRefPtr groupTarget; if (needsGroup) { - groupTarget = PushGroupForLayer(aTarget, aLayer, aLayer->GetEffectiveVisibleRegion(), - &needsClipToVisibleRegion); - } else { - groupTarget = aTarget; + needsClipToVisibleRegion = + PushGroupForLayer(mTarget, aLayer, aLayer->GetEffectiveVisibleRegion()); } /* Only paint ourself, or our children - This optimization relies on this! */ @@ -1629,12 +1495,14 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget, BasicImplData* data = ToData(aLayer); #ifdef MOZ_LAYERS_HAVE_LOG MOZ_LAYERS_LOG(("%s (0x%p) is covered: %i\n", __FUNCTION__, - (void*)aLayer, data->IsHidden())); + (void*)aLayer, data->IsCoveredByOpaque())); #endif - if (aLayer->AsThebesLayer()) { - data->PaintThebes(groupTarget, aCallback, aCallbackData, aReadback); - } else { - data->Paint(groupTarget); + if (!data->IsCoveredByOpaque()) { + if (aLayer->AsThebesLayer()) { + data->PaintThebes(mTarget, aCallback, aCallbackData, aReadback); + } else { + data->Paint(mTarget); + } } } else { ReadbackProcessor readback; @@ -1644,30 +1512,18 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget, } for (; child; child = child->GetNextSibling()) { - PaintLayer(groupTarget, child, aCallback, aCallbackData, &readback); + PaintLayer(child, aCallback, aCallbackData, &readback); if (mTransactionIncomplete) break; } } if (needsGroup) { - PopGroupToSourceWithCachedSurface(aTarget, groupTarget); - // If we're doing our own double-buffering, we need to avoid drawing - // the results of an incomplete transaction to the destination surface --- - // that could cause flicker. Double-buffering is implemented using a - // temporary surface for one or more container layers, so we need to stop - // those temporary surfaces from being composited to aTarget. - // ApplyDoubleBuffering guarantees that this container layer can't - // intersect any other leaf layers, so if the transaction is not yet marked - // incomplete, the contents of this container layer are the final contents - // for the window. - if (!mTransactionIncomplete) { - if (needsClipToVisibleRegion) { - gfxUtils::ClipToRegion(aTarget, aLayer->GetEffectiveVisibleRegion()); - } - AutoSetOperator setOperator(aTarget, container->GetOperator()); - aTarget->Paint(aLayer->GetEffectiveOpacity()); + mTarget->PopGroupToSource(); + if (needsClipToVisibleRegion) { + gfxUtils::ClipToRegion(mTarget, aLayer->GetEffectiveVisibleRegion()); } + mTarget->Paint(aLayer->GetEffectiveOpacity()); } if (pushedTargetOpaqueRect) { @@ -1675,9 +1531,9 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget, } if (needsSaveRestore) { - aTarget->Restore(); + mTarget->Restore(); } else { - aTarget->SetMatrix(savedMatrix); + mTarget->SetMatrix(savedMatrix); } } @@ -2438,7 +2294,7 @@ protected: }; -class BasicShadowThebesLayer : public ShadowThebesLayer, public BasicImplData { +class BasicShadowThebesLayer : public ShadowThebesLayer, BasicImplData { public: BasicShadowThebesLayer(BasicShadowLayerManager* aLayerManager) : ShadowThebesLayer(aLayerManager, static_cast(this)) @@ -2612,7 +2468,7 @@ BasicShadowThebesLayer::PaintThebes(gfxContext* aContext, mFrontBuffer.DrawTo(this, target, GetEffectiveOpacity()); } -class BasicShadowContainerLayer : public ShadowContainerLayer, public BasicImplData { +class BasicShadowContainerLayer : public ShadowContainerLayer, BasicImplData { template friend void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aContainer); template @@ -2658,7 +2514,7 @@ public: } }; -class BasicShadowImageLayer : public ShadowImageLayer, public BasicImplData { +class BasicShadowImageLayer : public ShadowImageLayer, BasicImplData { public: BasicShadowImageLayer(BasicShadowLayerManager* aLayerManager) : ShadowImageLayer(aLayerManager, static_cast(this)) @@ -2731,7 +2587,6 @@ BasicShadowImageLayer::Paint(gfxContext* aContext) // tiling, we don't want to draw into that area, so just draw within // the image bounds. const nsIntRect* tileSrcRect = GetTileSourceRect(); - AutoSetOperator setOperator(aContext, GetOperator()); BasicImageLayer::PaintContext(pat, tileSrcRect ? GetEffectiveVisibleRegion() : nsIntRegion(nsIntRect(0, 0, mSize.width, mSize.height)), tileSrcRect, @@ -2739,7 +2594,7 @@ BasicShadowImageLayer::Paint(gfxContext* aContext) } class BasicShadowColorLayer : public ShadowColorLayer, - public BasicImplData + BasicImplData { public: BasicShadowColorLayer(BasicShadowLayerManager* aLayerManager) : @@ -2754,13 +2609,12 @@ public: virtual void Paint(gfxContext* aContext) { - AutoSetOperator setOperator(aContext, GetOperator()); BasicColorLayer::PaintColorTo(mColor, GetEffectiveOpacity(), aContext); } }; class BasicShadowCanvasLayer : public ShadowCanvasLayer, - public BasicImplData + BasicImplData { public: BasicShadowCanvasLayer(BasicShadowLayerManager* aLayerManager) : diff --git a/gfx/layers/basic/BasicLayers.h b/gfx/layers/basic/BasicLayers.h index 2704b9c30bf6..392479d38e80 100644 --- a/gfx/layers/basic/BasicLayers.h +++ b/gfx/layers/basic/BasicLayers.h @@ -180,16 +180,7 @@ public: void SetTransactionIncomplete() { mTransactionIncomplete = true; } - already_AddRefed PushGroupForLayer(gfxContext* aContext, Layer* aLayer, - const nsIntRegion& aRegion, - PRBool* aNeedsClipToVisibleRegion); - already_AddRefed PushGroupWithCachedSurface(gfxContext *aTarget, - gfxASurface::gfxContentType aContent); - void PopGroupToSourceWithCachedSurface(gfxContext *aTarget, gfxContext *aPushed); - virtual PRBool IsCompositingCheap() { return PR_FALSE; } - virtual bool HasShadowManagerInternal() const { return false; } - bool HasShadowManager() const { return HasShadowManagerInternal(); } protected: #ifdef DEBUG @@ -200,8 +191,7 @@ protected: #endif // Paints aLayer to mTarget. - void PaintLayer(gfxContext* aTarget, - Layer* aLayer, + void PaintLayer(Layer* aLayer, DrawThebesLayerCallback aCallback, void* aCallbackData, ReadbackProcessor* aReadback); @@ -209,6 +199,12 @@ protected: // Clear the contents of a layer void ClearLayer(Layer* aLayer); + already_AddRefed PushGroupWithCachedSurface(gfxContext *aTarget, + gfxASurface::gfxContentType aContent, + gfxPoint *aSavedOffset); + void PopGroupWithCachedSurface(gfxContext *aTarget, + const gfxPoint& aSavedOffset); + bool EndTransactionInternal(DrawThebesLayerCallback aCallback, void* aCallbackData); @@ -229,7 +225,6 @@ protected: BufferMode mDoubleBuffering; PRPackedBool mUsingDefaultTarget; - PRPackedBool mCachedSurfaceInUse; bool mTransactionIncomplete; }; @@ -265,7 +260,6 @@ public: ShadowableLayer* Hold(Layer* aLayer); - bool HasShadowManager() const { return ShadowLayerForwarder::HasShadowManager(); } PLayersChild* GetShadowManager() const { return mShadowManager; } void SetShadowManager(PLayersChild* aShadowManager) @@ -274,7 +268,6 @@ public: } virtual PRBool IsCompositingCheap(); - virtual bool HasShadowManagerInternal() const { return HasShadowManager(); } private: /** diff --git a/gfx/thebes/gfxCachedTempSurface.cpp b/gfx/thebes/gfxCachedTempSurface.cpp index b480174315ae..a165175e4780 100644 --- a/gfx/thebes/gfxCachedTempSurface.cpp +++ b/gfx/thebes/gfxCachedTempSurface.cpp @@ -98,12 +98,12 @@ gfxCachedTempSurface::~gfxCachedTempSurface() already_AddRefed gfxCachedTempSurface::Get(gfxASurface::gfxContentType aContentType, - const gfxRect& aRect, + const gfxIntSize& aSize, gfxASurface* aSimilarTo) { if (mSurface) { /* Verify the current buffer is valid for this purpose */ - if (mSize.width < aRect.width || mSize.height < aRect.height + if (mSize.width < aSize.width || mSize.height < aSize.height || mSurface->GetContentType() != aContentType) { mSurface = nsnull; } else { @@ -114,8 +114,8 @@ gfxCachedTempSurface::Get(gfxASurface::gfxContentType aContentType, PRBool cleared = PR_FALSE; if (!mSurface) { - mSize = gfxIntSize(PRInt32(NS_ceil(aRect.width)), PRInt32(NS_ceil(aRect.height))); - mSurface = aSimilarTo->CreateSimilarSurface(aContentType, mSize); + mSize = aSize; + mSurface = aSimilarTo->CreateSimilarSurface(aContentType, aSize); if (!mSurface) return nsnull; @@ -124,10 +124,9 @@ gfxCachedTempSurface::Get(gfxASurface::gfxContentType aContentType, mType = aSimilarTo->GetType(); #endif } - mSurface->SetDeviceOffset(-aRect.TopLeft()); nsRefPtr ctx = new gfxContext(mSurface); - ctx->Rectangle(aRect); + ctx->Rectangle(gfxRect(0, 0, aSize.width, aSize.height)); ctx->Clip(); if (!cleared && aContentType != gfxASurface::CONTENT_COLOR) { ctx->SetOperator(gfxContext::OPERATOR_CLEAR); diff --git a/gfx/thebes/gfxCachedTempSurface.h b/gfx/thebes/gfxCachedTempSurface.h index 3904cbe32ffb..b3dbce37f397 100644 --- a/gfx/thebes/gfxCachedTempSurface.h +++ b/gfx/thebes/gfxCachedTempSurface.h @@ -71,15 +71,13 @@ public: * different format. */ already_AddRefed Get(gfxASurface::gfxContentType aContentType, - const gfxRect& aRect, + const gfxIntSize& aSize, gfxASurface* aSimilarTo); void Expire() { mSurface = nsnull; } nsExpirationState* GetExpirationState() { return &mExpirationState; } ~gfxCachedTempSurface(); - PRBool IsSurface(gfxASurface* aSurface) { return mSurface == aSurface; } - private: nsRefPtr mSurface; gfxIntSize mSize; From e093217c6bb6fd68d26fcc9bcde257474c2cd5b4 Mon Sep 17 00:00:00 2001 From: Mounir Lamouri Date: Tue, 17 May 2011 13:43:10 +0200 Subject: [PATCH 156/282] Backout bug 656749. --- layout/generic/nsFrame.cpp | 4 ++-- modules/plugin/test/mochitest/Makefile.in | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp index 1125d16880d1..e2b7f55eff08 100644 --- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -1466,8 +1466,8 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder, nsRect absPosClip; const nsStyleDisplay* disp = GetStyleDisplay(); // We can stop right away if this is a zero-opacity stacking context and - // we're painting. - if (disp->mOpacity == 0.0 && aBuilder->IsForPainting()) + // we're not checking for event handling. + if (disp->mOpacity == 0.0 && !aBuilder->IsForEventDelivery()) return NS_OK; PRBool applyAbsPosClipping = diff --git a/modules/plugin/test/mochitest/Makefile.in b/modules/plugin/test/mochitest/Makefile.in index bcdb3a49cae7..ac98f2acca99 100644 --- a/modules/plugin/test/mochitest/Makefile.in +++ b/modules/plugin/test/mochitest/Makefile.in @@ -99,7 +99,6 @@ _MOCHITEST_FILES = \ 307-xo-redirect.sjs \ test_redirect_handling.html \ test_clear_site_data.html \ - test_zero_opacity.html \ $(NULL) # test_plugin_scroll_painting.html \ bug 596491 From c6c524590d234a28e946eedec4f733ea4beb56ed Mon Sep 17 00:00:00 2001 From: Mounir Lamouri Date: Tue, 17 May 2011 13:43:40 +0200 Subject: [PATCH 157/282] Backout test fix that was needed for bug 656749. --- modules/plugin/test/mochitest/test_zero_opacity.html | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/plugin/test/mochitest/test_zero_opacity.html b/modules/plugin/test/mochitest/test_zero_opacity.html index 4e9aa7865fe2..fad5c9db45b6 100644 --- a/modules/plugin/test/mochitest/test_zero_opacity.html +++ b/modules/plugin/test/mochitest/test_zero_opacity.html @@ -17,12 +17,6 @@ var p = document.getElementById('theplugin'); function startTest() { - if (!p.hasWidget()) { - todo(false, "This test is only relevant for windowed plugins"); - SimpleTest.finish(); - return; - } - // Wait for the plugin to have painted once. var interval = setInterval(function() { if (!p.getPaintCount()) @@ -35,6 +29,10 @@ } function doTest() { + if (!p.hasWidget()) { + todo(false, "This test is only relevant for windowed plugins"); + return; + } is(p.getClipRegionRectCount(), 1, "getClipRegionRectCount should be a single rect"); is(p.getClipRegionRectEdge(0,2) - p.getClipRegionRectEdge(0,0), 100, "width of clip region rect"); is(p.getClipRegionRectEdge(0,3) - p.getClipRegionRectEdge(0,1), 50, "height of clip region rect"); From 909c4047132dedd81762d995b4ed701fecdffc91 Mon Sep 17 00:00:00 2001 From: Ehren Metcalfe Date: Tue, 17 May 2011 15:54:09 +0200 Subject: [PATCH 158/282] Bug 551390 - Remove dead code in content r=sicking,roc --- content/base/public/nsContentUtils.h | 40 ---------- content/base/public/nsXMLNameSpaceMap.h | 3 - content/base/src/nsContentUtils.cpp | 74 ------------------- content/base/src/nsParserUtils.cpp | 69 ----------------- content/base/src/nsParserUtils.h | 18 ----- content/base/src/nsPlainTextSerializer.h | 1 - content/base/src/nsXMLNameSpaceMap.cpp | 6 -- .../html/content/src/nsGenericHTMLElement.cpp | 13 +--- .../html/content/src/nsGenericHTMLElement.h | 11 +-- .../html/document/src/nsHTMLContentSink.cpp | 16 ---- 10 files changed, 4 insertions(+), 247 deletions(-) diff --git a/content/base/public/nsContentUtils.h b/content/base/public/nsContentUtils.h index bb99d7c2aa30..d86c8e9e5ac4 100644 --- a/content/base/public/nsContentUtils.h +++ b/content/base/public/nsContentUtils.h @@ -319,20 +319,6 @@ public: nsINode* aParent2, PRInt32 aOffset2, PRBool* aDisconnected = nsnull); - /** - * Find the first child of aParent with a resolved tag matching - * aNamespace and aTag. Both the explicit and anonymous children of - * aParent are examined. The return value is not addrefed. - * - * XXXndeakin this should return the first child whether in anonymous or - * explicit children, but currently XBL doesn't tell us the relative - * ordering of anonymous vs explicit children, so instead it searches - * the explicit children first then the anonymous children. - */ - static nsIContent* FindFirstChildWithResolvedTag(nsIContent* aParent, - PRInt32 aNamespace, - nsIAtom* aTag); - /** * Brute-force search of the element subtree rooted at aContent for * an element with the given id. aId must be nonempty, otherwise @@ -345,24 +331,6 @@ public: */ static Element* MatchElementId(nsIContent *aContent, const nsIAtom* aId); - /** - * Given a URI containing an element reference (#whatever), - * resolve it to the target content element with the given ID. - * - * If aFromContent is anonymous XBL content then the URI - * must refer to its binding document and we will return - * a node in the same anonymous content subtree as aFromContent, - * if one exists with the correct ID. - * - * @param aFromContent the context of the reference; - * currently we only support references to elements in the - * same document as the context, so this must be non-null - * - * @return the element, or nsnull on failure - */ - static nsIContent* GetReferencedElement(nsIURI* aURI, - nsIContent *aFromContent); - /** * Reverses the document position flags passed in. * @@ -440,14 +408,6 @@ public: // aWindow can be either outer or inner window. static PRBool CanCallerAccess(nsPIDOMWindow* aWindow); - /** - * Get the docshell through the JS context that's currently on the stack. - * If there's no JS context currently on the stack aDocShell will be null. - * - * @param aDocShell The docshell or null if no JS context - */ - static nsIDocShell *GetDocShellFromCaller(); - /** * Get the window through the JS context that's currently on the stack. * If there's no JS context currently on the stack, returns null. diff --git a/content/base/public/nsXMLNameSpaceMap.h b/content/base/public/nsXMLNameSpaceMap.h index c41d3fcba418..82b2d28c809a 100644 --- a/content/base/public/nsXMLNameSpaceMap.h +++ b/content/base/public/nsXMLNameSpaceMap.h @@ -79,9 +79,6 @@ public: */ NS_HIDDEN_(nsresult) AddPrefix(nsIAtom *aPrefix, nsString &aURI); - /* Remove a prefix from the map. */ - NS_HIDDEN_(void) RemovePrefix(nsIAtom *aPrefix); - /* * Returns the namespace ID for the given prefix, if it is in the map. * If |aPrefix| is null and is not in the map, then a null namespace diff --git a/content/base/src/nsContentUtils.cpp b/content/base/src/nsContentUtils.cpp index a76aec4eb2eb..a7f46cd4f9ac 100644 --- a/content/base/src/nsContentUtils.cpp +++ b/content/base/src/nsContentUtils.cpp @@ -1523,24 +1523,6 @@ nsContentUtils::ReparentContentWrappersInScope(nsIScriptGlobalObject *aOldScope, return sXPConnect->MoveWrappers(cx, oldScopeObj, newScopeObj); } -nsIDocShell * -nsContentUtils::GetDocShellFromCaller() -{ - JSContext *cx = nsnull; - sThreadJSContextStack->Peek(&cx); - - if (cx) { - nsIScriptGlobalObject *sgo = nsJSUtils::GetDynamicScriptGlobal(cx); - nsCOMPtr win(do_QueryInterface(sgo)); - - if (win) { - return win->GetDocShell(); - } - } - - return nsnull; -} - nsPIDOMWindow * nsContentUtils::GetWindowFromCaller() { @@ -1846,53 +1828,6 @@ nsContentUtils::ComparePoints(nsINode* aParent1, PRInt32 aOffset1, return parent->IndexOf(child1) < aOffset2 ? -1 : 1; } -nsIContent* -nsContentUtils::FindFirstChildWithResolvedTag(nsIContent* aParent, - PRInt32 aNamespace, - nsIAtom* aTag) -{ - nsIDocument* doc; - if (!aParent || !(doc = aParent->GetOwnerDoc())) { - return nsnull; - } - - nsBindingManager* bindingManager = doc->BindingManager(); - - PRInt32 namespaceID; - PRUint32 count = aParent->GetChildCount(); - - PRUint32 i; - - for (i = 0; i < count; i++) { - nsIContent *child = aParent->GetChildAt(i); - nsIAtom* tag = bindingManager->ResolveTag(child, &namespaceID); - if (tag == aTag && namespaceID == aNamespace) { - return child; - } - } - - // now look for children in XBL - nsCOMPtr children; - bindingManager->GetXBLChildNodesFor(aParent, getter_AddRefs(children)); - if (!children) { - return nsnull; - } - - PRUint32 length; - children->GetLength(&length); - for (i = 0; i < length; i++) { - nsCOMPtr childNode; - children->Item(i, getter_AddRefs(childNode)); - nsCOMPtr childContent = do_QueryInterface(childNode); - nsIAtom* tag = bindingManager->ResolveTag(childContent, &namespaceID); - if (tag == aTag && namespaceID == aNamespace) { - return childContent; - } - } - - return nsnull; -} - inline PRBool IsCharInSet(const char* aSet, const PRUnichar aChar) @@ -3601,15 +3536,6 @@ nsContentUtils::CheckForBOM(const unsigned char* aBuffer, PRUint32 aLength, return found; } -/* static */ -nsIContent* -nsContentUtils::GetReferencedElement(nsIURI* aURI, nsIContent *aFromContent) -{ - nsReferencedElement ref; - ref.Reset(aFromContent, aURI); - return ref.get(); -} - /* static */ void nsContentUtils::RegisterShutdownObserver(nsIObserver* aObserver) diff --git a/content/base/src/nsParserUtils.cpp b/content/base/src/nsParserUtils.cpp index 833390c3fe28..9e143ef4c2a4 100644 --- a/content/base/src/nsParserUtils.cpp +++ b/content/base/src/nsParserUtils.cpp @@ -171,75 +171,6 @@ nsParserUtils::GetQuotedAttributeValue(const nsString& aSource, nsIAtom *aName, return PR_FALSE; } -PRBool -nsParserUtils::GetQuotedAttrNameAt(const nsString& aSource, PRUint32 aIndex, - nsAString& aName) -{ - aName.Truncate(); - - const PRUnichar *start = aSource.get(); - const PRUnichar *end = start + aSource.Length(); - const PRUnichar *iter; - PRUint32 currIndex = 0; - - for (;;) { - SKIP_WHITESPACE(start, end, PR_TRUE) - - iter = start; - SKIP_ATTR_NAME(iter, end) - - if (start == iter) { - return PR_FALSE; - } - - // Remember the attr name. - const nsDependentSubstring & attrName = Substring(start, iter); - - // Now check whether this is a valid name="value" pair. - start = iter; - SKIP_WHITESPACE(start, end, PR_FALSE); - if (*start != '=') { - // No '=', so this is not a name="value" pair. We don't know - // what it is, and we have no way to handle it. - return PR_FALSE; - } - - // Have to skip the value. - ++start; - SKIP_WHITESPACE(start, end, PR_FALSE); - PRUnichar q = *start; - if (q != kQuote && q != kApostrophe) { - // Not a valid quoted value, so bail. - return PR_FALSE; - } - - // Scan to the end of the value. - do { - ++start; - } while (start != end && *start != q); - - if (start == end) { - // Oops, unterminated quoted string. - return PR_FALSE; - } - - // At this point attrName holds the name of the "attribute" - - if (aIndex == currIndex) { - aName = attrName; - - return PR_TRUE; - } - - // Resume scanning after the end of the attribute value (past the quote - // char). - ++start; - ++currIndex; - } - - return PR_TRUE; -} - // Returns PR_TRUE if the language name is a version of JavaScript and // PR_FALSE otherwise PRBool diff --git a/content/base/src/nsParserUtils.h b/content/base/src/nsParserUtils.h index c7a8e503d75f..abdbc3b5d643 100644 --- a/content/base/src/nsParserUtils.h +++ b/content/base/src/nsParserUtils.h @@ -65,24 +65,6 @@ public: GetQuotedAttributeValue(const nsString& aSource, nsIAtom *aName, nsAString& aValue); - /** - * This will parse aSource, to extract the name of the pseudo attribute - * at the specified index. See - * http://www.w3.org/TR/xml-stylesheet/#NT-StyleSheetPI for the specification - * which is used to parse aSource. - * - * @param aSource the string to parse - * @param aIndex the index of the attribute to get the value for - * @param aName [out] the name for the attribute with specified index. - * Empty if there aren't enough attributes. - * @return PR_TRUE if parsing succeeded, even if there aren't enough - * attributes. - * PR_FALSE if parsing failed. - */ - static PRBool - GetQuotedAttrNameAt(const nsString& aSource, PRUint32 aIndex, - nsAString& aName); - static PRBool IsJavaScriptLanguage(const nsString& aName, PRUint32 *aVerFlags); diff --git a/content/base/src/nsPlainTextSerializer.h b/content/base/src/nsPlainTextSerializer.h index 919bb5152a9e..06fa54a9a74e 100644 --- a/content/base/src/nsPlainTextSerializer.h +++ b/content/base/src/nsPlainTextSerializer.h @@ -123,7 +123,6 @@ public: NS_IMETHOD BeginContext(PRInt32 aPosition) { return NS_OK; } NS_IMETHOD EndContext(PRInt32 aPosition) { return NS_OK; } - NS_IMETHOD WillProcessTokens(void) { return NS_OK; } NS_IMETHOD DidProcessTokens(void) { return NS_OK; } NS_IMETHOD WillProcessAToken(void) { return NS_OK; } NS_IMETHOD DidProcessAToken(void) { return NS_OK; } diff --git a/content/base/src/nsXMLNameSpaceMap.cpp b/content/base/src/nsXMLNameSpaceMap.cpp index 076d3c4221ca..2847bae381d1 100644 --- a/content/base/src/nsXMLNameSpaceMap.cpp +++ b/content/base/src/nsXMLNameSpaceMap.cpp @@ -109,12 +109,6 @@ nsXMLNameSpaceMap::AddPrefix(nsIAtom *aPrefix, nsString &aURI) return AddPrefix(aPrefix, id); } -void -nsXMLNameSpaceMap::RemovePrefix(nsIAtom *aPrefix) -{ - mNameSpaces.RemoveElement(aPrefix); -} - PRInt32 nsXMLNameSpaceMap::FindNameSpaceID(nsIAtom *aPrefix) const { diff --git a/content/html/content/src/nsGenericHTMLElement.cpp b/content/html/content/src/nsGenericHTMLElement.cpp index 0b8489383eac..5ec9317ced62 100644 --- a/content/html/content/src/nsGenericHTMLElement.cpp +++ b/content/html/content/src/nsGenericHTMLElement.cpp @@ -1090,17 +1090,11 @@ nsGenericHTMLElement::GetHrefURIForAnchors() const // We use the nsAttrValue's copy of the URI string to avoid copying. nsCOMPtr uri; - GetURIAttr(nsGkAtoms::href, nsnull, PR_FALSE, getter_AddRefs(uri)); + GetURIAttr(nsGkAtoms::href, nsnull, getter_AddRefs(uri)); return uri.forget(); } -void -nsGenericHTMLElement::GetHrefURIToMutate(nsIURI** aURI) -{ - GetURIAttr(nsGkAtoms::href, nsnull, PR_TRUE, aURI); -} - nsresult nsGenericHTMLElement::AfterSetAttr(PRInt32 aNamespaceID, nsIAtom* aName, const nsAString* aValue, PRBool aNotify) @@ -2193,7 +2187,7 @@ nsresult nsGenericHTMLElement::GetURIAttr(nsIAtom* aAttr, nsIAtom* aBaseAttr, nsAString& aResult) { nsCOMPtr uri; - PRBool hadAttr = GetURIAttr(aAttr, aBaseAttr, PR_FALSE, getter_AddRefs(uri)); + PRBool hadAttr = GetURIAttr(aAttr, aBaseAttr, getter_AddRefs(uri)); if (!hadAttr) { aResult.Truncate(); return NS_OK; @@ -2212,8 +2206,7 @@ nsGenericHTMLElement::GetURIAttr(nsIAtom* aAttr, nsIAtom* aBaseAttr, nsAString& } PRBool -nsGenericHTMLElement::GetURIAttr(nsIAtom* aAttr, nsIAtom* aBaseAttr, - PRBool aCloneIfCached, nsIURI** aURI) const +nsGenericHTMLElement::GetURIAttr(nsIAtom* aAttr, nsIAtom* aBaseAttr, nsIURI** aURI) const { *aURI = nsnull; diff --git a/content/html/content/src/nsGenericHTMLElement.h b/content/html/content/src/nsGenericHTMLElement.h index a47b1e157aa5..9e8cafbd8994 100644 --- a/content/html/content/src/nsGenericHTMLElement.h +++ b/content/html/content/src/nsGenericHTMLElement.h @@ -192,11 +192,6 @@ public: nsresult PostHandleEventForAnchors(nsEventChainPostVisitor& aVisitor); PRBool IsHTMLLink(nsIURI** aURI) const; - // As above, but makes sure to return a URI object that we can mutate with - // impunity without changing our current URI. That is, if the URI is cached - // it clones it and returns the clone. - void GetHrefURIToMutate(nsIURI** aURI); - // HTML element methods void Compact() { mAttrsAndChildren.Compact(); } @@ -708,13 +703,9 @@ protected: * Helper for GetURIAttr and GetHrefURIForAnchors which returns an * nsIURI in the out param. * - * @param aCloneIfCached if true, clone the URI before returning if - * it's cached. - * * @return PR_TRUE if we had the attr, PR_FALSE otherwise. */ - NS_HIDDEN_(PRBool) GetURIAttr(nsIAtom* aAttr, nsIAtom* aBaseAttr, - PRBool aCloneIfCached, nsIURI** aURI) const; + NS_HIDDEN_(PRBool) GetURIAttr(nsIAtom* aAttr, nsIAtom* aBaseAttr, nsIURI** aURI) const; /** * This method works like GetURIAttr, except that it supports multiple diff --git a/content/html/document/src/nsHTMLContentSink.cpp b/content/html/document/src/nsHTMLContentSink.cpp index d6d1f7b6cf61..3054d7d740c4 100644 --- a/content/html/document/src/nsHTMLContentSink.cpp +++ b/content/html/document/src/nsHTMLContentSink.cpp @@ -344,7 +344,6 @@ public: nsresult FlushTags(); PRBool IsCurrentContainer(nsHTMLTag mType); - PRBool IsAncestorContainer(nsHTMLTag mType); void DidAddContent(nsIContent* aContent); void UpdateChildCounts(); @@ -664,21 +663,6 @@ SinkContext::IsCurrentContainer(nsHTMLTag aTag) return PR_FALSE; } -PRBool -SinkContext::IsAncestorContainer(nsHTMLTag aTag) -{ - PRInt32 stackPos = mStackPos - 1; - - while (stackPos >= 0) { - if (aTag == mStack[stackPos].mType) { - return PR_TRUE; - } - stackPos--; - } - - return PR_FALSE; -} - void SinkContext::DidAddContent(nsIContent* aContent) { From 1ccdeadb64df5ed49496a708ff35d833cfecd7d3 Mon Sep 17 00:00:00 2001 From: Hiroyuki Ikezoe Date: Tue, 17 May 2011 15:55:16 +0200 Subject: [PATCH 159/282] Bug 657487 - Include static keyword in definitions of signal callback functions. r=karlt --- widget/src/gtk2/nsDragService.cpp | 9 +-- widget/src/gtk2/nsWindow.cpp | 109 +++++++++++------------------- 2 files changed, 42 insertions(+), 76 deletions(-) diff --git a/widget/src/gtk2/nsDragService.cpp b/widget/src/gtk2/nsDragService.cpp index 1caa30184543..feaca717b22e 100644 --- a/widget/src/gtk2/nsDragService.cpp +++ b/widget/src/gtk2/nsDragService.cpp @@ -1585,8 +1585,7 @@ nsDragService::SourceDataGet(GtkWidget *aWidget, } } -/* static */ -void +static void invisibleSourceDragDataGet(GtkWidget *aWidget, GdkDragContext *aContext, GtkSelectionData *aSelectionData, @@ -1600,8 +1599,7 @@ invisibleSourceDragDataGet(GtkWidget *aWidget, aSelectionData, aInfo, aTime); } -/* static */ -gboolean +static gboolean invisibleSourceDragFailed(GtkWidget *aWidget, GdkDragContext *aContext, gint aResult, @@ -1620,8 +1618,7 @@ invisibleSourceDragFailed(GtkWidget *aWidget, return FALSE; } -/* static */ -void +static void invisibleSourceDragEnd(GtkWidget *aWidget, GdkDragContext *aContext, gpointer aData) diff --git a/widget/src/gtk2/nsWindow.cpp b/widget/src/gtk2/nsWindow.cpp index 009271834ddd..d6cc93052131 100644 --- a/widget/src/gtk2/nsWindow.cpp +++ b/widget/src/gtk2/nsWindow.cpp @@ -5251,7 +5251,7 @@ nsWindow::HideWindowChrome(PRBool aShouldHide) return NS_OK; } -PRBool +static PRBool check_for_rollup(GdkWindow *aWindow, gdouble aMouseX, gdouble aMouseY, PRBool aIsWheel, PRBool aAlwaysRollup) { @@ -5322,8 +5322,7 @@ nsWindow::DragInProgress(void) return (sLastDragMotionWindow || sIsDraggingOutOf); } -/* static */ -PRBool +static PRBool is_mouse_in_window (GdkWindow* aWindow, gdouble aMouseX, gdouble aMouseY) { gint x = 0; @@ -5364,8 +5363,7 @@ is_mouse_in_window (GdkWindow* aWindow, gdouble aMouseX, gdouble aMouseY) return PR_FALSE; } -/* static */ -nsWindow * +static nsWindow * get_window_for_gtk_widget(GtkWidget *widget) { gpointer user_data = g_object_get_data(G_OBJECT(widget), "nsWindow"); @@ -5373,8 +5371,7 @@ get_window_for_gtk_widget(GtkWidget *widget) return static_cast(user_data); } -/* static */ -nsWindow * +static nsWindow * get_window_for_gdk_window(GdkWindow *window) { gpointer user_data = g_object_get_data(G_OBJECT(window), "nsWindow"); @@ -5382,8 +5379,7 @@ get_window_for_gdk_window(GdkWindow *window) return static_cast(user_data); } -/* static */ -GtkWidget * +static GtkWidget * get_gtk_widget_for_gdk_window(GdkWindow *window) { gpointer user_data = NULL; @@ -5392,8 +5388,7 @@ get_gtk_widget_for_gdk_window(GdkWindow *window) return GTK_WIDGET(user_data); } -/* static */ -GdkCursor * +static GdkCursor * get_gtk_cursor(nsCursor aCursor) { GdkPixmap *cursor; @@ -5548,8 +5543,7 @@ get_gtk_cursor(nsCursor aCursor) // gtk callbacks -/* static */ -gboolean +static gboolean expose_event_cb(GtkWidget *widget, GdkEventExpose *event) { nsRefPtr window = get_window_for_gdk_window(event->window); @@ -5568,8 +5562,7 @@ expose_event_cb(GtkWidget *widget, GdkEventExpose *event) return FALSE; } -/* static */ -gboolean +static gboolean configure_event_cb(GtkWidget *widget, GdkEventConfigure *event) { @@ -5580,8 +5573,7 @@ configure_event_cb(GtkWidget *widget, return window->OnConfigureEvent(widget, event); } -/* static */ -void +static void container_unrealize_cb (GtkWidget *widget) { nsRefPtr window = get_window_for_gtk_widget(widget); @@ -5591,8 +5583,7 @@ container_unrealize_cb (GtkWidget *widget) window->OnContainerUnrealize(widget); } -/* static */ -void +static void size_allocate_cb (GtkWidget *widget, GtkAllocation *allocation) { nsRefPtr window = get_window_for_gtk_widget(widget); @@ -5602,8 +5593,7 @@ size_allocate_cb (GtkWidget *widget, GtkAllocation *allocation) window->OnSizeAllocate(widget, allocation); } -/* static */ -gboolean +static gboolean delete_event_cb(GtkWidget *widget, GdkEventAny *event) { nsRefPtr window = get_window_for_gtk_widget(widget); @@ -5615,8 +5605,7 @@ delete_event_cb(GtkWidget *widget, GdkEventAny *event) return TRUE; } -/* static */ -gboolean +static gboolean enter_notify_event_cb(GtkWidget *widget, GdkEventCrossing *event) { @@ -5629,8 +5618,7 @@ enter_notify_event_cb(GtkWidget *widget, return TRUE; } -/* static */ -gboolean +static gboolean leave_notify_event_cb(GtkWidget *widget, GdkEventCrossing *event) { @@ -5657,7 +5645,7 @@ leave_notify_event_cb(GtkWidget *widget, return TRUE; } -nsWindow* +static nsWindow* GetFirstNSWindowForGDKWindow(GdkWindow *aGdkWindow) { nsWindow* window; @@ -5674,8 +5662,7 @@ GetFirstNSWindowForGDKWindow(GdkWindow *aGdkWindow) return window; } -/* static */ -gboolean +static gboolean motion_notify_event_cb(GtkWidget *widget, GdkEventMotion *event) { UpdateLastInputEventTime(); @@ -5692,8 +5679,7 @@ motion_notify_event_cb(GtkWidget *widget, GdkEventMotion *event) return TRUE; } -/* static */ -gboolean +static gboolean button_press_event_cb(GtkWidget *widget, GdkEventButton *event) { UpdateLastInputEventTime(); @@ -5707,8 +5693,7 @@ button_press_event_cb(GtkWidget *widget, GdkEventButton *event) return TRUE; } -/* static */ -gboolean +static gboolean button_release_event_cb(GtkWidget *widget, GdkEventButton *event) { UpdateLastInputEventTime(); @@ -5722,8 +5707,7 @@ button_release_event_cb(GtkWidget *widget, GdkEventButton *event) return TRUE; } -/* static */ -gboolean +static gboolean focus_in_event_cb(GtkWidget *widget, GdkEventFocus *event) { nsRefPtr window = get_window_for_gtk_widget(widget); @@ -5735,8 +5719,7 @@ focus_in_event_cb(GtkWidget *widget, GdkEventFocus *event) return FALSE; } -/* static */ -gboolean +static gboolean focus_out_event_cb(GtkWidget *widget, GdkEventFocus *event) { nsRefPtr window = get_window_for_gtk_widget(widget); @@ -5767,7 +5750,7 @@ focus_out_event_cb(GtkWidget *widget, GdkEventFocus *event) // example), a request to make the parent window active is issued. When the // parent window becomes active, keyboard events will be received. -GdkFilterReturn +static GdkFilterReturn popup_take_focus_filter(GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data) @@ -5811,8 +5794,7 @@ popup_take_focus_filter(GdkXEvent *gdk_xevent, return GDK_FILTER_REMOVE; } -/* static */ -GdkFilterReturn +static GdkFilterReturn plugin_window_filter_func(GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data) { GdkWindow *plugin_window; @@ -5870,8 +5852,7 @@ plugin_window_filter_func(GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data) return return_val; } -/* static */ -GdkFilterReturn +static GdkFilterReturn plugin_client_message_filter(GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data) @@ -5905,8 +5886,7 @@ plugin_client_message_filter(GdkXEvent *gdk_xevent, } #endif /* MOZ_X11 */ -/* static */ -gboolean +static gboolean key_press_event_cb(GtkWidget *widget, GdkEventKey *event) { LOG(("key_press_event_cb\n")); @@ -5949,7 +5929,7 @@ key_press_event_cb(GtkWidget *widget, GdkEventKey *event) return focusWindow->OnKeyPressEvent(widget, event); } -gboolean +static gboolean key_release_event_cb(GtkWidget *widget, GdkEventKey *event) { LOG(("key_release_event_cb\n")); @@ -5966,8 +5946,7 @@ key_release_event_cb(GtkWidget *widget, GdkEventKey *event) return focusWindow->OnKeyReleaseEvent(widget, event); } -/* static */ -gboolean +static gboolean scroll_event_cb(GtkWidget *widget, GdkEventScroll *event) { nsWindow *window = GetFirstNSWindowForGDKWindow(event->window); @@ -5979,8 +5958,7 @@ scroll_event_cb(GtkWidget *widget, GdkEventScroll *event) return TRUE; } -/* static */ -gboolean +static gboolean visibility_notify_event_cb (GtkWidget *widget, GdkEventVisibility *event) { nsRefPtr window = get_window_for_gdk_window(event->window); @@ -6030,8 +6008,7 @@ hierarchy_changed_cb (GtkWidget *widget, } } -/* static */ -gboolean +static gboolean window_state_event_cb (GtkWidget *widget, GdkEventWindowState *event) { nsRefPtr window = get_window_for_gtk_widget(widget); @@ -6043,8 +6020,7 @@ window_state_event_cb (GtkWidget *widget, GdkEventWindowState *event) return FALSE; } -/* static */ -void +static void theme_changed_cb (GtkSettings *settings, GParamSpec *pspec, nsWindow *data) { nsRefPtr window = data; @@ -6103,8 +6079,7 @@ nsWindow::UpdateDragStatus(GdkDragContext *aDragContext, } -/* static */ -gboolean +static gboolean drag_motion_event_cb(GtkWidget *aWidget, GdkDragContext *aDragContext, gint aX, @@ -6120,8 +6095,8 @@ drag_motion_event_cb(GtkWidget *aWidget, aDragContext, aX, aY, aTime, aData); } -/* static */ -void + +static void drag_leave_event_cb(GtkWidget *aWidget, GdkDragContext *aDragContext, guint aTime, @@ -6135,8 +6110,7 @@ drag_leave_event_cb(GtkWidget *aWidget, } -/* static */ -gboolean +static gboolean drag_drop_event_cb(GtkWidget *aWidget, GdkDragContext *aDragContext, gint aX, @@ -6153,8 +6127,7 @@ drag_drop_event_cb(GtkWidget *aWidget, aX, aY, aTime, aData); } -/* static */ -void +static void drag_data_received_event_cb(GtkWidget *aWidget, GdkDragContext *aDragContext, gint aX, @@ -6175,8 +6148,7 @@ drag_data_received_event_cb(GtkWidget *aWidget, aInfo, aTime, aData); } -/* static */ -nsresult +static nsresult initialize_prefs(void) { nsCOMPtr prefs = do_GetService(NS_PREFSERVICE_CONTRACTID); @@ -6221,8 +6193,7 @@ nsWindow::DragLeaveTimerCallback(nsITimer *aTimer, void *aClosure) window->FireDragLeaveTimer(); } -/* static */ -GdkWindow * +static GdkWindow * get_inner_gdk_window (GdkWindow *aWindow, gint x, gint y, gint *retx, gint *rety) @@ -6249,7 +6220,7 @@ get_inner_gdk_window (GdkWindow *aWindow, return aWindow; } -inline PRBool +static inline PRBool is_context_menu_key(const nsKeyEvent& aKeyEvent) { return ((aKeyEvent.keyCode == NS_VK_F10 && aKeyEvent.isShift && @@ -6258,7 +6229,7 @@ is_context_menu_key(const nsKeyEvent& aKeyEvent) !aKeyEvent.isControl && !aKeyEvent.isMeta && !aKeyEvent.isAlt)); } -void +static void key_event_to_context_menu_event(nsMouseEvent &aEvent, GdkEventKey *aGdkEvent) { @@ -6271,8 +6242,7 @@ key_event_to_context_menu_event(nsMouseEvent &aEvent, aEvent.clickCount = 1; } -/* static */ -int +static int is_parent_ungrab_enter(GdkEventCrossing *aEvent) { return (GDK_CROSSING_UNGRAB == aEvent->mode) && @@ -6281,8 +6251,7 @@ is_parent_ungrab_enter(GdkEventCrossing *aEvent) } -/* static */ -int +static int is_parent_grab_leave(GdkEventCrossing *aEvent) { return (GDK_CROSSING_GRAB == aEvent->mode) && From 9a5251cb2be6d8c1c86b047e76354f127fac3f1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20=C3=81vila=20de=20Ep=C3=ADndola?= Date: Tue, 17 May 2011 16:00:30 +0200 Subject: [PATCH 160/282] Bug 655865 - Fix --enable-accessibility build with clang. r=smichaud,joshmoz --- accessible/src/mac/mozAccessible.mm | 6 +++--- accessible/src/mac/nsAccessibleWrap.h | 5 +++-- accessible/src/mac/nsAccessibleWrap.mm | 2 +- accessible/src/mac/nsRootAccessibleWrap.h | 2 +- accessible/src/mac/nsRootAccessibleWrap.mm | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/accessible/src/mac/mozAccessible.mm b/accessible/src/mac/mozAccessible.mm index 655cb59c31e8..3a43aa1a0c3c 100644 --- a/accessible/src/mac/mozAccessible.mm +++ b/accessible/src/mac/mozAccessible.mm @@ -238,7 +238,7 @@ GetNativeFromGeckoAccessible(nsIAccessible *anAccessible) if ([attribute isEqualToString:NSAccessibilityRoleDescriptionAttribute]) return NSAccessibilityRoleDescription([self role], nil); #endif - if ([attribute isEqualToString:kInstanceDescriptionAttribute]) + if ([attribute isEqualToString: (NSString*) kInstanceDescriptionAttribute]) return [self customDescription]; if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) return [NSNumber numberWithBool:[self isFocused]]; @@ -246,7 +246,7 @@ GetNativeFromGeckoAccessible(nsIAccessible *anAccessible) return [self size]; if ([attribute isEqualToString:NSAccessibilityWindowAttribute]) return [self window]; - if ([attribute isEqualToString:kTopLevelUIElementAttribute]) + if ([attribute isEqualToString: (NSString*) kTopLevelUIElementAttribute]) return [self window]; if ([attribute isEqualToString:NSAccessibilityTitleAttribute] || [attribute isEqualToString:NSAccessibilityTitleUIElementAttribute]) @@ -471,7 +471,7 @@ GetNativeFromGeckoAccessible(nsIAccessible *anAccessible) NS_ASSERTION(nsAccUtils::IsTextInterfaceSupportCorrect(mGeckoAccessible), "Does not support nsIAccessibleText when it should"); #endif - return AXRoles[mRole]; + return (NSString*) AXRoles[mRole]; } - (NSString*)subrole diff --git a/accessible/src/mac/nsAccessibleWrap.h b/accessible/src/mac/nsAccessibleWrap.h index 6c08ba0e898b..e36d46df327b 100644 --- a/accessible/src/mac/nsAccessibleWrap.h +++ b/accessible/src/mac/nsAccessibleWrap.h @@ -43,6 +43,8 @@ #ifndef _nsAccessibleWrap_H_ #define _nsAccessibleWrap_H_ +#include + #include "nsAccessible.h" #include "nsAccUtils.h" #include "States.h" @@ -54,7 +56,6 @@ #include "nsAutoPtr.h" struct AccessibleWrapper; -struct objc_class; class nsAccessibleWrap : public nsAccessible { @@ -71,7 +72,7 @@ class nsAccessibleWrap : public nsAccessible // the objective-c |Class| type that this accessible's native object // should be instantied with. used on runtime to determine the // right type for this accessible's associated native object. - virtual objc_class* GetNativeType (); + virtual Class GetNativeType (); virtual void Shutdown (); virtual void InvalidateChildren(); diff --git a/accessible/src/mac/nsAccessibleWrap.mm b/accessible/src/mac/nsAccessibleWrap.mm index 181d5d3488d2..316ca7d56356 100644 --- a/accessible/src/mac/nsAccessibleWrap.mm +++ b/accessible/src/mac/nsAccessibleWrap.mm @@ -88,7 +88,7 @@ nsAccessibleWrap::GetNativeInterface (void **aOutInterface) // overridden in subclasses to create the right kind of object. by default we create a generic // 'mozAccessible' node. -objc_class* +Class nsAccessibleWrap::GetNativeType () { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; diff --git a/accessible/src/mac/nsRootAccessibleWrap.h b/accessible/src/mac/nsRootAccessibleWrap.h index c40063636912..ee69b23f6d52 100644 --- a/accessible/src/mac/nsRootAccessibleWrap.h +++ b/accessible/src/mac/nsRootAccessibleWrap.h @@ -54,7 +54,7 @@ public: nsIWeakReference *aShell); virtual ~nsRootAccessibleWrap(); - objc_class* GetNativeType (); + Class GetNativeType (); // let's our native accessible get in touch with the // native cocoa view that is our accessible parent. diff --git a/accessible/src/mac/nsRootAccessibleWrap.mm b/accessible/src/mac/nsRootAccessibleWrap.mm index cbd1452a4463..b4bc62f07c12 100644 --- a/accessible/src/mac/nsRootAccessibleWrap.mm +++ b/accessible/src/mac/nsRootAccessibleWrap.mm @@ -59,7 +59,7 @@ nsRootAccessibleWrap::~nsRootAccessibleWrap() { } -objc_class* +Class nsRootAccessibleWrap::GetNativeType () { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; From 91238e76b12a8a1ab6e0e0358d263dcdc74b2a3e Mon Sep 17 00:00:00 2001 From: Ed Morley Date: Tue, 17 May 2011 16:01:36 +0200 Subject: [PATCH 161/282] Bug 316661 - Part A - Remove null-checks before delete. r=bsmedberg --- accessible/src/atk/nsAccessibleWrap.cpp | 4 +--- content/xul/document/src/nsXULControllers.cpp | 3 +-- dom/plugins/ipc/PluginInstanceParent.cpp | 7 ++----- editor/txmgr/src/nsTransactionItem.cpp | 6 ++---- .../webbrowserpersist/src/nsWebBrowserPersist.cpp | 15 +++------------ .../system-pref/src/gconf/nsSystemPrefService.cpp | 3 +-- .../src/base/nsUniversalDetector.cpp | 7 +++---- gfx/ipc/SharedDIB.cpp | 3 +-- gfx/thebes/gfxFont.cpp | 4 +--- gfx/thebes/gfxOS2Fonts.cpp | 4 +--- layout/generic/nsObjectFrame.cpp | 7 ++----- layout/generic/nsSimplePageSequence.cpp | 4 ++-- layout/mathml/nsMathMLChar.cpp | 5 ----- layout/mathml/nsMathMLmfencedFrame.cpp | 4 ++-- modules/libpr0n/src/RasterImage.cpp | 3 +-- netwerk/base/src/nsProtocolProxyService.cpp | 3 +-- netwerk/cache/nsCacheService.cpp | 4 +--- parser/html/nsHtml5Tokenizer.cpp | 4 +--- parser/htmlparser/src/nsDTDUtils.cpp | 4 +--- parser/htmlparser/src/nsScanner.cpp | 4 +--- security/manager/ssl/src/nsCertTree.cpp | 4 +--- widget/src/xpwidgets/nsBaseWidget.cpp | 3 +-- xpcom/glue/nsDeque.cpp | 4 +--- xpcom/io/nsStorageStream.cpp | 3 +-- xpcom/tests/TestTimers.cpp | 4 +--- xpinstall/src/nsXPITriggerInfo.cpp | 3 +-- 26 files changed, 34 insertions(+), 85 deletions(-) diff --git a/accessible/src/atk/nsAccessibleWrap.cpp b/accessible/src/atk/nsAccessibleWrap.cpp index 19b6bc3f5212..2bd95a470f83 100644 --- a/accessible/src/atk/nsAccessibleWrap.cpp +++ b/accessible/src/atk/nsAccessibleWrap.cpp @@ -341,9 +341,7 @@ void nsAccessibleWrap::SetMaiHyperlink(MaiHyperlink* aMaiHyperlink) if (!maiHyperlink && !aMaiHyperlink) { return; // Never set and we're shutting down } - if (maiHyperlink) { - delete maiHyperlink; - } + delete maiHyperlink; g_object_set_qdata(G_OBJECT(mAtkObject), quark_mai_hyperlink, aMaiHyperlink); } diff --git a/content/xul/document/src/nsXULControllers.cpp b/content/xul/document/src/nsXULControllers.cpp index 3b6d68c2ded1..7f846451a670 100644 --- a/content/xul/document/src/nsXULControllers.cpp +++ b/content/xul/document/src/nsXULControllers.cpp @@ -71,8 +71,7 @@ nsXULControllers::DeleteControllers() for (PRUint32 i = 0; i < count; i++) { nsXULControllerData* controllerData = mControllers.ElementAt(i); - if (controllerData) - delete controllerData; // releases the nsIController + delete controllerData; // releases the nsIController } mControllers.Clear(); diff --git a/dom/plugins/ipc/PluginInstanceParent.cpp b/dom/plugins/ipc/PluginInstanceParent.cpp index 55e8db705d4e..7125fcdbffc3 100644 --- a/dom/plugins/ipc/PluginInstanceParent.cpp +++ b/dom/plugins/ipc/PluginInstanceParent.cpp @@ -141,8 +141,7 @@ PluginInstanceParent::~PluginInstanceParent() } if (mShColorSpace) ::CGColorSpaceRelease(mShColorSpace); - if (mIOSurface) - delete mIOSurface; + delete mIOSurface; if (mDrawingModel == NPDrawingModelCoreAnimation) { mParent->RemoveFromRefreshTimer(this); } @@ -870,9 +869,7 @@ PluginInstanceParent::NPP_SetWindow(const NPWindow* aWindow) if (mShWidth != window.width || mShHeight != window.height) { if (mDrawingModel == NPDrawingModelCoreAnimation || mDrawingModel == NPDrawingModelInvalidatingCoreAnimation) { - if (mIOSurface) { - delete mIOSurface; - } + delete mIOSurface; mIOSurface = nsIOSurface::CreateIOSurface(window.width, window.height); } else if (mShWidth * mShHeight != window.width * window.height) { if (mShWidth != 0 && mShHeight != 0) { diff --git a/editor/txmgr/src/nsTransactionItem.cpp b/editor/txmgr/src/nsTransactionItem.cpp index 0bec96fbea3d..b653752e9585 100644 --- a/editor/txmgr/src/nsTransactionItem.cpp +++ b/editor/txmgr/src/nsTransactionItem.cpp @@ -49,11 +49,9 @@ nsTransactionItem::nsTransactionItem(nsITransaction *aTransaction) nsTransactionItem::~nsTransactionItem() { - if (mRedoStack) - delete mRedoStack; + delete mRedoStack; - if (mUndoStack) - delete mUndoStack; + delete mUndoStack; } nsrefcnt diff --git a/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp b/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp index 5e69dc34c250..fef3157950a5 100644 --- a/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp +++ b/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp @@ -2581,10 +2581,7 @@ nsWebBrowserPersist::EnumCleanupOutputMap(nsHashKey *aKey, void *aData, void* cl channel->Cancel(NS_BINDING_ABORTED); } OutputData *data = (OutputData *) aData; - if (data) - { - delete data; - } + delete data; return PR_TRUE; } @@ -2593,10 +2590,7 @@ PRBool nsWebBrowserPersist::EnumCleanupURIMap(nsHashKey *aKey, void *aData, void* closure) { URIData *data = (URIData *) aData; - if (data) - { - delete data; // Delete data associated with key - } + delete data; // Delete data associated with key return PR_TRUE; } @@ -2612,10 +2606,7 @@ nsWebBrowserPersist::EnumCleanupUploadList(nsHashKey *aKey, void *aData, void* c channel->Cancel(NS_BINDING_ABORTED); } UploadData *data = (UploadData *) aData; - if (data) - { - delete data; // Delete data associated with key - } + delete data; // Delete data associated with key return PR_TRUE; } diff --git a/extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp b/extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp index f32f69f2c369..e8e4d0ff6cf2 100644 --- a/extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp +++ b/extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp @@ -233,8 +233,7 @@ nsSystemPrefService::~nsSystemPrefService() { mInitialized = PR_FALSE; - if (mGConf) - delete mGConf; + delete mGConf; if (mObservers) { (void)mObservers->EnumerateForwards(sysPrefDeleteObserver, nsnull); delete mObservers; diff --git a/extensions/universalchardet/src/base/nsUniversalDetector.cpp b/extensions/universalchardet/src/base/nsUniversalDetector.cpp index 4069cc04c976..7af8f9596bfc 100644 --- a/extensions/universalchardet/src/base/nsUniversalDetector.cpp +++ b/extensions/universalchardet/src/base/nsUniversalDetector.cpp @@ -67,10 +67,9 @@ nsUniversalDetector::nsUniversalDetector(PRUint32 aLanguageFilter) nsUniversalDetector::~nsUniversalDetector() { for (PRInt32 i = 0; i < NUM_OF_CHARSET_PROBERS; i++) - if (mCharSetProbers[i]) - delete mCharSetProbers[i]; - if (mEscCharSetProber) - delete mEscCharSetProber; + delete mCharSetProbers[i]; + + delete mEscCharSetProber; } void diff --git a/gfx/ipc/SharedDIB.cpp b/gfx/ipc/SharedDIB.cpp index f44613e25b45..aac68b0a4cf3 100644 --- a/gfx/ipc/SharedDIB.cpp +++ b/gfx/ipc/SharedDIB.cpp @@ -75,8 +75,7 @@ SharedDIB::IsValid() nsresult SharedDIB::Close() { - if (mShMem) - delete mShMem; + delete mShMem; mShMem = nsnull; diff --git a/gfx/thebes/gfxFont.cpp b/gfx/thebes/gfxFont.cpp index 17ec6cb38eb7..e9e645bc477b 100644 --- a/gfx/thebes/gfxFont.cpp +++ b/gfx/thebes/gfxFont.cpp @@ -96,9 +96,7 @@ static PRUint32 gGlyphExtentsSetupFallBackToTight = 0; gfxFontEntry::~gfxFontEntry() { - if (mUserFontData) { - delete mUserFontData; - } + delete mUserFontData; } PRBool gfxFontEntry::TestCharacterMap(PRUint32 aCh) diff --git a/gfx/thebes/gfxOS2Fonts.cpp b/gfx/thebes/gfxOS2Fonts.cpp index 5afa74deb88f..520d64af3c92 100644 --- a/gfx/thebes/gfxOS2Fonts.cpp +++ b/gfx/thebes/gfxOS2Fonts.cpp @@ -97,9 +97,7 @@ gfxOS2Font::~gfxOS2Font() if (mScaledFont) { cairo_scaled_font_destroy(mScaledFont); } - if (mMetrics) { - delete mMetrics; - } + delete mMetrics; mFontFace = nsnull; mScaledFont = nsnull; mMetrics = nsnull; diff --git a/layout/generic/nsObjectFrame.cpp b/layout/generic/nsObjectFrame.cpp index 3b2a4b5d882d..87f961517e91 100644 --- a/layout/generic/nsObjectFrame.cpp +++ b/layout/generic/nsObjectFrame.cpp @@ -4393,9 +4393,7 @@ void nsPluginInstanceOwner::RenderCoreAnimation(CGContextRef aCGContext, if (!mIOSurface || (mIOSurface->GetWidth() != (size_t)aWidth || mIOSurface->GetHeight() != (size_t)aHeight)) { - if (mIOSurface) { - delete mIOSurface; - } + delete mIOSurface; // If the renderer is backed by an IOSurface, resize it as required. mIOSurface = nsIOSurface::CreateIOSurface(aWidth, aHeight); @@ -5765,8 +5763,7 @@ nsPluginInstanceOwner::Destroy() #endif #ifdef XP_MACOSX RemoveFromCARefreshTimer(this); - if (mIOSurface) - delete mIOSurface; + delete mIOSurface; if (mColorProfile) ::CGColorSpaceRelease(mColorProfile); #endif diff --git a/layout/generic/nsSimplePageSequence.cpp b/layout/generic/nsSimplePageSequence.cpp index c0c6757d0b05..e9edcb20774f 100644 --- a/layout/generic/nsSimplePageSequence.cpp +++ b/layout/generic/nsSimplePageSequence.cpp @@ -95,7 +95,7 @@ nsSharedPageData::nsSharedPageData() : nsSharedPageData::~nsSharedPageData() { nsMemory::Free(mDateTimeStr); - if (mHeadFootFont) delete mHeadFootFont; + delete mHeadFootFont; nsMemory::Free(mPageNumFormat); nsMemory::Free(mPageNumAndTotalsFormat); if (mDocTitle) nsMemory::Free(mDocTitle); @@ -134,7 +134,7 @@ nsSimplePageSequenceFrame::nsSimplePageSequenceFrame(nsStyleContext* aContext) : nsSimplePageSequenceFrame::~nsSimplePageSequenceFrame() { - if (mPageData) delete mPageData; + delete mPageData; } NS_QUERYFRAME_HEAD(nsSimplePageSequenceFrame) diff --git a/layout/mathml/nsMathMLChar.cpp b/layout/mathml/nsMathMLChar.cpp index d0deaa1e909d..7d1f83f9093c 100644 --- a/layout/mathml/nsMathMLChar.cpp +++ b/layout/mathml/nsMathMLChar.cpp @@ -1771,11 +1771,6 @@ nsMathMLChar::ComposeChildren(nsPresContext* aPresContext, } while (i < count) { child = new nsMathMLChar(this); - if (!child) { - if (mSibling) delete mSibling; // don't leave a dangling list ... - mSibling = nsnull; - return NS_ERROR_OUT_OF_MEMORY; - } last->mSibling = child; last = child; i++; diff --git a/layout/mathml/nsMathMLmfencedFrame.cpp b/layout/mathml/nsMathMLmfencedFrame.cpp index c000a4401c4f..887a782aa73e 100644 --- a/layout/mathml/nsMathMLmfencedFrame.cpp +++ b/layout/mathml/nsMathMLmfencedFrame.cpp @@ -119,8 +119,8 @@ nsMathMLmfencedFrame::ChildListChanged(PRInt32 aModType) void nsMathMLmfencedFrame::RemoveFencesAndSeparators() { - if (mOpenChar) delete mOpenChar; - if (mCloseChar) delete mCloseChar; + delete mOpenChar; + delete mCloseChar; if (mSeparatorsChar) delete[] mSeparatorsChar; mOpenChar = nsnull; diff --git a/modules/libpr0n/src/RasterImage.cpp b/modules/libpr0n/src/RasterImage.cpp index 5b5ea7730030..bb9487e4f62d 100644 --- a/modules/libpr0n/src/RasterImage.cpp +++ b/modules/libpr0n/src/RasterImage.cpp @@ -215,8 +215,7 @@ RasterImage::RasterImage(imgStatusTracker* aStatusTracker) : //****************************************************************************** RasterImage::~RasterImage() { - if (mAnim) - delete mAnim; + delete mAnim; for (unsigned int i = 0; i < mFrames.Length(); ++i) delete mFrames[i]; diff --git a/netwerk/base/src/nsProtocolProxyService.cpp b/netwerk/base/src/nsProtocolProxyService.cpp index 53285c6689ac..2dd0015b773c 100644 --- a/netwerk/base/src/nsProtocolProxyService.cpp +++ b/netwerk/base/src/nsProtocolProxyService.cpp @@ -1176,8 +1176,7 @@ nsProtocolProxyService::LoadHostFilters(const char *filters) mHostFiltersArray.AppendElement(hinfo); hinfo = nsnull; loser: - if (hinfo) - delete hinfo; + delete hinfo; } } diff --git a/netwerk/cache/nsCacheService.cpp b/netwerk/cache/nsCacheService.cpp index 0d3e6a1e9149..ef88e76d83f5 100644 --- a/netwerk/cache/nsCacheService.cpp +++ b/netwerk/cache/nsCacheService.cpp @@ -1738,9 +1738,7 @@ nsCacheService::ActivateEntry(nsCacheRequest * request, error: *result = nsnull; - if (entry) { - delete entry; - } + delete entry; return rv; } diff --git a/parser/html/nsHtml5Tokenizer.cpp b/parser/html/nsHtml5Tokenizer.cpp index 08259a13cf39..4db7dd1e9107 100644 --- a/parser/html/nsHtml5Tokenizer.cpp +++ b/parser/html/nsHtml5Tokenizer.cpp @@ -3858,9 +3858,7 @@ nsHtml5Tokenizer::loadState(nsHtml5Tokenizer* other) } else { attributeName = other->attributeName->cloneAttributeName(interner); } - if (attributes) { - delete attributes; - } + delete attributes; if (!other->attributes) { attributes = nsnull; } else { diff --git a/parser/htmlparser/src/nsDTDUtils.cpp b/parser/htmlparser/src/nsDTDUtils.cpp index a13845827729..0e057d665d02 100644 --- a/parser/htmlparser/src/nsDTDUtils.cpp +++ b/parser/htmlparser/src/nsDTDUtils.cpp @@ -1041,9 +1041,7 @@ nsObserverEntry::nsObserverEntry(const nsAString& aTopic) : mTopic(aTopic) nsObserverEntry::~nsObserverEntry() { for (PRInt32 i = 0; i <= NS_HTML_TAG_MAX; ++i){ - if (mObservers[i]) { - delete mObservers[i]; - } + delete mObservers[i]; } } diff --git a/parser/htmlparser/src/nsScanner.cpp b/parser/htmlparser/src/nsScanner.cpp index b3cad0633a35..d88229386eae 100644 --- a/parser/htmlparser/src/nsScanner.cpp +++ b/parser/htmlparser/src/nsScanner.cpp @@ -209,9 +209,7 @@ nsresult nsScanner::SetDocumentCharset(const nsACString& aCharset , PRInt32 aSou */ nsScanner::~nsScanner() { - if (mSlidingBuffer) { - delete mSlidingBuffer; - } + delete mSlidingBuffer; MOZ_COUNT_DTOR(nsScanner); } diff --git a/security/manager/ssl/src/nsCertTree.cpp b/security/manager/ssl/src/nsCertTree.cpp index 763cccfcfada..56973cf97ff5 100644 --- a/security/manager/ssl/src/nsCertTree.cpp +++ b/security/manager/ssl/src/nsCertTree.cpp @@ -85,9 +85,7 @@ CompareCacheHashEntryPtr::CompareCacheHashEntryPtr() CompareCacheHashEntryPtr::~CompareCacheHashEntryPtr() { - if (entry) { - delete entry; - } + delete entry; } CompareCacheHashEntry::CompareCacheHashEntry() diff --git a/widget/src/xpwidgets/nsBaseWidget.cpp b/widget/src/xpwidgets/nsBaseWidget.cpp index 867774b0ac1b..395c658bd8fa 100644 --- a/widget/src/xpwidgets/nsBaseWidget.cpp +++ b/widget/src/xpwidgets/nsBaseWidget.cpp @@ -151,8 +151,7 @@ nsBaseWidget::~nsBaseWidget() NS_IF_RELEASE(mToolkit); NS_IF_RELEASE(mContext); - if (mOriginalBounds) - delete mOriginalBounds; + delete mOriginalBounds; } diff --git a/xpcom/glue/nsDeque.cpp b/xpcom/glue/nsDeque.cpp index f61324850ef0..62bb96ebe8e5 100644 --- a/xpcom/glue/nsDeque.cpp +++ b/xpcom/glue/nsDeque.cpp @@ -129,9 +129,7 @@ nsDeque::~nsDeque() { * @param aDeallocator functor object for use by Erase() */ void nsDeque::SetDeallocator(nsDequeFunctor* aDeallocator){ - if (mDeallocator) { - delete mDeallocator; - } + delete mDeallocator; mDeallocator=aDeallocator; } diff --git a/xpcom/io/nsStorageStream.cpp b/xpcom/io/nsStorageStream.cpp index 95e085a7f7f9..4202a6f23696 100644 --- a/xpcom/io/nsStorageStream.cpp +++ b/xpcom/io/nsStorageStream.cpp @@ -80,8 +80,7 @@ nsStorageStream::nsStorageStream() nsStorageStream::~nsStorageStream() { - if (mSegmentedBuffer) - delete mSegmentedBuffer; + delete mSegmentedBuffer; } NS_IMPL_THREADSAFE_ISUPPORTS2(nsStorageStream, diff --git a/xpcom/tests/TestTimers.cpp b/xpcom/tests/TestTimers.cpp index 1117e8b49d92..5cd39fa03017 100644 --- a/xpcom/tests/TestTimers.cpp +++ b/xpcom/tests/TestTimers.cpp @@ -89,9 +89,7 @@ public: } ~AutoCreateAndDestroyReentrantMonitor() { - if (mReentrantMonitor) { - delete mReentrantMonitor; - } + delete mReentrantMonitor; } operator ReentrantMonitor* () { diff --git a/xpinstall/src/nsXPITriggerInfo.cpp b/xpinstall/src/nsXPITriggerInfo.cpp index 59002d1538fb..81710460601b 100644 --- a/xpinstall/src/nsXPITriggerInfo.cpp +++ b/xpinstall/src/nsXPITriggerInfo.cpp @@ -188,8 +188,7 @@ nsXPITriggerInfo::~nsXPITriggerInfo() for(PRUint32 i=0; i < Size(); i++) { item = Get(i); - if (item) - delete item; + delete item; } mItems.Clear(); From b71c70b99eede85707b5a203b764f833aa22116b Mon Sep 17 00:00:00 2001 From: Ed Morley Date: Tue, 17 May 2011 16:06:10 +0200 Subject: [PATCH 162/282] Bug 655498 - Remove WinCE code from profile/* ; r=bsmedberg --- profile/dirserviceprovider/src/nsProfileLock.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/profile/dirserviceprovider/src/nsProfileLock.cpp b/profile/dirserviceprovider/src/nsProfileLock.cpp index b4a7f84737e8..5bad24465cc3 100644 --- a/profile/dirserviceprovider/src/nsProfileLock.cpp +++ b/profile/dirserviceprovider/src/nsProfileLock.cpp @@ -591,23 +591,13 @@ nsresult nsProfileLock::Lock(nsILocalFile* aProfileDir, rv = lockFile->GetPath(filePath); if (NS_FAILED(rv)) return rv; -#ifdef WINCE - // WinCE doesn't have FILE_FLAG_DELETE_ON_CLOSE, so let's just try - // to delete the file first before creating it. This will fail - // if it's already open. - DeleteFileW(filePath.get()); -#endif mLockFileHandle = CreateFileW(filePath.get(), GENERIC_READ | GENERIC_WRITE, 0, // no sharing - of course nsnull, OPEN_ALWAYS, -#ifndef WINCE FILE_FLAG_DELETE_ON_CLOSE, -#else - FILE_ATTRIBUTE_NORMAL, -#endif nsnull); if (mLockFileHandle == INVALID_HANDLE_VALUE) { // XXXbsmedberg: provide a profile-unlocker here! From 399bb3195e9ea3ab63e828ce616a91b969fd7756 Mon Sep 17 00:00:00 2001 From: Ed Morley Date: Tue, 17 May 2011 16:06:18 +0200 Subject: [PATCH 163/282] Bug 656187 - Remove modules/lib7z/ since it was only used for the WinCE installer; r=bsmedberg --- modules/lib7z/7zLib.cpp | 797 ------ modules/lib7z/7zLib.h | 44 - modules/lib7z/7zobjs.mk | 72 - modules/lib7z/LZMASDK/7zC.txt | 194 -- modules/lib7z/LZMASDK/7zFormat.txt | 471 ---- modules/lib7z/LZMASDK/Asm/x64/7zCrcT8U.asm | 101 - modules/lib7z/LZMASDK/Asm/x86/7zCrcT8U.asm | 101 - modules/lib7z/LZMASDK/C/7z.h | 201 -- modules/lib7z/LZMASDK/C/7zBuf.c | 36 - modules/lib7z/LZMASDK/C/7zBuf.h | 39 - modules/lib7z/LZMASDK/C/7zBuf2.c | 45 - modules/lib7z/LZMASDK/C/7zCrc.c | 35 - modules/lib7z/LZMASDK/C/7zCrc.h | 30 - modules/lib7z/LZMASDK/C/7zCrcT8.c | 43 - modules/lib7z/LZMASDK/C/7zDec.c | 310 --- modules/lib7z/LZMASDK/C/7zFile.c | 277 -- modules/lib7z/LZMASDK/C/7zFile.h | 81 - modules/lib7z/LZMASDK/C/7zIn.c | 1376 ---------- modules/lib7z/LZMASDK/C/7zStream.c | 169 -- modules/lib7z/LZMASDK/C/7zVersion.h | 7 - modules/lib7z/LZMASDK/C/Alloc.c | 127 - modules/lib7z/LZMASDK/C/Alloc.h | 38 - modules/lib7z/LZMASDK/C/Bcj2.c | 132 - modules/lib7z/LZMASDK/C/Bcj2.h | 38 - modules/lib7z/LZMASDK/C/Bra.c | 133 - modules/lib7z/LZMASDK/C/Bra.h | 68 - modules/lib7z/LZMASDK/C/Bra86.c | 85 - modules/lib7z/LZMASDK/C/BraIA64.c | 67 - modules/lib7z/LZMASDK/C/CpuArch.h | 92 - modules/lib7z/LZMASDK/C/Delta.c | 62 - modules/lib7z/LZMASDK/C/Delta.h | 23 - modules/lib7z/LZMASDK/C/LzFind.c | 761 ------ modules/lib7z/LZMASDK/C/LzFind.h | 115 - modules/lib7z/LZMASDK/C/LzFindMt.c | 793 ------ modules/lib7z/LZMASDK/C/LzFindMt.h | 105 - modules/lib7z/LZMASDK/C/LzHash.h | 54 - modules/lib7z/LZMASDK/C/Lzma2Dec.c | 356 --- modules/lib7z/LZMASDK/C/Lzma2Dec.h | 84 - modules/lib7z/LZMASDK/C/Lzma2Enc.c | 484 ---- modules/lib7z/LZMASDK/C/Lzma2Enc.h | 66 - modules/lib7z/LZMASDK/C/Lzma86.h | 111 - modules/lib7z/LZMASDK/C/Lzma86Dec.c | 56 - modules/lib7z/LZMASDK/C/Lzma86Enc.c | 108 - modules/lib7z/LZMASDK/C/LzmaDec.c | 1007 -------- modules/lib7z/LZMASDK/C/LzmaDec.h | 231 -- modules/lib7z/LZMASDK/C/LzmaEnc.c | 2268 ----------------- modules/lib7z/LZMASDK/C/LzmaEnc.h | 80 - modules/lib7z/LZMASDK/C/LzmaLib.c | 46 - modules/lib7z/LZMASDK/C/LzmaLib.h | 135 - modules/lib7z/LZMASDK/C/MtCoder.c | 327 --- modules/lib7z/LZMASDK/C/MtCoder.h | 102 - modules/lib7z/LZMASDK/C/RotateDefs.h | 20 - modules/lib7z/LZMASDK/C/Sha256.c | 204 -- modules/lib7z/LZMASDK/C/Sha256.h | 30 - modules/lib7z/LZMASDK/C/Threads.c | 80 - modules/lib7z/LZMASDK/C/Threads.h | 59 - modules/lib7z/LZMASDK/C/Types.h | 222 -- modules/lib7z/LZMASDK/C/Util/7z/7z.dsp | 183 -- modules/lib7z/LZMASDK/C/Util/7z/7z.dsw | 29 - modules/lib7z/LZMASDK/C/Util/7z/7zAlloc.c | 77 - modules/lib7z/LZMASDK/C/Util/7z/7zAlloc.h | 23 - modules/lib7z/LZMASDK/C/Util/7z/7zMain.c | 464 ---- modules/lib7z/LZMASDK/C/Util/7z/makefile | 31 - modules/lib7z/LZMASDK/C/Util/7z/makefile.gcc | 55 - modules/lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.c | 254 -- .../lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.dsp | 168 -- .../lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.dsw | 29 - modules/lib7z/LZMASDK/C/Util/Lzma/makefile | 29 - .../lib7z/LZMASDK/C/Util/Lzma/makefile.gcc | 44 - .../lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.def | 4 - .../lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.dsp | 178 -- .../lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.dsw | 29 - .../LZMASDK/C/Util/LzmaLib/LzmaLibExports.c | 12 - modules/lib7z/LZMASDK/C/Util/LzmaLib/makefile | 35 - .../lib7z/LZMASDK/C/Util/LzmaLib/resource.rc | 4 - modules/lib7z/LZMASDK/C/Xz.c | 88 - modules/lib7z/LZMASDK/C/Xz.h | 256 -- modules/lib7z/LZMASDK/C/XzCrc64.c | 33 - modules/lib7z/LZMASDK/C/XzCrc64.h | 30 - modules/lib7z/LZMASDK/C/XzDec.c | 873 ------- modules/lib7z/LZMASDK/C/XzEnc.c | 497 ---- modules/lib7z/LZMASDK/C/XzEnc.h | 25 - modules/lib7z/LZMASDK/C/XzIn.c | 306 --- .../CPP/7zip/Archive/7z/7zCompressionMode.cpp | 3 - .../CPP/7zip/Archive/7z/7zCompressionMode.h | 50 - .../LZMASDK/CPP/7zip/Archive/7z/7zDecode.cpp | 332 --- .../LZMASDK/CPP/7zip/Archive/7z/7zDecode.h | 68 - .../LZMASDK/CPP/7zip/Archive/7z/7zEncode.cpp | 450 ---- .../LZMASDK/CPP/7zip/Archive/7z/7zEncode.h | 55 - .../LZMASDK/CPP/7zip/Archive/7z/7zExtract.cpp | 273 -- .../CPP/7zip/Archive/7z/7zFolderInStream.cpp | 130 - .../CPP/7zip/Archive/7z/7zFolderInStream.h | 66 - .../CPP/7zip/Archive/7z/7zFolderOutStream.cpp | 140 - .../CPP/7zip/Archive/7z/7zFolderOutStream.h | 56 - .../LZMASDK/CPP/7zip/Archive/7z/7zHandler.cpp | 493 ---- .../LZMASDK/CPP/7zip/Archive/7z/7zHandler.h | 119 - .../CPP/7zip/Archive/7z/7zHandlerOut.cpp | 483 ---- .../LZMASDK/CPP/7zip/Archive/7z/7zHeader.cpp | 14 - .../LZMASDK/CPP/7zip/Archive/7z/7zHeader.h | 97 - .../LZMASDK/CPP/7zip/Archive/7z/7zIn.cpp | 1257 --------- .../lib7z/LZMASDK/CPP/7zip/Archive/7z/7zIn.h | 245 -- .../LZMASDK/CPP/7zip/Archive/7z/7zItem.h | 258 -- .../LZMASDK/CPP/7zip/Archive/7z/7zOut.cpp | 864 ------- .../lib7z/LZMASDK/CPP/7zip/Archive/7z/7zOut.h | 152 -- .../CPP/7zip/Archive/7z/7zProperties.cpp | 163 -- .../CPP/7zip/Archive/7z/7zProperties.h | 22 - .../CPP/7zip/Archive/7z/7zRegister.cpp | 18 - .../CPP/7zip/Archive/7z/7zSpecStream.cpp | 24 - .../CPP/7zip/Archive/7z/7zSpecStream.h | 35 - .../LZMASDK/CPP/7zip/Archive/7z/7zUpdate.cpp | 1183 --------- .../LZMASDK/CPP/7zip/Archive/7z/7zUpdate.h | 88 - .../LZMASDK/CPP/7zip/Archive/7z/StdAfx.cpp | 3 - .../LZMASDK/CPP/7zip/Archive/7z/StdAfx.h | 9 - .../LZMASDK/CPP/7zip/Archive/Archive.def | 6 - .../LZMASDK/CPP/7zip/Archive/Archive2.def | 9 - .../CPP/7zip/Archive/ArchiveExports.cpp | 133 - .../CPP/7zip/Archive/Common/CoderMixer2.cpp | 121 - .../CPP/7zip/Archive/Common/CoderMixer2.h | 174 -- .../CPP/7zip/Archive/Common/CoderMixer2MT.cpp | 230 -- .../CPP/7zip/Archive/Common/CoderMixer2MT.h | 80 - .../Archive/Common/CrossThreadProgress.cpp | 15 - .../7zip/Archive/Common/CrossThreadProgress.h | 37 - .../7zip/Archive/Common/DummyOutStream.cpp | 22 - .../CPP/7zip/Archive/Common/DummyOutStream.h | 24 - .../CPP/7zip/Archive/Common/HandlerOut.cpp | 623 ----- .../CPP/7zip/Archive/Common/HandlerOut.h | 87 - .../7zip/Archive/Common/InStreamWithCRC.cpp | 40 - .../CPP/7zip/Archive/Common/InStreamWithCRC.h | 67 - .../CPP/7zip/Archive/Common/ItemNameUtils.cpp | 59 - .../CPP/7zip/Archive/Common/ItemNameUtils.h | 24 - .../CPP/7zip/Archive/Common/MultiStream.cpp | 201 -- .../CPP/7zip/Archive/Common/MultiStream.h | 76 - .../7zip/Archive/Common/OutStreamWithCRC.cpp | 18 - .../7zip/Archive/Common/OutStreamWithCRC.h | 36 - .../7zip/Archive/Common/ParseProperties.cpp | 177 -- .../CPP/7zip/Archive/Common/ParseProperties.h | 18 - .../LZMASDK/CPP/7zip/Archive/Common/StdAfx.h | 9 - .../LZMASDK/CPP/7zip/Archive/DllExports2.cpp | 74 - .../lib7z/LZMASDK/CPP/7zip/Archive/IArchive.h | 234 -- .../LZMASDK/CPP/7zip/Archive/Icons/7z.ico | Bin 4710 -> 0 bytes .../LZMASDK/CPP/7zip/Archive/LzmaHandler.cpp | 431 ---- .../LZMASDK/CPP/7zip/Archive/SplitHandler.cpp | 367 --- .../lib7z/LZMASDK/CPP/7zip/Archive/StdAfx.h | 9 - .../LZMASDK/CPP/7zip/Archive/XzHandler.cpp | 708 ----- .../CPP/7zip/Bundles/Alone7z/Alone.dsp | 1614 ------------ .../CPP/7zip/Bundles/Alone7z/Alone.dsw | 29 - .../CPP/7zip/Bundles/Alone7z/StdAfx.cpp | 3 - .../LZMASDK/CPP/7zip/Bundles/Alone7z/StdAfx.h | 9 - .../LZMASDK/CPP/7zip/Bundles/Alone7z/makefile | 220 -- .../CPP/7zip/Bundles/Alone7z/resource.rc | 3 - .../7zip/Bundles/Format7zExtractR/StdAfx.cpp | 3 - .../7zip/Bundles/Format7zExtractR/StdAfx.h | 9 - .../7zip/Bundles/Format7zExtractR/makefile | 128 - .../7zip/Bundles/Format7zExtractR/resource.rc | 5 - .../CPP/7zip/Bundles/Format7zR/StdAfx.cpp | 3 - .../CPP/7zip/Bundles/Format7zR/StdAfx.h | 9 - .../CPP/7zip/Bundles/Format7zR/makefile | 146 -- .../CPP/7zip/Bundles/Format7zR/resource.rc | 5 - .../LZMASDK/CPP/7zip/Common/CWrappers.cpp | 127 - .../lib7z/LZMASDK/CPP/7zip/Common/CWrappers.h | 46 - .../LZMASDK/CPP/7zip/Common/CreateCoder.cpp | 292 --- .../LZMASDK/CPP/7zip/Common/CreateCoder.h | 98 - .../CPP/7zip/Common/FilePathAutoRename.cpp | 55 - .../CPP/7zip/Common/FilePathAutoRename.h | 10 - .../LZMASDK/CPP/7zip/Common/FileStreams.cpp | 421 --- .../LZMASDK/CPP/7zip/Common/FileStreams.h | 144 -- .../LZMASDK/CPP/7zip/Common/FilterCoder.cpp | 255 -- .../LZMASDK/CPP/7zip/Common/FilterCoder.h | 143 -- .../LZMASDK/CPP/7zip/Common/InBuffer.cpp | 83 - .../lib7z/LZMASDK/CPP/7zip/Common/InBuffer.h | 81 - .../CPP/7zip/Common/InOutTempBuffer.cpp | 122 - .../LZMASDK/CPP/7zip/Common/InOutTempBuffer.h | 48 - .../CPP/7zip/Common/LimitedStreams.cpp | 154 -- .../LZMASDK/CPP/7zip/Common/LimitedStreams.h | 124 - .../LZMASDK/CPP/7zip/Common/LockedStream.cpp | 23 - .../LZMASDK/CPP/7zip/Common/LockedStream.h | 38 - .../LZMASDK/CPP/7zip/Common/MethodId.cpp | 27 - .../lib7z/LZMASDK/CPP/7zip/Common/MethodId.h | 10 - .../LZMASDK/CPP/7zip/Common/MethodProps.cpp | 99 - .../LZMASDK/CPP/7zip/Common/MethodProps.h | 41 - .../LZMASDK/CPP/7zip/Common/OffsetStream.cpp | 35 - .../LZMASDK/CPP/7zip/Common/OffsetStream.h | 25 - .../LZMASDK/CPP/7zip/Common/OutBuffer.cpp | 116 - .../lib7z/LZMASDK/CPP/7zip/Common/OutBuffer.h | 64 - .../LZMASDK/CPP/7zip/Common/ProgressUtils.cpp | 42 - .../LZMASDK/CPP/7zip/Common/ProgressUtils.h | 34 - .../LZMASDK/CPP/7zip/Common/RegisterArc.h | 36 - .../LZMASDK/CPP/7zip/Common/RegisterCodec.h | 33 - .../lib7z/LZMASDK/CPP/7zip/Common/StdAfx.h | 9 - .../LZMASDK/CPP/7zip/Common/StreamBinder.cpp | 150 -- .../LZMASDK/CPP/7zip/Common/StreamBinder.h | 32 - .../LZMASDK/CPP/7zip/Common/StreamObjects.cpp | 84 - .../LZMASDK/CPP/7zip/Common/StreamObjects.h | 127 - .../LZMASDK/CPP/7zip/Common/StreamUtils.cpp | 56 - .../LZMASDK/CPP/7zip/Common/StreamUtils.h | 13 - .../LZMASDK/CPP/7zip/Common/VirtThread.cpp | 46 - .../LZMASDK/CPP/7zip/Common/VirtThread.h | 23 - .../LZMASDK/CPP/7zip/Compress/Bcj2Coder.cpp | 390 --- .../LZMASDK/CPP/7zip/Compress/Bcj2Coder.h | 125 - .../CPP/7zip/Compress/Bcj2Register.cpp | 19 - .../LZMASDK/CPP/7zip/Compress/BcjCoder.cpp | 15 - .../LZMASDK/CPP/7zip/Compress/BcjCoder.h | 19 - .../LZMASDK/CPP/7zip/Compress/BcjRegister.cpp | 19 - .../LZMASDK/CPP/7zip/Compress/BranchCoder.cpp | 19 - .../LZMASDK/CPP/7zip/Compress/BranchCoder.h | 44 - .../LZMASDK/CPP/7zip/Compress/BranchMisc.cpp | 37 - .../LZMASDK/CPP/7zip/Compress/BranchMisc.h | 14 - .../CPP/7zip/Compress/BranchRegister.cpp | 30 - .../LZMASDK/CPP/7zip/Compress/ByteSwap.cpp | 73 - .../CPP/7zip/Compress/CodecExports.cpp | 160 -- .../LZMASDK/CPP/7zip/Compress/CopyCoder.cpp | 67 - .../LZMASDK/CPP/7zip/Compress/CopyCoder.h | 34 - .../CPP/7zip/Compress/CopyRegister.cpp | 14 - .../LZMASDK/CPP/7zip/Compress/DeltaFilter.cpp | 112 - .../7zip/Compress/LZMA_Alone/AloneLZMA.dsp | 466 ---- .../7zip/Compress/LZMA_Alone/AloneLZMA.dsw | 29 - .../7zip/Compress/LZMA_Alone/LzmaAlone.cpp | 524 ---- .../7zip/Compress/LZMA_Alone/LzmaBench.cpp | 1050 -------- .../CPP/7zip/Compress/LZMA_Alone/LzmaBench.h | 48 - .../7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp | 311 --- .../7zip/Compress/LZMA_Alone/LzmaBenchCon.h | 20 - .../CPP/7zip/Compress/LZMA_Alone/StdAfx.cpp | 3 - .../CPP/7zip/Compress/LZMA_Alone/StdAfx.h | 8 - .../CPP/7zip/Compress/LZMA_Alone/makefile | 75 - .../CPP/7zip/Compress/LZMA_Alone/makefile.gcc | 139 - .../CPP/7zip/Compress/Lzma2Decoder.cpp | 189 -- .../LZMASDK/CPP/7zip/Compress/Lzma2Decoder.h | 73 - .../CPP/7zip/Compress/Lzma2Encoder.cpp | 94 - .../LZMASDK/CPP/7zip/Compress/Lzma2Encoder.h | 36 - .../CPP/7zip/Compress/Lzma2Register.cpp | 20 - .../LZMASDK/CPP/7zip/Compress/LzmaDecoder.cpp | 239 -- .../LZMASDK/CPP/7zip/Compress/LzmaDecoder.h | 76 - .../LZMASDK/CPP/7zip/Compress/LzmaEncoder.cpp | 149 -- .../LZMASDK/CPP/7zip/Compress/LzmaEncoder.h | 36 - .../CPP/7zip/Compress/LzmaRegister.cpp | 20 - .../LZMASDK/CPP/7zip/Compress/RangeCoder.h | 205 -- .../LZMASDK/CPP/7zip/Compress/RangeCoderBit.h | 114 - .../lib7z/LZMASDK/CPP/7zip/Compress/StdAfx.h | 8 - modules/lib7z/LZMASDK/CPP/7zip/Crc.mak | 15 - modules/lib7z/LZMASDK/CPP/7zip/Crc2.mak | 7 - modules/lib7z/LZMASDK/CPP/7zip/Guid.txt | 164 -- modules/lib7z/LZMASDK/CPP/7zip/ICoder.h | 179 -- modules/lib7z/LZMASDK/CPP/7zip/IDecl.h | 15 - modules/lib7z/LZMASDK/CPP/7zip/IPassword.h | 24 - modules/lib7z/LZMASDK/CPP/7zip/IProgress.h | 33 - modules/lib7z/LZMASDK/CPP/7zip/IStream.h | 58 - modules/lib7z/LZMASDK/CPP/7zip/MyVersion.h | 8 - .../lib7z/LZMASDK/CPP/7zip/MyVersionInfo.rc | 52 - modules/lib7z/LZMASDK/CPP/7zip/PropID.h | 75 - modules/lib7z/LZMASDK/CPP/7zip/SubBuild.mak | 3 - .../LZMASDK/CPP/7zip/UI/Client7z/Client7z.cpp | 871 ------- .../LZMASDK/CPP/7zip/UI/Client7z/Client7z.dsp | 226 -- .../LZMASDK/CPP/7zip/UI/Client7z/Client7z.dsw | 29 - .../LZMASDK/CPP/7zip/UI/Client7z/StdAfx.cpp | 3 - .../LZMASDK/CPP/7zip/UI/Client7z/StdAfx.h | 9 - .../LZMASDK/CPP/7zip/UI/Client7z/makefile | 45 - .../CPP/7zip/UI/Common/ArchiveCommandLine.cpp | 1034 -------- .../CPP/7zip/UI/Common/ArchiveCommandLine.h | 111 - .../7zip/UI/Common/ArchiveExtractCallback.cpp | 488 ---- .../7zip/UI/Common/ArchiveExtractCallback.h | 143 -- .../CPP/7zip/UI/Common/ArchiveName.cpp | 54 - .../LZMASDK/CPP/7zip/UI/Common/ArchiveName.h | 10 - .../7zip/UI/Common/ArchiveOpenCallback.cpp | 133 - .../CPP/7zip/UI/Common/ArchiveOpenCallback.h | 103 - .../CPP/7zip/UI/Common/DefaultName.cpp | 35 - .../LZMASDK/CPP/7zip/UI/Common/DefaultName.h | 11 - .../LZMASDK/CPP/7zip/UI/Common/DirItem.h | 69 - .../CPP/7zip/UI/Common/EnumDirItems.cpp | 361 --- .../LZMASDK/CPP/7zip/UI/Common/EnumDirItems.h | 25 - .../LZMASDK/CPP/7zip/UI/Common/ExitCode.h | 27 - .../LZMASDK/CPP/7zip/UI/Common/Extract.cpp | 253 -- .../LZMASDK/CPP/7zip/UI/Common/Extract.h | 76 - .../LZMASDK/CPP/7zip/UI/Common/ExtractMode.h | 31 - .../CPP/7zip/UI/Common/ExtractingFilePath.cpp | 140 - .../CPP/7zip/UI/Common/ExtractingFilePath.h | 13 - .../CPP/7zip/UI/Common/IFileExtractCallback.h | 46 - .../LZMASDK/CPP/7zip/UI/Common/LoadCodecs.cpp | 681 ----- .../LZMASDK/CPP/7zip/UI/Common/LoadCodecs.h | 235 -- .../CPP/7zip/UI/Common/OpenArchive.cpp | 528 ---- .../LZMASDK/CPP/7zip/UI/Common/OpenArchive.h | 86 - .../CPP/7zip/UI/Common/PropIDUtils.cpp | 96 - .../LZMASDK/CPP/7zip/UI/Common/PropIDUtils.h | 12 - .../LZMASDK/CPP/7zip/UI/Common/Property.h | 14 - .../CPP/7zip/UI/Common/SetProperties.cpp | 79 - .../CPP/7zip/UI/Common/SetProperties.h | 10 - .../LZMASDK/CPP/7zip/UI/Common/SortUtils.cpp | 22 - .../LZMASDK/CPP/7zip/UI/Common/SortUtils.h | 10 - .../lib7z/LZMASDK/CPP/7zip/UI/Common/StdAfx.h | 9 - .../LZMASDK/CPP/7zip/UI/Common/TempFiles.cpp | 22 - .../LZMASDK/CPP/7zip/UI/Common/TempFiles.h | 16 - .../LZMASDK/CPP/7zip/UI/Common/Update.cpp | 908 ------- .../lib7z/LZMASDK/CPP/7zip/UI/Common/Update.h | 175 -- .../CPP/7zip/UI/Common/UpdateAction.cpp | 64 - .../LZMASDK/CPP/7zip/UI/Common/UpdateAction.h | 57 - .../CPP/7zip/UI/Common/UpdateCallback.cpp | 249 -- .../CPP/7zip/UI/Common/UpdateCallback.h | 74 - .../LZMASDK/CPP/7zip/UI/Common/UpdatePair.cpp | 158 -- .../LZMASDK/CPP/7zip/UI/Common/UpdatePair.h | 25 - .../CPP/7zip/UI/Common/UpdateProduce.cpp | 58 - .../CPP/7zip/UI/Common/UpdateProduce.h | 35 - .../LZMASDK/CPP/7zip/UI/Common/WorkDir.cpp | 59 - .../LZMASDK/CPP/7zip/UI/Common/WorkDir.h | 10 - .../LZMASDK/CPP/7zip/UI/Common/ZipRegistry.h | 105 - .../CPP/7zip/UI/Console/ConsoleClose.cpp | 73 - .../CPP/7zip/UI/Console/ConsoleClose.h | 24 - .../UI/Console/ExtractCallbackConsole.cpp | 228 -- .../7zip/UI/Console/ExtractCallbackConsole.h | 73 - .../LZMASDK/CPP/7zip/UI/Console/List.cpp | 626 ----- .../lib7z/LZMASDK/CPP/7zip/UI/Console/List.h | 20 - .../LZMASDK/CPP/7zip/UI/Console/Main.cpp | 593 ----- .../LZMASDK/CPP/7zip/UI/Console/MainAr.cpp | 125 - .../7zip/UI/Console/OpenCallbackConsole.cpp | 58 - .../CPP/7zip/UI/Console/OpenCallbackConsole.h | 24 - .../CPP/7zip/UI/Console/PercentPrinter.cpp | 90 - .../CPP/7zip/UI/Console/PercentPrinter.h | 31 - .../LZMASDK/CPP/7zip/UI/Console/StdAfx.cpp | 3 - .../LZMASDK/CPP/7zip/UI/Console/StdAfx.h | 9 - .../7zip/UI/Console/UpdateCallbackConsole.cpp | 261 -- .../7zip/UI/Console/UpdateCallbackConsole.h | 62 - .../CPP/7zip/UI/Console/UserInputUtils.cpp | 60 - .../CPP/7zip/UI/Console/UserInputUtils.h | 24 - .../LZMASDK/CPP/7zip/UI/Console/makefile | 129 - .../LZMASDK/CPP/7zip/UI/Console/resource.rc | 3 - modules/lib7z/LZMASDK/CPP/Build.mak | 89 - modules/lib7z/LZMASDK/CPP/Common/AutoPtr.h | 35 - modules/lib7z/LZMASDK/CPP/Common/Buffer.h | 77 - modules/lib7z/LZMASDK/CPP/Common/CRC.cpp | 7 - modules/lib7z/LZMASDK/CPP/Common/C_FileIO.cpp | 88 - modules/lib7z/LZMASDK/CPP/Common/C_FileIO.h | 47 - modules/lib7z/LZMASDK/CPP/Common/ComTry.h | 17 - .../LZMASDK/CPP/Common/CommandLineParser.cpp | 232 -- .../LZMASDK/CPP/Common/CommandLineParser.h | 72 - modules/lib7z/LZMASDK/CPP/Common/Defs.h | 20 - .../lib7z/LZMASDK/CPP/Common/DynamicBuffer.h | 47 - .../lib7z/LZMASDK/CPP/Common/IntToString.cpp | 66 - .../lib7z/LZMASDK/CPP/Common/IntToString.h | 17 - .../LZMASDK/CPP/Common/ListFileUtils.cpp | 75 - .../lib7z/LZMASDK/CPP/Common/ListFileUtils.h | 11 - modules/lib7z/LZMASDK/CPP/Common/MyCom.h | 225 -- .../lib7z/LZMASDK/CPP/Common/MyException.h | 14 - modules/lib7z/LZMASDK/CPP/Common/MyGuidDef.h | 54 - modules/lib7z/LZMASDK/CPP/Common/MyInitGuid.h | 22 - modules/lib7z/LZMASDK/CPP/Common/MyString.cpp | 200 -- modules/lib7z/LZMASDK/CPP/Common/MyString.h | 629 ----- modules/lib7z/LZMASDK/CPP/Common/MyUnknown.h | 13 - modules/lib7z/LZMASDK/CPP/Common/MyVector.cpp | 87 - modules/lib7z/LZMASDK/CPP/Common/MyVector.h | 250 -- modules/lib7z/LZMASDK/CPP/Common/MyWindows.h | 214 -- .../lib7z/LZMASDK/CPP/Common/NewHandler.cpp | 116 - modules/lib7z/LZMASDK/CPP/Common/NewHandler.h | 16 - modules/lib7z/LZMASDK/CPP/Common/StdAfx.h | 9 - .../lib7z/LZMASDK/CPP/Common/StdInStream.cpp | 107 - .../lib7z/LZMASDK/CPP/Common/StdInStream.h | 32 - .../lib7z/LZMASDK/CPP/Common/StdOutStream.cpp | 104 - .../lib7z/LZMASDK/CPP/Common/StdOutStream.h | 35 - .../LZMASDK/CPP/Common/StringConvert.cpp | 97 - .../lib7z/LZMASDK/CPP/Common/StringConvert.h | 73 - .../lib7z/LZMASDK/CPP/Common/StringToInt.cpp | 90 - .../lib7z/LZMASDK/CPP/Common/StringToInt.h | 18 - modules/lib7z/LZMASDK/CPP/Common/Types.h | 11 - .../lib7z/LZMASDK/CPP/Common/UTFConvert.cpp | 145 -- modules/lib7z/LZMASDK/CPP/Common/UTFConvert.h | 11 - modules/lib7z/LZMASDK/CPP/Common/Wildcard.cpp | 458 ---- modules/lib7z/LZMASDK/CPP/Common/Wildcard.h | 80 - modules/lib7z/LZMASDK/CPP/Windows/DLL.cpp | 110 - modules/lib7z/LZMASDK/CPP/Windows/DLL.h | 59 - modules/lib7z/LZMASDK/CPP/Windows/Defs.h | 23 - modules/lib7z/LZMASDK/CPP/Windows/Error.cpp | 50 - modules/lib7z/LZMASDK/CPP/Windows/Error.h | 33 - modules/lib7z/LZMASDK/CPP/Windows/FileDir.cpp | 869 ------- modules/lib7z/LZMASDK/CPP/Windows/FileDir.h | 177 -- .../lib7z/LZMASDK/CPP/Windows/FileFind.cpp | 462 ---- modules/lib7z/LZMASDK/CPP/Windows/FileFind.h | 161 -- modules/lib7z/LZMASDK/CPP/Windows/FileIO.cpp | 434 ---- modules/lib7z/LZMASDK/CPP/Windows/FileIO.h | 136 - .../lib7z/LZMASDK/CPP/Windows/FileMapping.cpp | 14 - .../lib7z/LZMASDK/CPP/Windows/FileMapping.h | 62 - .../lib7z/LZMASDK/CPP/Windows/FileName.cpp | 50 - modules/lib7z/LZMASDK/CPP/Windows/FileName.h | 25 - modules/lib7z/LZMASDK/CPP/Windows/Handle.h | 37 - .../lib7z/LZMASDK/CPP/Windows/MemoryLock.cpp | 82 - .../lib7z/LZMASDK/CPP/Windows/MemoryLock.h | 15 - modules/lib7z/LZMASDK/CPP/Windows/NtCheck.h | 44 - .../lib7z/LZMASDK/CPP/Windows/PropVariant.cpp | 332 --- .../lib7z/LZMASDK/CPP/Windows/PropVariant.h | 58 - .../CPP/Windows/PropVariantConversions.cpp | 105 - .../CPP/Windows/PropVariantConversions.h | 14 - .../lib7z/LZMASDK/CPP/Windows/Registry.cpp | 369 --- modules/lib7z/LZMASDK/CPP/Windows/Registry.h | 85 - modules/lib7z/LZMASDK/CPP/Windows/StdAfx.h | 9 - .../LZMASDK/CPP/Windows/Synchronization.cpp | 10 - .../LZMASDK/CPP/Windows/Synchronization.h | 164 -- modules/lib7z/LZMASDK/CPP/Windows/System.cpp | 72 - modules/lib7z/LZMASDK/CPP/Windows/System.h | 16 - modules/lib7z/LZMASDK/CPP/Windows/Thread.h | 38 - modules/lib7z/LZMASDK/CPP/Windows/Time.cpp | 170 -- modules/lib7z/LZMASDK/CPP/Windows/Time.h | 21 - modules/lib7z/LZMASDK/CS/7zip/Common/CRC.cs | 55 - .../CS/7zip/Common/CommandLineParser.cs | 274 -- .../lib7z/LZMASDK/CS/7zip/Common/InBuffer.cs | 72 - .../lib7z/LZMASDK/CS/7zip/Common/OutBuffer.cs | 47 - .../CS/7zip/Compress/LZ/IMatchFinder.cs | 24 - .../LZMASDK/CS/7zip/Compress/LZ/LzBinTree.cs | 367 --- .../LZMASDK/CS/7zip/Compress/LZ/LzInWindow.cs | 132 - .../CS/7zip/Compress/LZ/LzOutWindow.cs | 110 - .../LZMASDK/CS/7zip/Compress/LZMA/LzmaBase.cs | 76 - .../CS/7zip/Compress/LZMA/LzmaDecoder.cs | 398 --- .../CS/7zip/Compress/LZMA/LzmaEncoder.cs | 1480 ----------- .../CS/7zip/Compress/LzmaAlone/LzmaAlone.cs | 364 --- .../7zip/Compress/LzmaAlone/LzmaAlone.csproj | 90 - .../CS/7zip/Compress/LzmaAlone/LzmaAlone.sln | 20 - .../CS/7zip/Compress/LzmaAlone/LzmaBench.cs | 340 --- .../LzmaAlone/Properties/AssemblyInfo.cs | 29 - .../LzmaAlone/Properties/Resources.cs | 70 - .../Compress/LzmaAlone/Properties/Settings.cs | 42 - .../CS/7zip/Compress/RangeCoder/RangeCoder.cs | 234 -- .../7zip/Compress/RangeCoder/RangeCoderBit.cs | 117 - .../Compress/RangeCoder/RangeCoderBitTree.cs | 157 -- modules/lib7z/LZMASDK/CS/7zip/ICoder.cs | 157 -- modules/lib7z/LZMASDK/Java/SevenZip/CRC.java | 52 - .../Java/SevenZip/Compression/LZ/BinTree.java | 382 --- .../SevenZip/Compression/LZ/InWindow.java | 131 - .../SevenZip/Compression/LZ/OutWindow.java | 85 - .../Java/SevenZip/Compression/LZMA/Base.java | 88 - .../SevenZip/Compression/LZMA/Decoder.java | 329 --- .../SevenZip/Compression/LZMA/Encoder.java | 1416 ---------- .../RangeCoder/BitTreeDecoder.java | 55 - .../RangeCoder/BitTreeEncoder.java | 99 - .../Compression/RangeCoder/Decoder.java | 88 - .../Compression/RangeCoder/Encoder.java | 151 -- .../LZMASDK/Java/SevenZip/ICodeProgress.java | 6 - .../LZMASDK/Java/SevenZip/LzmaAlone.java | 253 -- .../LZMASDK/Java/SevenZip/LzmaBench.java | 392 --- modules/lib7z/LZMASDK/Methods.txt | 146 -- modules/lib7z/LZMASDK/README.mozilla | 5 - modules/lib7z/LZMASDK/history.txt | 247 -- modules/lib7z/LZMASDK/lzma.txt | 591 ----- modules/lib7z/Makefile.in | 84 - toolkit/toolkit-makefiles.sh | 5 - 439 files changed, 67756 deletions(-) delete mode 100644 modules/lib7z/7zLib.cpp delete mode 100644 modules/lib7z/7zLib.h delete mode 100644 modules/lib7z/7zobjs.mk delete mode 100644 modules/lib7z/LZMASDK/7zC.txt delete mode 100644 modules/lib7z/LZMASDK/7zFormat.txt delete mode 100644 modules/lib7z/LZMASDK/Asm/x64/7zCrcT8U.asm delete mode 100644 modules/lib7z/LZMASDK/Asm/x86/7zCrcT8U.asm delete mode 100644 modules/lib7z/LZMASDK/C/7z.h delete mode 100644 modules/lib7z/LZMASDK/C/7zBuf.c delete mode 100644 modules/lib7z/LZMASDK/C/7zBuf.h delete mode 100644 modules/lib7z/LZMASDK/C/7zBuf2.c delete mode 100644 modules/lib7z/LZMASDK/C/7zCrc.c delete mode 100644 modules/lib7z/LZMASDK/C/7zCrc.h delete mode 100644 modules/lib7z/LZMASDK/C/7zCrcT8.c delete mode 100644 modules/lib7z/LZMASDK/C/7zDec.c delete mode 100644 modules/lib7z/LZMASDK/C/7zFile.c delete mode 100644 modules/lib7z/LZMASDK/C/7zFile.h delete mode 100644 modules/lib7z/LZMASDK/C/7zIn.c delete mode 100644 modules/lib7z/LZMASDK/C/7zStream.c delete mode 100644 modules/lib7z/LZMASDK/C/7zVersion.h delete mode 100644 modules/lib7z/LZMASDK/C/Alloc.c delete mode 100644 modules/lib7z/LZMASDK/C/Alloc.h delete mode 100644 modules/lib7z/LZMASDK/C/Bcj2.c delete mode 100644 modules/lib7z/LZMASDK/C/Bcj2.h delete mode 100644 modules/lib7z/LZMASDK/C/Bra.c delete mode 100644 modules/lib7z/LZMASDK/C/Bra.h delete mode 100644 modules/lib7z/LZMASDK/C/Bra86.c delete mode 100644 modules/lib7z/LZMASDK/C/BraIA64.c delete mode 100644 modules/lib7z/LZMASDK/C/CpuArch.h delete mode 100644 modules/lib7z/LZMASDK/C/Delta.c delete mode 100644 modules/lib7z/LZMASDK/C/Delta.h delete mode 100644 modules/lib7z/LZMASDK/C/LzFind.c delete mode 100644 modules/lib7z/LZMASDK/C/LzFind.h delete mode 100644 modules/lib7z/LZMASDK/C/LzFindMt.c delete mode 100644 modules/lib7z/LZMASDK/C/LzFindMt.h delete mode 100644 modules/lib7z/LZMASDK/C/LzHash.h delete mode 100644 modules/lib7z/LZMASDK/C/Lzma2Dec.c delete mode 100644 modules/lib7z/LZMASDK/C/Lzma2Dec.h delete mode 100644 modules/lib7z/LZMASDK/C/Lzma2Enc.c delete mode 100644 modules/lib7z/LZMASDK/C/Lzma2Enc.h delete mode 100644 modules/lib7z/LZMASDK/C/Lzma86.h delete mode 100644 modules/lib7z/LZMASDK/C/Lzma86Dec.c delete mode 100644 modules/lib7z/LZMASDK/C/Lzma86Enc.c delete mode 100644 modules/lib7z/LZMASDK/C/LzmaDec.c delete mode 100644 modules/lib7z/LZMASDK/C/LzmaDec.h delete mode 100644 modules/lib7z/LZMASDK/C/LzmaEnc.c delete mode 100644 modules/lib7z/LZMASDK/C/LzmaEnc.h delete mode 100644 modules/lib7z/LZMASDK/C/LzmaLib.c delete mode 100644 modules/lib7z/LZMASDK/C/LzmaLib.h delete mode 100644 modules/lib7z/LZMASDK/C/MtCoder.c delete mode 100644 modules/lib7z/LZMASDK/C/MtCoder.h delete mode 100644 modules/lib7z/LZMASDK/C/RotateDefs.h delete mode 100644 modules/lib7z/LZMASDK/C/Sha256.c delete mode 100644 modules/lib7z/LZMASDK/C/Sha256.h delete mode 100644 modules/lib7z/LZMASDK/C/Threads.c delete mode 100644 modules/lib7z/LZMASDK/C/Threads.h delete mode 100644 modules/lib7z/LZMASDK/C/Types.h delete mode 100644 modules/lib7z/LZMASDK/C/Util/7z/7z.dsp delete mode 100644 modules/lib7z/LZMASDK/C/Util/7z/7z.dsw delete mode 100644 modules/lib7z/LZMASDK/C/Util/7z/7zAlloc.c delete mode 100644 modules/lib7z/LZMASDK/C/Util/7z/7zAlloc.h delete mode 100644 modules/lib7z/LZMASDK/C/Util/7z/7zMain.c delete mode 100644 modules/lib7z/LZMASDK/C/Util/7z/makefile delete mode 100644 modules/lib7z/LZMASDK/C/Util/7z/makefile.gcc delete mode 100644 modules/lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.c delete mode 100644 modules/lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.dsp delete mode 100644 modules/lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.dsw delete mode 100644 modules/lib7z/LZMASDK/C/Util/Lzma/makefile delete mode 100644 modules/lib7z/LZMASDK/C/Util/Lzma/makefile.gcc delete mode 100644 modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.def delete mode 100644 modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.dsp delete mode 100644 modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.dsw delete mode 100644 modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLibExports.c delete mode 100644 modules/lib7z/LZMASDK/C/Util/LzmaLib/makefile delete mode 100644 modules/lib7z/LZMASDK/C/Util/LzmaLib/resource.rc delete mode 100644 modules/lib7z/LZMASDK/C/Xz.c delete mode 100644 modules/lib7z/LZMASDK/C/Xz.h delete mode 100644 modules/lib7z/LZMASDK/C/XzCrc64.c delete mode 100644 modules/lib7z/LZMASDK/C/XzCrc64.h delete mode 100644 modules/lib7z/LZMASDK/C/XzDec.c delete mode 100644 modules/lib7z/LZMASDK/C/XzEnc.c delete mode 100644 modules/lib7z/LZMASDK/C/XzEnc.h delete mode 100644 modules/lib7z/LZMASDK/C/XzIn.c delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zCompressionMode.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zCompressionMode.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zDecode.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zDecode.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zEncode.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zEncode.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zExtract.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderInStream.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderInStream.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderOutStream.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderOutStream.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHandler.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHandler.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHandlerOut.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHeader.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHeader.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zIn.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zIn.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zItem.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zOut.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zOut.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zProperties.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zProperties.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zRegister.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zSpecStream.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zSpecStream.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zUpdate.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zUpdate.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/StdAfx.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Archive.def delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Archive2.def delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/ArchiveExports.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2MT.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2MT.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CrossThreadProgress.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CrossThreadProgress.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/DummyOutStream.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/DummyOutStream.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/HandlerOut.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/HandlerOut.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/InStreamWithCRC.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/InStreamWithCRC.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ItemNameUtils.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ItemNameUtils.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/MultiStream.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/MultiStream.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/OutStreamWithCRC.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ParseProperties.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ParseProperties.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/DllExports2.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/IArchive.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/Icons/7z.ico delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/LzmaHandler.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/SplitHandler.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Archive/XzHandler.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/Alone.dsp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/Alone.dsw delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/StdAfx.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/makefile delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/resource.rc delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/makefile delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/resource.rc delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/StdAfx.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/makefile delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/resource.rc delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/CWrappers.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/CWrappers.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/CreateCoder.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/CreateCoder.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/FilePathAutoRename.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/FilePathAutoRename.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/FileStreams.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/FileStreams.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/FilterCoder.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/FilterCoder.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/InBuffer.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/InBuffer.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/InOutTempBuffer.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/InOutTempBuffer.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/LimitedStreams.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/LimitedStreams.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/LockedStream.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/LockedStream.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/MethodId.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/MethodId.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/MethodProps.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/MethodProps.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/OffsetStream.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/OffsetStream.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/OutBuffer.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/OutBuffer.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/ProgressUtils.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/ProgressUtils.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/RegisterArc.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/RegisterCodec.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/StreamBinder.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/StreamBinder.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/StreamObjects.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/StreamObjects.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/StreamUtils.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/StreamUtils.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/VirtThread.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Common/VirtThread.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/Bcj2Coder.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/Bcj2Coder.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/Bcj2Register.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/BcjCoder.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/BcjCoder.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/BcjRegister.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchCoder.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchCoder.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchMisc.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchMisc.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchRegister.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/ByteSwap.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/CodecExports.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/CopyCoder.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/CopyCoder.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/CopyRegister.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/DeltaFilter.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsw delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/StdAfx.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/makefile delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/makefile.gcc delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Decoder.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Decoder.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Encoder.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Encoder.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Register.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaDecoder.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaDecoder.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaEncoder.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaEncoder.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaRegister.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/RangeCoder.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/RangeCoderBit.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Compress/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Crc.mak delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Crc2.mak delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/Guid.txt delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/ICoder.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/IDecl.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/IPassword.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/IProgress.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/IStream.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/MyVersion.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/MyVersionInfo.rc delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/PropID.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/SubBuild.mak delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/Client7z.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/Client7z.dsp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/Client7z.dsw delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/StdAfx.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/makefile delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveCommandLine.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveCommandLine.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveExtractCallback.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveName.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveName.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveOpenCallback.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/DefaultName.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/DefaultName.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/DirItem.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/EnumDirItems.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/EnumDirItems.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExitCode.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Extract.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Extract.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExtractMode.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExtractingFilePath.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExtractingFilePath.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/IFileExtractCallback.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/LoadCodecs.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/LoadCodecs.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/OpenArchive.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/OpenArchive.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/PropIDUtils.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/PropIDUtils.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Property.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SetProperties.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SetProperties.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SortUtils.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SortUtils.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/TempFiles.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/TempFiles.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Update.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Update.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateAction.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateAction.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateCallback.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateCallback.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdatePair.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdatePair.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateProduce.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateProduce.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/WorkDir.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/WorkDir.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ZipRegistry.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ConsoleClose.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ConsoleClose.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ExtractCallbackConsole.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/List.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/List.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/Main.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/MainAr.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/OpenCallbackConsole.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/OpenCallbackConsole.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/PercentPrinter.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/PercentPrinter.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/StdAfx.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UpdateCallbackConsole.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UserInputUtils.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UserInputUtils.h delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/makefile delete mode 100644 modules/lib7z/LZMASDK/CPP/7zip/UI/Console/resource.rc delete mode 100644 modules/lib7z/LZMASDK/CPP/Build.mak delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/AutoPtr.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/Buffer.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/CRC.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/C_FileIO.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/C_FileIO.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/ComTry.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/CommandLineParser.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/CommandLineParser.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/Defs.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/DynamicBuffer.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/IntToString.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/IntToString.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/ListFileUtils.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/ListFileUtils.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/MyCom.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/MyException.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/MyGuidDef.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/MyInitGuid.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/MyString.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/MyString.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/MyUnknown.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/MyVector.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/MyVector.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/MyWindows.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/NewHandler.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/NewHandler.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/StdInStream.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/StdInStream.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/StdOutStream.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/StdOutStream.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/StringConvert.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/StringConvert.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/StringToInt.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/StringToInt.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/Types.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/UTFConvert.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/UTFConvert.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/Wildcard.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Common/Wildcard.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/DLL.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/DLL.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/Defs.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/Error.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/Error.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/FileDir.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/FileDir.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/FileFind.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/FileFind.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/FileIO.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/FileIO.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/FileMapping.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/FileMapping.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/FileName.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/FileName.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/Handle.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/MemoryLock.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/MemoryLock.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/NtCheck.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/PropVariant.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/PropVariant.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/PropVariantConversions.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/PropVariantConversions.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/Registry.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/Registry.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/StdAfx.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/Synchronization.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/Synchronization.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/System.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/System.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/Thread.h delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/Time.cpp delete mode 100644 modules/lib7z/LZMASDK/CPP/Windows/Time.h delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Common/CRC.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Common/CommandLineParser.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Common/InBuffer.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Common/OutBuffer.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/IMatchFinder.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/LzBinTree.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/LzInWindow.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/LzOutWindow.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LZMA/LzmaBase.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LZMA/LzmaDecoder.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LZMA/LzmaEncoder.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaBench.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/RangeCoder/RangeCoder.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs delete mode 100644 modules/lib7z/LZMASDK/CS/7zip/ICoder.cs delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/CRC.java delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZ/BinTree.java delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZ/InWindow.java delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZ/OutWindow.java delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZMA/Base.java delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZMA/Decoder.java delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZMA/Encoder.java delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/Decoder.java delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/Encoder.java delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/ICodeProgress.java delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/LzmaAlone.java delete mode 100644 modules/lib7z/LZMASDK/Java/SevenZip/LzmaBench.java delete mode 100644 modules/lib7z/LZMASDK/Methods.txt delete mode 100644 modules/lib7z/LZMASDK/README.mozilla delete mode 100644 modules/lib7z/LZMASDK/history.txt delete mode 100644 modules/lib7z/LZMASDK/lzma.txt delete mode 100644 modules/lib7z/Makefile.in diff --git a/modules/lib7z/7zLib.cpp b/modules/lib7z/7zLib.cpp deleted file mode 100644 index a32b2d90f2d5..000000000000 --- a/modules/lib7z/7zLib.cpp +++ /dev/null @@ -1,797 +0,0 @@ -/* -*- Mode: C++; c-basic-offset: 2; tab-width: 8; indent-tabs-mode: nil; -*- */ -/***************************************************************************** - * - * This 7z Library is based the 7z Client and 7z Standalone Extracting Plugin - * code from the LZMA SDK. - * It is in the public domain (see http://www.7-zip.org/sdk.html). - * - * Any copyright in these files held by contributors to the Mozilla Project is - * also dedicated to the Public Domain. - * http://creativecommons.org/licenses/publicdomain/ - * - * Contributor(s): - * Alex Pakhotin - * - *****************************************************************************/ - -#include "Common/MyWindows.h" -#include "Common/NewHandler.h" - -#include "Common/IntToString.h" -#include "Common/MyInitGuid.h" -#include "Common/StringConvert.h" - -#include "Windows/DLL.h" -#include "Windows/FileDir.h" -#include "Windows/FileFind.h" -#include "Windows/FileName.h" -#include "Windows/NtCheck.h" -#include "Windows/PropVariant.h" -#include "Windows/PropVariantConversions.h" - -#include "7zip/Common/FileStreams.h" - -#include "7zip/ICoder.h" -#include "7zip/Archive/IArchive.h" - -#include "7zip/IPassword.h" -#include "7zip/MyVersion.h" - -// Used for global structures initialization -#include "../C/7zCrc.h" -#include "7zip/Common/RegisterArc.h" -#include "7zip/Common/RegisterCodec.h" -#include "7zip/Archive/7z/7zHandler.h" -#include "7zip/Compress/Bcj2Coder.h" -#include "7zip/Compress/BcjCoder.h" -#include "7zip/Compress/CopyCoder.h" -#include "7zip/Compress/Lzma2Decoder.h" -#include "7zip/Compress/LzmaDecoder.h" - -#include "7zLib.h" - -using namespace NWindows; - -STDAPI CreateArchiver(const GUID *classID, const GUID *iid, void **outObject); - -DEFINE_GUID(CLSID_CArchiveHandler, - 0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00); - -DEFINE_GUID(CLSID_CFormat7z, - 0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x07, 0x00, 0x00); - -// Global static structures copied here from *Register.cpp files -// Static global variable defined in a module didn't work when used in a library - -// 7z -static IInArchive *CreateArc() { return new NArchive::N7z::CHandler; } -static CArcInfo g_ArcInfo = -{ L"7z", L"7z", 0, 7, {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}, 6, false, CreateArc, NULL }; - -// BCJ2 -static void *CreateCodecBCJ2() { return (void *)(ICompressCoder2 *)(new NCompress::NBcj2::CDecoder()); } - -static CCodecInfo g_CodecInfoBCJ2 = -{ CreateCodecBCJ2, NULL, 0x0303011B, L"BCJ2", 4, false }; - -// BCJ -static void *CreateCodecBCJ() { return (void *)(ICompressFilter *)(new CBCJ_x86_Decoder()); } - -static CCodecInfo g_CodecInfoBCJ = -{ CreateCodecBCJ, NULL, 0x03030103, L"BCJ", 1, true }; - -// Copy -static void *CreateCodecCopy() { return (void *)(ICompressCoder *)(new NCompress::CCopyCoder); } - -static CCodecInfo g_CodecInfoCopy = -{ CreateCodecCopy, CreateCodecCopy, 0x00, L"Copy", 1, false }; - -// LZMA2 -static void *CreateCodecLZMA2() { return (void *)(ICompressCoder *)(new NCompress::NLzma2::CDecoder); } - -static CCodecInfo g_CodecInfoLZMA2 = -{ CreateCodecLZMA2, NULL, 0x21, L"LZMA2", 1, false }; - -// LZMA -static void *CreateCodecLZMA() { return (void *)(ICompressCoder *)(new NCompress::NLzma::CDecoder); } - -static CCodecInfo g_CodecInfoLZMA = -{ CreateCodecLZMA, NULL, 0x030101, L"LZMA", 1, false }; - -// Initialize all global structures -static void Initialize7z() -{ - static bool bInitialized = false; - - if (bInitialized) - return; - - CrcGenerateTable(); - - RegisterArc(&g_ArcInfo); - - RegisterCodec(&g_CodecInfoBCJ2); - RegisterCodec(&g_CodecInfoBCJ); - RegisterCodec(&g_CodecInfoCopy); - RegisterCodec(&g_CodecInfoLZMA2); - RegisterCodec(&g_CodecInfoLZMA); - - bInitialized = true; -} - -#ifdef _CONSOLE -#include "stdio.h" - -void PrintString(const UString &s) -{ - printf("%s", (LPCSTR)GetOemString(s)); -} - -void PrintString(const AString &s) -{ - printf("%s", (LPCSTR)s); -} - -void PrintNewLine() -{ - PrintString("\n"); -} - -void PrintStringLn(const AString &s) -{ - PrintString(s); - PrintNewLine(); -} - -void PrintError(const AString &s) -{ - PrintNewLine(); - PrintString(s); - PrintNewLine(); -} -#else - -#define PrintString(s) -#define PrintString(s) -#define PrintNewLine() -#define PrintStringLn(s) - -static UString g_sError; - -void PrintError(const AString &s) -{ - g_sError += GetUnicodeString(s) + L"\n"; -} - -const wchar_t* GetExtractorError() -{ - return (const wchar_t*)g_sError; -} - -#endif - -static HRESULT IsArchiveItemProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result) -{ - NCOM::CPropVariant prop; - RINOK(archive->GetProperty(index, propID, &prop)); - if (prop.vt == VT_BOOL) - result = VARIANT_BOOLToBool(prop.boolVal); - else if (prop.vt == VT_EMPTY) - result = false; - else - return E_FAIL; - return S_OK; -} - -static HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result) -{ - return IsArchiveItemProp(archive, index, kpidIsDir, result); -} - - -static const wchar_t *kEmptyFileAlias = L"[Content]"; - - -////////////////////////////////////////////////////////////// -// Archive Open callback class - -class CArchiveOpenCallback: - public IArchiveOpenCallback, - public ICryptoGetTextPassword, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP1(ICryptoGetTextPassword) - - STDMETHOD(SetTotal)(const UInt64 *files, const UInt64 *bytes); - STDMETHOD(SetCompleted)(const UInt64 *files, const UInt64 *bytes); - - STDMETHOD(CryptoGetTextPassword)(BSTR *password); - - bool PasswordIsDefined; - UString Password; - - CArchiveOpenCallback() : PasswordIsDefined(false) {} -}; - -STDMETHODIMP CArchiveOpenCallback::SetTotal(const UInt64 * /* files */, const UInt64 * /* bytes */) -{ - return S_OK; -} - -STDMETHODIMP CArchiveOpenCallback::SetCompleted(const UInt64 * /* files */, const UInt64 * /* bytes */) -{ - return S_OK; -} - -STDMETHODIMP CArchiveOpenCallback::CryptoGetTextPassword(BSTR *password) -{ - if (!PasswordIsDefined) - { - // You can ask real password here from user - // Password = GetPassword(OutStream); - // PasswordIsDefined = true; - PrintError("Password is not defined"); - return E_ABORT; - } - return StringToBstr(Password, password); -} - - -////////////////////////////////////////////////////////////// -// Archive Extracting callback class - -static const wchar_t *kCantDeleteOutputFile = L"ERROR: Can not delete output file "; - -static const char *kTestingString = "Testing "; -static const char *kExtractingString = "Extracting "; -static const char *kSkippingString = "Skipping "; - -static const char *kUnsupportedMethod = "Unsupported Method"; -static const char *kCRCFailed = "CRC Failed"; -static const char *kDataError = "Data Error"; -static const char *kUnknownError = "Unknown Error"; - -class CArchiveExtractCallback: - public IArchiveExtractCallback, - public ICryptoGetTextPassword, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP1(ICryptoGetTextPassword) - - // IProgress - STDMETHOD(SetTotal)(UInt64 size); - STDMETHOD(SetCompleted)(const UInt64 *completeValue); - - // IArchiveExtractCallback - STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode); - STDMETHOD(PrepareOperation)(Int32 askExtractMode); - STDMETHOD(SetOperationResult)(Int32 resultEOperationResult); - - // ICryptoGetTextPassword - STDMETHOD(CryptoGetTextPassword)(BSTR *aPassword); - -private: - CMyComPtr _archiveHandler; - UString _directoryPath; // Output directory - UString _filePath; // name inside archive - UString _diskFilePath; // full path to file on disk - bool _extractMode; - struct CProcessedFileInfo - { - FILETIME MTime; - UInt32 Attrib; - bool isDir; - bool AttribDefined; - bool MTimeDefined; - } _processedFileInfo; - - COutFileStream *_outFileStreamSpec; - CMyComPtr _outFileStream; - - SzExtractProgressCallback *_progressCallback; - UInt32 _numItemsTotal; - UInt32 _numItemsExtracted; - -public: - void Init(IInArchive *archiveHandler, const UString &directoryPath, SzExtractProgressCallback *progressCallback); - - UInt64 NumErrors; - bool PasswordIsDefined; - UString Password; - - CArchiveExtractCallback() : PasswordIsDefined(false) {} -}; - -void CArchiveExtractCallback::Init(IInArchive *archiveHandler, const UString &directoryPath, SzExtractProgressCallback *progressCallback) -{ - NumErrors = 0; - _archiveHandler = archiveHandler; - _directoryPath = directoryPath; - NFile::NName::NormalizeDirPathPrefix(_directoryPath); - _progressCallback = progressCallback; - _numItemsTotal = 0; - _numItemsExtracted = 0; - archiveHandler->GetNumberOfItems(&_numItemsTotal); -} - -// SetTotal and SetCompleted callback methods show progress -// based on the input buffer, which does not really correspond -// to the actual extraction progress. -// Current implementation uses number of files as the progress indicator, -// which gives better result with an archive containing a lot of files. -STDMETHODIMP CArchiveExtractCallback::SetTotal(UInt64 /* size */) -{ -/* - char s[30]; - ConvertUInt64ToString(size, s); - PrintString(AString("\n--- Total: ")); - PrintStringLn(s); -*/ - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::SetCompleted(const UInt64 * /* completeValue */) -{ -/* - char s[30]; - ConvertUInt64ToString(*completeValue, s); - PrintString(AString("\n--- Completed: ")); - PrintStringLn(s); -*/ - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, - ISequentialOutStream **outStream, Int32 askExtractMode) -{ - *outStream = 0; - _outFileStream.Release(); - - { - // Get Name - NCOM::CPropVariant prop; - RINOK(_archiveHandler->GetProperty(index, kpidPath, &prop)); - - UString fullPath; - if (prop.vt == VT_EMPTY) - fullPath = kEmptyFileAlias; - else - { - if (prop.vt != VT_BSTR) - return E_FAIL; - fullPath = prop.bstrVal; - } - _filePath = fullPath; - } - - if (askExtractMode != NArchive::NExtract::NAskMode::kExtract) - return S_OK; - - { - // Get Attrib - NCOM::CPropVariant prop; - RINOK(_archiveHandler->GetProperty(index, kpidAttrib, &prop)); - if (prop.vt == VT_EMPTY) - { - _processedFileInfo.Attrib = 0; - _processedFileInfo.AttribDefined = false; - } - else - { - if (prop.vt != VT_UI4) - return E_FAIL; - _processedFileInfo.Attrib = prop.ulVal; - _processedFileInfo.AttribDefined = true; - } - } - - RINOK(IsArchiveItemFolder(_archiveHandler, index, _processedFileInfo.isDir)); - - { - // Get Modified Time - NCOM::CPropVariant prop; - RINOK(_archiveHandler->GetProperty(index, kpidMTime, &prop)); - _processedFileInfo.MTimeDefined = false; - switch(prop.vt) - { - case VT_EMPTY: - // _processedFileInfo.MTime = _utcMTimeDefault; - break; - case VT_FILETIME: - _processedFileInfo.MTime = prop.filetime; - _processedFileInfo.MTimeDefined = true; - break; - default: - return E_FAIL; - } - - } - /* - { - // Get Size - NCOM::CPropVariant prop; - RINOK(_archiveHandler->GetProperty(index, kpidSize, &prop)); - bool newFileSizeDefined = (prop.vt != VT_EMPTY); - UInt64 newFileSize; - if (newFileSizeDefined) - newFileSize = ConvertPropVariantToUInt64(prop); - } - */ - - { - // Create folders for file - int slashPos = _filePath.ReverseFind(WCHAR_PATH_SEPARATOR); - if (slashPos >= 0) - NFile::NDirectory::CreateComplexDirectory(_directoryPath + _filePath.Left(slashPos)); - } - - UString fullProcessedPath = _directoryPath + _filePath; - _diskFilePath = fullProcessedPath; - - if (_processedFileInfo.isDir) - { - NFile::NDirectory::CreateComplexDirectory(fullProcessedPath); - } - else - { - NFile::NFind::CFileInfoW fi; - if (fi.Find(fullProcessedPath)) - { - if (!NFile::NDirectory::DeleteFileAlways(fullProcessedPath)) - { - PrintString(UString(kCantDeleteOutputFile) + fullProcessedPath); - return E_ABORT; - } - } - - _outFileStreamSpec = new COutFileStream; - CMyComPtr outStreamLoc(_outFileStreamSpec); - if (!_outFileStreamSpec->Open(fullProcessedPath, CREATE_ALWAYS)) - { - PrintString((UString)L"can not open output file " + fullProcessedPath); - return E_ABORT; - } - _outFileStream = outStreamLoc; - *outStream = outStreamLoc.Detach(); - } - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::PrepareOperation(Int32 askExtractMode) -{ - _extractMode = false; - switch (askExtractMode) - { - case NArchive::NExtract::NAskMode::kExtract: _extractMode = true; break; - }; - switch (askExtractMode) - { - case NArchive::NExtract::NAskMode::kExtract: PrintString(kExtractingString); break; - case NArchive::NExtract::NAskMode::kTest: PrintString(kTestingString); break; - case NArchive::NExtract::NAskMode::kSkip: PrintString(kSkippingString); break; - }; - PrintString(_filePath); - _numItemsExtracted++; - if (_progressCallback) - { - _progressCallback(_numItemsExtracted * 100 / _numItemsTotal); - } - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 operationResult) -{ - switch(operationResult) - { - case NArchive::NExtract::NOperationResult::kOK: - break; - default: - { - NumErrors++; - PrintString(" "); - switch(operationResult) - { - case NArchive::NExtract::NOperationResult::kUnSupportedMethod: - PrintString(kUnsupportedMethod); - break; - case NArchive::NExtract::NOperationResult::kCRCError: - PrintString(kCRCFailed); - break; - case NArchive::NExtract::NOperationResult::kDataError: - PrintString(kDataError); - break; - default: - PrintString(kUnknownError); - } - } - } - - if (_outFileStream != NULL) - { - if (_processedFileInfo.MTimeDefined) - _outFileStreamSpec->SetMTime(&_processedFileInfo.MTime); - RINOK(_outFileStreamSpec->Close()); - } - _outFileStream.Release(); - if (_extractMode && _processedFileInfo.AttribDefined) - NFile::NDirectory::MySetFileAttributes(_diskFilePath, _processedFileInfo.Attrib); - PrintNewLine(); - return S_OK; -} - - -STDMETHODIMP CArchiveExtractCallback::CryptoGetTextPassword(BSTR *password) -{ - if (!PasswordIsDefined) - { - // You can ask real password here from user - // Password = GetPassword(OutStream); - // PasswordIsDefined = true; - PrintError("Password is not defined"); - return E_ABORT; - } - return StringToBstr(Password, password); -} - -static WRes MyCreateDir(const WCHAR *name) -{ - return CreateDirectoryW(name, NULL) ? 0 : GetLastError(); -} - -static WRes CreateOutputDir(const WCHAR *outputDir) -{ - WRes res = SZ_OK; - WCHAR name[MAX_PATH]; - size_t j; - if (outputDir == NULL || outputDir[0] == 0) - return SZ_ERROR_PARAM; - wcsncpy(name, outputDir, MAX_PATH-1); - name[MAX_PATH-1] = 0; - - for (j = 1; name[j] != 0 && res == 0; j++) - { - if (name[j] == CHAR_PATH_SEPARATOR) - { - name[j] = 0; - res = MyCreateDir(name); - name[j] = CHAR_PATH_SEPARATOR; - } - } - if (res == 0 && name[wcslen(name) - 1] != CHAR_PATH_SEPARATOR) - { - res = MyCreateDir(name); - } - return res; -} - -////////////////////////////////////////////////////////////////////////// -// Main extract functions - -/** - * Extract 7z-archive - * - * @param archiveFileName Name of the archive - * @param fileToExtract Name of the file to extract (if NULL - extract all files) - * @param outputDir Output directory for extracted files - * @param progressCallback Function to be called on each file - can show the progress - */ -int SzExtract(const WCHAR *archiveName, - const WCHAR *fileToExtract, const WCHAR *outputDir, - SzExtractProgressCallback *progressCallback) -{ - return SzExtractSfx(archiveName, 0, fileToExtract, outputDir, progressCallback); -} - -/** - * Extract 7z-SFX-archive - * - * @param archiveFileName Name of the archive - * @param sfxStubSize Size of the stub at the beginning of the file before the actual archive data (could be 0) - * @param fileToExtract Name of the file to extract (if NULL - extract all files) - * @param outputDir Output directory for extracted files - * @param progressCallback Function to be called on each file to show the progress - */ -int SzExtractSfx(const WCHAR *archiveName, DWORD sfxStubSize, - const WCHAR *fileToExtract, const WCHAR *outputDir, - SzExtractProgressCallback *progressCallback) -{ - Initialize7z(); - - CreateOutputDir(outputDir); - -#ifdef _DEBUG_OUTPUT - PrintString("Loading archive "); - PrintString(archiveName); - PrintNewLine(); -#endif - - // Extracting - { - CMyComPtr archive; - if (CreateArchiver(&CLSID_CFormat7z, &IID_IInArchive, (void **)&archive) != S_OK) - { - PrintError("Can not get class object"); - return SZ_ERROR_FAIL; - } - -#ifdef _DEBUG_OUTPUT - PrintStringLn("Created archiver"); -#endif - - CInFileStream *fileSpec = new CInFileStream; - CMyComPtr file = fileSpec; - - if (!fileSpec->Open(archiveName)) - { - PrintError("Can not open archive file"); - return SZ_ERROR_NO_ARCHIVE; - } - if (sfxStubSize > 0) - file->Seek(sfxStubSize, STREAM_SEEK_SET, NULL); - -#ifdef _DEBUG_OUTPUT - PrintStringLn("Opened file"); -#endif - - { - CArchiveOpenCallback *openCallbackSpec = new CArchiveOpenCallback; - CMyComPtr openCallback(openCallbackSpec); - openCallbackSpec->PasswordIsDefined = false; - // openCallbackSpec->PasswordIsDefined = true; - // openCallbackSpec->Password = L"1"; - - if (archive->Open(file, 0, openCallback) != S_OK) - { - PrintError("Can not open archive"); - return SZ_ERROR_NO_ARCHIVE; - } - } - -#ifdef _DEBUG_OUTPUT - PrintStringLn("Extracting..."); -#endif - - CArchiveExtractCallback *extractCallbackSpec = new CArchiveExtractCallback; - CMyComPtr extractCallback(extractCallbackSpec); - extractCallbackSpec->Init(archive, outputDir, progressCallback); - extractCallbackSpec->PasswordIsDefined = false; - // extractCallbackSpec->PasswordIsDefined = true; - // extractCallbackSpec->Password = L"1"; - - HRESULT result = S_OK; - UInt32 numItems = 0; - archive->GetNumberOfItems(&numItems); - if (numItems == 0) - { - PrintError("No files found in the archive"); - return SZ_ERROR_DATA; - } - if (fileToExtract) - { - // Extract one file - for (UInt32 i = 0; i < numItems; i++) - { - // Get name of file - NWindows::NCOM::CPropVariant prop; - archive->GetProperty(i, kpidPath, &prop); - UString s = ConvertPropVariantToString(prop); - if (wcscmp(fileToExtract, s) == 0) - { - PrintString(s); - PrintString("\n"); - // Extract the current file - result = archive->Extract(&i, 1, false, extractCallback); - break; - } - } - } - else - { - // Extract all - result = archive->Extract(NULL, (UInt32)(Int32)(-1), false, extractCallback); - } - if (result != S_OK) - { - PrintError("Extract Error"); - return SZ_ERROR_DATA; - } - } - return SZ_OK; -} - -/** - * Get information about 7z-SFX-archive - * - * @param archiveFileName Name of the archive - * @param sfxStubSize Size of the stub at the beginning of the file before the actual archive data (could be 0) - * - * Output parameters: - * @param pUncompressedSize Pointer to 64 bit integer for the total uncompressed size - * @param pNumberOfFiles (optional) Pointer to a number of files in the archive - * @param pNumberOfDirs (optional) Pointer to a number of directories in the archive - */ -int SzGetSfxArchiveInfo(const WCHAR *archiveName, const DWORD sfxStubSize, - ULONGLONG *pUncompressedSize, DWORD *pNumberOfFiles, DWORD *pNumberOfDirs) -{ - if (!archiveName || !pUncompressedSize) - return SZ_ERROR_PARAM; - - *pUncompressedSize = 0; - - Initialize7z(); - - CMyComPtr archive; - if (CreateArchiver(&CLSID_CFormat7z, &IID_IInArchive, (void **)&archive) != S_OK) - { - PrintError("Can not get class object"); - return SZ_ERROR_FAIL; - } - - CInFileStream *fileSpec = new CInFileStream; - CMyComPtr file = fileSpec; - - if (!fileSpec->Open(archiveName)) - { - PrintError("Can not open archive file"); - return SZ_ERROR_NO_ARCHIVE; - } - if (sfxStubSize > 0) - file->Seek(sfxStubSize, STREAM_SEEK_SET, NULL); - - CArchiveOpenCallback *openCallbackSpec = new CArchiveOpenCallback; - CMyComPtr openCallback(openCallbackSpec); - openCallbackSpec->PasswordIsDefined = false; - - if (archive->Open(file, 0, openCallback) != S_OK) - { - PrintError("Can not open archive"); - return SZ_ERROR_NO_ARCHIVE; - } - - UInt32 numItems = 0; - archive->GetNumberOfItems(&numItems); - if (numItems == 0) - { - PrintError("No files found in the archive"); - return SZ_ERROR_DATA; - } - - if (pNumberOfFiles) - *pNumberOfFiles = 0; - - if (pNumberOfDirs) - *pNumberOfDirs = 0; - - // Iterate through all items - for (UInt32 i = 0; i < numItems; i++) - { - bool isDir = false; - RINOK(IsArchiveItemFolder(archive, i, isDir)); - if (isDir) - { - if (pNumberOfDirs) - (*pNumberOfDirs)++; - continue; - } - - UInt64 unpackSize = 0; - - NWindows::NCOM::CPropVariant prop; - if (archive->GetProperty(i, kpidSize, &prop) != S_OK) - { - PrintError("Cannot get size property value"); - return SZ_ERROR_DATA; - } - if (prop.vt != VT_EMPTY) - unpackSize = ConvertPropVariantToUInt64(prop); - - (*pUncompressedSize) += unpackSize; - - if (pNumberOfFiles) - (*pNumberOfFiles)++; - } - - return SZ_OK; -} diff --git a/modules/lib7z/7zLib.h b/modules/lib7z/7zLib.h deleted file mode 100644 index 901ecbe2bc87..000000000000 --- a/modules/lib7z/7zLib.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- Mode: C++; c-basic-offset: 2; tab-width: 8; indent-tabs-mode: nil; -*- */ -/***************************************************************************** - * - * This 7z Library is based the 7z Client and 7z Standalone Extracting Plugin - * code from the LZMA SDK. - * It is in the public domain (see http://www.7-zip.org/sdk.html). - * - * Any copyright in these files held by contributors to the Mozilla Project is - * also dedicated to the Public Domain. - * http://creativecommons.org/licenses/publicdomain/ - * - * Contributor(s): - * Alex Pakhotin - * - *****************************************************************************/ - -#ifndef __7ZLIB_H -#define __7ZLIB_H - -#define SZ_OK 0 -#define SZ_ERROR_DATA 1 -#define SZ_ERROR_PARAM 5 -#define SZ_ERROR_FAIL 11 -#define SZ_ERROR_NO_ARCHIVE 17 - -const WCHAR* GetExtractorError(); - -typedef void SzExtractProgressCallback(int nPercentComplete); - -/** - * Extract 7z-archive - */ -int SzExtract(const WCHAR *archiveName, - const WCHAR *fileToExtract, const WCHAR *outputDir, - SzExtractProgressCallback *progressCallback); - -int SzExtractSfx(const WCHAR *archiveName, DWORD sfxStubSize, - const WCHAR *fileToExtract, const WCHAR *outputDir, - SzExtractProgressCallback *progressCallback); - -int SzGetSfxArchiveInfo(const WCHAR *archiveName, const DWORD sfxStubSize, - ULONGLONG *pUncompressedSize, DWORD *pNumberOfFiles = NULL, DWORD *pNumberOfDirs = NULL); - -#endif // __7ZLIB_H diff --git a/modules/lib7z/7zobjs.mk b/modules/lib7z/7zobjs.mk deleted file mode 100644 index a2fcce04992a..000000000000 --- a/modules/lib7z/7zobjs.mk +++ /dev/null @@ -1,72 +0,0 @@ -# This makefile contains a list of 7-zip files required for extraction only - -7ZIPCPPSRCS = \ - 7zDecode.cpp \ - 7zExtract.cpp \ - 7zFolderOutStream.cpp \ - 7zHandler.cpp \ - 7zHeader.cpp \ - 7zIn.cpp \ - ArchiveExports.cpp \ - CoderMixer2.cpp \ - CoderMixer2MT.cpp \ - CrossThreadProgress.cpp \ - ItemNameUtils.cpp \ - OutStreamWithCRC.cpp \ - CreateCoder.cpp \ - FilePathAutoRename.cpp \ - FileStreams.cpp \ - FilterCoder.cpp \ - InBuffer.cpp \ - LimitedStreams.cpp \ - LockedStream.cpp \ - OutBuffer.cpp \ - ProgressUtils.cpp \ - StreamBinder.cpp \ - StreamObjects.cpp \ - StreamUtils.cpp \ - VirtThread.cpp \ - Bcj2Coder.cpp \ - BcjCoder.cpp \ - BranchCoder.cpp \ - CopyCoder.cpp \ - Lzma2Decoder.cpp \ - LzmaDecoder.cpp \ - DefaultName.cpp \ - ExtractingFilePath.cpp \ - IntToString.cpp \ - MyString.cpp \ - MyVector.cpp \ - NewHandler.cpp \ - StringConvert.cpp \ - Wildcard.cpp \ - DLL.cpp \ - Error.cpp \ - FileDir.cpp \ - FileFind.cpp \ - FileIO.cpp \ - FileName.cpp \ - PropVariant.cpp \ - PropVariantConversions.cpp \ - Synchronization.cpp \ - $(NULL) - -7ZIPCSRCS = \ - 7zCrc.c \ - Alloc.c \ - Bra86.c \ - Lzma2Dec.c \ - LzmaDec.c \ - Sha256.c \ - Threads.c \ - $(NULL) - -vpath %.cpp $(7ZIPSRCDIR)/CPP/7zip/Archive -vpath %.cpp $(7ZIPSRCDIR)/CPP/7zip/Archive/7z -vpath %.cpp $(7ZIPSRCDIR)/CPP/7zip/Archive/Common -vpath %.cpp $(7ZIPSRCDIR)/CPP/7zip/Common -vpath %.cpp $(7ZIPSRCDIR)/CPP/7zip/Compress -vpath %.cpp $(7ZIPSRCDIR)/CPP/7zip/UI/Common -vpath %.cpp $(7ZIPSRCDIR)/CPP/Common -vpath %.cpp $(7ZIPSRCDIR)/CPP/Windows -vpath %.c $(7ZIPSRCDIR)/C diff --git a/modules/lib7z/LZMASDK/7zC.txt b/modules/lib7z/LZMASDK/7zC.txt deleted file mode 100644 index 4ff63250d80b..000000000000 --- a/modules/lib7z/LZMASDK/7zC.txt +++ /dev/null @@ -1,194 +0,0 @@ -7z ANSI-C Decoder 4.62 ----------------------- - -7z ANSI-C provides 7z/LZMA decoding. -7z ANSI-C version is simplified version ported from C++ code. - -LZMA is default and general compression method of 7z format -in 7-Zip compression program (www.7-zip.org). LZMA provides high -compression ratio and very fast decompression. - - -LICENSE -------- - -7z ANSI-C Decoder is part of the LZMA SDK. -LZMA SDK is written and placed in the public domain by Igor Pavlov. - -Files ---------------------- - -7zDecode.* - Low level 7z decoding -7zExtract.* - High level 7z decoding -7zHeader.* - .7z format constants -7zIn.* - .7z archive opening -7zItem.* - .7z structures -7zMain.c - Test application - - -How To Use ----------- - -You must download 7-Zip program from www.7-zip.org. - -You can create .7z archive with 7z.exe or 7za.exe: - - 7za.exe a archive.7z *.htm -r -mx -m0fb=255 - -If you have big number of files in archive, and you need fast extracting, -you can use partly-solid archives: - - 7za.exe a archive.7z *.htm -ms=512K -r -mx -m0fb=255 -m0d=512K - -In that example 7-Zip will use 512KB solid blocks. So it needs to decompress only -512KB for extracting one file from such archive. - - -Limitations of current version of 7z ANSI-C Decoder ---------------------------------------------------- - - - It reads only "FileName", "Size", "LastWriteTime" and "CRC" information for each file in archive. - - It supports only LZMA and Copy (no compression) methods with BCJ or BCJ2 filters. - - It converts original UTF-16 Unicode file names to UTF-8 Unicode file names. - -These limitations will be fixed in future versions. - - -Using 7z ANSI-C Decoder Test application: ------------------------------------------ - -Usage: 7zDec - -: - e: Extract files from archive - l: List contents of archive - t: Test integrity of archive - -Example: - - 7zDec l archive.7z - -lists contents of archive.7z - - 7zDec e archive.7z - -extracts files from archive.7z to current folder. - - -How to use .7z Decoder ----------------------- - -Memory allocation -~~~~~~~~~~~~~~~~~ - -7z Decoder uses two memory pools: -1) Temporary pool -2) Main pool -Such scheme can allow you to avoid fragmentation of allocated blocks. - - -Steps for using 7z decoder --------------------------- - -Use code at 7zMain.c as example. - -1) Declare variables: - inStream /* implements ILookInStream interface */ - CSzArEx db; /* 7z archive database structure */ - ISzAlloc allocImp; /* memory functions for main pool */ - ISzAlloc allocTempImp; /* memory functions for temporary pool */ - -2) call CrcGenerateTable(); function to initialize CRC structures. - -3) call SzArEx_Init(&db); function to initialize db structures. - -4) call SzArEx_Open(&db, inStream, &allocMain, &allocTemp) to open archive - -This function opens archive "inStream" and reads headers to "db". -All items in "db" will be allocated with "allocMain" functions. -SzArEx_Open function allocates and frees temporary structures by "allocTemp" functions. - -5) List items or Extract items - - Listing code: - ~~~~~~~~~~~~~ - { - UInt32 i; - for (i = 0; i < db.db.NumFiles; i++) - { - CFileItem *f = db.db.Files + i; - printf("%10d %s\n", (int)f->Size, f->Name); - } - } - - Extracting code: - ~~~~~~~~~~~~~~~~ - - SZ_RESULT SzAr_Extract( - CArchiveDatabaseEx *db, - ILookInStream *inStream, - UInt32 fileIndex, /* index of file */ - UInt32 *blockIndex, /* index of solid block */ - Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ - size_t *outBufferSize, /* buffer size for output buffer */ - size_t *offset, /* offset of stream for required file in *outBuffer */ - size_t *outSizeProcessed, /* size of file in *outBuffer */ - ISzAlloc *allocMain, - ISzAlloc *allocTemp); - - If you need to decompress more than one file, you can send these values from previous call: - blockIndex, - outBuffer, - outBufferSize, - You can consider "outBuffer" as cache of solid block. If your archive is solid, - it will increase decompression speed. - - After decompressing you must free "outBuffer": - allocImp.Free(outBuffer); - -6) call SzArEx_Free(&db, allocImp.Free) to free allocated items in "db". - - - - -Memory requirements for .7z decoding ------------------------------------- - -Memory usage for Archive opening: - - Temporary pool: - - Memory for uncompressed .7z headers - - some other temporary blocks - - Main pool: - - Memory for database: - Estimated size of one file structures in solid archive: - - Size (4 or 8 Bytes) - - CRC32 (4 bytes) - - LastWriteTime (8 bytes) - - Some file information (4 bytes) - - File Name (variable length) + pointer + allocation structures - -Memory usage for archive Decompressing: - - Temporary pool: - - Memory for LZMA decompressing structures - - Main pool: - - Memory for decompressed solid block - - Memory for temprorary buffers, if BCJ2 fileter is used. Usually these - temprorary buffers can be about 15% of solid block size. - - -7z Decoder doesn't allocate memory for compressed blocks. -Instead of this, you must allocate buffer with desired -size before calling 7z Decoder. Use 7zMain.c as example. - - -Defines -------- - -_SZ_ALLOC_DEBUG - define it if you want to debug alloc/free operations to stderr. - - ---- - -http://www.7-zip.org -http://www.7-zip.org/sdk.html -http://www.7-zip.org/support.html diff --git a/modules/lib7z/LZMASDK/7zFormat.txt b/modules/lib7z/LZMASDK/7zFormat.txt deleted file mode 100644 index f084c05d608a..000000000000 --- a/modules/lib7z/LZMASDK/7zFormat.txt +++ /dev/null @@ -1,471 +0,0 @@ -7z Format description (2.30 Beta 25) ------------------------------------ - -This file contains description of 7z archive format. -7z archive can contain files compressed with any method. -See "Methods.txt" for description for defined compressing methods. - - -Format structure Overview -------------------------- - -Some fields can be optional. - -Archive structure -~~~~~~~~~~~~~~~~~ -SignatureHeader -[PackedStreams] -[PackedStreamsForHeaders] -[ - Header - or - { - Packed Header - HeaderInfo - } -] - - - -Header structure -~~~~~~~~~~~~~~~~ -{ - ArchiveProperties - AdditionalStreams - { - PackInfo - { - PackPos - NumPackStreams - Sizes[NumPackStreams] - CRCs[NumPackStreams] - } - CodersInfo - { - NumFolders - Folders[NumFolders] - { - NumCoders - CodersInfo[NumCoders] - { - ID - NumInStreams; - NumOutStreams; - PropertiesSize - Properties[PropertiesSize] - } - NumBindPairs - BindPairsInfo[NumBindPairs] - { - InIndex; - OutIndex; - } - PackedIndices - } - UnPackSize[Folders][Folders.NumOutstreams] - CRCs[NumFolders] - } - SubStreamsInfo - { - NumUnPackStreamsInFolders[NumFolders]; - UnPackSizes[] - CRCs[] - } - } - MainStreamsInfo - { - (Same as in AdditionalStreams) - } - FilesInfo - { - NumFiles - Properties[] - { - ID - Size - Data - } - } -} - -HeaderInfo structure -~~~~~~~~~~~~~~~~~~~~ -{ - (Same as in AdditionalStreams) -} - - - -Notes about Notation and encoding ---------------------------------- - -7z uses little endian encoding. - -7z archive format has optional headers that are marked as -[] -Header -[] - -REAL_UINT64 means real UINT64. - -UINT64 means real UINT64 encoded with the following scheme: - - Size of encoding sequence depends from first byte: - First_Byte Extra_Bytes Value - (binary) - 0xxxxxxx : ( xxxxxxx ) - 10xxxxxx BYTE y[1] : ( xxxxxx << (8 * 1)) + y - 110xxxxx BYTE y[2] : ( xxxxx << (8 * 2)) + y - ... - 1111110x BYTE y[6] : ( x << (8 * 6)) + y - 11111110 BYTE y[7] : y - 11111111 BYTE y[8] : y - - - -Property IDs ------------- - -0x00 = kEnd, - -0x01 = kHeader, - -0x02 = kArchiveProperties, - -0x03 = kAdditionalStreamsInfo, -0x04 = kMainStreamsInfo, -0x05 = kFilesInfo, - -0x06 = kPackInfo, -0x07 = kUnPackInfo, -0x08 = kSubStreamsInfo, - -0x09 = kSize, -0x0A = kCRC, - -0x0B = kFolder, - -0x0C = kCodersUnPackSize, -0x0D = kNumUnPackStream, - -0x0E = kEmptyStream, -0x0F = kEmptyFile, -0x10 = kAnti, - -0x11 = kName, -0x12 = kCreationTime, -0x13 = kLastAccessTime, -0x14 = kLastWriteTime, -0x15 = kWinAttributes, -0x16 = kComment, - -0x17 = kEncodedHeader, - - -7z format headers ------------------ - -SignatureHeader -~~~~~~~~~~~~~~~ - BYTE kSignature[6] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}; - - ArchiveVersion - { - BYTE Major; // now = 0 - BYTE Minor; // now = 2 - }; - - UINT32 StartHeaderCRC; - - StartHeader - { - REAL_UINT64 NextHeaderOffset - REAL_UINT64 NextHeaderSize - UINT32 NextHeaderCRC - } - - -........................... - - -ArchiveProperties -~~~~~~~~~~~~~~~~~ -BYTE NID::kArchiveProperties (0x02) -for (;;) -{ - BYTE PropertyType; - if (aType == 0) - break; - UINT64 PropertySize; - BYTE PropertyData[PropertySize]; -} - - -Digests (NumStreams) -~~~~~~~~~~~~~~~~~~~~~ - BYTE AllAreDefined - if (AllAreDefined == 0) - { - for(NumStreams) - BIT Defined - } - UINT32 CRCs[NumDefined] - - -PackInfo -~~~~~~~~~~~~ - BYTE NID::kPackInfo (0x06) - UINT64 PackPos - UINT64 NumPackStreams - - [] - BYTE NID::kSize (0x09) - UINT64 PackSizes[NumPackStreams] - [] - - [] - BYTE NID::kCRC (0x0A) - PackStreamDigests[NumPackStreams] - [] - - BYTE NID::kEnd - - -Folder -~~~~~~ - UINT64 NumCoders; - for (NumCoders) - { - BYTE - { - 0:3 DecompressionMethod.IDSize - 4: - 0 - IsSimple - 1 - Is not simple - 5: - 0 - No Attributes - 1 - There Are Attributes - 7: - 0 - Last Method in Alternative_Method_List - 1 - There are more alternative methods - } - BYTE DecompressionMethod.ID[DecompressionMethod.IDSize] - if (!IsSimple) - { - UINT64 NumInStreams; - UINT64 NumOutStreams; - } - if (DecompressionMethod[0] != 0) - { - UINT64 PropertiesSize - BYTE Properties[PropertiesSize] - } - } - - NumBindPairs = NumOutStreamsTotal - 1; - - for (NumBindPairs) - { - UINT64 InIndex; - UINT64 OutIndex; - } - - NumPackedStreams = NumInStreamsTotal - NumBindPairs; - if (NumPackedStreams > 1) - for(NumPackedStreams) - { - UINT64 Index; - }; - - - - -Coders Info -~~~~~~~~~~~ - - BYTE NID::kUnPackInfo (0x07) - - - BYTE NID::kFolder (0x0B) - UINT64 NumFolders - BYTE External - switch(External) - { - case 0: - Folders[NumFolders] - case 1: - UINT64 DataStreamIndex - } - - - BYTE ID::kCodersUnPackSize (0x0C) - for(Folders) - for(Folder.NumOutStreams) - UINT64 UnPackSize; - - - [] - BYTE NID::kCRC (0x0A) - UnPackDigests[NumFolders] - [] - - - - BYTE NID::kEnd - - - -SubStreams Info -~~~~~~~~~~~~~~ - BYTE NID::kSubStreamsInfo; (0x08) - - [] - BYTE NID::kNumUnPackStream; (0x0D) - UINT64 NumUnPackStreamsInFolders[NumFolders]; - [] - - - [] - BYTE NID::kSize (0x09) - UINT64 UnPackSizes[] - [] - - - [] - BYTE NID::kCRC (0x0A) - Digests[Number of streams with unknown CRC] - [] - - - BYTE NID::kEnd - - -Streams Info -~~~~~~~~~~~~ - - [] - PackInfo - [] - - - [] - CodersInfo - [] - - - [] - SubStreamsInfo - [] - - BYTE NID::kEnd - - -FilesInfo -~~~~~~~~~ - BYTE NID::kFilesInfo; (0x05) - UINT64 NumFiles - - for (;;) - { - BYTE PropertyType; - if (aType == 0) - break; - - UINT64 Size; - - switch(PropertyType) - { - kEmptyStream: (0x0E) - for(NumFiles) - BIT IsEmptyStream - - kEmptyFile: (0x0F) - for(EmptyStreams) - BIT IsEmptyFile - - kAnti: (0x10) - for(EmptyStreams) - BIT IsAntiFile - - case kCreationTime: (0x12) - case kLastAccessTime: (0x13) - case kLastWriteTime: (0x14) - BYTE AllAreDefined - if (AllAreDefined == 0) - { - for(NumFiles) - BIT TimeDefined - } - BYTE External; - if(External != 0) - UINT64 DataIndex - [] - for(Definded Items) - UINT32 Time - [] - - kNames: (0x11) - BYTE External; - if(External != 0) - UINT64 DataIndex - [] - for(Files) - { - wchar_t Names[NameSize]; - wchar_t 0; - } - [] - - kAttributes: (0x15) - BYTE AllAreDefined - if (AllAreDefined == 0) - { - for(NumFiles) - BIT AttributesAreDefined - } - BYTE External; - if(External != 0) - UINT64 DataIndex - [] - for(Definded Attributes) - UINT32 Attributes - [] - } - } - - -Header -~~~~~~ - BYTE NID::kHeader (0x01) - - [] - ArchiveProperties - [] - - [] - BYTE NID::kAdditionalStreamsInfo; (0x03) - StreamsInfo - [] - - [] - BYTE NID::kMainStreamsInfo; (0x04) - StreamsInfo - [] - - [] - FilesInfo - [] - - BYTE NID::kEnd - - -HeaderInfo -~~~~~~~~~~ - [] - BYTE NID::kEncodedHeader; (0x17) - StreamsInfo for Encoded Header - [] - - ---- -End of document diff --git a/modules/lib7z/LZMASDK/Asm/x64/7zCrcT8U.asm b/modules/lib7z/LZMASDK/Asm/x64/7zCrcT8U.asm deleted file mode 100644 index 6d883eae9df6..000000000000 --- a/modules/lib7z/LZMASDK/Asm/x64/7zCrcT8U.asm +++ /dev/null @@ -1,101 +0,0 @@ -.code - - - - -CRC1b macro - movzx EDX, BYTE PTR [RSI] - inc RSI - movzx EBX, AL - xor EDX, EBX - shr EAX, 8 - xor EAX, [RDI + RDX * 4] - dec R8 -endm - - - - -align 16 -CrcUpdateT8 PROC - - push RBX - push RSI - push RDI - push RBP - - mov EAX, ECX - mov RSI, RDX - mov RDI, R9 - - - test R8, R8 - jz sl_end - sl: - test RSI, 7 - jz sl_end - CRC1b - jnz sl - sl_end: - - cmp R8, 16 - jb crc_end - mov R9, R8 - and R8, 7 - add R8, 8 - sub R9, R8 - - add R9, RSI - xor EAX, [RSI] - mov EBX, [RSI + 4] - movzx ECX, BL - align 16 - main_loop: - mov EDX, [RDI + RCX*4 + 0C00h] - movzx EBP, BH - xor EDX, [RDI + RBP*4 + 0800h] - shr EBX, 16 - movzx ECX, BL - xor EDX, [RSI + 8] - xor EDX, [RDI + RCX*4 + 0400h] - movzx ECX, AL - movzx EBP, BH - xor EDX, [RDI + RBP*4 + 0000h] - - mov EBX, [RSI + 12] - - xor EDX, [RDI + RCX*4 + 01C00h] - movzx EBP, AH - shr EAX, 16 - movzx ECX, AL - xor EDX, [RDI + RBP*4 + 01800h] - movzx EBP, AH - mov EAX, [RDI + RCX*4 + 01400h] - add RSI, 8 - xor EAX, [RDI + RBP*4 + 01000h] - movzx ECX, BL - xor EAX,EDX - - cmp RSI, R9 - jne main_loop - xor EAX, [RSI] - - - - crc_end: - - test R8, R8 - jz fl_end - fl: - CRC1b - jnz fl - fl_end: - - pop RBP - pop RDI - pop RSI - pop RBX - ret -CrcUpdateT8 ENDP - -end diff --git a/modules/lib7z/LZMASDK/Asm/x86/7zCrcT8U.asm b/modules/lib7z/LZMASDK/Asm/x86/7zCrcT8U.asm deleted file mode 100644 index c58b597226db..000000000000 --- a/modules/lib7z/LZMASDK/Asm/x86/7zCrcT8U.asm +++ /dev/null @@ -1,101 +0,0 @@ -.386 -.model flat - -_TEXT$00 SEGMENT PARA PUBLIC 'CODE' - -CRC1b macro - movzx EDX, BYTE PTR [ESI] - inc ESI - movzx EBX, AL - xor EDX, EBX - shr EAX, 8 - xor EAX, [EBP + EDX * 4] - dec EDI -endm - -data_size equ (4 + 4*4) -crc_table equ (data_size + 4) - -align 16 -public @CrcUpdateT8@16 -@CrcUpdateT8@16: - push EBX - push ESI - push EDI - push EBP - - mov EAX, ECX - mov ESI, EDX - mov EDI, [ESP + data_size] - mov EBP, [ESP + crc_table] - - test EDI, EDI - jz sl_end - sl: - test ESI, 7 - jz sl_end - CRC1b - jnz sl - sl_end: - - cmp EDI, 16 - jb crc_end - mov [ESP + data_size], EDI - sub EDI, 8 - and EDI, NOT 7 - sub [ESP + data_size], EDI - - add EDI, ESI - xor EAX, [ESI] - mov EBX, [ESI + 4] - movzx ECX, BL - align 16 - main_loop: - mov EDX, [EBP + ECX*4 + 0C00h] - movzx ECX, BH - xor EDX, [EBP + ECX*4 + 0800h] - shr EBX, 16 - movzx ECX, BL - xor EDX, [EBP + ECX*4 + 0400h] - xor EDX, [ESI + 8] - movzx ECX, AL - movzx EBX, BH - xor EDX, [EBP + EBX*4 + 0000h] - - mov EBX, [ESI + 12] - - xor EDX, [EBP + ECX*4 + 01C00h] - movzx ECX, AH - add ESI, 8 - shr EAX, 16 - xor EDX, [EBP + ECX*4 + 01800h] - movzx ECX, AL - xor EDX, [EBP + ECX*4 + 01400h] - movzx ECX, AH - mov EAX, [EBP + ECX*4 + 01000h] - movzx ECX, BL - xor EAX,EDX - - cmp ESI, EDI - jne main_loop - xor EAX, [ESI] - - mov EDI, [ESP + data_size] - - crc_end: - - test EDI, EDI - jz fl_end - fl: - CRC1b - jnz fl - fl_end: - - pop EBP - pop EDI - pop ESI - pop EBX - ret 8 - - -end diff --git a/modules/lib7z/LZMASDK/C/7z.h b/modules/lib7z/LZMASDK/C/7z.h deleted file mode 100644 index 59347d0ebe3a..000000000000 --- a/modules/lib7z/LZMASDK/C/7z.h +++ /dev/null @@ -1,201 +0,0 @@ -/* 7z.h -- 7z interface -2009-08-17 : Igor Pavlov : Public domain */ - -#ifndef __7Z_H -#define __7Z_H - -#include "7zBuf.h" - -EXTERN_C_BEGIN - -#define k7zStartHeaderSize 0x20 -#define k7zSignatureSize 6 -extern Byte k7zSignature[k7zSignatureSize]; -#define k7zMajorVersion 0 - -enum EIdEnum -{ - k7zIdEnd, - k7zIdHeader, - k7zIdArchiveProperties, - k7zIdAdditionalStreamsInfo, - k7zIdMainStreamsInfo, - k7zIdFilesInfo, - k7zIdPackInfo, - k7zIdUnpackInfo, - k7zIdSubStreamsInfo, - k7zIdSize, - k7zIdCRC, - k7zIdFolder, - k7zIdCodersUnpackSize, - k7zIdNumUnpackStream, - k7zIdEmptyStream, - k7zIdEmptyFile, - k7zIdAnti, - k7zIdName, - k7zIdCTime, - k7zIdATime, - k7zIdMTime, - k7zIdWinAttributes, - k7zIdComment, - k7zIdEncodedHeader, - k7zIdStartPos, - k7zIdDummy -}; - -typedef struct -{ - UInt32 NumInStreams; - UInt32 NumOutStreams; - UInt64 MethodID; - CBuf Props; -} CSzCoderInfo; - -void SzCoderInfo_Init(CSzCoderInfo *p); -void SzCoderInfo_Free(CSzCoderInfo *p, ISzAlloc *alloc); - -typedef struct -{ - UInt32 InIndex; - UInt32 OutIndex; -} CSzBindPair; - -typedef struct -{ - CSzCoderInfo *Coders; - CSzBindPair *BindPairs; - UInt32 *PackStreams; - UInt64 *UnpackSizes; - UInt32 NumCoders; - UInt32 NumBindPairs; - UInt32 NumPackStreams; - int UnpackCRCDefined; - UInt32 UnpackCRC; - - UInt32 NumUnpackStreams; -} CSzFolder; - -void SzFolder_Init(CSzFolder *p); -UInt64 SzFolder_GetUnpackSize(CSzFolder *p); -int SzFolder_FindBindPairForInStream(CSzFolder *p, UInt32 inStreamIndex); -UInt32 SzFolder_GetNumOutStreams(CSzFolder *p); -UInt64 SzFolder_GetUnpackSize(CSzFolder *p); - -SRes SzFolder_Decode(const CSzFolder *folder, const UInt64 *packSizes, - ILookInStream *stream, UInt64 startPos, - Byte *outBuffer, size_t outSize, ISzAlloc *allocMain); - -typedef struct -{ - UInt32 Low; - UInt32 High; -} CNtfsFileTime; - -typedef struct -{ - CNtfsFileTime MTime; - UInt64 Size; - UInt32 Crc; - Byte HasStream; - Byte IsDir; - Byte IsAnti; - Byte CrcDefined; - Byte MTimeDefined; -} CSzFileItem; - -void SzFile_Init(CSzFileItem *p); - -typedef struct -{ - UInt64 *PackSizes; - Byte *PackCRCsDefined; - UInt32 *PackCRCs; - CSzFolder *Folders; - CSzFileItem *Files; - UInt32 NumPackStreams; - UInt32 NumFolders; - UInt32 NumFiles; -} CSzAr; - -void SzAr_Init(CSzAr *p); -void SzAr_Free(CSzAr *p, ISzAlloc *alloc); - - -/* - SzExtract extracts file from archive - - *outBuffer must be 0 before first call for each new archive. - - Extracting cache: - If you need to decompress more than one file, you can send - these values from previous call: - *blockIndex, - *outBuffer, - *outBufferSize - You can consider "*outBuffer" as cache of solid block. If your archive is solid, - it will increase decompression speed. - - If you use external function, you can declare these 3 cache variables - (blockIndex, outBuffer, outBufferSize) as static in that external function. - - Free *outBuffer and set *outBuffer to 0, if you want to flush cache. -*/ - -typedef struct -{ - CSzAr db; - - UInt64 startPosAfterHeader; - UInt64 dataPos; - - UInt32 *FolderStartPackStreamIndex; - UInt64 *PackStreamStartPositions; - UInt32 *FolderStartFileIndex; - UInt32 *FileIndexToFolderIndexMap; - - size_t *FileNameOffsets; /* in 2-byte steps */ - CBuf FileNames; /* UTF-16-LE */ -} CSzArEx; - -void SzArEx_Init(CSzArEx *p); -void SzArEx_Free(CSzArEx *p, ISzAlloc *alloc); -UInt64 SzArEx_GetFolderStreamPos(const CSzArEx *p, UInt32 folderIndex, UInt32 indexInFolder); -int SzArEx_GetFolderFullPackSize(const CSzArEx *p, UInt32 folderIndex, UInt64 *resSize); - -/* -if dest == NULL, the return value specifies the required size of the buffer, - in 16-bit characters, including the null-terminating character. -if dest != NULL, the return value specifies the number of 16-bit characters that - are written to the dest, including the null-terminating character. */ - -size_t SzArEx_GetFileNameUtf16(const CSzArEx *p, size_t fileIndex, UInt16 *dest); - -SRes SzArEx_Extract( - const CSzArEx *db, - ILookInStream *inStream, - UInt32 fileIndex, /* index of file */ - UInt32 *blockIndex, /* index of solid block */ - Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ - size_t *outBufferSize, /* buffer size for output buffer */ - size_t *offset, /* offset of stream for required file in *outBuffer */ - size_t *outSizeProcessed, /* size of file in *outBuffer */ - ISzAlloc *allocMain, - ISzAlloc *allocTemp); - - -/* -SzArEx_Open Errors: -SZ_ERROR_NO_ARCHIVE -SZ_ERROR_ARCHIVE -SZ_ERROR_UNSUPPORTED -SZ_ERROR_MEM -SZ_ERROR_CRC -SZ_ERROR_INPUT_EOF -SZ_ERROR_FAIL -*/ - -SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream, ISzAlloc *allocMain, ISzAlloc *allocTemp); - -EXTERN_C_END - -#endif diff --git a/modules/lib7z/LZMASDK/C/7zBuf.c b/modules/lib7z/LZMASDK/C/7zBuf.c deleted file mode 100644 index a35fa2f98872..000000000000 --- a/modules/lib7z/LZMASDK/C/7zBuf.c +++ /dev/null @@ -1,36 +0,0 @@ -/* 7zBuf.c -- Byte Buffer -2008-03-28 -Igor Pavlov -Public domain */ - -#include "7zBuf.h" - -void Buf_Init(CBuf *p) -{ - p->data = 0; - p->size = 0; -} - -int Buf_Create(CBuf *p, size_t size, ISzAlloc *alloc) -{ - p->size = 0; - if (size == 0) - { - p->data = 0; - return 1; - } - p->data = (Byte *)alloc->Alloc(alloc, size); - if (p->data != 0) - { - p->size = size; - return 1; - } - return 0; -} - -void Buf_Free(CBuf *p, ISzAlloc *alloc) -{ - alloc->Free(alloc, p->data); - p->data = 0; - p->size = 0; -} diff --git a/modules/lib7z/LZMASDK/C/7zBuf.h b/modules/lib7z/LZMASDK/C/7zBuf.h deleted file mode 100644 index 88ff0c2f2dd8..000000000000 --- a/modules/lib7z/LZMASDK/C/7zBuf.h +++ /dev/null @@ -1,39 +0,0 @@ -/* 7zBuf.h -- Byte Buffer -2009-02-07 : Igor Pavlov : Public domain */ - -#ifndef __7Z_BUF_H -#define __7Z_BUF_H - -#include "Types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct -{ - Byte *data; - size_t size; -} CBuf; - -void Buf_Init(CBuf *p); -int Buf_Create(CBuf *p, size_t size, ISzAlloc *alloc); -void Buf_Free(CBuf *p, ISzAlloc *alloc); - -typedef struct -{ - Byte *data; - size_t size; - size_t pos; -} CDynBuf; - -void DynBuf_Construct(CDynBuf *p); -void DynBuf_SeekToBeg(CDynBuf *p); -int DynBuf_Write(CDynBuf *p, const Byte *buf, size_t size, ISzAlloc *alloc); -void DynBuf_Free(CDynBuf *p, ISzAlloc *alloc); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/7zBuf2.c b/modules/lib7z/LZMASDK/C/7zBuf2.c deleted file mode 100644 index 1c8b931a1208..000000000000 --- a/modules/lib7z/LZMASDK/C/7zBuf2.c +++ /dev/null @@ -1,45 +0,0 @@ -/* 7zBuf2.c -- Byte Buffer -2008-10-04 : Igor Pavlov : Public domain */ - -#include -#include "7zBuf.h" - -void DynBuf_Construct(CDynBuf *p) -{ - p->data = 0; - p->size = 0; - p->pos = 0; -} - -void DynBuf_SeekToBeg(CDynBuf *p) -{ - p->pos = 0; -} - -int DynBuf_Write(CDynBuf *p, const Byte *buf, size_t size, ISzAlloc *alloc) -{ - if (size > p->size - p->pos) - { - size_t newSize = p->pos + size; - Byte *data; - newSize += newSize / 4; - data = (Byte *)alloc->Alloc(alloc, newSize); - if (data == 0) - return 0; - p->size = newSize; - memcpy(data, p->data, p->pos); - alloc->Free(alloc, p->data); - p->data = data; - } - memcpy(p->data + p->pos, buf, size); - p->pos += size; - return 1; -} - -void DynBuf_Free(CDynBuf *p, ISzAlloc *alloc) -{ - alloc->Free(alloc, p->data); - p->data = 0; - p->size = 0; - p->pos = 0; -} diff --git a/modules/lib7z/LZMASDK/C/7zCrc.c b/modules/lib7z/LZMASDK/C/7zCrc.c deleted file mode 100644 index 92c47de0d345..000000000000 --- a/modules/lib7z/LZMASDK/C/7zCrc.c +++ /dev/null @@ -1,35 +0,0 @@ -/* 7zCrc.c -- CRC32 calculation -2008-08-05 -Igor Pavlov -Public domain */ - -#include "7zCrc.h" - -#define kCrcPoly 0xEDB88320 -UInt32 g_CrcTable[256]; - -void MY_FAST_CALL CrcGenerateTable(void) -{ - UInt32 i; - for (i = 0; i < 256; i++) - { - UInt32 r = i; - int j; - for (j = 0; j < 8; j++) - r = (r >> 1) ^ (kCrcPoly & ~((r & 1) - 1)); - g_CrcTable[i] = r; - } -} - -UInt32 MY_FAST_CALL CrcUpdate(UInt32 v, const void *data, size_t size) -{ - const Byte *p = (const Byte *)data; - for (; size > 0 ; size--, p++) - v = CRC_UPDATE_BYTE(v, *p); - return v; -} - -UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size) -{ - return CrcUpdate(CRC_INIT_VAL, data, size) ^ 0xFFFFFFFF; -} diff --git a/modules/lib7z/LZMASDK/C/7zCrc.h b/modules/lib7z/LZMASDK/C/7zCrc.h deleted file mode 100644 index d874baad2627..000000000000 --- a/modules/lib7z/LZMASDK/C/7zCrc.h +++ /dev/null @@ -1,30 +0,0 @@ -/* 7zCrc.h -- CRC32 calculation -2009-02-07 : Igor Pavlov : Public domain */ - -#ifndef __7Z_CRC_H -#define __7Z_CRC_H - -#include - -#include "Types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -extern UInt32 g_CrcTable[]; - -void MY_FAST_CALL CrcGenerateTable(void); - -#define CRC_INIT_VAL 0xFFFFFFFF -#define CRC_GET_DIGEST(crc) ((crc) ^ 0xFFFFFFFF) -#define CRC_UPDATE_BYTE(crc, b) (g_CrcTable[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8)) - -UInt32 MY_FAST_CALL CrcUpdate(UInt32 crc, const void *data, size_t size); -UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/7zCrcT8.c b/modules/lib7z/LZMASDK/C/7zCrcT8.c deleted file mode 100644 index 00c10bc1d126..000000000000 --- a/modules/lib7z/LZMASDK/C/7zCrcT8.c +++ /dev/null @@ -1,43 +0,0 @@ -/* 7zCrcT8.c -- CRC32 calculation with 8 tables -2008-03-19 -Igor Pavlov -Public domain */ - -#include "7zCrc.h" - -#define kCrcPoly 0xEDB88320 -#define CRC_NUM_TABLES 8 - -UInt32 g_CrcTable[256 * CRC_NUM_TABLES]; - -void MY_FAST_CALL CrcGenerateTable() -{ - UInt32 i; - for (i = 0; i < 256; i++) - { - UInt32 r = i; - int j; - for (j = 0; j < 8; j++) - r = (r >> 1) ^ (kCrcPoly & ~((r & 1) - 1)); - g_CrcTable[i] = r; - } - #if CRC_NUM_TABLES > 1 - for (; i < 256 * CRC_NUM_TABLES; i++) - { - UInt32 r = g_CrcTable[i - 256]; - g_CrcTable[i] = g_CrcTable[r & 0xFF] ^ (r >> 8); - } - #endif -} - -UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table); - -UInt32 MY_FAST_CALL CrcUpdate(UInt32 v, const void *data, size_t size) -{ - return CrcUpdateT8(v, data, size, g_CrcTable); -} - -UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size) -{ - return CrcUpdateT8(CRC_INIT_VAL, data, size, g_CrcTable) ^ 0xFFFFFFFF; -} diff --git a/modules/lib7z/LZMASDK/C/7zDec.c b/modules/lib7z/LZMASDK/C/7zDec.c deleted file mode 100644 index 22cc55c4703f..000000000000 --- a/modules/lib7z/LZMASDK/C/7zDec.c +++ /dev/null @@ -1,310 +0,0 @@ -/* 7zDec.c -- Decoding from 7z folder -2009-08-16 : Igor Pavlov : Public domain */ - -#include - -#include "7z.h" - -#include "Bcj2.h" -#include "Bra.h" -#include "LzmaDec.h" -#include "Lzma2Dec.h" - -#define k_Copy 0 -#define k_LZMA2 0x21 -#define k_LZMA 0x30101 -#define k_BCJ 0x03030103 -#define k_BCJ2 0x0303011B - -static SRes SzDecodeLzma(CSzCoderInfo *coder, UInt64 inSize, ILookInStream *inStream, - Byte *outBuffer, SizeT outSize, ISzAlloc *allocMain) -{ - CLzmaDec state; - SRes res = SZ_OK; - - LzmaDec_Construct(&state); - RINOK(LzmaDec_AllocateProbs(&state, coder->Props.data, (unsigned)coder->Props.size, allocMain)); - state.dic = outBuffer; - state.dicBufSize = outSize; - LzmaDec_Init(&state); - - for (;;) - { - Byte *inBuf = NULL; - size_t lookahead = (1 << 18); - if (lookahead > inSize) - lookahead = (size_t)inSize; - res = inStream->Look((void *)inStream, (void **)&inBuf, &lookahead); - if (res != SZ_OK) - break; - - { - SizeT inProcessed = (SizeT)lookahead, dicPos = state.dicPos; - ELzmaStatus status; - res = LzmaDec_DecodeToDic(&state, outSize, inBuf, &inProcessed, LZMA_FINISH_END, &status); - lookahead -= inProcessed; - inSize -= inProcessed; - if (res != SZ_OK) - break; - if (state.dicPos == state.dicBufSize || (inProcessed == 0 && dicPos == state.dicPos)) - { - if (state.dicBufSize != outSize || lookahead != 0 || - (status != LZMA_STATUS_FINISHED_WITH_MARK && - status != LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK)) - res = SZ_ERROR_DATA; - break; - } - res = inStream->Skip((void *)inStream, inProcessed); - if (res != SZ_OK) - break; - } - } - - LzmaDec_FreeProbs(&state, allocMain); - return res; -} - -static SRes SzDecodeLzma2(CSzCoderInfo *coder, UInt64 inSize, ILookInStream *inStream, - Byte *outBuffer, SizeT outSize, ISzAlloc *allocMain) -{ - CLzma2Dec state; - SRes res = SZ_OK; - - Lzma2Dec_Construct(&state); - if (coder->Props.size != 1) - return SZ_ERROR_DATA; - RINOK(Lzma2Dec_AllocateProbs(&state, coder->Props.data[0], allocMain)); - state.decoder.dic = outBuffer; - state.decoder.dicBufSize = outSize; - Lzma2Dec_Init(&state); - - for (;;) - { - Byte *inBuf = NULL; - size_t lookahead = (1 << 18); - if (lookahead > inSize) - lookahead = (size_t)inSize; - res = inStream->Look((void *)inStream, (void **)&inBuf, &lookahead); - if (res != SZ_OK) - break; - - { - SizeT inProcessed = (SizeT)lookahead, dicPos = state.decoder.dicPos; - ELzmaStatus status; - res = Lzma2Dec_DecodeToDic(&state, outSize, inBuf, &inProcessed, LZMA_FINISH_END, &status); - lookahead -= inProcessed; - inSize -= inProcessed; - if (res != SZ_OK) - break; - if (state.decoder.dicPos == state.decoder.dicBufSize || (inProcessed == 0 && dicPos == state.decoder.dicPos)) - { - if (state.decoder.dicBufSize != outSize || lookahead != 0 || - (status != LZMA_STATUS_FINISHED_WITH_MARK)) - res = SZ_ERROR_DATA; - break; - } - res = inStream->Skip((void *)inStream, inProcessed); - if (res != SZ_OK) - break; - } - } - - Lzma2Dec_FreeProbs(&state, allocMain); - return res; -} - -static SRes SzDecodeCopy(UInt64 inSize, ILookInStream *inStream, Byte *outBuffer) -{ - while (inSize > 0) - { - void *inBuf; - size_t curSize = (1 << 18); - if (curSize > inSize) - curSize = (size_t)inSize; - RINOK(inStream->Look((void *)inStream, (void **)&inBuf, &curSize)); - if (curSize == 0) - return SZ_ERROR_INPUT_EOF; - memcpy(outBuffer, inBuf, curSize); - outBuffer += curSize; - inSize -= curSize; - RINOK(inStream->Skip((void *)inStream, curSize)); - } - return SZ_OK; -} - -#define IS_UNSUPPORTED_METHOD(m) ((m) != k_Copy && (m) != k_LZMA && (m) != k_LZMA2) -#define IS_UNSUPPORTED_CODER(c) (IS_UNSUPPORTED_METHOD(c.MethodID) || c.NumInStreams != 1 || c.NumOutStreams != 1) -#define IS_NO_BCJ(c) (c.MethodID != k_BCJ || c.NumInStreams != 1 || c.NumOutStreams != 1) -#define IS_NO_BCJ2(c) (c.MethodID != k_BCJ2 || c.NumInStreams != 4 || c.NumOutStreams != 1) - -static SRes CheckSupportedFolder(const CSzFolder *f) -{ - if (f->NumCoders < 1 || f->NumCoders > 4) - return SZ_ERROR_UNSUPPORTED; - if (IS_UNSUPPORTED_CODER(f->Coders[0])) - return SZ_ERROR_UNSUPPORTED; - if (f->NumCoders == 1) - { - if (f->NumPackStreams != 1 || f->PackStreams[0] != 0 || f->NumBindPairs != 0) - return SZ_ERROR_UNSUPPORTED; - return SZ_OK; - } - if (f->NumCoders == 2) - { - if (IS_NO_BCJ(f->Coders[1]) || - f->NumPackStreams != 1 || f->PackStreams[0] != 0 || - f->NumBindPairs != 1 || - f->BindPairs[0].InIndex != 1 || f->BindPairs[0].OutIndex != 0) - return SZ_ERROR_UNSUPPORTED; - return SZ_OK; - } - if (f->NumCoders == 4) - { - if (IS_UNSUPPORTED_CODER(f->Coders[1]) || - IS_UNSUPPORTED_CODER(f->Coders[2]) || - IS_NO_BCJ2(f->Coders[3])) - return SZ_ERROR_UNSUPPORTED; - if (f->NumPackStreams != 4 || - f->PackStreams[0] != 2 || - f->PackStreams[1] != 6 || - f->PackStreams[2] != 1 || - f->PackStreams[3] != 0 || - f->NumBindPairs != 3 || - f->BindPairs[0].InIndex != 5 || f->BindPairs[0].OutIndex != 0 || - f->BindPairs[1].InIndex != 4 || f->BindPairs[1].OutIndex != 1 || - f->BindPairs[2].InIndex != 3 || f->BindPairs[2].OutIndex != 2) - return SZ_ERROR_UNSUPPORTED; - return SZ_OK; - } - return SZ_ERROR_UNSUPPORTED; -} - -static UInt64 GetSum(const UInt64 *values, UInt32 index) -{ - UInt64 sum = 0; - UInt32 i; - for (i = 0; i < index; i++) - sum += values[i]; - return sum; -} - -static SRes SzFolder_Decode2(const CSzFolder *folder, const UInt64 *packSizes, - ILookInStream *inStream, UInt64 startPos, - Byte *outBuffer, SizeT outSize, ISzAlloc *allocMain, - Byte *tempBuf[]) -{ - UInt32 ci; - SizeT tempSizes[3] = { 0, 0, 0}; - SizeT tempSize3 = 0; - Byte *tempBuf3 = 0; - - RINOK(CheckSupportedFolder(folder)); - - for (ci = 0; ci < folder->NumCoders; ci++) - { - CSzCoderInfo *coder = &folder->Coders[ci]; - - if (coder->MethodID == k_Copy || coder->MethodID == k_LZMA || coder->MethodID == k_LZMA2) - { - UInt32 si = 0; - UInt64 offset; - UInt64 inSize; - Byte *outBufCur = outBuffer; - SizeT outSizeCur = outSize; - if (folder->NumCoders == 4) - { - UInt32 indices[] = { 3, 2, 0 }; - UInt64 unpackSize = folder->UnpackSizes[ci]; - si = indices[ci]; - if (ci < 2) - { - Byte *temp; - outSizeCur = (SizeT)unpackSize; - if (outSizeCur != unpackSize) - return SZ_ERROR_MEM; - temp = (Byte *)IAlloc_Alloc(allocMain, outSizeCur); - if (temp == 0 && outSizeCur != 0) - return SZ_ERROR_MEM; - outBufCur = tempBuf[1 - ci] = temp; - tempSizes[1 - ci] = outSizeCur; - } - else if (ci == 2) - { - if (unpackSize > outSize) /* check it */ - return SZ_ERROR_PARAM; - tempBuf3 = outBufCur = outBuffer + (outSize - (size_t)unpackSize); - tempSize3 = outSizeCur = (SizeT)unpackSize; - } - else - return SZ_ERROR_UNSUPPORTED; - } - offset = GetSum(packSizes, si); - inSize = packSizes[si]; - RINOK(LookInStream_SeekTo(inStream, startPos + offset)); - - if (coder->MethodID == k_Copy) - { - if (inSize != outSizeCur) /* check it */ - return SZ_ERROR_DATA; - RINOK(SzDecodeCopy(inSize, inStream, outBufCur)); - } - else if (coder->MethodID == k_LZMA) - { - RINOK(SzDecodeLzma(coder, inSize, inStream, outBufCur, outSizeCur, allocMain)); - } - else - { - RINOK(SzDecodeLzma2(coder, inSize, inStream, outBufCur, outSizeCur, allocMain)); - } - } - else if (coder->MethodID == k_BCJ) - { - UInt32 state; - if (ci != 1) - return SZ_ERROR_UNSUPPORTED; - x86_Convert_Init(state); - x86_Convert(outBuffer, outSize, 0, &state, 0); - } - else if (coder->MethodID == k_BCJ2) - { - UInt64 offset = GetSum(packSizes, 1); - UInt64 s3Size = packSizes[1]; - SRes res; - if (ci != 3) - return SZ_ERROR_UNSUPPORTED; - RINOK(LookInStream_SeekTo(inStream, startPos + offset)); - tempSizes[2] = (SizeT)s3Size; - if (tempSizes[2] != s3Size) - return SZ_ERROR_MEM; - tempBuf[2] = (Byte *)IAlloc_Alloc(allocMain, tempSizes[2]); - if (tempBuf[2] == 0 && tempSizes[2] != 0) - return SZ_ERROR_MEM; - res = SzDecodeCopy(s3Size, inStream, tempBuf[2]); - RINOK(res) - - res = Bcj2_Decode( - tempBuf3, tempSize3, - tempBuf[0], tempSizes[0], - tempBuf[1], tempSizes[1], - tempBuf[2], tempSizes[2], - outBuffer, outSize); - RINOK(res) - } - else - return SZ_ERROR_UNSUPPORTED; - } - return SZ_OK; -} - -SRes SzFolder_Decode(const CSzFolder *folder, const UInt64 *packSizes, - ILookInStream *inStream, UInt64 startPos, - Byte *outBuffer, size_t outSize, ISzAlloc *allocMain) -{ - Byte *tempBuf[3] = { 0, 0, 0}; - int i; - SRes res = SzFolder_Decode2(folder, packSizes, inStream, startPos, - outBuffer, (SizeT)outSize, allocMain, tempBuf); - for (i = 0; i < 3; i++) - IAlloc_Free(allocMain, tempBuf[i]); - return res; -} diff --git a/modules/lib7z/LZMASDK/C/7zFile.c b/modules/lib7z/LZMASDK/C/7zFile.c deleted file mode 100644 index b99615c7f188..000000000000 --- a/modules/lib7z/LZMASDK/C/7zFile.c +++ /dev/null @@ -1,277 +0,0 @@ -/* 7zFile.c -- File IO -2009-08-16 : Igor Pavlov : Public domain */ - -#include "7zFile.h" - -#ifndef USE_WINDOWS_FILE - -#include - -#endif - -#ifdef USE_WINDOWS_FILE - -/* - ReadFile and WriteFile functions in Windows have BUG: - If you Read or Write 64MB or more (probably min_failure_size = 64MB - 32KB + 1) - from/to Network file, it returns ERROR_NO_SYSTEM_RESOURCES - (Insufficient system resources exist to complete the requested service). - Probably in some version of Windows there are problems with other sizes: - for 32 MB (maybe also for 16 MB). - And message can be "Network connection was lost" -*/ - -#define kChunkSizeMax (1 << 22) - -#endif - -void File_Construct(CSzFile *p) -{ - #ifdef USE_WINDOWS_FILE - p->handle = INVALID_HANDLE_VALUE; - #else - p->file = NULL; - #endif -} - -static WRes File_Open(CSzFile *p, const char *name, int writeMode) -{ - #ifdef USE_WINDOWS_FILE - p->handle = CreateFileA(name, - writeMode ? GENERIC_WRITE : GENERIC_READ, - FILE_SHARE_READ, NULL, - writeMode ? CREATE_ALWAYS : OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, NULL); - return (p->handle != INVALID_HANDLE_VALUE) ? 0 : GetLastError(); - #else - p->file = fopen(name, writeMode ? "wb+" : "rb"); - return (p->file != 0) ? 0 : errno; - #endif -} - -WRes InFile_Open(CSzFile *p, const char *name) { return File_Open(p, name, 0); } -WRes OutFile_Open(CSzFile *p, const char *name) { return File_Open(p, name, 1); } - -#ifdef USE_WINDOWS_FILE -static WRes File_OpenW(CSzFile *p, const WCHAR *name, int writeMode) -{ - p->handle = CreateFileW(name, - writeMode ? GENERIC_WRITE : GENERIC_READ, - FILE_SHARE_READ, NULL, - writeMode ? CREATE_ALWAYS : OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, NULL); - return (p->handle != INVALID_HANDLE_VALUE) ? 0 : GetLastError(); -} -WRes InFile_OpenW(CSzFile *p, const WCHAR *name) { return File_OpenW(p, name, 0); } -WRes OutFile_OpenW(CSzFile *p, const WCHAR *name) { return File_OpenW(p, name, 1); } -#endif - -WRes File_Close(CSzFile *p) -{ - #ifdef USE_WINDOWS_FILE - if (p->handle != INVALID_HANDLE_VALUE) - { - if (!CloseHandle(p->handle)) - return GetLastError(); - p->handle = INVALID_HANDLE_VALUE; - } - #else - if (p->file != NULL) - { - int res = fclose(p->file); - if (res != 0) - return res; - p->file = NULL; - } - #endif - return 0; -} - -WRes File_Read(CSzFile *p, void *data, size_t *size) -{ - size_t originalSize = *size; - if (originalSize == 0) - return 0; - - #ifdef USE_WINDOWS_FILE - - *size = 0; - do - { - DWORD curSize = (originalSize > kChunkSizeMax) ? kChunkSizeMax : (DWORD)originalSize; - DWORD processed = 0; - BOOL res = ReadFile(p->handle, data, curSize, &processed, NULL); - data = (void *)((Byte *)data + processed); - originalSize -= processed; - *size += processed; - if (!res) - return GetLastError(); - if (processed == 0) - break; - } - while (originalSize > 0); - return 0; - - #else - - *size = fread(data, 1, originalSize, p->file); - if (*size == originalSize) - return 0; - return ferror(p->file); - - #endif -} - -WRes File_Write(CSzFile *p, const void *data, size_t *size) -{ - size_t originalSize = *size; - if (originalSize == 0) - return 0; - - #ifdef USE_WINDOWS_FILE - - *size = 0; - do - { - DWORD curSize = (originalSize > kChunkSizeMax) ? kChunkSizeMax : (DWORD)originalSize; - DWORD processed = 0; - BOOL res = WriteFile(p->handle, data, curSize, &processed, NULL); - data = (void *)((Byte *)data + processed); - originalSize -= processed; - *size += processed; - if (!res) - return GetLastError(); - if (processed == 0) - break; - } - while (originalSize > 0); - return 0; - - #else - - *size = fwrite(data, 1, originalSize, p->file); - if (*size == originalSize) - return 0; - return ferror(p->file); - - #endif -} - -WRes File_Seek(CSzFile *p, Int64 *pos, ESzSeek origin) -{ - #ifdef USE_WINDOWS_FILE - - LARGE_INTEGER value; - DWORD moveMethod; - value.LowPart = (DWORD)*pos; - value.HighPart = (LONG)((UInt64)*pos >> 16 >> 16); /* for case when UInt64 is 32-bit only */ - switch (origin) - { - case SZ_SEEK_SET: moveMethod = FILE_BEGIN; break; - case SZ_SEEK_CUR: moveMethod = FILE_CURRENT; break; - case SZ_SEEK_END: moveMethod = FILE_END; break; - default: return ERROR_INVALID_PARAMETER; - } - value.LowPart = SetFilePointer(p->handle, value.LowPart, &value.HighPart, moveMethod); - if (value.LowPart == 0xFFFFFFFF) - { - WRes res = GetLastError(); - if (res != NO_ERROR) - return res; - } - *pos = ((Int64)value.HighPart << 32) | value.LowPart; - return 0; - - #else - - int moveMethod; - int res; - switch (origin) - { - case SZ_SEEK_SET: moveMethod = SEEK_SET; break; - case SZ_SEEK_CUR: moveMethod = SEEK_CUR; break; - case SZ_SEEK_END: moveMethod = SEEK_END; break; - default: return 1; - } - res = fseek(p->file, (long)*pos, moveMethod); - *pos = ftell(p->file); - return res; - - #endif -} - -WRes File_GetLength(CSzFile *p, UInt64 *length) -{ - #ifdef USE_WINDOWS_FILE - - DWORD sizeHigh; - DWORD sizeLow = GetFileSize(p->handle, &sizeHigh); - if (sizeLow == 0xFFFFFFFF) - { - DWORD res = GetLastError(); - if (res != NO_ERROR) - return res; - } - *length = (((UInt64)sizeHigh) << 32) + sizeLow; - return 0; - - #else - - long pos = ftell(p->file); - int res = fseek(p->file, 0, SEEK_END); - *length = ftell(p->file); - fseek(p->file, pos, SEEK_SET); - return res; - - #endif -} - - -/* ---------- FileSeqInStream ---------- */ - -static SRes FileSeqInStream_Read(void *pp, void *buf, size_t *size) -{ - CFileSeqInStream *p = (CFileSeqInStream *)pp; - return File_Read(&p->file, buf, size) == 0 ? SZ_OK : SZ_ERROR_READ; -} - -void FileSeqInStream_CreateVTable(CFileSeqInStream *p) -{ - p->s.Read = FileSeqInStream_Read; -} - - -/* ---------- FileInStream ---------- */ - -static SRes FileInStream_Read(void *pp, void *buf, size_t *size) -{ - CFileInStream *p = (CFileInStream *)pp; - return (File_Read(&p->file, buf, size) == 0) ? SZ_OK : SZ_ERROR_READ; -} - -static SRes FileInStream_Seek(void *pp, Int64 *pos, ESzSeek origin) -{ - CFileInStream *p = (CFileInStream *)pp; - return File_Seek(&p->file, pos, origin); -} - -void FileInStream_CreateVTable(CFileInStream *p) -{ - p->s.Read = FileInStream_Read; - p->s.Seek = FileInStream_Seek; -} - - -/* ---------- FileOutStream ---------- */ - -static size_t FileOutStream_Write(void *pp, const void *data, size_t size) -{ - CFileOutStream *p = (CFileOutStream *)pp; - File_Write(&p->file, data, &size); - return size; -} - -void FileOutStream_CreateVTable(CFileOutStream *p) -{ - p->s.Write = FileOutStream_Write; -} diff --git a/modules/lib7z/LZMASDK/C/7zFile.h b/modules/lib7z/LZMASDK/C/7zFile.h deleted file mode 100644 index 710bd170d176..000000000000 --- a/modules/lib7z/LZMASDK/C/7zFile.h +++ /dev/null @@ -1,81 +0,0 @@ -/* 7zFile.h -- File IO -2009-08-16 : Igor Pavlov : Public domain */ - -#ifndef __7Z_FILE_H -#define __7Z_FILE_H - -#ifdef _WIN32 -#define USE_WINDOWS_FILE -#endif - -#ifdef USE_WINDOWS_FILE -#include -#else -#include -#endif - -#include "Types.h" - -EXTERN_C_BEGIN - -/* ---------- File ---------- */ - -typedef struct -{ - #ifdef USE_WINDOWS_FILE - HANDLE handle; - #else - FILE *file; - #endif -} CSzFile; - -void File_Construct(CSzFile *p); -WRes InFile_Open(CSzFile *p, const char *name); -WRes OutFile_Open(CSzFile *p, const char *name); -#ifdef USE_WINDOWS_FILE -WRes InFile_OpenW(CSzFile *p, const WCHAR *name); -WRes OutFile_OpenW(CSzFile *p, const WCHAR *name); -#endif -WRes File_Close(CSzFile *p); - -/* reads max(*size, remain file's size) bytes */ -WRes File_Read(CSzFile *p, void *data, size_t *size); - -/* writes *size bytes */ -WRes File_Write(CSzFile *p, const void *data, size_t *size); - -WRes File_Seek(CSzFile *p, Int64 *pos, ESzSeek origin); -WRes File_GetLength(CSzFile *p, UInt64 *length); - - -/* ---------- FileInStream ---------- */ - -typedef struct -{ - ISeqInStream s; - CSzFile file; -} CFileSeqInStream; - -void FileSeqInStream_CreateVTable(CFileSeqInStream *p); - - -typedef struct -{ - ISeekInStream s; - CSzFile file; -} CFileInStream; - -void FileInStream_CreateVTable(CFileInStream *p); - - -typedef struct -{ - ISeqOutStream s; - CSzFile file; -} CFileOutStream; - -void FileOutStream_CreateVTable(CFileOutStream *p); - -EXTERN_C_END - -#endif diff --git a/modules/lib7z/LZMASDK/C/7zIn.c b/modules/lib7z/LZMASDK/C/7zIn.c deleted file mode 100644 index 84b86c7b3ece..000000000000 --- a/modules/lib7z/LZMASDK/C/7zIn.c +++ /dev/null @@ -1,1376 +0,0 @@ -/* 7zIn.c -- 7z Input functions -2009-08-17 : Igor Pavlov : Public domain */ - -#include - -#include "7z.h" -#include "7zCrc.h" -#include "CpuArch.h" - -Byte k7zSignature[k7zSignatureSize] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}; - -#define RINOM(x) { if ((x) == 0) return SZ_ERROR_MEM; } - -#define NUM_FOLDER_CODERS_MAX 32 -#define NUM_CODER_STREAMS_MAX 32 - -void SzCoderInfo_Init(CSzCoderInfo *p) -{ - Buf_Init(&p->Props); -} - -void SzCoderInfo_Free(CSzCoderInfo *p, ISzAlloc *alloc) -{ - Buf_Free(&p->Props, alloc); - SzCoderInfo_Init(p); -} - -void SzFolder_Init(CSzFolder *p) -{ - p->Coders = 0; - p->BindPairs = 0; - p->PackStreams = 0; - p->UnpackSizes = 0; - p->NumCoders = 0; - p->NumBindPairs = 0; - p->NumPackStreams = 0; - p->UnpackCRCDefined = 0; - p->UnpackCRC = 0; - p->NumUnpackStreams = 0; -} - -void SzFolder_Free(CSzFolder *p, ISzAlloc *alloc) -{ - UInt32 i; - if (p->Coders) - for (i = 0; i < p->NumCoders; i++) - SzCoderInfo_Free(&p->Coders[i], alloc); - IAlloc_Free(alloc, p->Coders); - IAlloc_Free(alloc, p->BindPairs); - IAlloc_Free(alloc, p->PackStreams); - IAlloc_Free(alloc, p->UnpackSizes); - SzFolder_Init(p); -} - -UInt32 SzFolder_GetNumOutStreams(CSzFolder *p) -{ - UInt32 result = 0; - UInt32 i; - for (i = 0; i < p->NumCoders; i++) - result += p->Coders[i].NumOutStreams; - return result; -} - -int SzFolder_FindBindPairForInStream(CSzFolder *p, UInt32 inStreamIndex) -{ - UInt32 i; - for (i = 0; i < p->NumBindPairs; i++) - if (p->BindPairs[i].InIndex == inStreamIndex) - return i; - return -1; -} - - -int SzFolder_FindBindPairForOutStream(CSzFolder *p, UInt32 outStreamIndex) -{ - UInt32 i; - for (i = 0; i < p->NumBindPairs; i++) - if (p->BindPairs[i].OutIndex == outStreamIndex) - return i; - return -1; -} - -UInt64 SzFolder_GetUnpackSize(CSzFolder *p) -{ - int i = (int)SzFolder_GetNumOutStreams(p); - if (i == 0) - return 0; - for (i--; i >= 0; i--) - if (SzFolder_FindBindPairForOutStream(p, i) < 0) - return p->UnpackSizes[i]; - /* throw 1; */ - return 0; -} - -void SzFile_Init(CSzFileItem *p) -{ - p->HasStream = 1; - p->IsDir = 0; - p->IsAnti = 0; - p->CrcDefined = 0; - p->MTimeDefined = 0; -} - -void SzAr_Init(CSzAr *p) -{ - p->PackSizes = 0; - p->PackCRCsDefined = 0; - p->PackCRCs = 0; - p->Folders = 0; - p->Files = 0; - p->NumPackStreams = 0; - p->NumFolders = 0; - p->NumFiles = 0; -} - -void SzAr_Free(CSzAr *p, ISzAlloc *alloc) -{ - UInt32 i; - if (p->Folders) - for (i = 0; i < p->NumFolders; i++) - SzFolder_Free(&p->Folders[i], alloc); - - IAlloc_Free(alloc, p->PackSizes); - IAlloc_Free(alloc, p->PackCRCsDefined); - IAlloc_Free(alloc, p->PackCRCs); - IAlloc_Free(alloc, p->Folders); - IAlloc_Free(alloc, p->Files); - SzAr_Init(p); -} - - -void SzArEx_Init(CSzArEx *p) -{ - SzAr_Init(&p->db); - p->FolderStartPackStreamIndex = 0; - p->PackStreamStartPositions = 0; - p->FolderStartFileIndex = 0; - p->FileIndexToFolderIndexMap = 0; - p->FileNameOffsets = 0; - Buf_Init(&p->FileNames); -} - -void SzArEx_Free(CSzArEx *p, ISzAlloc *alloc) -{ - IAlloc_Free(alloc, p->FolderStartPackStreamIndex); - IAlloc_Free(alloc, p->PackStreamStartPositions); - IAlloc_Free(alloc, p->FolderStartFileIndex); - IAlloc_Free(alloc, p->FileIndexToFolderIndexMap); - - IAlloc_Free(alloc, p->FileNameOffsets); - Buf_Free(&p->FileNames, alloc); - - SzAr_Free(&p->db, alloc); - SzArEx_Init(p); -} - -/* -UInt64 GetFolderPackStreamSize(int folderIndex, int streamIndex) const -{ - return PackSizes[FolderStartPackStreamIndex[folderIndex] + streamIndex]; -} - -UInt64 GetFilePackSize(int fileIndex) const -{ - int folderIndex = FileIndexToFolderIndexMap[fileIndex]; - if (folderIndex >= 0) - { - const CSzFolder &folderInfo = Folders[folderIndex]; - if (FolderStartFileIndex[folderIndex] == fileIndex) - return GetFolderFullPackSize(folderIndex); - } - return 0; -} -*/ - -#define MY_ALLOC(T, p, size, alloc) { if ((size) == 0) p = 0; else \ - if ((p = (T *)IAlloc_Alloc(alloc, (size) * sizeof(T))) == 0) return SZ_ERROR_MEM; } - -static SRes SzArEx_Fill(CSzArEx *p, ISzAlloc *alloc) -{ - UInt32 startPos = 0; - UInt64 startPosSize = 0; - UInt32 i; - UInt32 folderIndex = 0; - UInt32 indexInFolder = 0; - MY_ALLOC(UInt32, p->FolderStartPackStreamIndex, p->db.NumFolders, alloc); - for (i = 0; i < p->db.NumFolders; i++) - { - p->FolderStartPackStreamIndex[i] = startPos; - startPos += p->db.Folders[i].NumPackStreams; - } - - MY_ALLOC(UInt64, p->PackStreamStartPositions, p->db.NumPackStreams, alloc); - - for (i = 0; i < p->db.NumPackStreams; i++) - { - p->PackStreamStartPositions[i] = startPosSize; - startPosSize += p->db.PackSizes[i]; - } - - MY_ALLOC(UInt32, p->FolderStartFileIndex, p->db.NumFolders, alloc); - MY_ALLOC(UInt32, p->FileIndexToFolderIndexMap, p->db.NumFiles, alloc); - - for (i = 0; i < p->db.NumFiles; i++) - { - CSzFileItem *file = p->db.Files + i; - int emptyStream = !file->HasStream; - if (emptyStream && indexInFolder == 0) - { - p->FileIndexToFolderIndexMap[i] = (UInt32)-1; - continue; - } - if (indexInFolder == 0) - { - /* - v3.13 incorrectly worked with empty folders - v4.07: Loop for skipping empty folders - */ - for (;;) - { - if (folderIndex >= p->db.NumFolders) - return SZ_ERROR_ARCHIVE; - p->FolderStartFileIndex[folderIndex] = i; - if (p->db.Folders[folderIndex].NumUnpackStreams != 0) - break; - folderIndex++; - } - } - p->FileIndexToFolderIndexMap[i] = folderIndex; - if (emptyStream) - continue; - indexInFolder++; - if (indexInFolder >= p->db.Folders[folderIndex].NumUnpackStreams) - { - folderIndex++; - indexInFolder = 0; - } - } - return SZ_OK; -} - - -UInt64 SzArEx_GetFolderStreamPos(const CSzArEx *p, UInt32 folderIndex, UInt32 indexInFolder) -{ - return p->dataPos + - p->PackStreamStartPositions[p->FolderStartPackStreamIndex[folderIndex] + indexInFolder]; -} - -int SzArEx_GetFolderFullPackSize(const CSzArEx *p, UInt32 folderIndex, UInt64 *resSize) -{ - UInt32 packStreamIndex = p->FolderStartPackStreamIndex[folderIndex]; - CSzFolder *folder = p->db.Folders + folderIndex; - UInt64 size = 0; - UInt32 i; - for (i = 0; i < folder->NumPackStreams; i++) - { - UInt64 t = size + p->db.PackSizes[packStreamIndex + i]; - if (t < size) /* check it */ - return SZ_ERROR_FAIL; - size = t; - } - *resSize = size; - return SZ_OK; -} - - -/* -SRes SzReadTime(const CObjectVector &dataVector, - CObjectVector &files, UInt64 type) -{ - CBoolVector boolVector; - RINOK(ReadBoolVector2(files.Size(), boolVector)) - - CStreamSwitch streamSwitch; - RINOK(streamSwitch.Set(this, &dataVector)); - - for (int i = 0; i < files.Size(); i++) - { - CSzFileItem &file = files[i]; - CArchiveFileTime fileTime; - bool defined = boolVector[i]; - if (defined) - { - UInt32 low, high; - RINOK(SzReadUInt32(low)); - RINOK(SzReadUInt32(high)); - fileTime.dwLowDateTime = low; - fileTime.dwHighDateTime = high; - } - switch(type) - { - case k7zIdCTime: file.IsCTimeDefined = defined; if (defined) file.CTime = fileTime; break; - case k7zIdATime: file.IsATimeDefined = defined; if (defined) file.ATime = fileTime; break; - case k7zIdMTime: file.IsMTimeDefined = defined; if (defined) file.MTime = fileTime; break; - } - } - return SZ_OK; -} -*/ - -static int TestSignatureCandidate(Byte *testBytes) -{ - size_t i; - for (i = 0; i < k7zSignatureSize; i++) - if (testBytes[i] != k7zSignature[i]) - return 0; - return 1; -} - -typedef struct _CSzState -{ - Byte *Data; - size_t Size; -}CSzData; - -static SRes SzReadByte(CSzData *sd, Byte *b) -{ - if (sd->Size == 0) - return SZ_ERROR_ARCHIVE; - sd->Size--; - *b = *sd->Data++; - return SZ_OK; -} - -static SRes SzReadBytes(CSzData *sd, Byte *data, size_t size) -{ - size_t i; - for (i = 0; i < size; i++) - { - RINOK(SzReadByte(sd, data + i)); - } - return SZ_OK; -} - -static SRes SzReadUInt32(CSzData *sd, UInt32 *value) -{ - int i; - *value = 0; - for (i = 0; i < 4; i++) - { - Byte b; - RINOK(SzReadByte(sd, &b)); - *value |= ((UInt32)(b) << (8 * i)); - } - return SZ_OK; -} - -static SRes SzReadNumber(CSzData *sd, UInt64 *value) -{ - Byte firstByte; - Byte mask = 0x80; - int i; - RINOK(SzReadByte(sd, &firstByte)); - *value = 0; - for (i = 0; i < 8; i++) - { - Byte b; - if ((firstByte & mask) == 0) - { - UInt64 highPart = firstByte & (mask - 1); - *value += (highPart << (8 * i)); - return SZ_OK; - } - RINOK(SzReadByte(sd, &b)); - *value |= ((UInt64)b << (8 * i)); - mask >>= 1; - } - return SZ_OK; -} - -static SRes SzReadNumber32(CSzData *sd, UInt32 *value) -{ - UInt64 value64; - RINOK(SzReadNumber(sd, &value64)); - if (value64 >= 0x80000000) - return SZ_ERROR_UNSUPPORTED; - if (value64 >= ((UInt64)(1) << ((sizeof(size_t) - 1) * 8 + 2))) - return SZ_ERROR_UNSUPPORTED; - *value = (UInt32)value64; - return SZ_OK; -} - -static SRes SzReadID(CSzData *sd, UInt64 *value) -{ - return SzReadNumber(sd, value); -} - -static SRes SzSkeepDataSize(CSzData *sd, UInt64 size) -{ - if (size > sd->Size) - return SZ_ERROR_ARCHIVE; - sd->Size -= (size_t)size; - sd->Data += (size_t)size; - return SZ_OK; -} - -static SRes SzSkeepData(CSzData *sd) -{ - UInt64 size; - RINOK(SzReadNumber(sd, &size)); - return SzSkeepDataSize(sd, size); -} - -static SRes SzReadArchiveProperties(CSzData *sd) -{ - for (;;) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if (type == k7zIdEnd) - break; - SzSkeepData(sd); - } - return SZ_OK; -} - -static SRes SzWaitAttribute(CSzData *sd, UInt64 attribute) -{ - for (;;) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if (type == attribute) - return SZ_OK; - if (type == k7zIdEnd) - return SZ_ERROR_ARCHIVE; - RINOK(SzSkeepData(sd)); - } -} - -static SRes SzReadBoolVector(CSzData *sd, size_t numItems, Byte **v, ISzAlloc *alloc) -{ - Byte b = 0; - Byte mask = 0; - size_t i; - MY_ALLOC(Byte, *v, numItems, alloc); - for (i = 0; i < numItems; i++) - { - if (mask == 0) - { - RINOK(SzReadByte(sd, &b)); - mask = 0x80; - } - (*v)[i] = (Byte)(((b & mask) != 0) ? 1 : 0); - mask >>= 1; - } - return SZ_OK; -} - -static SRes SzReadBoolVector2(CSzData *sd, size_t numItems, Byte **v, ISzAlloc *alloc) -{ - Byte allAreDefined; - size_t i; - RINOK(SzReadByte(sd, &allAreDefined)); - if (allAreDefined == 0) - return SzReadBoolVector(sd, numItems, v, alloc); - MY_ALLOC(Byte, *v, numItems, alloc); - for (i = 0; i < numItems; i++) - (*v)[i] = 1; - return SZ_OK; -} - -static SRes SzReadHashDigests( - CSzData *sd, - size_t numItems, - Byte **digestsDefined, - UInt32 **digests, - ISzAlloc *alloc) -{ - size_t i; - RINOK(SzReadBoolVector2(sd, numItems, digestsDefined, alloc)); - MY_ALLOC(UInt32, *digests, numItems, alloc); - for (i = 0; i < numItems; i++) - if ((*digestsDefined)[i]) - { - RINOK(SzReadUInt32(sd, (*digests) + i)); - } - return SZ_OK; -} - -static SRes SzReadPackInfo( - CSzData *sd, - UInt64 *dataOffset, - UInt32 *numPackStreams, - UInt64 **packSizes, - Byte **packCRCsDefined, - UInt32 **packCRCs, - ISzAlloc *alloc) -{ - UInt32 i; - RINOK(SzReadNumber(sd, dataOffset)); - RINOK(SzReadNumber32(sd, numPackStreams)); - - RINOK(SzWaitAttribute(sd, k7zIdSize)); - - MY_ALLOC(UInt64, *packSizes, (size_t)*numPackStreams, alloc); - - for (i = 0; i < *numPackStreams; i++) - { - RINOK(SzReadNumber(sd, (*packSizes) + i)); - } - - for (;;) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if (type == k7zIdEnd) - break; - if (type == k7zIdCRC) - { - RINOK(SzReadHashDigests(sd, (size_t)*numPackStreams, packCRCsDefined, packCRCs, alloc)); - continue; - } - RINOK(SzSkeepData(sd)); - } - if (*packCRCsDefined == 0) - { - MY_ALLOC(Byte, *packCRCsDefined, (size_t)*numPackStreams, alloc); - MY_ALLOC(UInt32, *packCRCs, (size_t)*numPackStreams, alloc); - for (i = 0; i < *numPackStreams; i++) - { - (*packCRCsDefined)[i] = 0; - (*packCRCs)[i] = 0; - } - } - return SZ_OK; -} - -static SRes SzReadSwitch(CSzData *sd) -{ - Byte external; - RINOK(SzReadByte(sd, &external)); - return (external == 0) ? SZ_OK: SZ_ERROR_UNSUPPORTED; -} - -static SRes SzGetNextFolderItem(CSzData *sd, CSzFolder *folder, ISzAlloc *alloc) -{ - UInt32 numCoders, numBindPairs, numPackStreams, i; - UInt32 numInStreams = 0, numOutStreams = 0; - - RINOK(SzReadNumber32(sd, &numCoders)); - if (numCoders > NUM_FOLDER_CODERS_MAX) - return SZ_ERROR_UNSUPPORTED; - folder->NumCoders = numCoders; - - MY_ALLOC(CSzCoderInfo, folder->Coders, (size_t)numCoders, alloc); - - for (i = 0; i < numCoders; i++) - SzCoderInfo_Init(folder->Coders + i); - - for (i = 0; i < numCoders; i++) - { - Byte mainByte; - CSzCoderInfo *coder = folder->Coders + i; - { - unsigned idSize, j; - Byte longID[15]; - RINOK(SzReadByte(sd, &mainByte)); - idSize = (unsigned)(mainByte & 0xF); - RINOK(SzReadBytes(sd, longID, idSize)); - if (idSize > sizeof(coder->MethodID)) - return SZ_ERROR_UNSUPPORTED; - coder->MethodID = 0; - for (j = 0; j < idSize; j++) - coder->MethodID |= (UInt64)longID[idSize - 1 - j] << (8 * j); - - if ((mainByte & 0x10) != 0) - { - RINOK(SzReadNumber32(sd, &coder->NumInStreams)); - RINOK(SzReadNumber32(sd, &coder->NumOutStreams)); - if (coder->NumInStreams > NUM_CODER_STREAMS_MAX || - coder->NumOutStreams > NUM_CODER_STREAMS_MAX) - return SZ_ERROR_UNSUPPORTED; - } - else - { - coder->NumInStreams = 1; - coder->NumOutStreams = 1; - } - if ((mainByte & 0x20) != 0) - { - UInt64 propertiesSize = 0; - RINOK(SzReadNumber(sd, &propertiesSize)); - if (!Buf_Create(&coder->Props, (size_t)propertiesSize, alloc)) - return SZ_ERROR_MEM; - RINOK(SzReadBytes(sd, coder->Props.data, (size_t)propertiesSize)); - } - } - while ((mainByte & 0x80) != 0) - { - RINOK(SzReadByte(sd, &mainByte)); - RINOK(SzSkeepDataSize(sd, (mainByte & 0xF))); - if ((mainByte & 0x10) != 0) - { - UInt32 n; - RINOK(SzReadNumber32(sd, &n)); - RINOK(SzReadNumber32(sd, &n)); - } - if ((mainByte & 0x20) != 0) - { - UInt64 propertiesSize = 0; - RINOK(SzReadNumber(sd, &propertiesSize)); - RINOK(SzSkeepDataSize(sd, propertiesSize)); - } - } - numInStreams += coder->NumInStreams; - numOutStreams += coder->NumOutStreams; - } - - if (numOutStreams == 0) - return SZ_ERROR_UNSUPPORTED; - - folder->NumBindPairs = numBindPairs = numOutStreams - 1; - MY_ALLOC(CSzBindPair, folder->BindPairs, (size_t)numBindPairs, alloc); - - for (i = 0; i < numBindPairs; i++) - { - CSzBindPair *bp = folder->BindPairs + i; - RINOK(SzReadNumber32(sd, &bp->InIndex)); - RINOK(SzReadNumber32(sd, &bp->OutIndex)); - } - - if (numInStreams < numBindPairs) - return SZ_ERROR_UNSUPPORTED; - - folder->NumPackStreams = numPackStreams = numInStreams - numBindPairs; - MY_ALLOC(UInt32, folder->PackStreams, (size_t)numPackStreams, alloc); - - if (numPackStreams == 1) - { - for (i = 0; i < numInStreams ; i++) - if (SzFolder_FindBindPairForInStream(folder, i) < 0) - break; - if (i == numInStreams) - return SZ_ERROR_UNSUPPORTED; - folder->PackStreams[0] = i; - } - else - for (i = 0; i < numPackStreams; i++) - { - RINOK(SzReadNumber32(sd, folder->PackStreams + i)); - } - return SZ_OK; -} - -static SRes SzReadUnpackInfo( - CSzData *sd, - UInt32 *numFolders, - CSzFolder **folders, /* for alloc */ - ISzAlloc *alloc, - ISzAlloc *allocTemp) -{ - UInt32 i; - RINOK(SzWaitAttribute(sd, k7zIdFolder)); - RINOK(SzReadNumber32(sd, numFolders)); - { - RINOK(SzReadSwitch(sd)); - - MY_ALLOC(CSzFolder, *folders, (size_t)*numFolders, alloc); - - for (i = 0; i < *numFolders; i++) - SzFolder_Init((*folders) + i); - - for (i = 0; i < *numFolders; i++) - { - RINOK(SzGetNextFolderItem(sd, (*folders) + i, alloc)); - } - } - - RINOK(SzWaitAttribute(sd, k7zIdCodersUnpackSize)); - - for (i = 0; i < *numFolders; i++) - { - UInt32 j; - CSzFolder *folder = (*folders) + i; - UInt32 numOutStreams = SzFolder_GetNumOutStreams(folder); - - MY_ALLOC(UInt64, folder->UnpackSizes, (size_t)numOutStreams, alloc); - - for (j = 0; j < numOutStreams; j++) - { - RINOK(SzReadNumber(sd, folder->UnpackSizes + j)); - } - } - - for (;;) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if (type == k7zIdEnd) - return SZ_OK; - if (type == k7zIdCRC) - { - SRes res; - Byte *crcsDefined = 0; - UInt32 *crcs = 0; - res = SzReadHashDigests(sd, *numFolders, &crcsDefined, &crcs, allocTemp); - if (res == SZ_OK) - { - for (i = 0; i < *numFolders; i++) - { - CSzFolder *folder = (*folders) + i; - folder->UnpackCRCDefined = crcsDefined[i]; - folder->UnpackCRC = crcs[i]; - } - } - IAlloc_Free(allocTemp, crcs); - IAlloc_Free(allocTemp, crcsDefined); - RINOK(res); - continue; - } - RINOK(SzSkeepData(sd)); - } -} - -static SRes SzReadSubStreamsInfo( - CSzData *sd, - UInt32 numFolders, - CSzFolder *folders, - UInt32 *numUnpackStreams, - UInt64 **unpackSizes, - Byte **digestsDefined, - UInt32 **digests, - ISzAlloc *allocTemp) -{ - UInt64 type = 0; - UInt32 i; - UInt32 si = 0; - UInt32 numDigests = 0; - - for (i = 0; i < numFolders; i++) - folders[i].NumUnpackStreams = 1; - *numUnpackStreams = numFolders; - - for (;;) - { - RINOK(SzReadID(sd, &type)); - if (type == k7zIdNumUnpackStream) - { - *numUnpackStreams = 0; - for (i = 0; i < numFolders; i++) - { - UInt32 numStreams; - RINOK(SzReadNumber32(sd, &numStreams)); - folders[i].NumUnpackStreams = numStreams; - *numUnpackStreams += numStreams; - } - continue; - } - if (type == k7zIdCRC || type == k7zIdSize) - break; - if (type == k7zIdEnd) - break; - RINOK(SzSkeepData(sd)); - } - - if (*numUnpackStreams == 0) - { - *unpackSizes = 0; - *digestsDefined = 0; - *digests = 0; - } - else - { - *unpackSizes = (UInt64 *)IAlloc_Alloc(allocTemp, (size_t)*numUnpackStreams * sizeof(UInt64)); - RINOM(*unpackSizes); - *digestsDefined = (Byte *)IAlloc_Alloc(allocTemp, (size_t)*numUnpackStreams * sizeof(Byte)); - RINOM(*digestsDefined); - *digests = (UInt32 *)IAlloc_Alloc(allocTemp, (size_t)*numUnpackStreams * sizeof(UInt32)); - RINOM(*digests); - } - - for (i = 0; i < numFolders; i++) - { - /* - v3.13 incorrectly worked with empty folders - v4.07: we check that folder is empty - */ - UInt64 sum = 0; - UInt32 j; - UInt32 numSubstreams = folders[i].NumUnpackStreams; - if (numSubstreams == 0) - continue; - if (type == k7zIdSize) - for (j = 1; j < numSubstreams; j++) - { - UInt64 size; - RINOK(SzReadNumber(sd, &size)); - (*unpackSizes)[si++] = size; - sum += size; - } - (*unpackSizes)[si++] = SzFolder_GetUnpackSize(folders + i) - sum; - } - if (type == k7zIdSize) - { - RINOK(SzReadID(sd, &type)); - } - - for (i = 0; i < *numUnpackStreams; i++) - { - (*digestsDefined)[i] = 0; - (*digests)[i] = 0; - } - - - for (i = 0; i < numFolders; i++) - { - UInt32 numSubstreams = folders[i].NumUnpackStreams; - if (numSubstreams != 1 || !folders[i].UnpackCRCDefined) - numDigests += numSubstreams; - } - - - si = 0; - for (;;) - { - if (type == k7zIdCRC) - { - int digestIndex = 0; - Byte *digestsDefined2 = 0; - UInt32 *digests2 = 0; - SRes res = SzReadHashDigests(sd, numDigests, &digestsDefined2, &digests2, allocTemp); - if (res == SZ_OK) - { - for (i = 0; i < numFolders; i++) - { - CSzFolder *folder = folders + i; - UInt32 numSubstreams = folder->NumUnpackStreams; - if (numSubstreams == 1 && folder->UnpackCRCDefined) - { - (*digestsDefined)[si] = 1; - (*digests)[si] = folder->UnpackCRC; - si++; - } - else - { - UInt32 j; - for (j = 0; j < numSubstreams; j++, digestIndex++) - { - (*digestsDefined)[si] = digestsDefined2[digestIndex]; - (*digests)[si] = digests2[digestIndex]; - si++; - } - } - } - } - IAlloc_Free(allocTemp, digestsDefined2); - IAlloc_Free(allocTemp, digests2); - RINOK(res); - } - else if (type == k7zIdEnd) - return SZ_OK; - else - { - RINOK(SzSkeepData(sd)); - } - RINOK(SzReadID(sd, &type)); - } -} - - -static SRes SzReadStreamsInfo( - CSzData *sd, - UInt64 *dataOffset, - CSzAr *p, - UInt32 *numUnpackStreams, - UInt64 **unpackSizes, /* allocTemp */ - Byte **digestsDefined, /* allocTemp */ - UInt32 **digests, /* allocTemp */ - ISzAlloc *alloc, - ISzAlloc *allocTemp) -{ - for (;;) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if ((UInt64)(int)type != type) - return SZ_ERROR_UNSUPPORTED; - switch((int)type) - { - case k7zIdEnd: - return SZ_OK; - case k7zIdPackInfo: - { - RINOK(SzReadPackInfo(sd, dataOffset, &p->NumPackStreams, - &p->PackSizes, &p->PackCRCsDefined, &p->PackCRCs, alloc)); - break; - } - case k7zIdUnpackInfo: - { - RINOK(SzReadUnpackInfo(sd, &p->NumFolders, &p->Folders, alloc, allocTemp)); - break; - } - case k7zIdSubStreamsInfo: - { - RINOK(SzReadSubStreamsInfo(sd, p->NumFolders, p->Folders, - numUnpackStreams, unpackSizes, digestsDefined, digests, allocTemp)); - break; - } - default: - return SZ_ERROR_UNSUPPORTED; - } - } -} - -size_t SzArEx_GetFileNameUtf16(const CSzArEx *p, size_t fileIndex, UInt16 *dest) -{ - size_t len = p->FileNameOffsets[fileIndex + 1] - p->FileNameOffsets[fileIndex]; - if (dest != 0) - { - size_t i; - const Byte *src = p->FileNames.data + (p->FileNameOffsets[fileIndex] * 2); - for (i = 0; i < len; i++) - dest[i] = GetUi16(src + i * 2); - } - return len; -} - -static SRes SzReadFileNames(const Byte *p, size_t size, UInt32 numFiles, size_t *sizes) -{ - UInt32 i; - size_t pos = 0; - for (i = 0; i < numFiles; i++) - { - sizes[i] = pos; - for (;;) - { - if (pos >= size) - return SZ_ERROR_ARCHIVE; - if (p[pos * 2] == 0 && p[pos * 2 + 1] == 0) - break; - pos++; - } - pos++; - } - sizes[i] = pos; - return (pos == size) ? SZ_OK : SZ_ERROR_ARCHIVE; -} - -static SRes SzReadHeader2( - CSzArEx *p, /* allocMain */ - CSzData *sd, - UInt64 **unpackSizes, /* allocTemp */ - Byte **digestsDefined, /* allocTemp */ - UInt32 **digests, /* allocTemp */ - Byte **emptyStreamVector, /* allocTemp */ - Byte **emptyFileVector, /* allocTemp */ - Byte **lwtVector, /* allocTemp */ - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - UInt64 type; - UInt32 numUnpackStreams = 0; - UInt32 numFiles = 0; - CSzFileItem *files = 0; - UInt32 numEmptyStreams = 0; - UInt32 i; - - RINOK(SzReadID(sd, &type)); - - if (type == k7zIdArchiveProperties) - { - RINOK(SzReadArchiveProperties(sd)); - RINOK(SzReadID(sd, &type)); - } - - - if (type == k7zIdMainStreamsInfo) - { - RINOK(SzReadStreamsInfo(sd, - &p->dataPos, - &p->db, - &numUnpackStreams, - unpackSizes, - digestsDefined, - digests, allocMain, allocTemp)); - p->dataPos += p->startPosAfterHeader; - RINOK(SzReadID(sd, &type)); - } - - if (type == k7zIdEnd) - return SZ_OK; - if (type != k7zIdFilesInfo) - return SZ_ERROR_ARCHIVE; - - RINOK(SzReadNumber32(sd, &numFiles)); - p->db.NumFiles = numFiles; - - MY_ALLOC(CSzFileItem, files, (size_t)numFiles, allocMain); - - p->db.Files = files; - for (i = 0; i < numFiles; i++) - SzFile_Init(files + i); - - for (;;) - { - UInt64 type; - UInt64 size; - RINOK(SzReadID(sd, &type)); - if (type == k7zIdEnd) - break; - RINOK(SzReadNumber(sd, &size)); - if (size > sd->Size) - return SZ_ERROR_ARCHIVE; - if ((UInt64)(int)type != type) - { - RINOK(SzSkeepDataSize(sd, size)); - } - else - switch((int)type) - { - case k7zIdName: - { - size_t namesSize; - RINOK(SzReadSwitch(sd)); - namesSize = (size_t)size - 1; - if ((namesSize & 1) != 0) - return SZ_ERROR_ARCHIVE; - if (!Buf_Create(&p->FileNames, namesSize, allocMain)) - return SZ_ERROR_MEM; - MY_ALLOC(size_t, p->FileNameOffsets, numFiles + 1, allocMain); - memcpy(p->FileNames.data, sd->Data, namesSize); - RINOK(SzReadFileNames(sd->Data, namesSize >> 1, numFiles, p->FileNameOffsets)) - break; - } - case k7zIdEmptyStream: - { - RINOK(SzReadBoolVector(sd, numFiles, emptyStreamVector, allocTemp)); - numEmptyStreams = 0; - for (i = 0; i < numFiles; i++) - if ((*emptyStreamVector)[i]) - numEmptyStreams++; - break; - } - case k7zIdEmptyFile: - { - RINOK(SzReadBoolVector(sd, numEmptyStreams, emptyFileVector, allocTemp)); - break; - } - case k7zIdMTime: - { - RINOK(SzReadBoolVector2(sd, numFiles, lwtVector, allocTemp)); - RINOK(SzReadSwitch(sd)); - for (i = 0; i < numFiles; i++) - { - CSzFileItem *f = &files[i]; - Byte defined = (*lwtVector)[i]; - f->MTimeDefined = defined; - f->MTime.Low = f->MTime.High = 0; - if (defined) - { - RINOK(SzReadUInt32(sd, &f->MTime.Low)); - RINOK(SzReadUInt32(sd, &f->MTime.High)); - } - } - break; - } - default: - { - RINOK(SzSkeepDataSize(sd, size)); - } - } - } - - { - UInt32 emptyFileIndex = 0; - UInt32 sizeIndex = 0; - for (i = 0; i < numFiles; i++) - { - CSzFileItem *file = files + i; - file->IsAnti = 0; - if (*emptyStreamVector == 0) - file->HasStream = 1; - else - file->HasStream = (Byte)((*emptyStreamVector)[i] ? 0 : 1); - if (file->HasStream) - { - file->IsDir = 0; - file->Size = (*unpackSizes)[sizeIndex]; - file->Crc = (*digests)[sizeIndex]; - file->CrcDefined = (Byte)(*digestsDefined)[sizeIndex]; - sizeIndex++; - } - else - { - if (*emptyFileVector == 0) - file->IsDir = 1; - else - file->IsDir = (Byte)((*emptyFileVector)[emptyFileIndex] ? 0 : 1); - emptyFileIndex++; - file->Size = 0; - file->Crc = 0; - file->CrcDefined = 0; - } - } - } - return SzArEx_Fill(p, allocMain); -} - -static SRes SzReadHeader( - CSzArEx *p, - CSzData *sd, - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - UInt64 *unpackSizes = 0; - Byte *digestsDefined = 0; - UInt32 *digests = 0; - Byte *emptyStreamVector = 0; - Byte *emptyFileVector = 0; - Byte *lwtVector = 0; - SRes res = SzReadHeader2(p, sd, - &unpackSizes, &digestsDefined, &digests, - &emptyStreamVector, &emptyFileVector, &lwtVector, - allocMain, allocTemp); - IAlloc_Free(allocTemp, unpackSizes); - IAlloc_Free(allocTemp, digestsDefined); - IAlloc_Free(allocTemp, digests); - IAlloc_Free(allocTemp, emptyStreamVector); - IAlloc_Free(allocTemp, emptyFileVector); - IAlloc_Free(allocTemp, lwtVector); - return res; -} - -static SRes SzReadAndDecodePackedStreams2( - ILookInStream *inStream, - CSzData *sd, - CBuf *outBuffer, - UInt64 baseOffset, - CSzAr *p, - UInt64 **unpackSizes, - Byte **digestsDefined, - UInt32 **digests, - ISzAlloc *allocTemp) -{ - - UInt32 numUnpackStreams = 0; - UInt64 dataStartPos; - CSzFolder *folder; - UInt64 unpackSize; - SRes res; - - RINOK(SzReadStreamsInfo(sd, &dataStartPos, p, - &numUnpackStreams, unpackSizes, digestsDefined, digests, - allocTemp, allocTemp)); - - dataStartPos += baseOffset; - if (p->NumFolders != 1) - return SZ_ERROR_ARCHIVE; - - folder = p->Folders; - unpackSize = SzFolder_GetUnpackSize(folder); - - RINOK(LookInStream_SeekTo(inStream, dataStartPos)); - - if (!Buf_Create(outBuffer, (size_t)unpackSize, allocTemp)) - return SZ_ERROR_MEM; - - res = SzFolder_Decode(folder, p->PackSizes, - inStream, dataStartPos, - outBuffer->data, (size_t)unpackSize, allocTemp); - RINOK(res); - if (folder->UnpackCRCDefined) - if (CrcCalc(outBuffer->data, (size_t)unpackSize) != folder->UnpackCRC) - return SZ_ERROR_CRC; - return SZ_OK; -} - -static SRes SzReadAndDecodePackedStreams( - ILookInStream *inStream, - CSzData *sd, - CBuf *outBuffer, - UInt64 baseOffset, - ISzAlloc *allocTemp) -{ - CSzAr p; - UInt64 *unpackSizes = 0; - Byte *digestsDefined = 0; - UInt32 *digests = 0; - SRes res; - SzAr_Init(&p); - res = SzReadAndDecodePackedStreams2(inStream, sd, outBuffer, baseOffset, - &p, &unpackSizes, &digestsDefined, &digests, - allocTemp); - SzAr_Free(&p, allocTemp); - IAlloc_Free(allocTemp, unpackSizes); - IAlloc_Free(allocTemp, digestsDefined); - IAlloc_Free(allocTemp, digests); - return res; -} - -static SRes SzArEx_Open2( - CSzArEx *p, - ILookInStream *inStream, - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - Byte header[k7zStartHeaderSize]; - UInt64 nextHeaderOffset, nextHeaderSize; - size_t nextHeaderSizeT; - UInt32 nextHeaderCRC; - CBuf buffer; - SRes res; - - RINOK(LookInStream_Read2(inStream, header, k7zStartHeaderSize, SZ_ERROR_NO_ARCHIVE)); - - if (!TestSignatureCandidate(header)) - return SZ_ERROR_NO_ARCHIVE; - if (header[6] != k7zMajorVersion) - return SZ_ERROR_UNSUPPORTED; - - nextHeaderOffset = GetUi64(header + 12); - nextHeaderSize = GetUi64(header + 20); - nextHeaderCRC = GetUi32(header + 28); - - p->startPosAfterHeader = k7zStartHeaderSize; - - if (CrcCalc(header + 12, 20) != GetUi32(header + 8)) - return SZ_ERROR_CRC; - - nextHeaderSizeT = (size_t)nextHeaderSize; - if (nextHeaderSizeT != nextHeaderSize) - return SZ_ERROR_MEM; - if (nextHeaderSizeT == 0) - return SZ_OK; - if (nextHeaderOffset > nextHeaderOffset + nextHeaderSize || - nextHeaderOffset > nextHeaderOffset + nextHeaderSize + k7zStartHeaderSize) - return SZ_ERROR_NO_ARCHIVE; - - { - Int64 pos = 0; - RINOK(inStream->Seek(inStream, &pos, SZ_SEEK_END)); - if ((UInt64)pos < nextHeaderOffset || - (UInt64)pos < k7zStartHeaderSize + nextHeaderOffset || - (UInt64)pos < k7zStartHeaderSize + nextHeaderOffset + nextHeaderSize) - return SZ_ERROR_INPUT_EOF; - } - - RINOK(LookInStream_SeekTo(inStream, k7zStartHeaderSize + nextHeaderOffset)); - - if (!Buf_Create(&buffer, nextHeaderSizeT, allocTemp)) - return SZ_ERROR_MEM; - - res = LookInStream_Read(inStream, buffer.data, nextHeaderSizeT); - if (res == SZ_OK) - { - res = SZ_ERROR_ARCHIVE; - if (CrcCalc(buffer.data, nextHeaderSizeT) == nextHeaderCRC) - { - CSzData sd; - UInt64 type; - sd.Data = buffer.data; - sd.Size = buffer.size; - res = SzReadID(&sd, &type); - if (res == SZ_OK) - { - if (type == k7zIdEncodedHeader) - { - CBuf outBuffer; - Buf_Init(&outBuffer); - res = SzReadAndDecodePackedStreams(inStream, &sd, &outBuffer, p->startPosAfterHeader, allocTemp); - if (res != SZ_OK) - Buf_Free(&outBuffer, allocTemp); - else - { - Buf_Free(&buffer, allocTemp); - buffer.data = outBuffer.data; - buffer.size = outBuffer.size; - sd.Data = buffer.data; - sd.Size = buffer.size; - res = SzReadID(&sd, &type); - } - } - } - if (res == SZ_OK) - { - if (type == k7zIdHeader) - res = SzReadHeader(p, &sd, allocMain, allocTemp); - else - res = SZ_ERROR_UNSUPPORTED; - } - } - } - Buf_Free(&buffer, allocTemp); - return res; -} - -SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream, ISzAlloc *allocMain, ISzAlloc *allocTemp) -{ - SRes res = SzArEx_Open2(p, inStream, allocMain, allocTemp); - if (res != SZ_OK) - SzArEx_Free(p, allocMain); - return res; -} - -SRes SzArEx_Extract( - const CSzArEx *p, - ILookInStream *inStream, - UInt32 fileIndex, - UInt32 *blockIndex, - Byte **outBuffer, - size_t *outBufferSize, - size_t *offset, - size_t *outSizeProcessed, - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - UInt32 folderIndex = p->FileIndexToFolderIndexMap[fileIndex]; - SRes res = SZ_OK; - *offset = 0; - *outSizeProcessed = 0; - if (folderIndex == (UInt32)-1) - { - IAlloc_Free(allocMain, *outBuffer); - *blockIndex = folderIndex; - *outBuffer = 0; - *outBufferSize = 0; - return SZ_OK; - } - - if (*outBuffer == 0 || *blockIndex != folderIndex) - { - CSzFolder *folder = p->db.Folders + folderIndex; - UInt64 unpackSizeSpec = SzFolder_GetUnpackSize(folder); - size_t unpackSize = (size_t)unpackSizeSpec; - UInt64 startOffset = SzArEx_GetFolderStreamPos(p, folderIndex, 0); - - if (unpackSize != unpackSizeSpec) - return SZ_ERROR_MEM; - *blockIndex = folderIndex; - IAlloc_Free(allocMain, *outBuffer); - *outBuffer = 0; - - RINOK(LookInStream_SeekTo(inStream, startOffset)); - - if (res == SZ_OK) - { - *outBufferSize = unpackSize; - if (unpackSize != 0) - { - *outBuffer = (Byte *)IAlloc_Alloc(allocMain, unpackSize); - if (*outBuffer == 0) - res = SZ_ERROR_MEM; - } - if (res == SZ_OK) - { - res = SzFolder_Decode(folder, - p->db.PackSizes + p->FolderStartPackStreamIndex[folderIndex], - inStream, startOffset, - *outBuffer, unpackSize, allocTemp); - if (res == SZ_OK) - { - if (folder->UnpackCRCDefined) - { - if (CrcCalc(*outBuffer, unpackSize) != folder->UnpackCRC) - res = SZ_ERROR_CRC; - } - } - } - } - } - if (res == SZ_OK) - { - UInt32 i; - CSzFileItem *fileItem = p->db.Files + fileIndex; - *offset = 0; - for (i = p->FolderStartFileIndex[folderIndex]; i < fileIndex; i++) - *offset += (UInt32)p->db.Files[i].Size; - *outSizeProcessed = (size_t)fileItem->Size; - if (*offset + *outSizeProcessed > *outBufferSize) - return SZ_ERROR_FAIL; - if (fileItem->CrcDefined && CrcCalc(*outBuffer + *offset, *outSizeProcessed) != fileItem->Crc) - res = SZ_ERROR_CRC; - } - return res; -} diff --git a/modules/lib7z/LZMASDK/C/7zStream.c b/modules/lib7z/LZMASDK/C/7zStream.c deleted file mode 100644 index a0a2405d014a..000000000000 --- a/modules/lib7z/LZMASDK/C/7zStream.c +++ /dev/null @@ -1,169 +0,0 @@ -/* 7zStream.c -- 7z Stream functions -2008-11-23 : Igor Pavlov : Public domain */ - -#include - -#include "Types.h" - -SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType) -{ - while (size != 0) - { - size_t processed = size; - RINOK(stream->Read(stream, buf, &processed)); - if (processed == 0) - return errorType; - buf = (void *)((Byte *)buf + processed); - size -= processed; - } - return SZ_OK; -} - -SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size) -{ - return SeqInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF); -} - -SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf) -{ - size_t processed = 1; - RINOK(stream->Read(stream, buf, &processed)); - return (processed == 1) ? SZ_OK : SZ_ERROR_INPUT_EOF; -} - -SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset) -{ - Int64 t = offset; - return stream->Seek(stream, &t, SZ_SEEK_SET); -} - -SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size) -{ - void *lookBuf; - if (*size == 0) - return SZ_OK; - RINOK(stream->Look(stream, &lookBuf, size)); - memcpy(buf, lookBuf, *size); - return stream->Skip(stream, *size); -} - -SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType) -{ - while (size != 0) - { - size_t processed = size; - RINOK(stream->Read(stream, buf, &processed)); - if (processed == 0) - return errorType; - buf = (void *)((Byte *)buf + processed); - size -= processed; - } - return SZ_OK; -} - -SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size) -{ - return LookInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF); -} - -static SRes LookToRead_Look_Lookahead(void *pp, void **buf, size_t *size) -{ - SRes res = SZ_OK; - CLookToRead *p = (CLookToRead *)pp; - size_t size2 = p->size - p->pos; - if (size2 == 0 && *size > 0) - { - p->pos = 0; - size2 = LookToRead_BUF_SIZE; - res = p->realStream->Read(p->realStream, p->buf, &size2); - p->size = size2; - } - if (size2 < *size) - *size = size2; - *buf = p->buf + p->pos; - return res; -} - -static SRes LookToRead_Look_Exact(void *pp, void **buf, size_t *size) -{ - SRes res = SZ_OK; - CLookToRead *p = (CLookToRead *)pp; - size_t size2 = p->size - p->pos; - if (size2 == 0 && *size > 0) - { - p->pos = 0; - if (*size > LookToRead_BUF_SIZE) - *size = LookToRead_BUF_SIZE; - res = p->realStream->Read(p->realStream, p->buf, size); - size2 = p->size = *size; - } - if (size2 < *size) - *size = size2; - *buf = p->buf + p->pos; - return res; -} - -static SRes LookToRead_Skip(void *pp, size_t offset) -{ - CLookToRead *p = (CLookToRead *)pp; - p->pos += offset; - return SZ_OK; -} - -static SRes LookToRead_Read(void *pp, void *buf, size_t *size) -{ - CLookToRead *p = (CLookToRead *)pp; - size_t rem = p->size - p->pos; - if (rem == 0) - return p->realStream->Read(p->realStream, buf, size); - if (rem > *size) - rem = *size; - memcpy(buf, p->buf + p->pos, rem); - p->pos += rem; - *size = rem; - return SZ_OK; -} - -static SRes LookToRead_Seek(void *pp, Int64 *pos, ESzSeek origin) -{ - CLookToRead *p = (CLookToRead *)pp; - p->pos = p->size = 0; - return p->realStream->Seek(p->realStream, pos, origin); -} - -void LookToRead_CreateVTable(CLookToRead *p, int lookahead) -{ - p->s.Look = lookahead ? - LookToRead_Look_Lookahead : - LookToRead_Look_Exact; - p->s.Skip = LookToRead_Skip; - p->s.Read = LookToRead_Read; - p->s.Seek = LookToRead_Seek; -} - -void LookToRead_Init(CLookToRead *p) -{ - p->pos = p->size = 0; -} - -static SRes SecToLook_Read(void *pp, void *buf, size_t *size) -{ - CSecToLook *p = (CSecToLook *)pp; - return LookInStream_LookRead(p->realStream, buf, size); -} - -void SecToLook_CreateVTable(CSecToLook *p) -{ - p->s.Read = SecToLook_Read; -} - -static SRes SecToRead_Read(void *pp, void *buf, size_t *size) -{ - CSecToRead *p = (CSecToRead *)pp; - return p->realStream->Read(p->realStream, buf, size); -} - -void SecToRead_CreateVTable(CSecToRead *p) -{ - p->s.Read = SecToRead_Read; -} diff --git a/modules/lib7z/LZMASDK/C/7zVersion.h b/modules/lib7z/LZMASDK/C/7zVersion.h deleted file mode 100644 index 4c1dd7e3402e..000000000000 --- a/modules/lib7z/LZMASDK/C/7zVersion.h +++ /dev/null @@ -1,7 +0,0 @@ -#define MY_VER_MAJOR 9 -#define MY_VER_MINOR 07 -#define MY_VER_BUILD 0 -#define MY_VERSION "9.07 beta" -#define MY_DATE "2009-08-29" -#define MY_COPYRIGHT ": Igor Pavlov : Public domain" -#define MY_VERSION_COPYRIGHT_DATE MY_VERSION " " MY_COPYRIGHT " : " MY_DATE diff --git a/modules/lib7z/LZMASDK/C/Alloc.c b/modules/lib7z/LZMASDK/C/Alloc.c deleted file mode 100644 index bb24a772b340..000000000000 --- a/modules/lib7z/LZMASDK/C/Alloc.c +++ /dev/null @@ -1,127 +0,0 @@ -/* Alloc.c -- Memory allocation functions -2008-09-24 -Igor Pavlov -Public domain */ - -#ifdef _WIN32 -#include -#endif -#include - -#include "Alloc.h" - -/* #define _SZ_ALLOC_DEBUG */ - -/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */ -#ifdef _SZ_ALLOC_DEBUG -#include -int g_allocCount = 0; -int g_allocCountMid = 0; -int g_allocCountBig = 0; -#endif - -void *MyAlloc(size_t size) -{ - if (size == 0) - return 0; - #ifdef _SZ_ALLOC_DEBUG - { - void *p = malloc(size); - fprintf(stderr, "\nAlloc %10d bytes, count = %10d, addr = %8X", size, g_allocCount++, (unsigned)p); - return p; - } - #else - return malloc(size); - #endif -} - -void MyFree(void *address) -{ - #ifdef _SZ_ALLOC_DEBUG - if (address != 0) - fprintf(stderr, "\nFree; count = %10d, addr = %8X", --g_allocCount, (unsigned)address); - #endif - free(address); -} - -#ifdef _WIN32 - -void *MidAlloc(size_t size) -{ - if (size == 0) - return 0; - #ifdef _SZ_ALLOC_DEBUG - fprintf(stderr, "\nAlloc_Mid %10d bytes; count = %10d", size, g_allocCountMid++); - #endif - return VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE); -} - -void MidFree(void *address) -{ - #ifdef _SZ_ALLOC_DEBUG - if (address != 0) - fprintf(stderr, "\nFree_Mid; count = %10d", --g_allocCountMid); - #endif - if (address == 0) - return; - VirtualFree(address, 0, MEM_RELEASE); -} - -#ifndef MEM_LARGE_PAGES -#undef _7ZIP_LARGE_PAGES -#endif - -#ifdef _7ZIP_LARGE_PAGES -SIZE_T g_LargePageSize = 0; -typedef SIZE_T (WINAPI *GetLargePageMinimumP)(); -#endif - -void SetLargePageSize() -{ - #ifdef _7ZIP_LARGE_PAGES - SIZE_T size = 0; - GetLargePageMinimumP largePageMinimum = (GetLargePageMinimumP) - GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetLargePageMinimum"); - if (largePageMinimum == 0) - return; - size = largePageMinimum(); - if (size == 0 || (size & (size - 1)) != 0) - return; - g_LargePageSize = size; - #endif -} - - -void *BigAlloc(size_t size) -{ - if (size == 0) - return 0; - #ifdef _SZ_ALLOC_DEBUG - fprintf(stderr, "\nAlloc_Big %10d bytes; count = %10d", size, g_allocCountBig++); - #endif - - #ifdef _7ZIP_LARGE_PAGES - if (g_LargePageSize != 0 && g_LargePageSize <= (1 << 30) && size >= (1 << 18)) - { - void *res = VirtualAlloc(0, (size + g_LargePageSize - 1) & (~(g_LargePageSize - 1)), - MEM_COMMIT | MEM_LARGE_PAGES, PAGE_READWRITE); - if (res != 0) - return res; - } - #endif - return VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE); -} - -void BigFree(void *address) -{ - #ifdef _SZ_ALLOC_DEBUG - if (address != 0) - fprintf(stderr, "\nFree_Big; count = %10d", --g_allocCountBig); - #endif - - if (address == 0) - return; - VirtualFree(address, 0, MEM_RELEASE); -} - -#endif diff --git a/modules/lib7z/LZMASDK/C/Alloc.h b/modules/lib7z/LZMASDK/C/Alloc.h deleted file mode 100644 index 6b3f03474e5e..000000000000 --- a/modules/lib7z/LZMASDK/C/Alloc.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Alloc.h -- Memory allocation functions -2009-02-07 : Igor Pavlov : Public domain */ - -#ifndef __COMMON_ALLOC_H -#define __COMMON_ALLOC_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -void *MyAlloc(size_t size); -void MyFree(void *address); - -#ifdef _WIN32 - -void SetLargePageSize(); - -void *MidAlloc(size_t size); -void MidFree(void *address); -void *BigAlloc(size_t size); -void BigFree(void *address); - -#else - -#define MidAlloc(size) MyAlloc(size) -#define MidFree(address) MyFree(address) -#define BigAlloc(size) MyAlloc(size) -#define BigFree(address) MyFree(address) - -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/Bcj2.c b/modules/lib7z/LZMASDK/C/Bcj2.c deleted file mode 100644 index 474bdd45d327..000000000000 --- a/modules/lib7z/LZMASDK/C/Bcj2.c +++ /dev/null @@ -1,132 +0,0 @@ -/* Bcj2.c -- Converter for x86 code (BCJ2) -2008-10-04 : Igor Pavlov : Public domain */ - -#include "Bcj2.h" - -#ifdef _LZMA_PROB32 -#define CProb UInt32 -#else -#define CProb UInt16 -#endif - -#define IsJcc(b0, b1) ((b0) == 0x0F && ((b1) & 0xF0) == 0x80) -#define IsJ(b0, b1) ((b1 & 0xFE) == 0xE8 || IsJcc(b0, b1)) - -#define kNumTopBits 24 -#define kTopValue ((UInt32)1 << kNumTopBits) - -#define kNumBitModelTotalBits 11 -#define kBitModelTotal (1 << kNumBitModelTotalBits) -#define kNumMoveBits 5 - -#define RC_READ_BYTE (*buffer++) -#define RC_TEST { if (buffer == bufferLim) return SZ_ERROR_DATA; } -#define RC_INIT2 code = 0; range = 0xFFFFFFFF; \ - { int i; for (i = 0; i < 5; i++) { RC_TEST; code = (code << 8) | RC_READ_BYTE; }} - -#define NORMALIZE if (range < kTopValue) { RC_TEST; range <<= 8; code = (code << 8) | RC_READ_BYTE; } - -#define IF_BIT_0(p) ttt = *(p); bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) -#define UPDATE_0(p) range = bound; *(p) = (CProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); NORMALIZE; -#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CProb)(ttt - (ttt >> kNumMoveBits)); NORMALIZE; - -int Bcj2_Decode( - const Byte *buf0, SizeT size0, - const Byte *buf1, SizeT size1, - const Byte *buf2, SizeT size2, - const Byte *buf3, SizeT size3, - Byte *outBuf, SizeT outSize) -{ - CProb p[256 + 2]; - SizeT inPos = 0, outPos = 0; - - const Byte *buffer, *bufferLim; - UInt32 range, code; - Byte prevByte = 0; - - unsigned int i; - for (i = 0; i < sizeof(p) / sizeof(p[0]); i++) - p[i] = kBitModelTotal >> 1; - - buffer = buf3; - bufferLim = buffer + size3; - RC_INIT2 - - if (outSize == 0) - return SZ_OK; - - for (;;) - { - Byte b; - CProb *prob; - UInt32 bound; - UInt32 ttt; - - SizeT limit = size0 - inPos; - if (outSize - outPos < limit) - limit = outSize - outPos; - while (limit != 0) - { - Byte b = buf0[inPos]; - outBuf[outPos++] = b; - if (IsJ(prevByte, b)) - break; - inPos++; - prevByte = b; - limit--; - } - - if (limit == 0 || outPos == outSize) - break; - - b = buf0[inPos++]; - - if (b == 0xE8) - prob = p + prevByte; - else if (b == 0xE9) - prob = p + 256; - else - prob = p + 257; - - IF_BIT_0(prob) - { - UPDATE_0(prob) - prevByte = b; - } - else - { - UInt32 dest; - const Byte *v; - UPDATE_1(prob) - if (b == 0xE8) - { - v = buf1; - if (size1 < 4) - return SZ_ERROR_DATA; - buf1 += 4; - size1 -= 4; - } - else - { - v = buf2; - if (size2 < 4) - return SZ_ERROR_DATA; - buf2 += 4; - size2 -= 4; - } - dest = (((UInt32)v[0] << 24) | ((UInt32)v[1] << 16) | - ((UInt32)v[2] << 8) | ((UInt32)v[3])) - ((UInt32)outPos + 4); - outBuf[outPos++] = (Byte)dest; - if (outPos == outSize) - break; - outBuf[outPos++] = (Byte)(dest >> 8); - if (outPos == outSize) - break; - outBuf[outPos++] = (Byte)(dest >> 16); - if (outPos == outSize) - break; - outBuf[outPos++] = prevByte = (Byte)(dest >> 24); - } - } - return (outPos == outSize) ? SZ_OK : SZ_ERROR_DATA; -} diff --git a/modules/lib7z/LZMASDK/C/Bcj2.h b/modules/lib7z/LZMASDK/C/Bcj2.h deleted file mode 100644 index d9d857bc304c..000000000000 --- a/modules/lib7z/LZMASDK/C/Bcj2.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Bcj2.h -- Converter for x86 code (BCJ2) -2009-02-07 : Igor Pavlov : Public domain */ - -#ifndef __BCJ2_H -#define __BCJ2_H - -#include "Types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* -Conditions: - outSize <= FullOutputSize, - where FullOutputSize is full size of output stream of x86_2 filter. - -If buf0 overlaps outBuf, there are two required conditions: - 1) (buf0 >= outBuf) - 2) (buf0 + size0 >= outBuf + FullOutputSize). - -Returns: - SZ_OK - SZ_ERROR_DATA - Data error -*/ - -int Bcj2_Decode( - const Byte *buf0, SizeT size0, - const Byte *buf1, SizeT size1, - const Byte *buf2, SizeT size2, - const Byte *buf3, SizeT size3, - Byte *outBuf, SizeT outSize); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/Bra.c b/modules/lib7z/LZMASDK/C/Bra.c deleted file mode 100644 index 3b75f0ccb74e..000000000000 --- a/modules/lib7z/LZMASDK/C/Bra.c +++ /dev/null @@ -1,133 +0,0 @@ -/* Bra.c -- Converters for RISC code -2008-10-04 : Igor Pavlov : Public domain */ - -#include "Bra.h" - -SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) -{ - SizeT i; - if (size < 4) - return 0; - size -= 4; - ip += 8; - for (i = 0; i <= size; i += 4) - { - if (data[i + 3] == 0xEB) - { - UInt32 dest; - UInt32 src = ((UInt32)data[i + 2] << 16) | ((UInt32)data[i + 1] << 8) | (data[i + 0]); - src <<= 2; - if (encoding) - dest = ip + (UInt32)i + src; - else - dest = src - (ip + (UInt32)i); - dest >>= 2; - data[i + 2] = (Byte)(dest >> 16); - data[i + 1] = (Byte)(dest >> 8); - data[i + 0] = (Byte)dest; - } - } - return i; -} - -SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) -{ - SizeT i; - if (size < 4) - return 0; - size -= 4; - ip += 4; - for (i = 0; i <= size; i += 2) - { - if ((data[i + 1] & 0xF8) == 0xF0 && - (data[i + 3] & 0xF8) == 0xF8) - { - UInt32 dest; - UInt32 src = - (((UInt32)data[i + 1] & 0x7) << 19) | - ((UInt32)data[i + 0] << 11) | - (((UInt32)data[i + 3] & 0x7) << 8) | - (data[i + 2]); - - src <<= 1; - if (encoding) - dest = ip + (UInt32)i + src; - else - dest = src - (ip + (UInt32)i); - dest >>= 1; - - data[i + 1] = (Byte)(0xF0 | ((dest >> 19) & 0x7)); - data[i + 0] = (Byte)(dest >> 11); - data[i + 3] = (Byte)(0xF8 | ((dest >> 8) & 0x7)); - data[i + 2] = (Byte)dest; - i += 2; - } - } - return i; -} - -SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) -{ - SizeT i; - if (size < 4) - return 0; - size -= 4; - for (i = 0; i <= size; i += 4) - { - if ((data[i] >> 2) == 0x12 && (data[i + 3] & 3) == 1) - { - UInt32 src = ((UInt32)(data[i + 0] & 3) << 24) | - ((UInt32)data[i + 1] << 16) | - ((UInt32)data[i + 2] << 8) | - ((UInt32)data[i + 3] & (~3)); - - UInt32 dest; - if (encoding) - dest = ip + (UInt32)i + src; - else - dest = src - (ip + (UInt32)i); - data[i + 0] = (Byte)(0x48 | ((dest >> 24) & 0x3)); - data[i + 1] = (Byte)(dest >> 16); - data[i + 2] = (Byte)(dest >> 8); - data[i + 3] &= 0x3; - data[i + 3] |= dest; - } - } - return i; -} - -SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) -{ - UInt32 i; - if (size < 4) - return 0; - size -= 4; - for (i = 0; i <= size; i += 4) - { - if (data[i] == 0x40 && (data[i + 1] & 0xC0) == 0x00 || - data[i] == 0x7F && (data[i + 1] & 0xC0) == 0xC0) - { - UInt32 src = - ((UInt32)data[i + 0] << 24) | - ((UInt32)data[i + 1] << 16) | - ((UInt32)data[i + 2] << 8) | - ((UInt32)data[i + 3]); - UInt32 dest; - - src <<= 2; - if (encoding) - dest = ip + i + src; - else - dest = src - (ip + i); - dest >>= 2; - - dest = (((0 - ((dest >> 22) & 1)) << 22) & 0x3FFFFFFF) | (dest & 0x3FFFFF) | 0x40000000; - - data[i + 0] = (Byte)(dest >> 24); - data[i + 1] = (Byte)(dest >> 16); - data[i + 2] = (Byte)(dest >> 8); - data[i + 3] = (Byte)dest; - } - } - return i; -} diff --git a/modules/lib7z/LZMASDK/C/Bra.h b/modules/lib7z/LZMASDK/C/Bra.h deleted file mode 100644 index 9c91e332d4fc..000000000000 --- a/modules/lib7z/LZMASDK/C/Bra.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Bra.h -- Branch converters for executables -2009-02-07 : Igor Pavlov : Public domain */ - -#ifndef __BRA_H -#define __BRA_H - -#include "Types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* -These functions convert relative addresses to absolute addresses -in CALL instructions to increase the compression ratio. - - In: - data - data buffer - size - size of data - ip - current virtual Instruction Pinter (IP) value - state - state variable for x86 converter - encoding - 0 (for decoding), 1 (for encoding) - - Out: - state - state variable for x86 converter - - Returns: - The number of processed bytes. If you call these functions with multiple calls, - you must start next call with first byte after block of processed bytes. - - Type Endian Alignment LookAhead - - x86 little 1 4 - ARMT little 2 2 - ARM little 4 0 - PPC big 4 0 - SPARC big 4 0 - IA64 little 16 0 - - size must be >= Alignment + LookAhead, if it's not last block. - If (size < Alignment + LookAhead), converter returns 0. - - Example: - - UInt32 ip = 0; - for () - { - ; size must be >= Alignment + LookAhead, if it's not last block - SizeT processed = Convert(data, size, ip, 1); - data += processed; - size -= processed; - ip += processed; - } -*/ - -#define x86_Convert_Init(state) { state = 0; } -SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding); -SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); -SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); -SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); -SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); -SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/Bra86.c b/modules/lib7z/LZMASDK/C/Bra86.c deleted file mode 100644 index 93566cb21204..000000000000 --- a/modules/lib7z/LZMASDK/C/Bra86.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Bra86.c -- Converter for x86 code (BCJ) -2008-10-04 : Igor Pavlov : Public domain */ - -#include "Bra.h" - -#define Test86MSByte(b) ((b) == 0 || (b) == 0xFF) - -const Byte kMaskToAllowedStatus[8] = {1, 1, 1, 0, 1, 0, 0, 0}; -const Byte kMaskToBitNumber[8] = {0, 1, 2, 2, 3, 3, 3, 3}; - -SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding) -{ - SizeT bufferPos = 0, prevPosT; - UInt32 prevMask = *state & 0x7; - if (size < 5) - return 0; - ip += 5; - prevPosT = (SizeT)0 - 1; - - for (;;) - { - Byte *p = data + bufferPos; - Byte *limit = data + size - 4; - for (; p < limit; p++) - if ((*p & 0xFE) == 0xE8) - break; - bufferPos = (SizeT)(p - data); - if (p >= limit) - break; - prevPosT = bufferPos - prevPosT; - if (prevPosT > 3) - prevMask = 0; - else - { - prevMask = (prevMask << ((int)prevPosT - 1)) & 0x7; - if (prevMask != 0) - { - Byte b = p[4 - kMaskToBitNumber[prevMask]]; - if (!kMaskToAllowedStatus[prevMask] || Test86MSByte(b)) - { - prevPosT = bufferPos; - prevMask = ((prevMask << 1) & 0x7) | 1; - bufferPos++; - continue; - } - } - } - prevPosT = bufferPos; - - if (Test86MSByte(p[4])) - { - UInt32 src = ((UInt32)p[4] << 24) | ((UInt32)p[3] << 16) | ((UInt32)p[2] << 8) | ((UInt32)p[1]); - UInt32 dest; - for (;;) - { - Byte b; - int index; - if (encoding) - dest = (ip + (UInt32)bufferPos) + src; - else - dest = src - (ip + (UInt32)bufferPos); - if (prevMask == 0) - break; - index = kMaskToBitNumber[prevMask] * 8; - b = (Byte)(dest >> (24 - index)); - if (!Test86MSByte(b)) - break; - src = dest ^ ((1 << (32 - index)) - 1); - } - p[4] = (Byte)(~(((dest >> 24) & 1) - 1)); - p[3] = (Byte)(dest >> 16); - p[2] = (Byte)(dest >> 8); - p[1] = (Byte)dest; - bufferPos += 5; - } - else - { - prevMask = ((prevMask << 1) & 0x7) | 1; - bufferPos++; - } - } - prevPosT = bufferPos - prevPosT; - *state = ((prevPosT > 3) ? 0 : ((prevMask << ((int)prevPosT - 1)) & 0x7)); - return bufferPos; -} diff --git a/modules/lib7z/LZMASDK/C/BraIA64.c b/modules/lib7z/LZMASDK/C/BraIA64.c deleted file mode 100644 index f359f16a384f..000000000000 --- a/modules/lib7z/LZMASDK/C/BraIA64.c +++ /dev/null @@ -1,67 +0,0 @@ -/* BraIA64.c -- Converter for IA-64 code -2008-10-04 : Igor Pavlov : Public domain */ - -#include "Bra.h" - -static const Byte kBranchTable[32] = -{ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 4, 4, 6, 6, 0, 0, 7, 7, - 4, 4, 0, 0, 4, 4, 0, 0 -}; - -SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) -{ - SizeT i; - if (size < 16) - return 0; - size -= 16; - for (i = 0; i <= size; i += 16) - { - UInt32 instrTemplate = data[i] & 0x1F; - UInt32 mask = kBranchTable[instrTemplate]; - UInt32 bitPos = 5; - int slot; - for (slot = 0; slot < 3; slot++, bitPos += 41) - { - UInt32 bytePos, bitRes; - UInt64 instruction, instNorm; - int j; - if (((mask >> slot) & 1) == 0) - continue; - bytePos = (bitPos >> 3); - bitRes = bitPos & 0x7; - instruction = 0; - for (j = 0; j < 6; j++) - instruction += (UInt64)data[i + j + bytePos] << (8 * j); - - instNorm = instruction >> bitRes; - if (((instNorm >> 37) & 0xF) == 0x5 && ((instNorm >> 9) & 0x7) == 0) - { - UInt32 src = (UInt32)((instNorm >> 13) & 0xFFFFF); - UInt32 dest; - src |= ((UInt32)(instNorm >> 36) & 1) << 20; - - src <<= 4; - - if (encoding) - dest = ip + (UInt32)i + src; - else - dest = src - (ip + (UInt32)i); - - dest >>= 4; - - instNorm &= ~((UInt64)(0x8FFFFF) << 13); - instNorm |= ((UInt64)(dest & 0xFFFFF) << 13); - instNorm |= ((UInt64)(dest & 0x100000) << (36 - 20)); - - instruction &= (1 << bitRes) - 1; - instruction |= (instNorm << bitRes); - for (j = 0; j < 6; j++) - data[i + j + bytePos] = (Byte)(instruction >> (8 * j)); - } - } - } - return i; -} diff --git a/modules/lib7z/LZMASDK/C/CpuArch.h b/modules/lib7z/LZMASDK/C/CpuArch.h deleted file mode 100644 index f8234130f6af..000000000000 --- a/modules/lib7z/LZMASDK/C/CpuArch.h +++ /dev/null @@ -1,92 +0,0 @@ -/* CpuArch.h -2009-08-11 : Igor Pavlov : Public domain */ - -#ifndef __CPU_ARCH_H -#define __CPU_ARCH_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* -LITTLE_ENDIAN_UNALIGN means: - 1) CPU is LITTLE_ENDIAN - 2) it's allowed to make unaligned memory accesses -if LITTLE_ENDIAN_UNALIGN is not defined, it means that we don't know -about these properties of platform. -*/ - -#if defined(_M_X64) || defined(_M_AMD64) || defined(__x86_64__) -#define MY_CPU_AMD64 -#endif - -#if defined(MY_CPU_AMD64) || defined(_M_IA64) -#define MY_CPU_64BIT -#endif - -#if defined(_M_IX86) || defined(__i386__) || defined(MY_CPU_AMD64) -#define MY_CPU_X86_OR_AMD64 -#endif - -#if defined(MY_CPU_X86_OR_AMD64) -#define LITTLE_ENDIAN_UNALIGN -#endif - -#ifdef LITTLE_ENDIAN_UNALIGN - -#define GetUi16(p) (*(const UInt16 *)(p)) -#define GetUi32(p) (*(const UInt32 *)(p)) -#define GetUi64(p) (*(const UInt64 *)(p)) -#define SetUi16(p, d) *(UInt16 *)(p) = (d); -#define SetUi32(p, d) *(UInt32 *)(p) = (d); - -#else - -#define GetUi16(p) (((const Byte *)(p))[0] | ((UInt16)((const Byte *)(p))[1] << 8)) - -#define GetUi32(p) ( \ - ((const Byte *)(p))[0] | \ - ((UInt32)((const Byte *)(p))[1] << 8) | \ - ((UInt32)((const Byte *)(p))[2] << 16) | \ - ((UInt32)((const Byte *)(p))[3] << 24)) - -#define GetUi64(p) (GetUi32(p) | ((UInt64)GetUi32(((const Byte *)(p)) + 4) << 32)) - -#define SetUi16(p, d) { UInt32 _x_ = (d); \ - ((Byte *)(p))[0] = (Byte)_x_; \ - ((Byte *)(p))[1] = (Byte)(_x_ >> 8); } - -#define SetUi32(p, d) { UInt32 _x_ = (d); \ - ((Byte *)(p))[0] = (Byte)_x_; \ - ((Byte *)(p))[1] = (Byte)(_x_ >> 8); \ - ((Byte *)(p))[2] = (Byte)(_x_ >> 16); \ - ((Byte *)(p))[3] = (Byte)(_x_ >> 24); } - -#endif - -#if defined(LITTLE_ENDIAN_UNALIGN) && defined(_WIN64) && (_MSC_VER >= 1300) - -#pragma intrinsic(_byteswap_ulong) -#pragma intrinsic(_byteswap_uint64) -#define GetBe32(p) _byteswap_ulong(*(const UInt32 *)(const Byte *)(p)) -#define GetBe64(p) _byteswap_uint64(*(const UInt64 *)(const Byte *)(p)) - -#else - -#define GetBe32(p) ( \ - ((UInt32)((const Byte *)(p))[0] << 24) | \ - ((UInt32)((const Byte *)(p))[1] << 16) | \ - ((UInt32)((const Byte *)(p))[2] << 8) | \ - ((const Byte *)(p))[3] ) - -#define GetBe64(p) (((UInt64)GetBe32(p) << 32) | GetBe32(((const Byte *)(p)) + 4)) - -#endif - -#define GetBe16(p) (((UInt16)((const Byte *)(p))[0] << 8) | ((const Byte *)(p))[1]) - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/Delta.c b/modules/lib7z/LZMASDK/C/Delta.c deleted file mode 100644 index 93c93a14847e..000000000000 --- a/modules/lib7z/LZMASDK/C/Delta.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Delta.c -- Delta converter -2009-05-26 : Igor Pavlov : Public domain */ - -#include "Delta.h" - -void Delta_Init(Byte *state) -{ - unsigned i; - for (i = 0; i < DELTA_STATE_SIZE; i++) - state[i] = 0; -} - -static void MyMemCpy(Byte *dest, const Byte *src, unsigned size) -{ - unsigned i; - for (i = 0; i < size; i++) - dest[i] = src[i]; -} - -void Delta_Encode(Byte *state, unsigned delta, Byte *data, SizeT size) -{ - Byte buf[DELTA_STATE_SIZE]; - unsigned j = 0; - MyMemCpy(buf, state, delta); - { - SizeT i; - for (i = 0; i < size;) - { - for (j = 0; j < delta && i < size; i++, j++) - { - Byte b = data[i]; - data[i] = (Byte)(b - buf[j]); - buf[j] = b; - } - } - } - if (j == delta) - j = 0; - MyMemCpy(state, buf + j, delta - j); - MyMemCpy(state + delta - j, buf, j); -} - -void Delta_Decode(Byte *state, unsigned delta, Byte *data, SizeT size) -{ - Byte buf[DELTA_STATE_SIZE]; - unsigned j = 0; - MyMemCpy(buf, state, delta); - { - SizeT i; - for (i = 0; i < size;) - { - for (j = 0; j < delta && i < size; i++, j++) - { - buf[j] = data[i] = (Byte)(buf[j] + data[i]); - } - } - } - if (j == delta) - j = 0; - MyMemCpy(state, buf + j, delta - j); - MyMemCpy(state + delta - j, buf, j); -} diff --git a/modules/lib7z/LZMASDK/C/Delta.h b/modules/lib7z/LZMASDK/C/Delta.h deleted file mode 100644 index 776cd4551927..000000000000 --- a/modules/lib7z/LZMASDK/C/Delta.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Delta.h -- Delta converter -2009-04-15 : Igor Pavlov : Public domain */ - -#ifndef __DELTA_H -#define __DELTA_H - -#include "Types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define DELTA_STATE_SIZE 256 - -void Delta_Init(Byte *state); -void Delta_Encode(Byte *state, unsigned delta, Byte *data, SizeT size); -void Delta_Decode(Byte *state, unsigned delta, Byte *data, SizeT size); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/LzFind.c b/modules/lib7z/LZMASDK/C/LzFind.c deleted file mode 100644 index f6c9e66d57d6..000000000000 --- a/modules/lib7z/LZMASDK/C/LzFind.c +++ /dev/null @@ -1,761 +0,0 @@ -/* LzFind.c -- Match finder for LZ algorithms -2009-04-22 : Igor Pavlov : Public domain */ - -#include - -#include "LzFind.h" -#include "LzHash.h" - -#define kEmptyHashValue 0 -#define kMaxValForNormalize ((UInt32)0xFFFFFFFF) -#define kNormalizeStepMin (1 << 10) /* it must be power of 2 */ -#define kNormalizeMask (~(kNormalizeStepMin - 1)) -#define kMaxHistorySize ((UInt32)3 << 30) - -#define kStartMaxLen 3 - -static void LzInWindow_Free(CMatchFinder *p, ISzAlloc *alloc) -{ - if (!p->directInput) - { - alloc->Free(alloc, p->bufferBase); - p->bufferBase = 0; - } -} - -/* keepSizeBefore + keepSizeAfter + keepSizeReserv must be < 4G) */ - -static int LzInWindow_Create(CMatchFinder *p, UInt32 keepSizeReserv, ISzAlloc *alloc) -{ - UInt32 blockSize = p->keepSizeBefore + p->keepSizeAfter + keepSizeReserv; - if (p->directInput) - { - p->blockSize = blockSize; - return 1; - } - if (p->bufferBase == 0 || p->blockSize != blockSize) - { - LzInWindow_Free(p, alloc); - p->blockSize = blockSize; - p->bufferBase = (Byte *)alloc->Alloc(alloc, (size_t)blockSize); - } - return (p->bufferBase != 0); -} - -Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p) { return p->buffer; } -Byte MatchFinder_GetIndexByte(CMatchFinder *p, Int32 index) { return p->buffer[index]; } - -UInt32 MatchFinder_GetNumAvailableBytes(CMatchFinder *p) { return p->streamPos - p->pos; } - -void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue) -{ - p->posLimit -= subValue; - p->pos -= subValue; - p->streamPos -= subValue; -} - -static void MatchFinder_ReadBlock(CMatchFinder *p) -{ - if (p->streamEndWasReached || p->result != SZ_OK) - return; - if (p->directInput) - { - UInt32 curSize = 0xFFFFFFFF - p->streamPos; - if (curSize > p->directInputRem) - curSize = (UInt32)p->directInputRem; - p->directInputRem -= curSize; - p->streamPos += curSize; - if (p->directInputRem == 0) - p->streamEndWasReached = 1; - return; - } - for (;;) - { - Byte *dest = p->buffer + (p->streamPos - p->pos); - size_t size = (p->bufferBase + p->blockSize - dest); - if (size == 0) - return; - p->result = p->stream->Read(p->stream, dest, &size); - if (p->result != SZ_OK) - return; - if (size == 0) - { - p->streamEndWasReached = 1; - return; - } - p->streamPos += (UInt32)size; - if (p->streamPos - p->pos > p->keepSizeAfter) - return; - } -} - -void MatchFinder_MoveBlock(CMatchFinder *p) -{ - memmove(p->bufferBase, - p->buffer - p->keepSizeBefore, - (size_t)(p->streamPos - p->pos + p->keepSizeBefore)); - p->buffer = p->bufferBase + p->keepSizeBefore; -} - -int MatchFinder_NeedMove(CMatchFinder *p) -{ - if (p->directInput) - return 0; - /* if (p->streamEndWasReached) return 0; */ - return ((size_t)(p->bufferBase + p->blockSize - p->buffer) <= p->keepSizeAfter); -} - -void MatchFinder_ReadIfRequired(CMatchFinder *p) -{ - if (p->streamEndWasReached) - return; - if (p->keepSizeAfter >= p->streamPos - p->pos) - MatchFinder_ReadBlock(p); -} - -static void MatchFinder_CheckAndMoveAndRead(CMatchFinder *p) -{ - if (MatchFinder_NeedMove(p)) - MatchFinder_MoveBlock(p); - MatchFinder_ReadBlock(p); -} - -static void MatchFinder_SetDefaultSettings(CMatchFinder *p) -{ - p->cutValue = 32; - p->btMode = 1; - p->numHashBytes = 4; - p->bigHash = 0; -} - -#define kCrcPoly 0xEDB88320 - -void MatchFinder_Construct(CMatchFinder *p) -{ - UInt32 i; - p->bufferBase = 0; - p->directInput = 0; - p->hash = 0; - MatchFinder_SetDefaultSettings(p); - - for (i = 0; i < 256; i++) - { - UInt32 r = i; - int j; - for (j = 0; j < 8; j++) - r = (r >> 1) ^ (kCrcPoly & ~((r & 1) - 1)); - p->crc[i] = r; - } -} - -static void MatchFinder_FreeThisClassMemory(CMatchFinder *p, ISzAlloc *alloc) -{ - alloc->Free(alloc, p->hash); - p->hash = 0; -} - -void MatchFinder_Free(CMatchFinder *p, ISzAlloc *alloc) -{ - MatchFinder_FreeThisClassMemory(p, alloc); - LzInWindow_Free(p, alloc); -} - -static CLzRef* AllocRefs(UInt32 num, ISzAlloc *alloc) -{ - size_t sizeInBytes = (size_t)num * sizeof(CLzRef); - if (sizeInBytes / sizeof(CLzRef) != num) - return 0; - return (CLzRef *)alloc->Alloc(alloc, sizeInBytes); -} - -int MatchFinder_Create(CMatchFinder *p, UInt32 historySize, - UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter, - ISzAlloc *alloc) -{ - UInt32 sizeReserv; - if (historySize > kMaxHistorySize) - { - MatchFinder_Free(p, alloc); - return 0; - } - sizeReserv = historySize >> 1; - if (historySize > ((UInt32)2 << 30)) - sizeReserv = historySize >> 2; - sizeReserv += (keepAddBufferBefore + matchMaxLen + keepAddBufferAfter) / 2 + (1 << 19); - - p->keepSizeBefore = historySize + keepAddBufferBefore + 1; - p->keepSizeAfter = matchMaxLen + keepAddBufferAfter; - /* we need one additional byte, since we use MoveBlock after pos++ and before dictionary using */ - if (LzInWindow_Create(p, sizeReserv, alloc)) - { - UInt32 newCyclicBufferSize = historySize + 1; - UInt32 hs; - p->matchMaxLen = matchMaxLen; - { - p->fixedHashSize = 0; - if (p->numHashBytes == 2) - hs = (1 << 16) - 1; - else - { - hs = historySize - 1; - hs |= (hs >> 1); - hs |= (hs >> 2); - hs |= (hs >> 4); - hs |= (hs >> 8); - hs >>= 1; - hs |= 0xFFFF; /* don't change it! It's required for Deflate */ - if (hs > (1 << 24)) - { - if (p->numHashBytes == 3) - hs = (1 << 24) - 1; - else - hs >>= 1; - } - } - p->hashMask = hs; - hs++; - if (p->numHashBytes > 2) p->fixedHashSize += kHash2Size; - if (p->numHashBytes > 3) p->fixedHashSize += kHash3Size; - if (p->numHashBytes > 4) p->fixedHashSize += kHash4Size; - hs += p->fixedHashSize; - } - - { - UInt32 prevSize = p->hashSizeSum + p->numSons; - UInt32 newSize; - p->historySize = historySize; - p->hashSizeSum = hs; - p->cyclicBufferSize = newCyclicBufferSize; - p->numSons = (p->btMode ? newCyclicBufferSize * 2 : newCyclicBufferSize); - newSize = p->hashSizeSum + p->numSons; - if (p->hash != 0 && prevSize == newSize) - return 1; - MatchFinder_FreeThisClassMemory(p, alloc); - p->hash = AllocRefs(newSize, alloc); - if (p->hash != 0) - { - p->son = p->hash + p->hashSizeSum; - return 1; - } - } - } - MatchFinder_Free(p, alloc); - return 0; -} - -static void MatchFinder_SetLimits(CMatchFinder *p) -{ - UInt32 limit = kMaxValForNormalize - p->pos; - UInt32 limit2 = p->cyclicBufferSize - p->cyclicBufferPos; - if (limit2 < limit) - limit = limit2; - limit2 = p->streamPos - p->pos; - if (limit2 <= p->keepSizeAfter) - { - if (limit2 > 0) - limit2 = 1; - } - else - limit2 -= p->keepSizeAfter; - if (limit2 < limit) - limit = limit2; - { - UInt32 lenLimit = p->streamPos - p->pos; - if (lenLimit > p->matchMaxLen) - lenLimit = p->matchMaxLen; - p->lenLimit = lenLimit; - } - p->posLimit = p->pos + limit; -} - -void MatchFinder_Init(CMatchFinder *p) -{ - UInt32 i; - for (i = 0; i < p->hashSizeSum; i++) - p->hash[i] = kEmptyHashValue; - p->cyclicBufferPos = 0; - p->buffer = p->bufferBase; - p->pos = p->streamPos = p->cyclicBufferSize; - p->result = SZ_OK; - p->streamEndWasReached = 0; - MatchFinder_ReadBlock(p); - MatchFinder_SetLimits(p); -} - -static UInt32 MatchFinder_GetSubValue(CMatchFinder *p) -{ - return (p->pos - p->historySize - 1) & kNormalizeMask; -} - -void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, UInt32 numItems) -{ - UInt32 i; - for (i = 0; i < numItems; i++) - { - UInt32 value = items[i]; - if (value <= subValue) - value = kEmptyHashValue; - else - value -= subValue; - items[i] = value; - } -} - -static void MatchFinder_Normalize(CMatchFinder *p) -{ - UInt32 subValue = MatchFinder_GetSubValue(p); - MatchFinder_Normalize3(subValue, p->hash, p->hashSizeSum + p->numSons); - MatchFinder_ReduceOffsets(p, subValue); -} - -static void MatchFinder_CheckLimits(CMatchFinder *p) -{ - if (p->pos == kMaxValForNormalize) - MatchFinder_Normalize(p); - if (!p->streamEndWasReached && p->keepSizeAfter == p->streamPos - p->pos) - MatchFinder_CheckAndMoveAndRead(p); - if (p->cyclicBufferPos == p->cyclicBufferSize) - p->cyclicBufferPos = 0; - MatchFinder_SetLimits(p); -} - -static UInt32 * Hc_GetMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, - UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue, - UInt32 *distances, UInt32 maxLen) -{ - son[_cyclicBufferPos] = curMatch; - for (;;) - { - UInt32 delta = pos - curMatch; - if (cutValue-- == 0 || delta >= _cyclicBufferSize) - return distances; - { - const Byte *pb = cur - delta; - curMatch = son[_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)]; - if (pb[maxLen] == cur[maxLen] && *pb == *cur) - { - UInt32 len = 0; - while (++len != lenLimit) - if (pb[len] != cur[len]) - break; - if (maxLen < len) - { - *distances++ = maxLen = len; - *distances++ = delta - 1; - if (len == lenLimit) - return distances; - } - } - } - } -} - -UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, - UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue, - UInt32 *distances, UInt32 maxLen) -{ - CLzRef *ptr0 = son + (_cyclicBufferPos << 1) + 1; - CLzRef *ptr1 = son + (_cyclicBufferPos << 1); - UInt32 len0 = 0, len1 = 0; - for (;;) - { - UInt32 delta = pos - curMatch; - if (cutValue-- == 0 || delta >= _cyclicBufferSize) - { - *ptr0 = *ptr1 = kEmptyHashValue; - return distances; - } - { - CLzRef *pair = son + ((_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); - const Byte *pb = cur - delta; - UInt32 len = (len0 < len1 ? len0 : len1); - if (pb[len] == cur[len]) - { - if (++len != lenLimit && pb[len] == cur[len]) - while (++len != lenLimit) - if (pb[len] != cur[len]) - break; - if (maxLen < len) - { - *distances++ = maxLen = len; - *distances++ = delta - 1; - if (len == lenLimit) - { - *ptr1 = pair[0]; - *ptr0 = pair[1]; - return distances; - } - } - } - if (pb[len] < cur[len]) - { - *ptr1 = curMatch; - ptr1 = pair + 1; - curMatch = *ptr1; - len1 = len; - } - else - { - *ptr0 = curMatch; - ptr0 = pair; - curMatch = *ptr0; - len0 = len; - } - } - } -} - -static void SkipMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, - UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue) -{ - CLzRef *ptr0 = son + (_cyclicBufferPos << 1) + 1; - CLzRef *ptr1 = son + (_cyclicBufferPos << 1); - UInt32 len0 = 0, len1 = 0; - for (;;) - { - UInt32 delta = pos - curMatch; - if (cutValue-- == 0 || delta >= _cyclicBufferSize) - { - *ptr0 = *ptr1 = kEmptyHashValue; - return; - } - { - CLzRef *pair = son + ((_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); - const Byte *pb = cur - delta; - UInt32 len = (len0 < len1 ? len0 : len1); - if (pb[len] == cur[len]) - { - while (++len != lenLimit) - if (pb[len] != cur[len]) - break; - { - if (len == lenLimit) - { - *ptr1 = pair[0]; - *ptr0 = pair[1]; - return; - } - } - } - if (pb[len] < cur[len]) - { - *ptr1 = curMatch; - ptr1 = pair + 1; - curMatch = *ptr1; - len1 = len; - } - else - { - *ptr0 = curMatch; - ptr0 = pair; - curMatch = *ptr0; - len0 = len; - } - } - } -} - -#define MOVE_POS \ - ++p->cyclicBufferPos; \ - p->buffer++; \ - if (++p->pos == p->posLimit) MatchFinder_CheckLimits(p); - -#define MOVE_POS_RET MOVE_POS return offset; - -static void MatchFinder_MovePos(CMatchFinder *p) { MOVE_POS; } - -#define GET_MATCHES_HEADER2(minLen, ret_op) \ - UInt32 lenLimit; UInt32 hashValue; const Byte *cur; UInt32 curMatch; \ - lenLimit = p->lenLimit; { if (lenLimit < minLen) { MatchFinder_MovePos(p); ret_op; }} \ - cur = p->buffer; - -#define GET_MATCHES_HEADER(minLen) GET_MATCHES_HEADER2(minLen, return 0) -#define SKIP_HEADER(minLen) GET_MATCHES_HEADER2(minLen, continue) - -#define MF_PARAMS(p) p->pos, p->buffer, p->son, p->cyclicBufferPos, p->cyclicBufferSize, p->cutValue - -#define GET_MATCHES_FOOTER(offset, maxLen) \ - offset = (UInt32)(GetMatchesSpec1(lenLimit, curMatch, MF_PARAMS(p), \ - distances + offset, maxLen) - distances); MOVE_POS_RET; - -#define SKIP_FOOTER \ - SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); MOVE_POS; - -static UInt32 Bt2_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) -{ - UInt32 offset; - GET_MATCHES_HEADER(2) - HASH2_CALC; - curMatch = p->hash[hashValue]; - p->hash[hashValue] = p->pos; - offset = 0; - GET_MATCHES_FOOTER(offset, 1) -} - -UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) -{ - UInt32 offset; - GET_MATCHES_HEADER(3) - HASH_ZIP_CALC; - curMatch = p->hash[hashValue]; - p->hash[hashValue] = p->pos; - offset = 0; - GET_MATCHES_FOOTER(offset, 2) -} - -static UInt32 Bt3_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) -{ - UInt32 hash2Value, delta2, maxLen, offset; - GET_MATCHES_HEADER(3) - - HASH3_CALC; - - delta2 = p->pos - p->hash[hash2Value]; - curMatch = p->hash[kFix3HashSize + hashValue]; - - p->hash[hash2Value] = - p->hash[kFix3HashSize + hashValue] = p->pos; - - - maxLen = 2; - offset = 0; - if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) - { - for (; maxLen != lenLimit; maxLen++) - if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) - break; - distances[0] = maxLen; - distances[1] = delta2 - 1; - offset = 2; - if (maxLen == lenLimit) - { - SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); - MOVE_POS_RET; - } - } - GET_MATCHES_FOOTER(offset, maxLen) -} - -static UInt32 Bt4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) -{ - UInt32 hash2Value, hash3Value, delta2, delta3, maxLen, offset; - GET_MATCHES_HEADER(4) - - HASH4_CALC; - - delta2 = p->pos - p->hash[ hash2Value]; - delta3 = p->pos - p->hash[kFix3HashSize + hash3Value]; - curMatch = p->hash[kFix4HashSize + hashValue]; - - p->hash[ hash2Value] = - p->hash[kFix3HashSize + hash3Value] = - p->hash[kFix4HashSize + hashValue] = p->pos; - - maxLen = 1; - offset = 0; - if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) - { - distances[0] = maxLen = 2; - distances[1] = delta2 - 1; - offset = 2; - } - if (delta2 != delta3 && delta3 < p->cyclicBufferSize && *(cur - delta3) == *cur) - { - maxLen = 3; - distances[offset + 1] = delta3 - 1; - offset += 2; - delta2 = delta3; - } - if (offset != 0) - { - for (; maxLen != lenLimit; maxLen++) - if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) - break; - distances[offset - 2] = maxLen; - if (maxLen == lenLimit) - { - SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); - MOVE_POS_RET; - } - } - if (maxLen < 3) - maxLen = 3; - GET_MATCHES_FOOTER(offset, maxLen) -} - -static UInt32 Hc4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) -{ - UInt32 hash2Value, hash3Value, delta2, delta3, maxLen, offset; - GET_MATCHES_HEADER(4) - - HASH4_CALC; - - delta2 = p->pos - p->hash[ hash2Value]; - delta3 = p->pos - p->hash[kFix3HashSize + hash3Value]; - curMatch = p->hash[kFix4HashSize + hashValue]; - - p->hash[ hash2Value] = - p->hash[kFix3HashSize + hash3Value] = - p->hash[kFix4HashSize + hashValue] = p->pos; - - maxLen = 1; - offset = 0; - if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) - { - distances[0] = maxLen = 2; - distances[1] = delta2 - 1; - offset = 2; - } - if (delta2 != delta3 && delta3 < p->cyclicBufferSize && *(cur - delta3) == *cur) - { - maxLen = 3; - distances[offset + 1] = delta3 - 1; - offset += 2; - delta2 = delta3; - } - if (offset != 0) - { - for (; maxLen != lenLimit; maxLen++) - if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) - break; - distances[offset - 2] = maxLen; - if (maxLen == lenLimit) - { - p->son[p->cyclicBufferPos] = curMatch; - MOVE_POS_RET; - } - } - if (maxLen < 3) - maxLen = 3; - offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p), - distances + offset, maxLen) - (distances)); - MOVE_POS_RET -} - -UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) -{ - UInt32 offset; - GET_MATCHES_HEADER(3) - HASH_ZIP_CALC; - curMatch = p->hash[hashValue]; - p->hash[hashValue] = p->pos; - offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p), - distances, 2) - (distances)); - MOVE_POS_RET -} - -static void Bt2_MatchFinder_Skip(CMatchFinder *p, UInt32 num) -{ - do - { - SKIP_HEADER(2) - HASH2_CALC; - curMatch = p->hash[hashValue]; - p->hash[hashValue] = p->pos; - SKIP_FOOTER - } - while (--num != 0); -} - -void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num) -{ - do - { - SKIP_HEADER(3) - HASH_ZIP_CALC; - curMatch = p->hash[hashValue]; - p->hash[hashValue] = p->pos; - SKIP_FOOTER - } - while (--num != 0); -} - -static void Bt3_MatchFinder_Skip(CMatchFinder *p, UInt32 num) -{ - do - { - UInt32 hash2Value; - SKIP_HEADER(3) - HASH3_CALC; - curMatch = p->hash[kFix3HashSize + hashValue]; - p->hash[hash2Value] = - p->hash[kFix3HashSize + hashValue] = p->pos; - SKIP_FOOTER - } - while (--num != 0); -} - -static void Bt4_MatchFinder_Skip(CMatchFinder *p, UInt32 num) -{ - do - { - UInt32 hash2Value, hash3Value; - SKIP_HEADER(4) - HASH4_CALC; - curMatch = p->hash[kFix4HashSize + hashValue]; - p->hash[ hash2Value] = - p->hash[kFix3HashSize + hash3Value] = p->pos; - p->hash[kFix4HashSize + hashValue] = p->pos; - SKIP_FOOTER - } - while (--num != 0); -} - -static void Hc4_MatchFinder_Skip(CMatchFinder *p, UInt32 num) -{ - do - { - UInt32 hash2Value, hash3Value; - SKIP_HEADER(4) - HASH4_CALC; - curMatch = p->hash[kFix4HashSize + hashValue]; - p->hash[ hash2Value] = - p->hash[kFix3HashSize + hash3Value] = - p->hash[kFix4HashSize + hashValue] = p->pos; - p->son[p->cyclicBufferPos] = curMatch; - MOVE_POS - } - while (--num != 0); -} - -void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num) -{ - do - { - SKIP_HEADER(3) - HASH_ZIP_CALC; - curMatch = p->hash[hashValue]; - p->hash[hashValue] = p->pos; - p->son[p->cyclicBufferPos] = curMatch; - MOVE_POS - } - while (--num != 0); -} - -void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable) -{ - vTable->Init = (Mf_Init_Func)MatchFinder_Init; - vTable->GetIndexByte = (Mf_GetIndexByte_Func)MatchFinder_GetIndexByte; - vTable->GetNumAvailableBytes = (Mf_GetNumAvailableBytes_Func)MatchFinder_GetNumAvailableBytes; - vTable->GetPointerToCurrentPos = (Mf_GetPointerToCurrentPos_Func)MatchFinder_GetPointerToCurrentPos; - if (!p->btMode) - { - vTable->GetMatches = (Mf_GetMatches_Func)Hc4_MatchFinder_GetMatches; - vTable->Skip = (Mf_Skip_Func)Hc4_MatchFinder_Skip; - } - else if (p->numHashBytes == 2) - { - vTable->GetMatches = (Mf_GetMatches_Func)Bt2_MatchFinder_GetMatches; - vTable->Skip = (Mf_Skip_Func)Bt2_MatchFinder_Skip; - } - else if (p->numHashBytes == 3) - { - vTable->GetMatches = (Mf_GetMatches_Func)Bt3_MatchFinder_GetMatches; - vTable->Skip = (Mf_Skip_Func)Bt3_MatchFinder_Skip; - } - else - { - vTable->GetMatches = (Mf_GetMatches_Func)Bt4_MatchFinder_GetMatches; - vTable->Skip = (Mf_Skip_Func)Bt4_MatchFinder_Skip; - } -} diff --git a/modules/lib7z/LZMASDK/C/LzFind.h b/modules/lib7z/LZMASDK/C/LzFind.h deleted file mode 100644 index 7ebdfa4464be..000000000000 --- a/modules/lib7z/LZMASDK/C/LzFind.h +++ /dev/null @@ -1,115 +0,0 @@ -/* LzFind.h -- Match finder for LZ algorithms -2009-04-22 : Igor Pavlov : Public domain */ - -#ifndef __LZ_FIND_H -#define __LZ_FIND_H - -#include "Types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef UInt32 CLzRef; - -typedef struct _CMatchFinder -{ - Byte *buffer; - UInt32 pos; - UInt32 posLimit; - UInt32 streamPos; - UInt32 lenLimit; - - UInt32 cyclicBufferPos; - UInt32 cyclicBufferSize; /* it must be = (historySize + 1) */ - - UInt32 matchMaxLen; - CLzRef *hash; - CLzRef *son; - UInt32 hashMask; - UInt32 cutValue; - - Byte *bufferBase; - ISeqInStream *stream; - int streamEndWasReached; - - UInt32 blockSize; - UInt32 keepSizeBefore; - UInt32 keepSizeAfter; - - UInt32 numHashBytes; - int directInput; - size_t directInputRem; - int btMode; - int bigHash; - UInt32 historySize; - UInt32 fixedHashSize; - UInt32 hashSizeSum; - UInt32 numSons; - SRes result; - UInt32 crc[256]; -} CMatchFinder; - -#define Inline_MatchFinder_GetPointerToCurrentPos(p) ((p)->buffer) -#define Inline_MatchFinder_GetIndexByte(p, index) ((p)->buffer[(Int32)(index)]) - -#define Inline_MatchFinder_GetNumAvailableBytes(p) ((p)->streamPos - (p)->pos) - -int MatchFinder_NeedMove(CMatchFinder *p); -Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p); -void MatchFinder_MoveBlock(CMatchFinder *p); -void MatchFinder_ReadIfRequired(CMatchFinder *p); - -void MatchFinder_Construct(CMatchFinder *p); - -/* Conditions: - historySize <= 3 GB - keepAddBufferBefore + matchMaxLen + keepAddBufferAfter < 511MB -*/ -int MatchFinder_Create(CMatchFinder *p, UInt32 historySize, - UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter, - ISzAlloc *alloc); -void MatchFinder_Free(CMatchFinder *p, ISzAlloc *alloc); -void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, UInt32 numItems); -void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue); - -UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *buffer, CLzRef *son, - UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue, - UInt32 *distances, UInt32 maxLen); - -/* -Conditions: - Mf_GetNumAvailableBytes_Func must be called before each Mf_GetMatchLen_Func. - Mf_GetPointerToCurrentPos_Func's result must be used only before any other function -*/ - -typedef void (*Mf_Init_Func)(void *object); -typedef Byte (*Mf_GetIndexByte_Func)(void *object, Int32 index); -typedef UInt32 (*Mf_GetNumAvailableBytes_Func)(void *object); -typedef const Byte * (*Mf_GetPointerToCurrentPos_Func)(void *object); -typedef UInt32 (*Mf_GetMatches_Func)(void *object, UInt32 *distances); -typedef void (*Mf_Skip_Func)(void *object, UInt32); - -typedef struct _IMatchFinder -{ - Mf_Init_Func Init; - Mf_GetIndexByte_Func GetIndexByte; - Mf_GetNumAvailableBytes_Func GetNumAvailableBytes; - Mf_GetPointerToCurrentPos_Func GetPointerToCurrentPos; - Mf_GetMatches_Func GetMatches; - Mf_Skip_Func Skip; -} IMatchFinder; - -void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable); - -void MatchFinder_Init(CMatchFinder *p); -UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances); -UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances); -void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num); -void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/LzFindMt.c b/modules/lib7z/LZMASDK/C/LzFindMt.c deleted file mode 100644 index 017c944e5f25..000000000000 --- a/modules/lib7z/LZMASDK/C/LzFindMt.c +++ /dev/null @@ -1,793 +0,0 @@ -/* LzFindMt.c -- multithreaded Match finder for LZ algorithms -2009-05-26 : Igor Pavlov : Public domain */ - -#include "LzHash.h" - -#include "LzFindMt.h" - -void MtSync_Construct(CMtSync *p) -{ - p->wasCreated = False; - p->csWasInitialized = False; - p->csWasEntered = False; - Thread_Construct(&p->thread); - Event_Construct(&p->canStart); - Event_Construct(&p->wasStarted); - Event_Construct(&p->wasStopped); - Semaphore_Construct(&p->freeSemaphore); - Semaphore_Construct(&p->filledSemaphore); -} - -void MtSync_GetNextBlock(CMtSync *p) -{ - if (p->needStart) - { - p->numProcessedBlocks = 1; - p->needStart = False; - p->stopWriting = False; - p->exit = False; - Event_Reset(&p->wasStarted); - Event_Reset(&p->wasStopped); - - Event_Set(&p->canStart); - Event_Wait(&p->wasStarted); - } - else - { - CriticalSection_Leave(&p->cs); - p->csWasEntered = False; - p->numProcessedBlocks++; - Semaphore_Release1(&p->freeSemaphore); - } - Semaphore_Wait(&p->filledSemaphore); - CriticalSection_Enter(&p->cs); - p->csWasEntered = True; -} - -/* MtSync_StopWriting must be called if Writing was started */ - -void MtSync_StopWriting(CMtSync *p) -{ - UInt32 myNumBlocks = p->numProcessedBlocks; - if (!Thread_WasCreated(&p->thread) || p->needStart) - return; - p->stopWriting = True; - if (p->csWasEntered) - { - CriticalSection_Leave(&p->cs); - p->csWasEntered = False; - } - Semaphore_Release1(&p->freeSemaphore); - - Event_Wait(&p->wasStopped); - - while (myNumBlocks++ != p->numProcessedBlocks) - { - Semaphore_Wait(&p->filledSemaphore); - Semaphore_Release1(&p->freeSemaphore); - } - p->needStart = True; -} - -void MtSync_Destruct(CMtSync *p) -{ - if (Thread_WasCreated(&p->thread)) - { - MtSync_StopWriting(p); - p->exit = True; - if (p->needStart) - Event_Set(&p->canStart); - Thread_Wait(&p->thread); - Thread_Close(&p->thread); - } - if (p->csWasInitialized) - { - CriticalSection_Delete(&p->cs); - p->csWasInitialized = False; - } - - Event_Close(&p->canStart); - Event_Close(&p->wasStarted); - Event_Close(&p->wasStopped); - Semaphore_Close(&p->freeSemaphore); - Semaphore_Close(&p->filledSemaphore); - - p->wasCreated = False; -} - -#define RINOK_THREAD(x) { if ((x) != 0) return SZ_ERROR_THREAD; } - -static SRes MtSync_Create2(CMtSync *p, unsigned (MY_STD_CALL *startAddress)(void *), void *obj, UInt32 numBlocks) -{ - if (p->wasCreated) - return SZ_OK; - - RINOK_THREAD(CriticalSection_Init(&p->cs)); - p->csWasInitialized = True; - - RINOK_THREAD(AutoResetEvent_CreateNotSignaled(&p->canStart)); - RINOK_THREAD(AutoResetEvent_CreateNotSignaled(&p->wasStarted)); - RINOK_THREAD(AutoResetEvent_CreateNotSignaled(&p->wasStopped)); - - RINOK_THREAD(Semaphore_Create(&p->freeSemaphore, numBlocks, numBlocks)); - RINOK_THREAD(Semaphore_Create(&p->filledSemaphore, 0, numBlocks)); - - p->needStart = True; - - RINOK_THREAD(Thread_Create(&p->thread, startAddress, obj)); - p->wasCreated = True; - return SZ_OK; -} - -static SRes MtSync_Create(CMtSync *p, unsigned (MY_STD_CALL *startAddress)(void *), void *obj, UInt32 numBlocks) -{ - SRes res = MtSync_Create2(p, startAddress, obj, numBlocks); - if (res != SZ_OK) - MtSync_Destruct(p); - return res; -} - -void MtSync_Init(CMtSync *p) { p->needStart = True; } - -#define kMtMaxValForNormalize 0xFFFFFFFF - -#define DEF_GetHeads2(name, v, action) \ -static void GetHeads ## name(const Byte *p, UInt32 pos, \ -UInt32 *hash, UInt32 hashMask, UInt32 *heads, UInt32 numHeads, const UInt32 *crc) \ -{ action; for (; numHeads != 0; numHeads--) { \ -const UInt32 value = (v); p++; *heads++ = pos - hash[value]; hash[value] = pos++; } } - -#define DEF_GetHeads(name, v) DEF_GetHeads2(name, v, ;) - -DEF_GetHeads2(2, (p[0] | ((UInt32)p[1] << 8)), hashMask = hashMask; crc = crc; ) -DEF_GetHeads(3, (crc[p[0]] ^ p[1] ^ ((UInt32)p[2] << 8)) & hashMask) -DEF_GetHeads(4, (crc[p[0]] ^ p[1] ^ ((UInt32)p[2] << 8) ^ (crc[p[3]] << 5)) & hashMask) -DEF_GetHeads(4b, (crc[p[0]] ^ p[1] ^ ((UInt32)p[2] << 8) ^ ((UInt32)p[3] << 16)) & hashMask) -/* DEF_GetHeads(5, (crc[p[0]] ^ p[1] ^ ((UInt32)p[2] << 8) ^ (crc[p[3]] << 5) ^ (crc[p[4]] << 3)) & hashMask) */ - -void HashThreadFunc(CMatchFinderMt *mt) -{ - CMtSync *p = &mt->hashSync; - for (;;) - { - UInt32 numProcessedBlocks = 0; - Event_Wait(&p->canStart); - Event_Set(&p->wasStarted); - for (;;) - { - if (p->exit) - return; - if (p->stopWriting) - { - p->numProcessedBlocks = numProcessedBlocks; - Event_Set(&p->wasStopped); - break; - } - - { - CMatchFinder *mf = mt->MatchFinder; - if (MatchFinder_NeedMove(mf)) - { - CriticalSection_Enter(&mt->btSync.cs); - CriticalSection_Enter(&mt->hashSync.cs); - { - const Byte *beforePtr = MatchFinder_GetPointerToCurrentPos(mf); - const Byte *afterPtr; - MatchFinder_MoveBlock(mf); - afterPtr = MatchFinder_GetPointerToCurrentPos(mf); - mt->pointerToCurPos -= beforePtr - afterPtr; - mt->buffer -= beforePtr - afterPtr; - } - CriticalSection_Leave(&mt->btSync.cs); - CriticalSection_Leave(&mt->hashSync.cs); - continue; - } - - Semaphore_Wait(&p->freeSemaphore); - - MatchFinder_ReadIfRequired(mf); - if (mf->pos > (kMtMaxValForNormalize - kMtHashBlockSize)) - { - UInt32 subValue = (mf->pos - mf->historySize - 1); - MatchFinder_ReduceOffsets(mf, subValue); - MatchFinder_Normalize3(subValue, mf->hash + mf->fixedHashSize, mf->hashMask + 1); - } - { - UInt32 *heads = mt->hashBuf + ((numProcessedBlocks++) & kMtHashNumBlocksMask) * kMtHashBlockSize; - UInt32 num = mf->streamPos - mf->pos; - heads[0] = 2; - heads[1] = num; - if (num >= mf->numHashBytes) - { - num = num - mf->numHashBytes + 1; - if (num > kMtHashBlockSize - 2) - num = kMtHashBlockSize - 2; - mt->GetHeadsFunc(mf->buffer, mf->pos, mf->hash + mf->fixedHashSize, mf->hashMask, heads + 2, num, mf->crc); - heads[0] += num; - } - mf->pos += num; - mf->buffer += num; - } - } - - Semaphore_Release1(&p->filledSemaphore); - } - } -} - -void MatchFinderMt_GetNextBlock_Hash(CMatchFinderMt *p) -{ - MtSync_GetNextBlock(&p->hashSync); - p->hashBufPosLimit = p->hashBufPos = ((p->hashSync.numProcessedBlocks - 1) & kMtHashNumBlocksMask) * kMtHashBlockSize; - p->hashBufPosLimit += p->hashBuf[p->hashBufPos++]; - p->hashNumAvail = p->hashBuf[p->hashBufPos++]; -} - -#define kEmptyHashValue 0 - -/* #define MFMT_GM_INLINE */ - -#ifdef MFMT_GM_INLINE - -#define NO_INLINE MY_FAST_CALL - -Int32 NO_INLINE GetMatchesSpecN(UInt32 lenLimit, UInt32 pos, const Byte *cur, CLzRef *son, - UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue, - UInt32 *_distances, UInt32 _maxLen, const UInt32 *hash, Int32 limit, UInt32 size, UInt32 *posRes) -{ - do - { - UInt32 *distances = _distances + 1; - UInt32 curMatch = pos - *hash++; - - CLzRef *ptr0 = son + (_cyclicBufferPos << 1) + 1; - CLzRef *ptr1 = son + (_cyclicBufferPos << 1); - UInt32 len0 = 0, len1 = 0; - UInt32 cutValue = _cutValue; - UInt32 maxLen = _maxLen; - for (;;) - { - UInt32 delta = pos - curMatch; - if (cutValue-- == 0 || delta >= _cyclicBufferSize) - { - *ptr0 = *ptr1 = kEmptyHashValue; - break; - } - { - CLzRef *pair = son + ((_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); - const Byte *pb = cur - delta; - UInt32 len = (len0 < len1 ? len0 : len1); - if (pb[len] == cur[len]) - { - if (++len != lenLimit && pb[len] == cur[len]) - while (++len != lenLimit) - if (pb[len] != cur[len]) - break; - if (maxLen < len) - { - *distances++ = maxLen = len; - *distances++ = delta - 1; - if (len == lenLimit) - { - *ptr1 = pair[0]; - *ptr0 = pair[1]; - break; - } - } - } - if (pb[len] < cur[len]) - { - *ptr1 = curMatch; - ptr1 = pair + 1; - curMatch = *ptr1; - len1 = len; - } - else - { - *ptr0 = curMatch; - ptr0 = pair; - curMatch = *ptr0; - len0 = len; - } - } - } - pos++; - _cyclicBufferPos++; - cur++; - { - UInt32 num = (UInt32)(distances - _distances); - *_distances = num - 1; - _distances += num; - limit -= num; - } - } - while (limit > 0 && --size != 0); - *posRes = pos; - return limit; -} - -#endif - -void BtGetMatches(CMatchFinderMt *p, UInt32 *distances) -{ - UInt32 numProcessed = 0; - UInt32 curPos = 2; - UInt32 limit = kMtBtBlockSize - (p->matchMaxLen * 2); - distances[1] = p->hashNumAvail; - while (curPos < limit) - { - if (p->hashBufPos == p->hashBufPosLimit) - { - MatchFinderMt_GetNextBlock_Hash(p); - distances[1] = numProcessed + p->hashNumAvail; - if (p->hashNumAvail >= p->numHashBytes) - continue; - for (; p->hashNumAvail != 0; p->hashNumAvail--) - distances[curPos++] = 0; - break; - } - { - UInt32 size = p->hashBufPosLimit - p->hashBufPos; - UInt32 lenLimit = p->matchMaxLen; - UInt32 pos = p->pos; - UInt32 cyclicBufferPos = p->cyclicBufferPos; - if (lenLimit >= p->hashNumAvail) - lenLimit = p->hashNumAvail; - { - UInt32 size2 = p->hashNumAvail - lenLimit + 1; - if (size2 < size) - size = size2; - size2 = p->cyclicBufferSize - cyclicBufferPos; - if (size2 < size) - size = size2; - } - #ifndef MFMT_GM_INLINE - while (curPos < limit && size-- != 0) - { - UInt32 *startDistances = distances + curPos; - UInt32 num = (UInt32)(GetMatchesSpec1(lenLimit, pos - p->hashBuf[p->hashBufPos++], - pos, p->buffer, p->son, cyclicBufferPos, p->cyclicBufferSize, p->cutValue, - startDistances + 1, p->numHashBytes - 1) - startDistances); - *startDistances = num - 1; - curPos += num; - cyclicBufferPos++; - pos++; - p->buffer++; - } - #else - { - UInt32 posRes; - curPos = limit - GetMatchesSpecN(lenLimit, pos, p->buffer, p->son, cyclicBufferPos, p->cyclicBufferSize, p->cutValue, - distances + curPos, p->numHashBytes - 1, p->hashBuf + p->hashBufPos, (Int32)(limit - curPos) , size, &posRes); - p->hashBufPos += posRes - pos; - cyclicBufferPos += posRes - pos; - p->buffer += posRes - pos; - pos = posRes; - } - #endif - - numProcessed += pos - p->pos; - p->hashNumAvail -= pos - p->pos; - p->pos = pos; - if (cyclicBufferPos == p->cyclicBufferSize) - cyclicBufferPos = 0; - p->cyclicBufferPos = cyclicBufferPos; - } - } - distances[0] = curPos; -} - -void BtFillBlock(CMatchFinderMt *p, UInt32 globalBlockIndex) -{ - CMtSync *sync = &p->hashSync; - if (!sync->needStart) - { - CriticalSection_Enter(&sync->cs); - sync->csWasEntered = True; - } - - BtGetMatches(p, p->btBuf + (globalBlockIndex & kMtBtNumBlocksMask) * kMtBtBlockSize); - - if (p->pos > kMtMaxValForNormalize - kMtBtBlockSize) - { - UInt32 subValue = p->pos - p->cyclicBufferSize; - MatchFinder_Normalize3(subValue, p->son, p->cyclicBufferSize * 2); - p->pos -= subValue; - } - - if (!sync->needStart) - { - CriticalSection_Leave(&sync->cs); - sync->csWasEntered = False; - } -} - -void BtThreadFunc(CMatchFinderMt *mt) -{ - CMtSync *p = &mt->btSync; - for (;;) - { - UInt32 blockIndex = 0; - Event_Wait(&p->canStart); - Event_Set(&p->wasStarted); - for (;;) - { - if (p->exit) - return; - if (p->stopWriting) - { - p->numProcessedBlocks = blockIndex; - MtSync_StopWriting(&mt->hashSync); - Event_Set(&p->wasStopped); - break; - } - Semaphore_Wait(&p->freeSemaphore); - BtFillBlock(mt, blockIndex++); - Semaphore_Release1(&p->filledSemaphore); - } - } -} - -void MatchFinderMt_Construct(CMatchFinderMt *p) -{ - p->hashBuf = 0; - MtSync_Construct(&p->hashSync); - MtSync_Construct(&p->btSync); -} - -void MatchFinderMt_FreeMem(CMatchFinderMt *p, ISzAlloc *alloc) -{ - alloc->Free(alloc, p->hashBuf); - p->hashBuf = 0; -} - -void MatchFinderMt_Destruct(CMatchFinderMt *p, ISzAlloc *alloc) -{ - MtSync_Destruct(&p->hashSync); - MtSync_Destruct(&p->btSync); - MatchFinderMt_FreeMem(p, alloc); -} - -#define kHashBufferSize (kMtHashBlockSize * kMtHashNumBlocks) -#define kBtBufferSize (kMtBtBlockSize * kMtBtNumBlocks) - -static unsigned MY_STD_CALL HashThreadFunc2(void *p) { HashThreadFunc((CMatchFinderMt *)p); return 0; } -static unsigned MY_STD_CALL BtThreadFunc2(void *p) -{ - Byte allocaDummy[0x180]; - int i = 0; - for (i = 0; i < 16; i++) - allocaDummy[i] = (Byte)i; - BtThreadFunc((CMatchFinderMt *)p); - return 0; -} - -SRes MatchFinderMt_Create(CMatchFinderMt *p, UInt32 historySize, UInt32 keepAddBufferBefore, - UInt32 matchMaxLen, UInt32 keepAddBufferAfter, ISzAlloc *alloc) -{ - CMatchFinder *mf = p->MatchFinder; - p->historySize = historySize; - if (kMtBtBlockSize <= matchMaxLen * 4) - return SZ_ERROR_PARAM; - if (p->hashBuf == 0) - { - p->hashBuf = (UInt32 *)alloc->Alloc(alloc, (kHashBufferSize + kBtBufferSize) * sizeof(UInt32)); - if (p->hashBuf == 0) - return SZ_ERROR_MEM; - p->btBuf = p->hashBuf + kHashBufferSize; - } - keepAddBufferBefore += (kHashBufferSize + kBtBufferSize); - keepAddBufferAfter += kMtHashBlockSize; - if (!MatchFinder_Create(mf, historySize, keepAddBufferBefore, matchMaxLen, keepAddBufferAfter, alloc)) - return SZ_ERROR_MEM; - - RINOK(MtSync_Create(&p->hashSync, HashThreadFunc2, p, kMtHashNumBlocks)); - RINOK(MtSync_Create(&p->btSync, BtThreadFunc2, p, kMtBtNumBlocks)); - return SZ_OK; -} - -/* Call it after ReleaseStream / SetStream */ -void MatchFinderMt_Init(CMatchFinderMt *p) -{ - CMatchFinder *mf = p->MatchFinder; - p->btBufPos = p->btBufPosLimit = 0; - p->hashBufPos = p->hashBufPosLimit = 0; - MatchFinder_Init(mf); - p->pointerToCurPos = MatchFinder_GetPointerToCurrentPos(mf); - p->btNumAvailBytes = 0; - p->lzPos = p->historySize + 1; - - p->hash = mf->hash; - p->fixedHashSize = mf->fixedHashSize; - p->crc = mf->crc; - - p->son = mf->son; - p->matchMaxLen = mf->matchMaxLen; - p->numHashBytes = mf->numHashBytes; - p->pos = mf->pos; - p->buffer = mf->buffer; - p->cyclicBufferPos = mf->cyclicBufferPos; - p->cyclicBufferSize = mf->cyclicBufferSize; - p->cutValue = mf->cutValue; -} - -/* ReleaseStream is required to finish multithreading */ -void MatchFinderMt_ReleaseStream(CMatchFinderMt *p) -{ - MtSync_StopWriting(&p->btSync); - /* p->MatchFinder->ReleaseStream(); */ -} - -void MatchFinderMt_Normalize(CMatchFinderMt *p) -{ - MatchFinder_Normalize3(p->lzPos - p->historySize - 1, p->hash, p->fixedHashSize); - p->lzPos = p->historySize + 1; -} - -void MatchFinderMt_GetNextBlock_Bt(CMatchFinderMt *p) -{ - UInt32 blockIndex; - MtSync_GetNextBlock(&p->btSync); - blockIndex = ((p->btSync.numProcessedBlocks - 1) & kMtBtNumBlocksMask); - p->btBufPosLimit = p->btBufPos = blockIndex * kMtBtBlockSize; - p->btBufPosLimit += p->btBuf[p->btBufPos++]; - p->btNumAvailBytes = p->btBuf[p->btBufPos++]; - if (p->lzPos >= kMtMaxValForNormalize - kMtBtBlockSize) - MatchFinderMt_Normalize(p); -} - -const Byte * MatchFinderMt_GetPointerToCurrentPos(CMatchFinderMt *p) -{ - return p->pointerToCurPos; -} - -#define GET_NEXT_BLOCK_IF_REQUIRED if (p->btBufPos == p->btBufPosLimit) MatchFinderMt_GetNextBlock_Bt(p); - -UInt32 MatchFinderMt_GetNumAvailableBytes(CMatchFinderMt *p) -{ - GET_NEXT_BLOCK_IF_REQUIRED; - return p->btNumAvailBytes; -} - -Byte MatchFinderMt_GetIndexByte(CMatchFinderMt *p, Int32 index) -{ - return p->pointerToCurPos[index]; -} - -UInt32 * MixMatches2(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *distances) -{ - UInt32 hash2Value, curMatch2; - UInt32 *hash = p->hash; - const Byte *cur = p->pointerToCurPos; - UInt32 lzPos = p->lzPos; - MT_HASH2_CALC - - curMatch2 = hash[hash2Value]; - hash[hash2Value] = lzPos; - - if (curMatch2 >= matchMinPos) - if (cur[(ptrdiff_t)curMatch2 - lzPos] == cur[0]) - { - *distances++ = 2; - *distances++ = lzPos - curMatch2 - 1; - } - return distances; -} - -UInt32 * MixMatches3(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *distances) -{ - UInt32 hash2Value, hash3Value, curMatch2, curMatch3; - UInt32 *hash = p->hash; - const Byte *cur = p->pointerToCurPos; - UInt32 lzPos = p->lzPos; - MT_HASH3_CALC - - curMatch2 = hash[ hash2Value]; - curMatch3 = hash[kFix3HashSize + hash3Value]; - - hash[ hash2Value] = - hash[kFix3HashSize + hash3Value] = - lzPos; - - if (curMatch2 >= matchMinPos && cur[(ptrdiff_t)curMatch2 - lzPos] == cur[0]) - { - distances[1] = lzPos - curMatch2 - 1; - if (cur[(ptrdiff_t)curMatch2 - lzPos + 2] == cur[2]) - { - distances[0] = 3; - return distances + 2; - } - distances[0] = 2; - distances += 2; - } - if (curMatch3 >= matchMinPos && cur[(ptrdiff_t)curMatch3 - lzPos] == cur[0]) - { - *distances++ = 3; - *distances++ = lzPos - curMatch3 - 1; - } - return distances; -} - -/* -UInt32 *MixMatches4(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *distances) -{ - UInt32 hash2Value, hash3Value, hash4Value, curMatch2, curMatch3, curMatch4; - UInt32 *hash = p->hash; - const Byte *cur = p->pointerToCurPos; - UInt32 lzPos = p->lzPos; - MT_HASH4_CALC - - curMatch2 = hash[ hash2Value]; - curMatch3 = hash[kFix3HashSize + hash3Value]; - curMatch4 = hash[kFix4HashSize + hash4Value]; - - hash[ hash2Value] = - hash[kFix3HashSize + hash3Value] = - hash[kFix4HashSize + hash4Value] = - lzPos; - - if (curMatch2 >= matchMinPos && cur[(ptrdiff_t)curMatch2 - lzPos] == cur[0]) - { - distances[1] = lzPos - curMatch2 - 1; - if (cur[(ptrdiff_t)curMatch2 - lzPos + 2] == cur[2]) - { - distances[0] = (cur[(ptrdiff_t)curMatch2 - lzPos + 3] == cur[3]) ? 4 : 3; - return distances + 2; - } - distances[0] = 2; - distances += 2; - } - if (curMatch3 >= matchMinPos && cur[(ptrdiff_t)curMatch3 - lzPos] == cur[0]) - { - distances[1] = lzPos - curMatch3 - 1; - if (cur[(ptrdiff_t)curMatch3 - lzPos + 3] == cur[3]) - { - distances[0] = 4; - return distances + 2; - } - distances[0] = 3; - distances += 2; - } - - if (curMatch4 >= matchMinPos) - if ( - cur[(ptrdiff_t)curMatch4 - lzPos] == cur[0] && - cur[(ptrdiff_t)curMatch4 - lzPos + 3] == cur[3] - ) - { - *distances++ = 4; - *distances++ = lzPos - curMatch4 - 1; - } - return distances; -} -*/ - -#define INCREASE_LZ_POS p->lzPos++; p->pointerToCurPos++; - -UInt32 MatchFinderMt2_GetMatches(CMatchFinderMt *p, UInt32 *distances) -{ - const UInt32 *btBuf = p->btBuf + p->btBufPos; - UInt32 len = *btBuf++; - p->btBufPos += 1 + len; - p->btNumAvailBytes--; - { - UInt32 i; - for (i = 0; i < len; i += 2) - { - *distances++ = *btBuf++; - *distances++ = *btBuf++; - } - } - INCREASE_LZ_POS - return len; -} - -UInt32 MatchFinderMt_GetMatches(CMatchFinderMt *p, UInt32 *distances) -{ - const UInt32 *btBuf = p->btBuf + p->btBufPos; - UInt32 len = *btBuf++; - p->btBufPos += 1 + len; - - if (len == 0) - { - if (p->btNumAvailBytes-- >= 4) - len = (UInt32)(p->MixMatchesFunc(p, p->lzPos - p->historySize, distances) - (distances)); - } - else - { - /* Condition: there are matches in btBuf with length < p->numHashBytes */ - UInt32 *distances2; - p->btNumAvailBytes--; - distances2 = p->MixMatchesFunc(p, p->lzPos - btBuf[1], distances); - do - { - *distances2++ = *btBuf++; - *distances2++ = *btBuf++; - } - while ((len -= 2) != 0); - len = (UInt32)(distances2 - (distances)); - } - INCREASE_LZ_POS - return len; -} - -#define SKIP_HEADER2 do { GET_NEXT_BLOCK_IF_REQUIRED -#define SKIP_HEADER(n) SKIP_HEADER2 if (p->btNumAvailBytes-- >= (n)) { const Byte *cur = p->pointerToCurPos; UInt32 *hash = p->hash; -#define SKIP_FOOTER } INCREASE_LZ_POS p->btBufPos += p->btBuf[p->btBufPos] + 1; } while (--num != 0); - -void MatchFinderMt0_Skip(CMatchFinderMt *p, UInt32 num) -{ - SKIP_HEADER2 { p->btNumAvailBytes--; - SKIP_FOOTER -} - -void MatchFinderMt2_Skip(CMatchFinderMt *p, UInt32 num) -{ - SKIP_HEADER(2) - UInt32 hash2Value; - MT_HASH2_CALC - hash[hash2Value] = p->lzPos; - SKIP_FOOTER -} - -void MatchFinderMt3_Skip(CMatchFinderMt *p, UInt32 num) -{ - SKIP_HEADER(3) - UInt32 hash2Value, hash3Value; - MT_HASH3_CALC - hash[kFix3HashSize + hash3Value] = - hash[ hash2Value] = - p->lzPos; - SKIP_FOOTER -} - -/* -void MatchFinderMt4_Skip(CMatchFinderMt *p, UInt32 num) -{ - SKIP_HEADER(4) - UInt32 hash2Value, hash3Value, hash4Value; - MT_HASH4_CALC - hash[kFix4HashSize + hash4Value] = - hash[kFix3HashSize + hash3Value] = - hash[ hash2Value] = - p->lzPos; - SKIP_FOOTER -} -*/ - -void MatchFinderMt_CreateVTable(CMatchFinderMt *p, IMatchFinder *vTable) -{ - vTable->Init = (Mf_Init_Func)MatchFinderMt_Init; - vTable->GetIndexByte = (Mf_GetIndexByte_Func)MatchFinderMt_GetIndexByte; - vTable->GetNumAvailableBytes = (Mf_GetNumAvailableBytes_Func)MatchFinderMt_GetNumAvailableBytes; - vTable->GetPointerToCurrentPos = (Mf_GetPointerToCurrentPos_Func)MatchFinderMt_GetPointerToCurrentPos; - vTable->GetMatches = (Mf_GetMatches_Func)MatchFinderMt_GetMatches; - switch(p->MatchFinder->numHashBytes) - { - case 2: - p->GetHeadsFunc = GetHeads2; - p->MixMatchesFunc = (Mf_Mix_Matches)0; - vTable->Skip = (Mf_Skip_Func)MatchFinderMt0_Skip; - vTable->GetMatches = (Mf_GetMatches_Func)MatchFinderMt2_GetMatches; - break; - case 3: - p->GetHeadsFunc = GetHeads3; - p->MixMatchesFunc = (Mf_Mix_Matches)MixMatches2; - vTable->Skip = (Mf_Skip_Func)MatchFinderMt2_Skip; - break; - default: - /* case 4: */ - p->GetHeadsFunc = p->MatchFinder->bigHash ? GetHeads4b : GetHeads4; - /* p->GetHeadsFunc = GetHeads4; */ - p->MixMatchesFunc = (Mf_Mix_Matches)MixMatches3; - vTable->Skip = (Mf_Skip_Func)MatchFinderMt3_Skip; - break; - /* - default: - p->GetHeadsFunc = GetHeads5; - p->MixMatchesFunc = (Mf_Mix_Matches)MixMatches4; - vTable->Skip = (Mf_Skip_Func)MatchFinderMt4_Skip; - break; - */ - } -} diff --git a/modules/lib7z/LZMASDK/C/LzFindMt.h b/modules/lib7z/LZMASDK/C/LzFindMt.h deleted file mode 100644 index 17ed237d64b1..000000000000 --- a/modules/lib7z/LZMASDK/C/LzFindMt.h +++ /dev/null @@ -1,105 +0,0 @@ -/* LzFindMt.h -- multithreaded Match finder for LZ algorithms -2009-02-07 : Igor Pavlov : Public domain */ - -#ifndef __LZ_FIND_MT_H -#define __LZ_FIND_MT_H - -#include "LzFind.h" -#include "Threads.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define kMtHashBlockSize (1 << 13) -#define kMtHashNumBlocks (1 << 3) -#define kMtHashNumBlocksMask (kMtHashNumBlocks - 1) - -#define kMtBtBlockSize (1 << 14) -#define kMtBtNumBlocks (1 << 6) -#define kMtBtNumBlocksMask (kMtBtNumBlocks - 1) - -typedef struct _CMtSync -{ - Bool wasCreated; - Bool needStart; - Bool exit; - Bool stopWriting; - - CThread thread; - CAutoResetEvent canStart; - CAutoResetEvent wasStarted; - CAutoResetEvent wasStopped; - CSemaphore freeSemaphore; - CSemaphore filledSemaphore; - Bool csWasInitialized; - Bool csWasEntered; - CCriticalSection cs; - UInt32 numProcessedBlocks; -} CMtSync; - -typedef UInt32 * (*Mf_Mix_Matches)(void *p, UInt32 matchMinPos, UInt32 *distances); - -/* kMtCacheLineDummy must be >= size_of_CPU_cache_line */ -#define kMtCacheLineDummy 128 - -typedef void (*Mf_GetHeads)(const Byte *buffer, UInt32 pos, - UInt32 *hash, UInt32 hashMask, UInt32 *heads, UInt32 numHeads, const UInt32 *crc); - -typedef struct _CMatchFinderMt -{ - /* LZ */ - const Byte *pointerToCurPos; - UInt32 *btBuf; - UInt32 btBufPos; - UInt32 btBufPosLimit; - UInt32 lzPos; - UInt32 btNumAvailBytes; - - UInt32 *hash; - UInt32 fixedHashSize; - UInt32 historySize; - const UInt32 *crc; - - Mf_Mix_Matches MixMatchesFunc; - - /* LZ + BT */ - CMtSync btSync; - Byte btDummy[kMtCacheLineDummy]; - - /* BT */ - UInt32 *hashBuf; - UInt32 hashBufPos; - UInt32 hashBufPosLimit; - UInt32 hashNumAvail; - - CLzRef *son; - UInt32 matchMaxLen; - UInt32 numHashBytes; - UInt32 pos; - Byte *buffer; - UInt32 cyclicBufferPos; - UInt32 cyclicBufferSize; /* it must be historySize + 1 */ - UInt32 cutValue; - - /* BT + Hash */ - CMtSync hashSync; - /* Byte hashDummy[kMtCacheLineDummy]; */ - - /* Hash */ - Mf_GetHeads GetHeadsFunc; - CMatchFinder *MatchFinder; -} CMatchFinderMt; - -void MatchFinderMt_Construct(CMatchFinderMt *p); -void MatchFinderMt_Destruct(CMatchFinderMt *p, ISzAlloc *alloc); -SRes MatchFinderMt_Create(CMatchFinderMt *p, UInt32 historySize, UInt32 keepAddBufferBefore, - UInt32 matchMaxLen, UInt32 keepAddBufferAfter, ISzAlloc *alloc); -void MatchFinderMt_CreateVTable(CMatchFinderMt *p, IMatchFinder *vTable); -void MatchFinderMt_ReleaseStream(CMatchFinderMt *p); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/LzHash.h b/modules/lib7z/LZMASDK/C/LzHash.h deleted file mode 100644 index b2f0e3c24557..000000000000 --- a/modules/lib7z/LZMASDK/C/LzHash.h +++ /dev/null @@ -1,54 +0,0 @@ -/* LzHash.h -- HASH functions for LZ algorithms -2009-02-07 : Igor Pavlov : Public domain */ - -#ifndef __LZ_HASH_H -#define __LZ_HASH_H - -#define kHash2Size (1 << 10) -#define kHash3Size (1 << 16) -#define kHash4Size (1 << 20) - -#define kFix3HashSize (kHash2Size) -#define kFix4HashSize (kHash2Size + kHash3Size) -#define kFix5HashSize (kHash2Size + kHash3Size + kHash4Size) - -#define HASH2_CALC hashValue = cur[0] | ((UInt32)cur[1] << 8); - -#define HASH3_CALC { \ - UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ - hash2Value = temp & (kHash2Size - 1); \ - hashValue = (temp ^ ((UInt32)cur[2] << 8)) & p->hashMask; } - -#define HASH4_CALC { \ - UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ - hash2Value = temp & (kHash2Size - 1); \ - hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \ - hashValue = (temp ^ ((UInt32)cur[2] << 8) ^ (p->crc[cur[3]] << 5)) & p->hashMask; } - -#define HASH5_CALC { \ - UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ - hash2Value = temp & (kHash2Size - 1); \ - hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \ - hash4Value = (temp ^ ((UInt32)cur[2] << 8) ^ (p->crc[cur[3]] << 5)); \ - hashValue = (hash4Value ^ (p->crc[cur[4]] << 3)) & p->hashMask; \ - hash4Value &= (kHash4Size - 1); } - -/* #define HASH_ZIP_CALC hashValue = ((cur[0] | ((UInt32)cur[1] << 8)) ^ p->crc[cur[2]]) & 0xFFFF; */ -#define HASH_ZIP_CALC hashValue = ((cur[2] | ((UInt32)cur[0] << 8)) ^ p->crc[cur[1]]) & 0xFFFF; - - -#define MT_HASH2_CALC \ - hash2Value = (p->crc[cur[0]] ^ cur[1]) & (kHash2Size - 1); - -#define MT_HASH3_CALC { \ - UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ - hash2Value = temp & (kHash2Size - 1); \ - hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); } - -#define MT_HASH4_CALC { \ - UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ - hash2Value = temp & (kHash2Size - 1); \ - hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \ - hash4Value = (temp ^ ((UInt32)cur[2] << 8) ^ (p->crc[cur[3]] << 5)) & (kHash4Size - 1); } - -#endif diff --git a/modules/lib7z/LZMASDK/C/Lzma2Dec.c b/modules/lib7z/LZMASDK/C/Lzma2Dec.c deleted file mode 100644 index 8f2406755638..000000000000 --- a/modules/lib7z/LZMASDK/C/Lzma2Dec.c +++ /dev/null @@ -1,356 +0,0 @@ -/* Lzma2Dec.c -- LZMA2 Decoder -2009-05-03 : Igor Pavlov : Public domain */ - -/* #define SHOW_DEBUG_INFO */ - -#ifdef SHOW_DEBUG_INFO -#include -#endif - -#include - -#include "Lzma2Dec.h" - -/* -00000000 - EOS -00000001 U U - Uncompressed Reset Dic -00000010 U U - Uncompressed No Reset -100uuuuu U U P P - LZMA no reset -101uuuuu U U P P - LZMA reset state -110uuuuu U U P P S - LZMA reset state + new prop -111uuuuu U U P P S - LZMA reset state + new prop + reset dic - - u, U - Unpack Size - P - Pack Size - S - Props -*/ - -#define LZMA2_CONTROL_LZMA (1 << 7) -#define LZMA2_CONTROL_COPY_NO_RESET 2 -#define LZMA2_CONTROL_COPY_RESET_DIC 1 -#define LZMA2_CONTROL_EOF 0 - -#define LZMA2_IS_UNCOMPRESSED_STATE(p) (((p)->control & LZMA2_CONTROL_LZMA) == 0) - -#define LZMA2_GET_LZMA_MODE(p) (((p)->control >> 5) & 3) -#define LZMA2_IS_THERE_PROP(mode) ((mode) >= 2) - -#define LZMA2_LCLP_MAX 4 -#define LZMA2_DIC_SIZE_FROM_PROP(p) (((UInt32)2 | ((p) & 1)) << ((p) / 2 + 11)) - -#ifdef SHOW_DEBUG_INFO -#define PRF(x) x -#else -#define PRF(x) -#endif - -typedef enum -{ - LZMA2_STATE_CONTROL, - LZMA2_STATE_UNPACK0, - LZMA2_STATE_UNPACK1, - LZMA2_STATE_PACK0, - LZMA2_STATE_PACK1, - LZMA2_STATE_PROP, - LZMA2_STATE_DATA, - LZMA2_STATE_DATA_CONT, - LZMA2_STATE_FINISHED, - LZMA2_STATE_ERROR -} ELzma2State; - -static SRes Lzma2Dec_GetOldProps(Byte prop, Byte *props) -{ - UInt32 dicSize; - if (prop > 40) - return SZ_ERROR_UNSUPPORTED; - dicSize = (prop == 40) ? 0xFFFFFFFF : LZMA2_DIC_SIZE_FROM_PROP(prop); - props[0] = (Byte)LZMA2_LCLP_MAX; - props[1] = (Byte)(dicSize); - props[2] = (Byte)(dicSize >> 8); - props[3] = (Byte)(dicSize >> 16); - props[4] = (Byte)(dicSize >> 24); - return SZ_OK; -} - -SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAlloc *alloc) -{ - Byte props[LZMA_PROPS_SIZE]; - RINOK(Lzma2Dec_GetOldProps(prop, props)); - return LzmaDec_AllocateProbs(&p->decoder, props, LZMA_PROPS_SIZE, alloc); -} - -SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAlloc *alloc) -{ - Byte props[LZMA_PROPS_SIZE]; - RINOK(Lzma2Dec_GetOldProps(prop, props)); - return LzmaDec_Allocate(&p->decoder, props, LZMA_PROPS_SIZE, alloc); -} - -void Lzma2Dec_Init(CLzma2Dec *p) -{ - p->state = LZMA2_STATE_CONTROL; - p->needInitDic = True; - p->needInitState = True; - p->needInitProp = True; - LzmaDec_Init(&p->decoder); -} - -static ELzma2State Lzma2Dec_UpdateState(CLzma2Dec *p, Byte b) -{ - switch(p->state) - { - case LZMA2_STATE_CONTROL: - p->control = b; - PRF(printf("\n %4X ", p->decoder.dicPos)); - PRF(printf(" %2X", b)); - if (p->control == 0) - return LZMA2_STATE_FINISHED; - if (LZMA2_IS_UNCOMPRESSED_STATE(p)) - { - if ((p->control & 0x7F) > 2) - return LZMA2_STATE_ERROR; - p->unpackSize = 0; - } - else - p->unpackSize = (UInt32)(p->control & 0x1F) << 16; - return LZMA2_STATE_UNPACK0; - - case LZMA2_STATE_UNPACK0: - p->unpackSize |= (UInt32)b << 8; - return LZMA2_STATE_UNPACK1; - - case LZMA2_STATE_UNPACK1: - p->unpackSize |= (UInt32)b; - p->unpackSize++; - PRF(printf(" %8d", p->unpackSize)); - return (LZMA2_IS_UNCOMPRESSED_STATE(p)) ? LZMA2_STATE_DATA : LZMA2_STATE_PACK0; - - case LZMA2_STATE_PACK0: - p->packSize = (UInt32)b << 8; - return LZMA2_STATE_PACK1; - - case LZMA2_STATE_PACK1: - p->packSize |= (UInt32)b; - p->packSize++; - PRF(printf(" %8d", p->packSize)); - return LZMA2_IS_THERE_PROP(LZMA2_GET_LZMA_MODE(p)) ? LZMA2_STATE_PROP: - (p->needInitProp ? LZMA2_STATE_ERROR : LZMA2_STATE_DATA); - - case LZMA2_STATE_PROP: - { - int lc, lp; - if (b >= (9 * 5 * 5)) - return LZMA2_STATE_ERROR; - lc = b % 9; - b /= 9; - p->decoder.prop.pb = b / 5; - lp = b % 5; - if (lc + lp > LZMA2_LCLP_MAX) - return LZMA2_STATE_ERROR; - p->decoder.prop.lc = lc; - p->decoder.prop.lp = lp; - p->needInitProp = False; - return LZMA2_STATE_DATA; - } - } - return LZMA2_STATE_ERROR; -} - -static void LzmaDec_UpdateWithUncompressed(CLzmaDec *p, const Byte *src, SizeT size) -{ - memcpy(p->dic + p->dicPos, src, size); - p->dicPos += size; - if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= size) - p->checkDicSize = p->prop.dicSize; - p->processedPos += (UInt32)size; -} - -void LzmaDec_InitDicAndState(CLzmaDec *p, Bool initDic, Bool initState); - -SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit, - const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status) -{ - SizeT inSize = *srcLen; - *srcLen = 0; - *status = LZMA_STATUS_NOT_SPECIFIED; - - while (p->state != LZMA2_STATE_FINISHED) - { - SizeT dicPos = p->decoder.dicPos; - if (p->state == LZMA2_STATE_ERROR) - return SZ_ERROR_DATA; - if (dicPos == dicLimit && finishMode == LZMA_FINISH_ANY) - { - *status = LZMA_STATUS_NOT_FINISHED; - return SZ_OK; - } - if (p->state != LZMA2_STATE_DATA && p->state != LZMA2_STATE_DATA_CONT) - { - if (*srcLen == inSize) - { - *status = LZMA_STATUS_NEEDS_MORE_INPUT; - return SZ_OK; - } - (*srcLen)++; - p->state = Lzma2Dec_UpdateState(p, *src++); - continue; - } - { - SizeT destSizeCur = dicLimit - dicPos; - SizeT srcSizeCur = inSize - *srcLen; - ELzmaFinishMode curFinishMode = LZMA_FINISH_ANY; - - if (p->unpackSize <= destSizeCur) - { - destSizeCur = (SizeT)p->unpackSize; - curFinishMode = LZMA_FINISH_END; - } - - if (LZMA2_IS_UNCOMPRESSED_STATE(p)) - { - if (*srcLen == inSize) - { - *status = LZMA_STATUS_NEEDS_MORE_INPUT; - return SZ_OK; - } - - if (p->state == LZMA2_STATE_DATA) - { - Bool initDic = (p->control == LZMA2_CONTROL_COPY_RESET_DIC); - if (initDic) - p->needInitProp = p->needInitState = True; - else if (p->needInitDic) - return SZ_ERROR_DATA; - p->needInitDic = False; - LzmaDec_InitDicAndState(&p->decoder, initDic, False); - } - - if (srcSizeCur > destSizeCur) - srcSizeCur = destSizeCur; - - if (srcSizeCur == 0) - return SZ_ERROR_DATA; - - LzmaDec_UpdateWithUncompressed(&p->decoder, src, srcSizeCur); - - src += srcSizeCur; - *srcLen += srcSizeCur; - p->unpackSize -= (UInt32)srcSizeCur; - p->state = (p->unpackSize == 0) ? LZMA2_STATE_CONTROL : LZMA2_STATE_DATA_CONT; - } - else - { - SizeT outSizeProcessed; - SRes res; - - if (p->state == LZMA2_STATE_DATA) - { - int mode = LZMA2_GET_LZMA_MODE(p); - Bool initDic = (mode == 3); - Bool initState = (mode > 0); - if ((!initDic && p->needInitDic) || (!initState && p->needInitState)) - return SZ_ERROR_DATA; - - LzmaDec_InitDicAndState(&p->decoder, initDic, initState); - p->needInitDic = False; - p->needInitState = False; - p->state = LZMA2_STATE_DATA_CONT; - } - if (srcSizeCur > p->packSize) - srcSizeCur = (SizeT)p->packSize; - - res = LzmaDec_DecodeToDic(&p->decoder, dicPos + destSizeCur, src, &srcSizeCur, curFinishMode, status); - - src += srcSizeCur; - *srcLen += srcSizeCur; - p->packSize -= (UInt32)srcSizeCur; - - outSizeProcessed = p->decoder.dicPos - dicPos; - p->unpackSize -= (UInt32)outSizeProcessed; - - RINOK(res); - if (*status == LZMA_STATUS_NEEDS_MORE_INPUT) - return res; - - if (srcSizeCur == 0 && outSizeProcessed == 0) - { - if (*status != LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK || - p->unpackSize != 0 || p->packSize != 0) - return SZ_ERROR_DATA; - p->state = LZMA2_STATE_CONTROL; - } - if (*status == LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK) - *status = LZMA_STATUS_NOT_FINISHED; - } - } - } - *status = LZMA_STATUS_FINISHED_WITH_MARK; - return SZ_OK; -} - -SRes Lzma2Dec_DecodeToBuf(CLzma2Dec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status) -{ - SizeT outSize = *destLen, inSize = *srcLen; - *srcLen = *destLen = 0; - for (;;) - { - SizeT srcSizeCur = inSize, outSizeCur, dicPos; - ELzmaFinishMode curFinishMode; - SRes res; - if (p->decoder.dicPos == p->decoder.dicBufSize) - p->decoder.dicPos = 0; - dicPos = p->decoder.dicPos; - if (outSize > p->decoder.dicBufSize - dicPos) - { - outSizeCur = p->decoder.dicBufSize; - curFinishMode = LZMA_FINISH_ANY; - } - else - { - outSizeCur = dicPos + outSize; - curFinishMode = finishMode; - } - - res = Lzma2Dec_DecodeToDic(p, outSizeCur, src, &srcSizeCur, curFinishMode, status); - src += srcSizeCur; - inSize -= srcSizeCur; - *srcLen += srcSizeCur; - outSizeCur = p->decoder.dicPos - dicPos; - memcpy(dest, p->decoder.dic + dicPos, outSizeCur); - dest += outSizeCur; - outSize -= outSizeCur; - *destLen += outSizeCur; - if (res != 0) - return res; - if (outSizeCur == 0 || outSize == 0) - return SZ_OK; - } -} - -SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, - Byte prop, ELzmaFinishMode finishMode, ELzmaStatus *status, ISzAlloc *alloc) -{ - CLzma2Dec decoder; - SRes res; - SizeT outSize = *destLen, inSize = *srcLen; - Byte props[LZMA_PROPS_SIZE]; - - Lzma2Dec_Construct(&decoder); - - *destLen = *srcLen = 0; - *status = LZMA_STATUS_NOT_SPECIFIED; - decoder.decoder.dic = dest; - decoder.decoder.dicBufSize = outSize; - - RINOK(Lzma2Dec_GetOldProps(prop, props)); - RINOK(LzmaDec_AllocateProbs(&decoder.decoder, props, LZMA_PROPS_SIZE, alloc)); - - *srcLen = inSize; - res = Lzma2Dec_DecodeToDic(&decoder, outSize, src, srcLen, finishMode, status); - *destLen = decoder.decoder.dicPos; - if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT) - res = SZ_ERROR_INPUT_EOF; - - LzmaDec_FreeProbs(&decoder.decoder, alloc); - return res; -} diff --git a/modules/lib7z/LZMASDK/C/Lzma2Dec.h b/modules/lib7z/LZMASDK/C/Lzma2Dec.h deleted file mode 100644 index 827698deeb09..000000000000 --- a/modules/lib7z/LZMASDK/C/Lzma2Dec.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Lzma2Dec.h -- LZMA2 Decoder -2009-05-03 : Igor Pavlov : Public domain */ - -#ifndef __LZMA2_DEC_H -#define __LZMA2_DEC_H - -#include "LzmaDec.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* ---------- State Interface ---------- */ - -typedef struct -{ - CLzmaDec decoder; - UInt32 packSize; - UInt32 unpackSize; - int state; - Byte control; - Bool needInitDic; - Bool needInitState; - Bool needInitProp; -} CLzma2Dec; - -#define Lzma2Dec_Construct(p) LzmaDec_Construct(&(p)->decoder) -#define Lzma2Dec_FreeProbs(p, alloc) LzmaDec_FreeProbs(&(p)->decoder, alloc); -#define Lzma2Dec_Free(p, alloc) LzmaDec_Free(&(p)->decoder, alloc); - -SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAlloc *alloc); -SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAlloc *alloc); -void Lzma2Dec_Init(CLzma2Dec *p); - - -/* -finishMode: - It has meaning only if the decoding reaches output limit (*destLen or dicLimit). - LZMA_FINISH_ANY - use smallest number of input bytes - LZMA_FINISH_END - read EndOfStream marker after decoding - -Returns: - SZ_OK - status: - LZMA_STATUS_FINISHED_WITH_MARK - LZMA_STATUS_NOT_FINISHED - LZMA_STATUS_NEEDS_MORE_INPUT - SZ_ERROR_DATA - Data error -*/ - -SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit, - const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); - -SRes Lzma2Dec_DecodeToBuf(CLzma2Dec *p, Byte *dest, SizeT *destLen, - const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); - - -/* ---------- One Call Interface ---------- */ - -/* -finishMode: - It has meaning only if the decoding reaches output limit (*destLen). - LZMA_FINISH_ANY - use smallest number of input bytes - LZMA_FINISH_END - read EndOfStream marker after decoding - -Returns: - SZ_OK - status: - LZMA_STATUS_FINISHED_WITH_MARK - LZMA_STATUS_NOT_FINISHED - SZ_ERROR_DATA - Data error - SZ_ERROR_MEM - Memory allocation error - SZ_ERROR_UNSUPPORTED - Unsupported properties - SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src). -*/ - -SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, - Byte prop, ELzmaFinishMode finishMode, ELzmaStatus *status, ISzAlloc *alloc); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/Lzma2Enc.c b/modules/lib7z/LZMASDK/C/Lzma2Enc.c deleted file mode 100644 index 0cc6852b9fb0..000000000000 --- a/modules/lib7z/LZMASDK/C/Lzma2Enc.c +++ /dev/null @@ -1,484 +0,0 @@ -/* Lzma2Enc.c -- LZMA2 Encoder -2009-05-26 : Igor Pavlov : Public domain */ - -/* #include */ -#include - -#include "Lzma2Enc.h" - -/* #define COMPRESS_MT */ - -#ifdef COMPRESS_MT -#include "MtCoder.h" -#else -#define NUM_MT_CODER_THREADS_MAX 1 -#endif - -#define LZMA2_CONTROL_LZMA (1 << 7) -#define LZMA2_CONTROL_COPY_NO_RESET 2 -#define LZMA2_CONTROL_COPY_RESET_DIC 1 -#define LZMA2_CONTROL_EOF 0 - -#define LZMA2_LCLP_MAX 4 - -#define LZMA2_DIC_SIZE_FROM_PROP(p) (((UInt32)2 | ((p) & 1)) << ((p) / 2 + 11)) - -#define LZMA2_PACK_SIZE_MAX (1 << 16) -#define LZMA2_COPY_CHUNK_SIZE LZMA2_PACK_SIZE_MAX -#define LZMA2_UNPACK_SIZE_MAX (1 << 21) -#define LZMA2_KEEP_WINDOW_SIZE LZMA2_UNPACK_SIZE_MAX - -#define LZMA2_CHUNK_SIZE_COMPRESSED_MAX ((1 << 16) + 16) - - -#define PRF(x) /* x */ - -/* ---------- CLzma2EncInt ---------- */ - -typedef struct -{ - CLzmaEncHandle enc; - UInt64 srcPos; - Byte props; - Bool needInitState; - Bool needInitProp; -} CLzma2EncInt; - -static SRes Lzma2EncInt_Init(CLzma2EncInt *p, const CLzma2EncProps *props) -{ - Byte propsEncoded[LZMA_PROPS_SIZE]; - SizeT propsSize = LZMA_PROPS_SIZE; - RINOK(LzmaEnc_SetProps(p->enc, &props->lzmaProps)); - RINOK(LzmaEnc_WriteProperties(p->enc, propsEncoded, &propsSize)); - p->srcPos = 0; - p->props = propsEncoded[0]; - p->needInitState = True; - p->needInitProp = True; - return SZ_OK; -} - -SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle pp, ISeqInStream *inStream, UInt32 keepWindowSize, - ISzAlloc *alloc, ISzAlloc *allocBig); -SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen, - UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig); -SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, Bool reInit, - Byte *dest, size_t *destLen, UInt32 desiredPackSize, UInt32 *unpackSize); -const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle pp); -void LzmaEnc_Finish(CLzmaEncHandle pp); -void LzmaEnc_SaveState(CLzmaEncHandle pp); -void LzmaEnc_RestoreState(CLzmaEncHandle pp); - - -static SRes Lzma2EncInt_EncodeSubblock(CLzma2EncInt *p, Byte *outBuf, - size_t *packSizeRes, ISeqOutStream *outStream) -{ - size_t packSizeLimit = *packSizeRes; - size_t packSize = packSizeLimit; - UInt32 unpackSize = LZMA2_UNPACK_SIZE_MAX; - unsigned lzHeaderSize = 5 + (p->needInitProp ? 1 : 0); - Bool useCopyBlock; - SRes res; - - *packSizeRes = 0; - if (packSize < lzHeaderSize) - return SZ_ERROR_OUTPUT_EOF; - packSize -= lzHeaderSize; - - LzmaEnc_SaveState(p->enc); - res = LzmaEnc_CodeOneMemBlock(p->enc, p->needInitState, - outBuf + lzHeaderSize, &packSize, LZMA2_PACK_SIZE_MAX, &unpackSize); - - PRF(printf("\npackSize = %7d unpackSize = %7d ", packSize, unpackSize)); - - if (unpackSize == 0) - return res; - - if (res == SZ_OK) - useCopyBlock = (packSize + 2 >= unpackSize || packSize > (1 << 16)); - else - { - if (res != SZ_ERROR_OUTPUT_EOF) - return res; - res = SZ_OK; - useCopyBlock = True; - } - - if (useCopyBlock) - { - size_t destPos = 0; - PRF(printf("################# COPY ")); - while (unpackSize > 0) - { - UInt32 u = (unpackSize < LZMA2_COPY_CHUNK_SIZE) ? unpackSize : LZMA2_COPY_CHUNK_SIZE; - if (packSizeLimit - destPos < u + 3) - return SZ_ERROR_OUTPUT_EOF; - outBuf[destPos++] = (Byte)(p->srcPos == 0 ? LZMA2_CONTROL_COPY_RESET_DIC : LZMA2_CONTROL_COPY_NO_RESET); - outBuf[destPos++] = (Byte)((u - 1) >> 8); - outBuf[destPos++] = (Byte)(u - 1); - memcpy(outBuf + destPos, LzmaEnc_GetCurBuf(p->enc) - unpackSize, u); - unpackSize -= u; - destPos += u; - p->srcPos += u; - if (outStream) - { - *packSizeRes += destPos; - if (outStream->Write(outStream, outBuf, destPos) != destPos) - return SZ_ERROR_WRITE; - destPos = 0; - } - else - *packSizeRes = destPos; - /* needInitState = True; */ - } - LzmaEnc_RestoreState(p->enc); - return SZ_OK; - } - { - size_t destPos = 0; - UInt32 u = unpackSize - 1; - UInt32 pm = (UInt32)(packSize - 1); - unsigned mode = (p->srcPos == 0) ? 3 : (p->needInitState ? (p->needInitProp ? 2 : 1) : 0); - - PRF(printf(" ")); - - outBuf[destPos++] = (Byte)(LZMA2_CONTROL_LZMA | (mode << 5) | (u >> 16) & 0x1F); - outBuf[destPos++] = (Byte)(u >> 8); - outBuf[destPos++] = (Byte)u; - outBuf[destPos++] = (Byte)(pm >> 8); - outBuf[destPos++] = (Byte)pm; - - if (p->needInitProp) - outBuf[destPos++] = p->props; - - p->needInitProp = False; - p->needInitState = False; - destPos += packSize; - p->srcPos += unpackSize; - - if (outStream) - if (outStream->Write(outStream, outBuf, destPos) != destPos) - return SZ_ERROR_WRITE; - *packSizeRes = destPos; - return SZ_OK; - } -} - -/* ---------- Lzma2 Props ---------- */ - -void Lzma2EncProps_Init(CLzma2EncProps *p) -{ - LzmaEncProps_Init(&p->lzmaProps); - p->numTotalThreads = -1; - p->numBlockThreads = -1; - p->blockSize = 0; -} - - -static SRes Progress(ICompressProgress *p, UInt64 inSize, UInt64 outSize) -{ - return (p && p->Progress(p, inSize, outSize) != SZ_OK) ? SZ_ERROR_PROGRESS : SZ_OK; -} - -/* ---------- Lzma2 ---------- */ - -extern struct _CLzma2Enc; - -typedef struct _CLzma2Enc -{ - Byte propEncoded; - CLzma2EncProps props; - - Byte *outBuf; - - ISzAlloc *alloc; - ISzAlloc *allocBig; - - CLzma2EncInt coders[NUM_MT_CODER_THREADS_MAX]; - - #ifdef COMPRESS_MT - CMtCoder mtCoder; - #endif - -} CLzma2Enc; - - -/* ---------- Lzma2EncThread ---------- */ - -static SRes Lzma2Enc_EncodeMt1(CLzma2EncInt *p, CLzma2Enc *mainEncoder, - ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress) -{ - UInt64 packTotal = 0; - SRes res = SZ_OK; - - if (mainEncoder->outBuf == 0) - { - mainEncoder->outBuf = IAlloc_Alloc(mainEncoder->alloc, LZMA2_CHUNK_SIZE_COMPRESSED_MAX); - if (mainEncoder->outBuf == 0) - return SZ_ERROR_MEM; - } - RINOK(Lzma2EncInt_Init(p, &mainEncoder->props)); - RINOK(LzmaEnc_PrepareForLzma2(p->enc, inStream, LZMA2_KEEP_WINDOW_SIZE, - mainEncoder->alloc, mainEncoder->allocBig)); - for (;;) - { - size_t packSize = LZMA2_CHUNK_SIZE_COMPRESSED_MAX; - res = Lzma2EncInt_EncodeSubblock(p, mainEncoder->outBuf, &packSize, outStream); - if (res != SZ_OK) - break; - packTotal += packSize; - res = Progress(progress, p->srcPos, packTotal); - if (res != SZ_OK) - break; - if (packSize == 0) - break; - } - LzmaEnc_Finish(p->enc); - if (res == SZ_OK) - { - Byte b = 0; - if (outStream->Write(outStream, &b, 1) != 1) - return SZ_ERROR_WRITE; - } - return res; -} - -#ifdef COMPRESS_MT - -typedef struct -{ - IMtCoderCallback funcTable; - CLzma2Enc *lzma2Enc; -} CMtCallbackImp; - -static SRes MtCallbackImp_Code(void *pp, unsigned index, Byte *dest, size_t *destSize, - const Byte *src, size_t srcSize, int finished) -{ - CMtCallbackImp *imp = (CMtCallbackImp *)pp; - CLzma2Enc *mainEncoder = imp->lzma2Enc; - CLzma2EncInt *p = &mainEncoder->coders[index]; - - SRes res = SZ_OK; - { - size_t destLim = *destSize; - *destSize = 0; - - if (srcSize != 0) - { - RINOK(Lzma2EncInt_Init(p, &mainEncoder->props)); - - RINOK(LzmaEnc_MemPrepare(p->enc, src, srcSize, LZMA2_KEEP_WINDOW_SIZE, - mainEncoder->alloc, mainEncoder->allocBig)); - - while (p->srcPos < srcSize) - { - size_t packSize = destLim - *destSize; - res = Lzma2EncInt_EncodeSubblock(p, dest + *destSize, &packSize, NULL); - if (res != SZ_OK) - break; - *destSize += packSize; - - if (packSize == 0) - { - res = SZ_ERROR_FAIL; - break; - } - - if (MtProgress_Set(&mainEncoder->mtCoder.mtProgress, index, p->srcPos, *destSize) != SZ_OK) - { - res = SZ_ERROR_PROGRESS; - break; - } - } - LzmaEnc_Finish(p->enc); - if (res != SZ_OK) - return res; - } - if (finished) - { - if (*destSize == destLim) - return SZ_ERROR_OUTPUT_EOF; - dest[(*destSize)++] = 0; - } - } - return res; -} - -#endif - -/* ---------- Lzma2Enc ---------- */ - -CLzma2EncHandle Lzma2Enc_Create(ISzAlloc *alloc, ISzAlloc *allocBig) -{ - CLzma2Enc *p = (CLzma2Enc *)alloc->Alloc(alloc, sizeof(CLzma2Enc)); - if (p == 0) - return NULL; - Lzma2EncProps_Init(&p->props); - Lzma2EncProps_Normalize(&p->props); - p->outBuf = 0; - p->alloc = alloc; - p->allocBig = allocBig; - { - unsigned i; - for (i = 0; i < NUM_MT_CODER_THREADS_MAX; i++) - p->coders[i].enc = 0; - } - #ifdef COMPRESS_MT - MtCoder_Construct(&p->mtCoder); - #endif - - return p; -} - -void Lzma2Enc_Destroy(CLzma2EncHandle pp) -{ - CLzma2Enc *p = (CLzma2Enc *)pp; - unsigned i; - for (i = 0; i < NUM_MT_CODER_THREADS_MAX; i++) - { - CLzma2EncInt *t = &p->coders[i]; - if (t->enc) - { - LzmaEnc_Destroy(t->enc, p->alloc, p->allocBig); - t->enc = 0; - } - } - - #ifdef COMPRESS_MT - MtCoder_Destruct(&p->mtCoder); - #endif - - IAlloc_Free(p->alloc, p->outBuf); - IAlloc_Free(p->alloc, pp); -} - -void Lzma2EncProps_Normalize(CLzma2EncProps *p) -{ - int t1, t1n, t2, t3; - CLzmaEncProps lzmaProps = p->lzmaProps; - - LzmaEncProps_Normalize(&lzmaProps); - - t1 = p->lzmaProps.numThreads; - t1n = lzmaProps.numThreads; - t2 = p->numBlockThreads; - t3 = p->numTotalThreads; - - #ifdef COMPRESS_MT - if (t2 > NUM_MT_CODER_THREADS_MAX) - t2 = NUM_MT_CODER_THREADS_MAX; - #else - t2 = 1; - #endif - - if (t3 <= 0) - { - if (t2 <= 0) - t2 = 1; - t3 = t1n * t2; - } - else - { - if (t2 <= 0) - { - t2 = t3 / t1n; - if (t2 == 0) - { - t1 = 1; - t2 = t3; - } - } - else if (t1 <= 0) - { - t1 = t3 / t2; - if (t1 == 0) - t1 = 1; - } - else - t3 = t1n * t2; - } - - p->lzmaProps.numThreads = t1; - p->numBlockThreads = t2; - p->numTotalThreads = t3; - LzmaEncProps_Normalize(&p->lzmaProps); - - if (p->blockSize == 0) - { - UInt64 blockSize = (UInt64)lzmaProps.dictSize << 2; - const UInt32 kMinSize = (UInt32)1 << 20; - const UInt32 kMaxSize = (UInt32)1 << 28; - if (blockSize < kMinSize) blockSize = kMinSize; - if (blockSize > kMaxSize) blockSize = kMaxSize; - if (blockSize < lzmaProps.dictSize) - blockSize = lzmaProps.dictSize; - p->blockSize = (size_t)blockSize; - } -} - -SRes Lzma2Enc_SetProps(CLzma2EncHandle pp, const CLzma2EncProps *props) -{ - CLzma2Enc *p = (CLzma2Enc *)pp; - CLzmaEncProps lzmaProps = props->lzmaProps; - LzmaEncProps_Normalize(&lzmaProps); - if (lzmaProps.lc + lzmaProps.lp > LZMA2_LCLP_MAX) - return SZ_ERROR_PARAM; - p->props = *props; - Lzma2EncProps_Normalize(&p->props); - return SZ_OK; -} - -Byte Lzma2Enc_WriteProperties(CLzma2EncHandle pp) -{ - CLzma2Enc *p = (CLzma2Enc *)pp; - unsigned i; - UInt32 dicSize = LzmaEncProps_GetDictSize(&p->props.lzmaProps); - for (i = 0; i < 40; i++) - if (dicSize <= LZMA2_DIC_SIZE_FROM_PROP(i)) - break; - return (Byte)i; -} - -SRes Lzma2Enc_Encode(CLzma2EncHandle pp, - ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress) -{ - CLzma2Enc *p = (CLzma2Enc *)pp; - int i; - - for (i = 0; i < p->props.numBlockThreads; i++) - { - CLzma2EncInt *t = &p->coders[i]; - if (t->enc == NULL) - { - t->enc = LzmaEnc_Create(p->alloc); - if (t->enc == NULL) - return SZ_ERROR_MEM; - } - } - - #ifdef COMPRESS_MT - if (p->props.numBlockThreads <= 1) - #endif - return Lzma2Enc_EncodeMt1(&p->coders[0], p, outStream, inStream, progress); - - #ifdef COMPRESS_MT - - { - CMtCallbackImp mtCallback; - - mtCallback.funcTable.Code = MtCallbackImp_Code; - mtCallback.lzma2Enc = p; - - p->mtCoder.progress = progress; - p->mtCoder.inStream = inStream; - p->mtCoder.outStream = outStream; - p->mtCoder.alloc = p->alloc; - p->mtCoder.mtCallback = &mtCallback.funcTable; - - p->mtCoder.blockSize = p->props.blockSize; - p->mtCoder.destBlockSize = p->props.blockSize + (p->props.blockSize >> 10) + 16; - p->mtCoder.numThreads = p->props.numBlockThreads; - - return MtCoder_Code(&p->mtCoder); - } - #endif -} diff --git a/modules/lib7z/LZMASDK/C/Lzma2Enc.h b/modules/lib7z/LZMASDK/C/Lzma2Enc.h deleted file mode 100644 index 38830e548025..000000000000 --- a/modules/lib7z/LZMASDK/C/Lzma2Enc.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Lzma2Enc.h -- LZMA2 Encoder -2009-02-07 : Igor Pavlov : Public domain */ - -#ifndef __LZMA2_ENC_H -#define __LZMA2_ENC_H - -#include "LzmaEnc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct -{ - CLzmaEncProps lzmaProps; - size_t blockSize; - int numBlockThreads; - int numTotalThreads; -} CLzma2EncProps; - -void Lzma2EncProps_Init(CLzma2EncProps *p); -void Lzma2EncProps_Normalize(CLzma2EncProps *p); - -/* ---------- CLzmaEnc2Handle Interface ---------- */ - -/* Lzma2Enc_* functions can return the following exit codes: -Returns: - SZ_OK - OK - SZ_ERROR_MEM - Memory allocation error - SZ_ERROR_PARAM - Incorrect paramater in props - SZ_ERROR_WRITE - Write callback error - SZ_ERROR_PROGRESS - some break from progress callback - SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) -*/ - -typedef void * CLzma2EncHandle; - -CLzma2EncHandle Lzma2Enc_Create(ISzAlloc *alloc, ISzAlloc *allocBig); -void Lzma2Enc_Destroy(CLzma2EncHandle p); -SRes Lzma2Enc_SetProps(CLzma2EncHandle p, const CLzma2EncProps *props); -Byte Lzma2Enc_WriteProperties(CLzma2EncHandle p); -SRes Lzma2Enc_Encode(CLzma2EncHandle p, - ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress); - -/* ---------- One Call Interface ---------- */ - -/* Lzma2Encode -Return code: - SZ_OK - OK - SZ_ERROR_MEM - Memory allocation error - SZ_ERROR_PARAM - Incorrect paramater - SZ_ERROR_OUTPUT_EOF - output buffer overflow - SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) -*/ - -/* -SRes Lzma2Encode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, - const CLzmaEncProps *props, Byte *propsEncoded, int writeEndMark, - ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); -*/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/Lzma86.h b/modules/lib7z/LZMASDK/C/Lzma86.h deleted file mode 100644 index 6425bb8f56fe..000000000000 --- a/modules/lib7z/LZMASDK/C/Lzma86.h +++ /dev/null @@ -1,111 +0,0 @@ -/* Lzma86.h -- LZMA + x86 (BCJ) Filter -2009-08-14 : Igor Pavlov : Public domain */ - -#ifndef __LZMA86_H -#define __LZMA86_H - -#include "Types.h" - -EXTERN_C_BEGIN - -#define LZMA86_SIZE_OFFSET (1 + 5) -#define LZMA86_HEADER_SIZE (LZMA86_SIZE_OFFSET + 8) - -/* -It's an example for LZMA + x86 Filter use. -You can use .lzma86 extension, if you write that stream to file. -.lzma86 header adds one additional byte to standard .lzma header. -.lzma86 header (14 bytes): - Offset Size Description - 0 1 = 0 - no filter, pure LZMA - = 1 - x86 filter + LZMA - 1 1 lc, lp and pb in encoded form - 2 4 dictSize (little endian) - 6 8 uncompressed size (little endian) - - -Lzma86_Encode -------------- -level - compression level: 0 <= level <= 9, the default value for "level" is 5. - -dictSize - The dictionary size in bytes. The maximum value is - 128 MB = (1 << 27) bytes for 32-bit version - 1 GB = (1 << 30) bytes for 64-bit version - The default value is 16 MB = (1 << 24) bytes, for level = 5. - It's recommended to use the dictionary that is larger than 4 KB and - that can be calculated as (1 << N) or (3 << N) sizes. - For better compression ratio dictSize must be >= inSize. - -filterMode: - SZ_FILTER_NO - no Filter - SZ_FILTER_YES - x86 Filter - SZ_FILTER_AUTO - it tries both alternatives to select best. - Encoder will use 2 or 3 passes: - 2 passes when FILTER_NO provides better compression. - 3 passes when FILTER_YES provides better compression. - -Lzma86Encode allocates Data with MyAlloc functions. -RAM Requirements for compressing: - RamSize = dictionarySize * 11.5 + 6MB + FilterBlockSize - filterMode FilterBlockSize - SZ_FILTER_NO 0 - SZ_FILTER_YES inSize - SZ_FILTER_AUTO inSize - - -Return code: - SZ_OK - OK - SZ_ERROR_MEM - Memory allocation error - SZ_ERROR_PARAM - Incorrect paramater - SZ_ERROR_OUTPUT_EOF - output buffer overflow - SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) -*/ - -enum ESzFilterMode -{ - SZ_FILTER_NO, - SZ_FILTER_YES, - SZ_FILTER_AUTO -}; - -SRes Lzma86_Encode(Byte *dest, size_t *destLen, const Byte *src, size_t srcLen, - int level, UInt32 dictSize, int filterMode); - - -/* -Lzma86_GetUnpackSize: - In: - src - input data - srcLen - input data size - Out: - unpackSize - size of uncompressed stream - Return code: - SZ_OK - OK - SZ_ERROR_INPUT_EOF - Error in headers -*/ - -SRes Lzma86_GetUnpackSize(const Byte *src, SizeT srcLen, UInt64 *unpackSize); - -/* -Lzma86_Decode: - In: - dest - output data - destLen - output data size - src - input data - srcLen - input data size - Out: - destLen - processed output size - srcLen - processed input size - Return code: - SZ_OK - OK - SZ_ERROR_DATA - Data error - SZ_ERROR_MEM - Memory allocation error - SZ_ERROR_UNSUPPORTED - unsupported file - SZ_ERROR_INPUT_EOF - it needs more bytes in input buffer -*/ - -SRes Lzma86_Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen); - -EXTERN_C_END - -#endif diff --git a/modules/lib7z/LZMASDK/C/Lzma86Dec.c b/modules/lib7z/LZMASDK/C/Lzma86Dec.c deleted file mode 100644 index 760a447c8941..000000000000 --- a/modules/lib7z/LZMASDK/C/Lzma86Dec.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Lzma86Dec.c -- LZMA + x86 (BCJ) Filter Decoder -2009-08-14 : Igor Pavlov : Public domain */ - -#include "Lzma86.h" - -#include "Alloc.h" -#include "Bra.h" -#include "LzmaDec.h" - -static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); } -static void SzFree(void *p, void *address) { p = p; MyFree(address); } - -SRes Lzma86_GetUnpackSize(const Byte *src, SizeT srcLen, UInt64 *unpackSize) -{ - unsigned i; - if (srcLen < LZMA86_HEADER_SIZE) - return SZ_ERROR_INPUT_EOF; - *unpackSize = 0; - for (i = 0; i < sizeof(UInt64); i++) - *unpackSize += ((UInt64)src[LZMA86_SIZE_OFFSET + i]) << (8 * i); - return SZ_OK; -} - -SRes Lzma86_Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen) -{ - ISzAlloc g_Alloc = { SzAlloc, SzFree }; - SRes res; - int useFilter; - SizeT inSizePure; - ELzmaStatus status; - - if (*srcLen < LZMA86_HEADER_SIZE) - return SZ_ERROR_INPUT_EOF; - - useFilter = src[0]; - - if (useFilter > 1) - { - *destLen = 0; - return SZ_ERROR_UNSUPPORTED; - } - - inSizePure = *srcLen - LZMA86_HEADER_SIZE; - res = LzmaDecode(dest, destLen, src + LZMA86_HEADER_SIZE, &inSizePure, - src + 1, LZMA_PROPS_SIZE, LZMA_FINISH_ANY, &status, &g_Alloc); - *srcLen = inSizePure + LZMA86_HEADER_SIZE; - if (res != SZ_OK) - return res; - if (useFilter == 1) - { - UInt32 x86State; - x86_Convert_Init(x86State); - x86_Convert(dest, *destLen, 0, &x86State, 0); - } - return SZ_OK; -} diff --git a/modules/lib7z/LZMASDK/C/Lzma86Enc.c b/modules/lib7z/LZMASDK/C/Lzma86Enc.c deleted file mode 100644 index a29c605b4a35..000000000000 --- a/modules/lib7z/LZMASDK/C/Lzma86Enc.c +++ /dev/null @@ -1,108 +0,0 @@ -/* Lzma86Enc.c -- LZMA + x86 (BCJ) Filter Encoder -2009-08-14 : Igor Pavlov : Public domain */ - -#include - -#include "Lzma86.h" - -#include "Alloc.h" -#include "Bra.h" -#include "LzmaEnc.h" - -#define SZE_OUT_OVERFLOW SZE_DATA_ERROR - -static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); } -static void SzFree(void *p, void *address) { p = p; MyFree(address); } - -int Lzma86_Encode(Byte *dest, size_t *destLen, const Byte *src, size_t srcLen, - int level, UInt32 dictSize, int filterMode) -{ - ISzAlloc g_Alloc = { SzAlloc, SzFree }; - size_t outSize2 = *destLen; - Byte *filteredStream; - Bool useFilter; - int mainResult = SZ_ERROR_OUTPUT_EOF; - CLzmaEncProps props; - LzmaEncProps_Init(&props); - props.level = level; - props.dictSize = dictSize; - - *destLen = 0; - if (outSize2 < LZMA86_HEADER_SIZE) - return SZ_ERROR_OUTPUT_EOF; - - { - int i; - UInt64 t = srcLen; - for (i = 0; i < 8; i++, t >>= 8) - dest[LZMA86_SIZE_OFFSET + i] = (Byte)t; - } - - filteredStream = 0; - useFilter = (filterMode != SZ_FILTER_NO); - if (useFilter) - { - if (srcLen != 0) - { - filteredStream = (Byte *)MyAlloc(srcLen); - if (filteredStream == 0) - return SZ_ERROR_MEM; - memcpy(filteredStream, src, srcLen); - } - { - UInt32 x86State; - x86_Convert_Init(x86State); - x86_Convert(filteredStream, srcLen, 0, &x86State, 1); - } - } - - { - size_t minSize = 0; - Bool bestIsFiltered = False; - - /* passes for SZ_FILTER_AUTO: - 0 - BCJ + LZMA - 1 - LZMA - 2 - BCJ + LZMA agaian, if pass 0 (BCJ + LZMA) is better. - */ - int numPasses = (filterMode == SZ_FILTER_AUTO) ? 3 : 1; - - int i; - for (i = 0; i < numPasses; i++) - { - size_t outSizeProcessed = outSize2 - LZMA86_HEADER_SIZE; - size_t outPropsSize = 5; - SRes curRes; - Bool curModeIsFiltered = (numPasses > 1 && i == numPasses - 1); - if (curModeIsFiltered && !bestIsFiltered) - break; - if (useFilter && i == 0) - curModeIsFiltered = True; - - curRes = LzmaEncode(dest + LZMA86_HEADER_SIZE, &outSizeProcessed, - curModeIsFiltered ? filteredStream : src, srcLen, - &props, dest + 1, &outPropsSize, 0, - NULL, &g_Alloc, &g_Alloc); - - if (curRes != SZ_ERROR_OUTPUT_EOF) - { - if (curRes != SZ_OK) - { - mainResult = curRes; - break; - } - if (outSizeProcessed <= minSize || mainResult != SZ_OK) - { - minSize = outSizeProcessed; - bestIsFiltered = curModeIsFiltered; - mainResult = SZ_OK; - } - } - } - dest[0] = (bestIsFiltered ? 1 : 0); - *destLen = LZMA86_HEADER_SIZE + minSize; - } - if (useFilter) - MyFree(filteredStream); - return mainResult; -} diff --git a/modules/lib7z/LZMASDK/C/LzmaDec.c b/modules/lib7z/LZMASDK/C/LzmaDec.c deleted file mode 100644 index eb5250174b18..000000000000 --- a/modules/lib7z/LZMASDK/C/LzmaDec.c +++ /dev/null @@ -1,1007 +0,0 @@ -/* LzmaDec.c -- LZMA Decoder -2008-11-06 : Igor Pavlov : Public domain */ - -#include "LzmaDec.h" - -#include - -#define kNumTopBits 24 -#define kTopValue ((UInt32)1 << kNumTopBits) - -#define kNumBitModelTotalBits 11 -#define kBitModelTotal (1 << kNumBitModelTotalBits) -#define kNumMoveBits 5 - -#define RC_INIT_SIZE 5 - -#define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); } - -#define IF_BIT_0(p) ttt = *(p); NORMALIZE; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) -#define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); -#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); -#define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \ - { UPDATE_0(p); i = (i + i); A0; } else \ - { UPDATE_1(p); i = (i + i) + 1; A1; } -#define GET_BIT(p, i) GET_BIT2(p, i, ; , ;) - -#define TREE_GET_BIT(probs, i) { GET_BIT((probs + i), i); } -#define TREE_DECODE(probs, limit, i) \ - { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; } - -/* #define _LZMA_SIZE_OPT */ - -#ifdef _LZMA_SIZE_OPT -#define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i) -#else -#define TREE_6_DECODE(probs, i) \ - { i = 1; \ - TREE_GET_BIT(probs, i); \ - TREE_GET_BIT(probs, i); \ - TREE_GET_BIT(probs, i); \ - TREE_GET_BIT(probs, i); \ - TREE_GET_BIT(probs, i); \ - TREE_GET_BIT(probs, i); \ - i -= 0x40; } -#endif - -#define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_ERROR; range <<= 8; code = (code << 8) | (*buf++); } - -#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) -#define UPDATE_0_CHECK range = bound; -#define UPDATE_1_CHECK range -= bound; code -= bound; -#define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \ - { UPDATE_0_CHECK; i = (i + i); A0; } else \ - { UPDATE_1_CHECK; i = (i + i) + 1; A1; } -#define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;) -#define TREE_DECODE_CHECK(probs, limit, i) \ - { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; } - - -#define kNumPosBitsMax 4 -#define kNumPosStatesMax (1 << kNumPosBitsMax) - -#define kLenNumLowBits 3 -#define kLenNumLowSymbols (1 << kLenNumLowBits) -#define kLenNumMidBits 3 -#define kLenNumMidSymbols (1 << kLenNumMidBits) -#define kLenNumHighBits 8 -#define kLenNumHighSymbols (1 << kLenNumHighBits) - -#define LenChoice 0 -#define LenChoice2 (LenChoice + 1) -#define LenLow (LenChoice2 + 1) -#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) -#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) -#define kNumLenProbs (LenHigh + kLenNumHighSymbols) - - -#define kNumStates 12 -#define kNumLitStates 7 - -#define kStartPosModelIndex 4 -#define kEndPosModelIndex 14 -#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) - -#define kNumPosSlotBits 6 -#define kNumLenToPosStates 4 - -#define kNumAlignBits 4 -#define kAlignTableSize (1 << kNumAlignBits) - -#define kMatchMinLen 2 -#define kMatchSpecLenStart (kMatchMinLen + kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols) - -#define IsMatch 0 -#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) -#define IsRepG0 (IsRep + kNumStates) -#define IsRepG1 (IsRepG0 + kNumStates) -#define IsRepG2 (IsRepG1 + kNumStates) -#define IsRep0Long (IsRepG2 + kNumStates) -#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) -#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) -#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) -#define LenCoder (Align + kAlignTableSize) -#define RepLenCoder (LenCoder + kNumLenProbs) -#define Literal (RepLenCoder + kNumLenProbs) - -#define LZMA_BASE_SIZE 1846 -#define LZMA_LIT_SIZE 768 - -#define LzmaProps_GetNumProbs(p) ((UInt32)LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((p)->lc + (p)->lp))) - -#if Literal != LZMA_BASE_SIZE -StopCompilingDueBUG -#endif - -static const Byte kLiteralNextStates[kNumStates * 2] = -{ - 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5, - 7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10 -}; - -#define LZMA_DIC_MIN (1 << 12) - -/* First LZMA-symbol is always decoded. -And it decodes new LZMA-symbols while (buf < bufLimit), but "buf" is without last normalization -Out: - Result: - SZ_OK - OK - SZ_ERROR_DATA - Error - p->remainLen: - < kMatchSpecLenStart : normal remain - = kMatchSpecLenStart : finished - = kMatchSpecLenStart + 1 : Flush marker - = kMatchSpecLenStart + 2 : State Init Marker -*/ - -static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte *bufLimit) -{ - CLzmaProb *probs = p->probs; - - unsigned state = p->state; - UInt32 rep0 = p->reps[0], rep1 = p->reps[1], rep2 = p->reps[2], rep3 = p->reps[3]; - unsigned pbMask = ((unsigned)1 << (p->prop.pb)) - 1; - unsigned lpMask = ((unsigned)1 << (p->prop.lp)) - 1; - unsigned lc = p->prop.lc; - - Byte *dic = p->dic; - SizeT dicBufSize = p->dicBufSize; - SizeT dicPos = p->dicPos; - - UInt32 processedPos = p->processedPos; - UInt32 checkDicSize = p->checkDicSize; - unsigned len = 0; - - const Byte *buf = p->buf; - UInt32 range = p->range; - UInt32 code = p->code; - - do - { - CLzmaProb *prob; - UInt32 bound; - unsigned ttt; - unsigned posState = processedPos & pbMask; - - prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; - IF_BIT_0(prob) - { - unsigned symbol; - UPDATE_0(prob); - prob = probs + Literal; - if (checkDicSize != 0 || processedPos != 0) - prob += (LZMA_LIT_SIZE * (((processedPos & lpMask) << lc) + - (dic[(dicPos == 0 ? dicBufSize : dicPos) - 1] >> (8 - lc)))); - - if (state < kNumLitStates) - { - symbol = 1; - do { GET_BIT(prob + symbol, symbol) } while (symbol < 0x100); - } - else - { - unsigned matchByte = p->dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; - unsigned offs = 0x100; - symbol = 1; - do - { - unsigned bit; - CLzmaProb *probLit; - matchByte <<= 1; - bit = (matchByte & offs); - probLit = prob + offs + bit + symbol; - GET_BIT2(probLit, symbol, offs &= ~bit, offs &= bit) - } - while (symbol < 0x100); - } - dic[dicPos++] = (Byte)symbol; - processedPos++; - - state = kLiteralNextStates[state]; - /* if (state < 4) state = 0; else if (state < 10) state -= 3; else state -= 6; */ - continue; - } - else - { - UPDATE_1(prob); - prob = probs + IsRep + state; - IF_BIT_0(prob) - { - UPDATE_0(prob); - state += kNumStates; - prob = probs + LenCoder; - } - else - { - UPDATE_1(prob); - if (checkDicSize == 0 && processedPos == 0) - return SZ_ERROR_DATA; - prob = probs + IsRepG0 + state; - IF_BIT_0(prob) - { - UPDATE_0(prob); - prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; - IF_BIT_0(prob) - { - UPDATE_0(prob); - dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; - dicPos++; - processedPos++; - state = state < kNumLitStates ? 9 : 11; - continue; - } - UPDATE_1(prob); - } - else - { - UInt32 distance; - UPDATE_1(prob); - prob = probs + IsRepG1 + state; - IF_BIT_0(prob) - { - UPDATE_0(prob); - distance = rep1; - } - else - { - UPDATE_1(prob); - prob = probs + IsRepG2 + state; - IF_BIT_0(prob) - { - UPDATE_0(prob); - distance = rep2; - } - else - { - UPDATE_1(prob); - distance = rep3; - rep3 = rep2; - } - rep2 = rep1; - } - rep1 = rep0; - rep0 = distance; - } - state = state < kNumLitStates ? 8 : 11; - prob = probs + RepLenCoder; - } - { - unsigned limit, offset; - CLzmaProb *probLen = prob + LenChoice; - IF_BIT_0(probLen) - { - UPDATE_0(probLen); - probLen = prob + LenLow + (posState << kLenNumLowBits); - offset = 0; - limit = (1 << kLenNumLowBits); - } - else - { - UPDATE_1(probLen); - probLen = prob + LenChoice2; - IF_BIT_0(probLen) - { - UPDATE_0(probLen); - probLen = prob + LenMid + (posState << kLenNumMidBits); - offset = kLenNumLowSymbols; - limit = (1 << kLenNumMidBits); - } - else - { - UPDATE_1(probLen); - probLen = prob + LenHigh; - offset = kLenNumLowSymbols + kLenNumMidSymbols; - limit = (1 << kLenNumHighBits); - } - } - TREE_DECODE(probLen, limit, len); - len += offset; - } - - if (state >= kNumStates) - { - UInt32 distance; - prob = probs + PosSlot + - ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits); - TREE_6_DECODE(prob, distance); - if (distance >= kStartPosModelIndex) - { - unsigned posSlot = (unsigned)distance; - int numDirectBits = (int)(((distance >> 1) - 1)); - distance = (2 | (distance & 1)); - if (posSlot < kEndPosModelIndex) - { - distance <<= numDirectBits; - prob = probs + SpecPos + distance - posSlot - 1; - { - UInt32 mask = 1; - unsigned i = 1; - do - { - GET_BIT2(prob + i, i, ; , distance |= mask); - mask <<= 1; - } - while (--numDirectBits != 0); - } - } - else - { - numDirectBits -= kNumAlignBits; - do - { - NORMALIZE - range >>= 1; - - { - UInt32 t; - code -= range; - t = (0 - ((UInt32)code >> 31)); /* (UInt32)((Int32)code >> 31) */ - distance = (distance << 1) + (t + 1); - code += range & t; - } - /* - distance <<= 1; - if (code >= range) - { - code -= range; - distance |= 1; - } - */ - } - while (--numDirectBits != 0); - prob = probs + Align; - distance <<= kNumAlignBits; - { - unsigned i = 1; - GET_BIT2(prob + i, i, ; , distance |= 1); - GET_BIT2(prob + i, i, ; , distance |= 2); - GET_BIT2(prob + i, i, ; , distance |= 4); - GET_BIT2(prob + i, i, ; , distance |= 8); - } - if (distance == (UInt32)0xFFFFFFFF) - { - len += kMatchSpecLenStart; - state -= kNumStates; - break; - } - } - } - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - rep0 = distance + 1; - if (checkDicSize == 0) - { - if (distance >= processedPos) - return SZ_ERROR_DATA; - } - else if (distance >= checkDicSize) - return SZ_ERROR_DATA; - state = (state < kNumStates + kNumLitStates) ? kNumLitStates : kNumLitStates + 3; - /* state = kLiteralNextStates[state]; */ - } - - len += kMatchMinLen; - - if (limit == dicPos) - return SZ_ERROR_DATA; - { - SizeT rem = limit - dicPos; - unsigned curLen = ((rem < len) ? (unsigned)rem : len); - SizeT pos = (dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0); - - processedPos += curLen; - - len -= curLen; - if (pos + curLen <= dicBufSize) - { - Byte *dest = dic + dicPos; - ptrdiff_t src = (ptrdiff_t)pos - (ptrdiff_t)dicPos; - const Byte *lim = dest + curLen; - dicPos += curLen; - do - *(dest) = (Byte)*(dest + src); - while (++dest != lim); - } - else - { - do - { - dic[dicPos++] = dic[pos]; - if (++pos == dicBufSize) - pos = 0; - } - while (--curLen != 0); - } - } - } - } - while (dicPos < limit && buf < bufLimit); - NORMALIZE; - p->buf = buf; - p->range = range; - p->code = code; - p->remainLen = len; - p->dicPos = dicPos; - p->processedPos = processedPos; - p->reps[0] = rep0; - p->reps[1] = rep1; - p->reps[2] = rep2; - p->reps[3] = rep3; - p->state = state; - - return SZ_OK; -} - -static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) -{ - if (p->remainLen != 0 && p->remainLen < kMatchSpecLenStart) - { - Byte *dic = p->dic; - SizeT dicPos = p->dicPos; - SizeT dicBufSize = p->dicBufSize; - unsigned len = p->remainLen; - UInt32 rep0 = p->reps[0]; - if (limit - dicPos < len) - len = (unsigned)(limit - dicPos); - - if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= len) - p->checkDicSize = p->prop.dicSize; - - p->processedPos += len; - p->remainLen -= len; - while (len-- != 0) - { - dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; - dicPos++; - } - p->dicPos = dicPos; - } -} - -static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit) -{ - do - { - SizeT limit2 = limit; - if (p->checkDicSize == 0) - { - UInt32 rem = p->prop.dicSize - p->processedPos; - if (limit - p->dicPos > rem) - limit2 = p->dicPos + rem; - } - RINOK(LzmaDec_DecodeReal(p, limit2, bufLimit)); - if (p->processedPos >= p->prop.dicSize) - p->checkDicSize = p->prop.dicSize; - LzmaDec_WriteRem(p, limit); - } - while (p->dicPos < limit && p->buf < bufLimit && p->remainLen < kMatchSpecLenStart); - - if (p->remainLen > kMatchSpecLenStart) - { - p->remainLen = kMatchSpecLenStart; - } - return 0; -} - -typedef enum -{ - DUMMY_ERROR, /* unexpected end of input stream */ - DUMMY_LIT, - DUMMY_MATCH, - DUMMY_REP -} ELzmaDummy; - -static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, SizeT inSize) -{ - UInt32 range = p->range; - UInt32 code = p->code; - const Byte *bufLimit = buf + inSize; - CLzmaProb *probs = p->probs; - unsigned state = p->state; - ELzmaDummy res; - - { - CLzmaProb *prob; - UInt32 bound; - unsigned ttt; - unsigned posState = (p->processedPos) & ((1 << p->prop.pb) - 1); - - prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; - IF_BIT_0_CHECK(prob) - { - UPDATE_0_CHECK - - /* if (bufLimit - buf >= 7) return DUMMY_LIT; */ - - prob = probs + Literal; - if (p->checkDicSize != 0 || p->processedPos != 0) - prob += (LZMA_LIT_SIZE * - ((((p->processedPos) & ((1 << (p->prop.lp)) - 1)) << p->prop.lc) + - (p->dic[(p->dicPos == 0 ? p->dicBufSize : p->dicPos) - 1] >> (8 - p->prop.lc)))); - - if (state < kNumLitStates) - { - unsigned symbol = 1; - do { GET_BIT_CHECK(prob + symbol, symbol) } while (symbol < 0x100); - } - else - { - unsigned matchByte = p->dic[p->dicPos - p->reps[0] + - ((p->dicPos < p->reps[0]) ? p->dicBufSize : 0)]; - unsigned offs = 0x100; - unsigned symbol = 1; - do - { - unsigned bit; - CLzmaProb *probLit; - matchByte <<= 1; - bit = (matchByte & offs); - probLit = prob + offs + bit + symbol; - GET_BIT2_CHECK(probLit, symbol, offs &= ~bit, offs &= bit) - } - while (symbol < 0x100); - } - res = DUMMY_LIT; - } - else - { - unsigned len; - UPDATE_1_CHECK; - - prob = probs + IsRep + state; - IF_BIT_0_CHECK(prob) - { - UPDATE_0_CHECK; - state = 0; - prob = probs + LenCoder; - res = DUMMY_MATCH; - } - else - { - UPDATE_1_CHECK; - res = DUMMY_REP; - prob = probs + IsRepG0 + state; - IF_BIT_0_CHECK(prob) - { - UPDATE_0_CHECK; - prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; - IF_BIT_0_CHECK(prob) - { - UPDATE_0_CHECK; - NORMALIZE_CHECK; - return DUMMY_REP; - } - else - { - UPDATE_1_CHECK; - } - } - else - { - UPDATE_1_CHECK; - prob = probs + IsRepG1 + state; - IF_BIT_0_CHECK(prob) - { - UPDATE_0_CHECK; - } - else - { - UPDATE_1_CHECK; - prob = probs + IsRepG2 + state; - IF_BIT_0_CHECK(prob) - { - UPDATE_0_CHECK; - } - else - { - UPDATE_1_CHECK; - } - } - } - state = kNumStates; - prob = probs + RepLenCoder; - } - { - unsigned limit, offset; - CLzmaProb *probLen = prob + LenChoice; - IF_BIT_0_CHECK(probLen) - { - UPDATE_0_CHECK; - probLen = prob + LenLow + (posState << kLenNumLowBits); - offset = 0; - limit = 1 << kLenNumLowBits; - } - else - { - UPDATE_1_CHECK; - probLen = prob + LenChoice2; - IF_BIT_0_CHECK(probLen) - { - UPDATE_0_CHECK; - probLen = prob + LenMid + (posState << kLenNumMidBits); - offset = kLenNumLowSymbols; - limit = 1 << kLenNumMidBits; - } - else - { - UPDATE_1_CHECK; - probLen = prob + LenHigh; - offset = kLenNumLowSymbols + kLenNumMidSymbols; - limit = 1 << kLenNumHighBits; - } - } - TREE_DECODE_CHECK(probLen, limit, len); - len += offset; - } - - if (state < 4) - { - unsigned posSlot; - prob = probs + PosSlot + - ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << - kNumPosSlotBits); - TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot); - if (posSlot >= kStartPosModelIndex) - { - int numDirectBits = ((posSlot >> 1) - 1); - - /* if (bufLimit - buf >= 8) return DUMMY_MATCH; */ - - if (posSlot < kEndPosModelIndex) - { - prob = probs + SpecPos + ((2 | (posSlot & 1)) << numDirectBits) - posSlot - 1; - } - else - { - numDirectBits -= kNumAlignBits; - do - { - NORMALIZE_CHECK - range >>= 1; - code -= range & (((code - range) >> 31) - 1); - /* if (code >= range) code -= range; */ - } - while (--numDirectBits != 0); - prob = probs + Align; - numDirectBits = kNumAlignBits; - } - { - unsigned i = 1; - do - { - GET_BIT_CHECK(prob + i, i); - } - while (--numDirectBits != 0); - } - } - } - } - } - NORMALIZE_CHECK; - return res; -} - - -static void LzmaDec_InitRc(CLzmaDec *p, const Byte *data) -{ - p->code = ((UInt32)data[1] << 24) | ((UInt32)data[2] << 16) | ((UInt32)data[3] << 8) | ((UInt32)data[4]); - p->range = 0xFFFFFFFF; - p->needFlush = 0; -} - -void LzmaDec_InitDicAndState(CLzmaDec *p, Bool initDic, Bool initState) -{ - p->needFlush = 1; - p->remainLen = 0; - p->tempBufSize = 0; - - if (initDic) - { - p->processedPos = 0; - p->checkDicSize = 0; - p->needInitState = 1; - } - if (initState) - p->needInitState = 1; -} - -void LzmaDec_Init(CLzmaDec *p) -{ - p->dicPos = 0; - LzmaDec_InitDicAndState(p, True, True); -} - -static void LzmaDec_InitStateReal(CLzmaDec *p) -{ - UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (p->prop.lc + p->prop.lp)); - UInt32 i; - CLzmaProb *probs = p->probs; - for (i = 0; i < numProbs; i++) - probs[i] = kBitModelTotal >> 1; - p->reps[0] = p->reps[1] = p->reps[2] = p->reps[3] = 1; - p->state = 0; - p->needInitState = 0; -} - -SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen, - ELzmaFinishMode finishMode, ELzmaStatus *status) -{ - SizeT inSize = *srcLen; - (*srcLen) = 0; - LzmaDec_WriteRem(p, dicLimit); - - *status = LZMA_STATUS_NOT_SPECIFIED; - - while (p->remainLen != kMatchSpecLenStart) - { - int checkEndMarkNow; - - if (p->needFlush != 0) - { - for (; inSize > 0 && p->tempBufSize < RC_INIT_SIZE; (*srcLen)++, inSize--) - p->tempBuf[p->tempBufSize++] = *src++; - if (p->tempBufSize < RC_INIT_SIZE) - { - *status = LZMA_STATUS_NEEDS_MORE_INPUT; - return SZ_OK; - } - if (p->tempBuf[0] != 0) - return SZ_ERROR_DATA; - - LzmaDec_InitRc(p, p->tempBuf); - p->tempBufSize = 0; - } - - checkEndMarkNow = 0; - if (p->dicPos >= dicLimit) - { - if (p->remainLen == 0 && p->code == 0) - { - *status = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK; - return SZ_OK; - } - if (finishMode == LZMA_FINISH_ANY) - { - *status = LZMA_STATUS_NOT_FINISHED; - return SZ_OK; - } - if (p->remainLen != 0) - { - *status = LZMA_STATUS_NOT_FINISHED; - return SZ_ERROR_DATA; - } - checkEndMarkNow = 1; - } - - if (p->needInitState) - LzmaDec_InitStateReal(p); - - if (p->tempBufSize == 0) - { - SizeT processed; - const Byte *bufLimit; - if (inSize < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) - { - int dummyRes = LzmaDec_TryDummy(p, src, inSize); - if (dummyRes == DUMMY_ERROR) - { - memcpy(p->tempBuf, src, inSize); - p->tempBufSize = (unsigned)inSize; - (*srcLen) += inSize; - *status = LZMA_STATUS_NEEDS_MORE_INPUT; - return SZ_OK; - } - if (checkEndMarkNow && dummyRes != DUMMY_MATCH) - { - *status = LZMA_STATUS_NOT_FINISHED; - return SZ_ERROR_DATA; - } - bufLimit = src; - } - else - bufLimit = src + inSize - LZMA_REQUIRED_INPUT_MAX; - p->buf = src; - if (LzmaDec_DecodeReal2(p, dicLimit, bufLimit) != 0) - return SZ_ERROR_DATA; - processed = (SizeT)(p->buf - src); - (*srcLen) += processed; - src += processed; - inSize -= processed; - } - else - { - unsigned rem = p->tempBufSize, lookAhead = 0; - while (rem < LZMA_REQUIRED_INPUT_MAX && lookAhead < inSize) - p->tempBuf[rem++] = src[lookAhead++]; - p->tempBufSize = rem; - if (rem < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) - { - int dummyRes = LzmaDec_TryDummy(p, p->tempBuf, rem); - if (dummyRes == DUMMY_ERROR) - { - (*srcLen) += lookAhead; - *status = LZMA_STATUS_NEEDS_MORE_INPUT; - return SZ_OK; - } - if (checkEndMarkNow && dummyRes != DUMMY_MATCH) - { - *status = LZMA_STATUS_NOT_FINISHED; - return SZ_ERROR_DATA; - } - } - p->buf = p->tempBuf; - if (LzmaDec_DecodeReal2(p, dicLimit, p->buf) != 0) - return SZ_ERROR_DATA; - lookAhead -= (rem - (unsigned)(p->buf - p->tempBuf)); - (*srcLen) += lookAhead; - src += lookAhead; - inSize -= lookAhead; - p->tempBufSize = 0; - } - } - if (p->code == 0) - *status = LZMA_STATUS_FINISHED_WITH_MARK; - return (p->code == 0) ? SZ_OK : SZ_ERROR_DATA; -} - -SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status) -{ - SizeT outSize = *destLen; - SizeT inSize = *srcLen; - *srcLen = *destLen = 0; - for (;;) - { - SizeT inSizeCur = inSize, outSizeCur, dicPos; - ELzmaFinishMode curFinishMode; - SRes res; - if (p->dicPos == p->dicBufSize) - p->dicPos = 0; - dicPos = p->dicPos; - if (outSize > p->dicBufSize - dicPos) - { - outSizeCur = p->dicBufSize; - curFinishMode = LZMA_FINISH_ANY; - } - else - { - outSizeCur = dicPos + outSize; - curFinishMode = finishMode; - } - - res = LzmaDec_DecodeToDic(p, outSizeCur, src, &inSizeCur, curFinishMode, status); - src += inSizeCur; - inSize -= inSizeCur; - *srcLen += inSizeCur; - outSizeCur = p->dicPos - dicPos; - memcpy(dest, p->dic + dicPos, outSizeCur); - dest += outSizeCur; - outSize -= outSizeCur; - *destLen += outSizeCur; - if (res != 0) - return res; - if (outSizeCur == 0 || outSize == 0) - return SZ_OK; - } -} - -void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc) -{ - alloc->Free(alloc, p->probs); - p->probs = 0; -} - -static void LzmaDec_FreeDict(CLzmaDec *p, ISzAlloc *alloc) -{ - alloc->Free(alloc, p->dic); - p->dic = 0; -} - -void LzmaDec_Free(CLzmaDec *p, ISzAlloc *alloc) -{ - LzmaDec_FreeProbs(p, alloc); - LzmaDec_FreeDict(p, alloc); -} - -SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size) -{ - UInt32 dicSize; - Byte d; - - if (size < LZMA_PROPS_SIZE) - return SZ_ERROR_UNSUPPORTED; - else - dicSize = data[1] | ((UInt32)data[2] << 8) | ((UInt32)data[3] << 16) | ((UInt32)data[4] << 24); - - if (dicSize < LZMA_DIC_MIN) - dicSize = LZMA_DIC_MIN; - p->dicSize = dicSize; - - d = data[0]; - if (d >= (9 * 5 * 5)) - return SZ_ERROR_UNSUPPORTED; - - p->lc = d % 9; - d /= 9; - p->pb = d / 5; - p->lp = d % 5; - - return SZ_OK; -} - -static SRes LzmaDec_AllocateProbs2(CLzmaDec *p, const CLzmaProps *propNew, ISzAlloc *alloc) -{ - UInt32 numProbs = LzmaProps_GetNumProbs(propNew); - if (p->probs == 0 || numProbs != p->numProbs) - { - LzmaDec_FreeProbs(p, alloc); - p->probs = (CLzmaProb *)alloc->Alloc(alloc, numProbs * sizeof(CLzmaProb)); - p->numProbs = numProbs; - if (p->probs == 0) - return SZ_ERROR_MEM; - } - return SZ_OK; -} - -SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc) -{ - CLzmaProps propNew; - RINOK(LzmaProps_Decode(&propNew, props, propsSize)); - RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); - p->prop = propNew; - return SZ_OK; -} - -SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc) -{ - CLzmaProps propNew; - SizeT dicBufSize; - RINOK(LzmaProps_Decode(&propNew, props, propsSize)); - RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); - dicBufSize = propNew.dicSize; - if (p->dic == 0 || dicBufSize != p->dicBufSize) - { - LzmaDec_FreeDict(p, alloc); - p->dic = (Byte *)alloc->Alloc(alloc, dicBufSize); - if (p->dic == 0) - { - LzmaDec_FreeProbs(p, alloc); - return SZ_ERROR_MEM; - } - } - p->dicBufSize = dicBufSize; - p->prop = propNew; - return SZ_OK; -} - -SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, - const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, - ELzmaStatus *status, ISzAlloc *alloc) -{ - CLzmaDec p; - SRes res; - SizeT inSize = *srcLen; - SizeT outSize = *destLen; - *srcLen = *destLen = 0; - if (inSize < RC_INIT_SIZE) - return SZ_ERROR_INPUT_EOF; - - LzmaDec_Construct(&p); - res = LzmaDec_AllocateProbs(&p, propData, propSize, alloc); - if (res != 0) - return res; - p.dic = dest; - p.dicBufSize = outSize; - - LzmaDec_Init(&p); - - *srcLen = inSize; - res = LzmaDec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status); - - if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT) - res = SZ_ERROR_INPUT_EOF; - - (*destLen) = p.dicPos; - LzmaDec_FreeProbs(&p, alloc); - return res; -} diff --git a/modules/lib7z/LZMASDK/C/LzmaDec.h b/modules/lib7z/LZMASDK/C/LzmaDec.h deleted file mode 100644 index 6741a644b607..000000000000 --- a/modules/lib7z/LZMASDK/C/LzmaDec.h +++ /dev/null @@ -1,231 +0,0 @@ -/* LzmaDec.h -- LZMA Decoder -2009-02-07 : Igor Pavlov : Public domain */ - -#ifndef __LZMA_DEC_H -#define __LZMA_DEC_H - -#include "Types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* #define _LZMA_PROB32 */ -/* _LZMA_PROB32 can increase the speed on some CPUs, - but memory usage for CLzmaDec::probs will be doubled in that case */ - -#ifdef _LZMA_PROB32 -#define CLzmaProb UInt32 -#else -#define CLzmaProb UInt16 -#endif - - -/* ---------- LZMA Properties ---------- */ - -#define LZMA_PROPS_SIZE 5 - -typedef struct _CLzmaProps -{ - unsigned lc, lp, pb; - UInt32 dicSize; -} CLzmaProps; - -/* LzmaProps_Decode - decodes properties -Returns: - SZ_OK - SZ_ERROR_UNSUPPORTED - Unsupported properties -*/ - -SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size); - - -/* ---------- LZMA Decoder state ---------- */ - -/* LZMA_REQUIRED_INPUT_MAX = number of required input bytes for worst case. - Num bits = log2((2^11 / 31) ^ 22) + 26 < 134 + 26 = 160; */ - -#define LZMA_REQUIRED_INPUT_MAX 20 - -typedef struct -{ - CLzmaProps prop; - CLzmaProb *probs; - Byte *dic; - const Byte *buf; - UInt32 range, code; - SizeT dicPos; - SizeT dicBufSize; - UInt32 processedPos; - UInt32 checkDicSize; - unsigned state; - UInt32 reps[4]; - unsigned remainLen; - int needFlush; - int needInitState; - UInt32 numProbs; - unsigned tempBufSize; - Byte tempBuf[LZMA_REQUIRED_INPUT_MAX]; -} CLzmaDec; - -#define LzmaDec_Construct(p) { (p)->dic = 0; (p)->probs = 0; } - -void LzmaDec_Init(CLzmaDec *p); - -/* There are two types of LZMA streams: - 0) Stream with end mark. That end mark adds about 6 bytes to compressed size. - 1) Stream without end mark. You must know exact uncompressed size to decompress such stream. */ - -typedef enum -{ - LZMA_FINISH_ANY, /* finish at any point */ - LZMA_FINISH_END /* block must be finished at the end */ -} ELzmaFinishMode; - -/* ELzmaFinishMode has meaning only if the decoding reaches output limit !!! - - You must use LZMA_FINISH_END, when you know that current output buffer - covers last bytes of block. In other cases you must use LZMA_FINISH_ANY. - - If LZMA decoder sees end marker before reaching output limit, it returns SZ_OK, - and output value of destLen will be less than output buffer size limit. - You can check status result also. - - You can use multiple checks to test data integrity after full decompression: - 1) Check Result and "status" variable. - 2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize. - 3) Check that output(srcLen) = compressedSize, if you know real compressedSize. - You must use correct finish mode in that case. */ - -typedef enum -{ - LZMA_STATUS_NOT_SPECIFIED, /* use main error code instead */ - LZMA_STATUS_FINISHED_WITH_MARK, /* stream was finished with end mark. */ - LZMA_STATUS_NOT_FINISHED, /* stream was not finished */ - LZMA_STATUS_NEEDS_MORE_INPUT, /* you must provide more input bytes */ - LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK /* there is probability that stream was finished without end mark */ -} ELzmaStatus; - -/* ELzmaStatus is used only as output value for function call */ - - -/* ---------- Interfaces ---------- */ - -/* There are 3 levels of interfaces: - 1) Dictionary Interface - 2) Buffer Interface - 3) One Call Interface - You can select any of these interfaces, but don't mix functions from different - groups for same object. */ - - -/* There are two variants to allocate state for Dictionary Interface: - 1) LzmaDec_Allocate / LzmaDec_Free - 2) LzmaDec_AllocateProbs / LzmaDec_FreeProbs - You can use variant 2, if you set dictionary buffer manually. - For Buffer Interface you must always use variant 1. - -LzmaDec_Allocate* can return: - SZ_OK - SZ_ERROR_MEM - Memory allocation error - SZ_ERROR_UNSUPPORTED - Unsupported properties -*/ - -SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc); -void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc); - -SRes LzmaDec_Allocate(CLzmaDec *state, const Byte *prop, unsigned propsSize, ISzAlloc *alloc); -void LzmaDec_Free(CLzmaDec *state, ISzAlloc *alloc); - -/* ---------- Dictionary Interface ---------- */ - -/* You can use it, if you want to eliminate the overhead for data copying from - dictionary to some other external buffer. - You must work with CLzmaDec variables directly in this interface. - - STEPS: - LzmaDec_Constr() - LzmaDec_Allocate() - for (each new stream) - { - LzmaDec_Init() - while (it needs more decompression) - { - LzmaDec_DecodeToDic() - use data from CLzmaDec::dic and update CLzmaDec::dicPos - } - } - LzmaDec_Free() -*/ - -/* LzmaDec_DecodeToDic - - The decoding to internal dictionary buffer (CLzmaDec::dic). - You must manually update CLzmaDec::dicPos, if it reaches CLzmaDec::dicBufSize !!! - -finishMode: - It has meaning only if the decoding reaches output limit (dicLimit). - LZMA_FINISH_ANY - Decode just dicLimit bytes. - LZMA_FINISH_END - Stream must be finished after dicLimit. - -Returns: - SZ_OK - status: - LZMA_STATUS_FINISHED_WITH_MARK - LZMA_STATUS_NOT_FINISHED - LZMA_STATUS_NEEDS_MORE_INPUT - LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK - SZ_ERROR_DATA - Data error -*/ - -SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, - const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); - - -/* ---------- Buffer Interface ---------- */ - -/* It's zlib-like interface. - See LzmaDec_DecodeToDic description for information about STEPS and return results, - but you must use LzmaDec_DecodeToBuf instead of LzmaDec_DecodeToDic and you don't need - to work with CLzmaDec variables manually. - -finishMode: - It has meaning only if the decoding reaches output limit (*destLen). - LZMA_FINISH_ANY - Decode just destLen bytes. - LZMA_FINISH_END - Stream must be finished after (*destLen). -*/ - -SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, - const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); - - -/* ---------- One Call Interface ---------- */ - -/* LzmaDecode - -finishMode: - It has meaning only if the decoding reaches output limit (*destLen). - LZMA_FINISH_ANY - Decode just destLen bytes. - LZMA_FINISH_END - Stream must be finished after (*destLen). - -Returns: - SZ_OK - status: - LZMA_STATUS_FINISHED_WITH_MARK - LZMA_STATUS_NOT_FINISHED - LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK - SZ_ERROR_DATA - Data error - SZ_ERROR_MEM - Memory allocation error - SZ_ERROR_UNSUPPORTED - Unsupported properties - SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src). -*/ - -SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, - const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, - ELzmaStatus *status, ISzAlloc *alloc); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/LzmaEnc.c b/modules/lib7z/LZMASDK/C/LzmaEnc.c deleted file mode 100644 index b20267390559..000000000000 --- a/modules/lib7z/LZMASDK/C/LzmaEnc.c +++ /dev/null @@ -1,2268 +0,0 @@ -/* LzmaEnc.c -- LZMA Encoder -2009-04-22 : Igor Pavlov : Public domain */ - -#include - -/* #define SHOW_STAT */ -/* #define SHOW_STAT2 */ - -#if defined(SHOW_STAT) || defined(SHOW_STAT2) -#include -#endif - -#include "LzmaEnc.h" - -#include "LzFind.h" -#ifdef COMPRESS_MF_MT -#include "LzFindMt.h" -#endif - -#ifdef SHOW_STAT -static int ttt = 0; -#endif - -#define kBlockSizeMax ((1 << LZMA_NUM_BLOCK_SIZE_BITS) - 1) - -#define kBlockSize (9 << 10) -#define kUnpackBlockSize (1 << 18) -#define kMatchArraySize (1 << 21) -#define kMatchRecordMaxSize ((LZMA_MATCH_LEN_MAX * 2 + 3) * LZMA_MATCH_LEN_MAX) - -#define kNumMaxDirectBits (31) - -#define kNumTopBits 24 -#define kTopValue ((UInt32)1 << kNumTopBits) - -#define kNumBitModelTotalBits 11 -#define kBitModelTotal (1 << kNumBitModelTotalBits) -#define kNumMoveBits 5 -#define kProbInitValue (kBitModelTotal >> 1) - -#define kNumMoveReducingBits 4 -#define kNumBitPriceShiftBits 4 -#define kBitPrice (1 << kNumBitPriceShiftBits) - -void LzmaEncProps_Init(CLzmaEncProps *p) -{ - p->level = 5; - p->dictSize = p->mc = 0; - p->lc = p->lp = p->pb = p->algo = p->fb = p->btMode = p->numHashBytes = p->numThreads = -1; - p->writeEndMark = 0; -} - -void LzmaEncProps_Normalize(CLzmaEncProps *p) -{ - int level = p->level; - if (level < 0) level = 5; - p->level = level; - if (p->dictSize == 0) p->dictSize = (level <= 5 ? (1 << (level * 2 + 14)) : (level == 6 ? (1 << 25) : (1 << 26))); - if (p->lc < 0) p->lc = 3; - if (p->lp < 0) p->lp = 0; - if (p->pb < 0) p->pb = 2; - if (p->algo < 0) p->algo = (level < 5 ? 0 : 1); - if (p->fb < 0) p->fb = (level < 7 ? 32 : 64); - if (p->btMode < 0) p->btMode = (p->algo == 0 ? 0 : 1); - if (p->numHashBytes < 0) p->numHashBytes = 4; - if (p->mc == 0) p->mc = (16 + (p->fb >> 1)) >> (p->btMode ? 0 : 1); - if (p->numThreads < 0) - p->numThreads = - #ifdef COMPRESS_MF_MT - ((p->btMode && p->algo) ? 2 : 1); - #else - 1; - #endif -} - -UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2) -{ - CLzmaEncProps props = *props2; - LzmaEncProps_Normalize(&props); - return props.dictSize; -} - -/* #define LZMA_LOG_BSR */ -/* Define it for Intel's CPU */ - - -#ifdef LZMA_LOG_BSR - -#define kDicLogSizeMaxCompress 30 - -#define BSR2_RET(pos, res) { unsigned long i; _BitScanReverse(&i, (pos)); res = (i + i) + ((pos >> (i - 1)) & 1); } - -UInt32 GetPosSlot1(UInt32 pos) -{ - UInt32 res; - BSR2_RET(pos, res); - return res; -} -#define GetPosSlot2(pos, res) { BSR2_RET(pos, res); } -#define GetPosSlot(pos, res) { if (pos < 2) res = pos; else BSR2_RET(pos, res); } - -#else - -#define kNumLogBits (9 + (int)sizeof(size_t) / 2) -#define kDicLogSizeMaxCompress ((kNumLogBits - 1) * 2 + 7) - -void LzmaEnc_FastPosInit(Byte *g_FastPos) -{ - int c = 2, slotFast; - g_FastPos[0] = 0; - g_FastPos[1] = 1; - - for (slotFast = 2; slotFast < kNumLogBits * 2; slotFast++) - { - UInt32 k = (1 << ((slotFast >> 1) - 1)); - UInt32 j; - for (j = 0; j < k; j++, c++) - g_FastPos[c] = (Byte)slotFast; - } -} - -#define BSR2_RET(pos, res) { UInt32 i = 6 + ((kNumLogBits - 1) & \ - (0 - (((((UInt32)1 << (kNumLogBits + 6)) - 1) - pos) >> 31))); \ - res = p->g_FastPos[pos >> i] + (i * 2); } -/* -#define BSR2_RET(pos, res) { res = (pos < (1 << (kNumLogBits + 6))) ? \ - p->g_FastPos[pos >> 6] + 12 : \ - p->g_FastPos[pos >> (6 + kNumLogBits - 1)] + (6 + (kNumLogBits - 1)) * 2; } -*/ - -#define GetPosSlot1(pos) p->g_FastPos[pos] -#define GetPosSlot2(pos, res) { BSR2_RET(pos, res); } -#define GetPosSlot(pos, res) { if (pos < kNumFullDistances) res = p->g_FastPos[pos]; else BSR2_RET(pos, res); } - -#endif - - -#define LZMA_NUM_REPS 4 - -typedef unsigned CState; - -typedef struct -{ - UInt32 price; - - CState state; - int prev1IsChar; - int prev2; - - UInt32 posPrev2; - UInt32 backPrev2; - - UInt32 posPrev; - UInt32 backPrev; - UInt32 backs[LZMA_NUM_REPS]; -} COptimal; - -#define kNumOpts (1 << 12) - -#define kNumLenToPosStates 4 -#define kNumPosSlotBits 6 -#define kDicLogSizeMin 0 -#define kDicLogSizeMax 32 -#define kDistTableSizeMax (kDicLogSizeMax * 2) - - -#define kNumAlignBits 4 -#define kAlignTableSize (1 << kNumAlignBits) -#define kAlignMask (kAlignTableSize - 1) - -#define kStartPosModelIndex 4 -#define kEndPosModelIndex 14 -#define kNumPosModels (kEndPosModelIndex - kStartPosModelIndex) - -#define kNumFullDistances (1 << (kEndPosModelIndex / 2)) - -#ifdef _LZMA_PROB32 -#define CLzmaProb UInt32 -#else -#define CLzmaProb UInt16 -#endif - -#define LZMA_PB_MAX 4 -#define LZMA_LC_MAX 8 -#define LZMA_LP_MAX 4 - -#define LZMA_NUM_PB_STATES_MAX (1 << LZMA_PB_MAX) - - -#define kLenNumLowBits 3 -#define kLenNumLowSymbols (1 << kLenNumLowBits) -#define kLenNumMidBits 3 -#define kLenNumMidSymbols (1 << kLenNumMidBits) -#define kLenNumHighBits 8 -#define kLenNumHighSymbols (1 << kLenNumHighBits) - -#define kLenNumSymbolsTotal (kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols) - -#define LZMA_MATCH_LEN_MIN 2 -#define LZMA_MATCH_LEN_MAX (LZMA_MATCH_LEN_MIN + kLenNumSymbolsTotal - 1) - -#define kNumStates 12 - -typedef struct -{ - CLzmaProb choice; - CLzmaProb choice2; - CLzmaProb low[LZMA_NUM_PB_STATES_MAX << kLenNumLowBits]; - CLzmaProb mid[LZMA_NUM_PB_STATES_MAX << kLenNumMidBits]; - CLzmaProb high[kLenNumHighSymbols]; -} CLenEnc; - -typedef struct -{ - CLenEnc p; - UInt32 prices[LZMA_NUM_PB_STATES_MAX][kLenNumSymbolsTotal]; - UInt32 tableSize; - UInt32 counters[LZMA_NUM_PB_STATES_MAX]; -} CLenPriceEnc; - -typedef struct -{ - UInt32 range; - Byte cache; - UInt64 low; - UInt64 cacheSize; - Byte *buf; - Byte *bufLim; - Byte *bufBase; - ISeqOutStream *outStream; - UInt64 processed; - SRes res; -} CRangeEnc; - -typedef struct -{ - CLzmaProb *litProbs; - - CLzmaProb isMatch[kNumStates][LZMA_NUM_PB_STATES_MAX]; - CLzmaProb isRep[kNumStates]; - CLzmaProb isRepG0[kNumStates]; - CLzmaProb isRepG1[kNumStates]; - CLzmaProb isRepG2[kNumStates]; - CLzmaProb isRep0Long[kNumStates][LZMA_NUM_PB_STATES_MAX]; - - CLzmaProb posSlotEncoder[kNumLenToPosStates][1 << kNumPosSlotBits]; - CLzmaProb posEncoders[kNumFullDistances - kEndPosModelIndex]; - CLzmaProb posAlignEncoder[1 << kNumAlignBits]; - - CLenPriceEnc lenEnc; - CLenPriceEnc repLenEnc; - - UInt32 reps[LZMA_NUM_REPS]; - UInt32 state; -} CSaveState; - -typedef struct -{ - IMatchFinder matchFinder; - void *matchFinderObj; - - #ifdef COMPRESS_MF_MT - Bool mtMode; - CMatchFinderMt matchFinderMt; - #endif - - CMatchFinder matchFinderBase; - - #ifdef COMPRESS_MF_MT - Byte pad[128]; - #endif - - UInt32 optimumEndIndex; - UInt32 optimumCurrentIndex; - - UInt32 longestMatchLength; - UInt32 numPairs; - UInt32 numAvail; - COptimal opt[kNumOpts]; - - #ifndef LZMA_LOG_BSR - Byte g_FastPos[1 << kNumLogBits]; - #endif - - UInt32 ProbPrices[kBitModelTotal >> kNumMoveReducingBits]; - UInt32 matches[LZMA_MATCH_LEN_MAX * 2 + 2 + 1]; - UInt32 numFastBytes; - UInt32 additionalOffset; - UInt32 reps[LZMA_NUM_REPS]; - UInt32 state; - - UInt32 posSlotPrices[kNumLenToPosStates][kDistTableSizeMax]; - UInt32 distancesPrices[kNumLenToPosStates][kNumFullDistances]; - UInt32 alignPrices[kAlignTableSize]; - UInt32 alignPriceCount; - - UInt32 distTableSize; - - unsigned lc, lp, pb; - unsigned lpMask, pbMask; - - CLzmaProb *litProbs; - - CLzmaProb isMatch[kNumStates][LZMA_NUM_PB_STATES_MAX]; - CLzmaProb isRep[kNumStates]; - CLzmaProb isRepG0[kNumStates]; - CLzmaProb isRepG1[kNumStates]; - CLzmaProb isRepG2[kNumStates]; - CLzmaProb isRep0Long[kNumStates][LZMA_NUM_PB_STATES_MAX]; - - CLzmaProb posSlotEncoder[kNumLenToPosStates][1 << kNumPosSlotBits]; - CLzmaProb posEncoders[kNumFullDistances - kEndPosModelIndex]; - CLzmaProb posAlignEncoder[1 << kNumAlignBits]; - - CLenPriceEnc lenEnc; - CLenPriceEnc repLenEnc; - - unsigned lclp; - - Bool fastMode; - - CRangeEnc rc; - - Bool writeEndMark; - UInt64 nowPos64; - UInt32 matchPriceCount; - Bool finished; - Bool multiThread; - - SRes result; - UInt32 dictSize; - UInt32 matchFinderCycles; - - int needInit; - - CSaveState saveState; -} CLzmaEnc; - -void LzmaEnc_SaveState(CLzmaEncHandle pp) -{ - CLzmaEnc *p = (CLzmaEnc *)pp; - CSaveState *dest = &p->saveState; - int i; - dest->lenEnc = p->lenEnc; - dest->repLenEnc = p->repLenEnc; - dest->state = p->state; - - for (i = 0; i < kNumStates; i++) - { - memcpy(dest->isMatch[i], p->isMatch[i], sizeof(p->isMatch[i])); - memcpy(dest->isRep0Long[i], p->isRep0Long[i], sizeof(p->isRep0Long[i])); - } - for (i = 0; i < kNumLenToPosStates; i++) - memcpy(dest->posSlotEncoder[i], p->posSlotEncoder[i], sizeof(p->posSlotEncoder[i])); - memcpy(dest->isRep, p->isRep, sizeof(p->isRep)); - memcpy(dest->isRepG0, p->isRepG0, sizeof(p->isRepG0)); - memcpy(dest->isRepG1, p->isRepG1, sizeof(p->isRepG1)); - memcpy(dest->isRepG2, p->isRepG2, sizeof(p->isRepG2)); - memcpy(dest->posEncoders, p->posEncoders, sizeof(p->posEncoders)); - memcpy(dest->posAlignEncoder, p->posAlignEncoder, sizeof(p->posAlignEncoder)); - memcpy(dest->reps, p->reps, sizeof(p->reps)); - memcpy(dest->litProbs, p->litProbs, (0x300 << p->lclp) * sizeof(CLzmaProb)); -} - -void LzmaEnc_RestoreState(CLzmaEncHandle pp) -{ - CLzmaEnc *dest = (CLzmaEnc *)pp; - const CSaveState *p = &dest->saveState; - int i; - dest->lenEnc = p->lenEnc; - dest->repLenEnc = p->repLenEnc; - dest->state = p->state; - - for (i = 0; i < kNumStates; i++) - { - memcpy(dest->isMatch[i], p->isMatch[i], sizeof(p->isMatch[i])); - memcpy(dest->isRep0Long[i], p->isRep0Long[i], sizeof(p->isRep0Long[i])); - } - for (i = 0; i < kNumLenToPosStates; i++) - memcpy(dest->posSlotEncoder[i], p->posSlotEncoder[i], sizeof(p->posSlotEncoder[i])); - memcpy(dest->isRep, p->isRep, sizeof(p->isRep)); - memcpy(dest->isRepG0, p->isRepG0, sizeof(p->isRepG0)); - memcpy(dest->isRepG1, p->isRepG1, sizeof(p->isRepG1)); - memcpy(dest->isRepG2, p->isRepG2, sizeof(p->isRepG2)); - memcpy(dest->posEncoders, p->posEncoders, sizeof(p->posEncoders)); - memcpy(dest->posAlignEncoder, p->posAlignEncoder, sizeof(p->posAlignEncoder)); - memcpy(dest->reps, p->reps, sizeof(p->reps)); - memcpy(dest->litProbs, p->litProbs, (0x300 << dest->lclp) * sizeof(CLzmaProb)); -} - -SRes LzmaEnc_SetProps(CLzmaEncHandle pp, const CLzmaEncProps *props2) -{ - CLzmaEnc *p = (CLzmaEnc *)pp; - CLzmaEncProps props = *props2; - LzmaEncProps_Normalize(&props); - - if (props.lc > LZMA_LC_MAX || props.lp > LZMA_LP_MAX || props.pb > LZMA_PB_MAX || - props.dictSize > (1 << kDicLogSizeMaxCompress) || props.dictSize > (1 << 30)) - return SZ_ERROR_PARAM; - p->dictSize = props.dictSize; - p->matchFinderCycles = props.mc; - { - unsigned fb = props.fb; - if (fb < 5) - fb = 5; - if (fb > LZMA_MATCH_LEN_MAX) - fb = LZMA_MATCH_LEN_MAX; - p->numFastBytes = fb; - } - p->lc = props.lc; - p->lp = props.lp; - p->pb = props.pb; - p->fastMode = (props.algo == 0); - p->matchFinderBase.btMode = props.btMode; - { - UInt32 numHashBytes = 4; - if (props.btMode) - { - if (props.numHashBytes < 2) - numHashBytes = 2; - else if (props.numHashBytes < 4) - numHashBytes = props.numHashBytes; - } - p->matchFinderBase.numHashBytes = numHashBytes; - } - - p->matchFinderBase.cutValue = props.mc; - - p->writeEndMark = props.writeEndMark; - - #ifdef COMPRESS_MF_MT - /* - if (newMultiThread != _multiThread) - { - ReleaseMatchFinder(); - _multiThread = newMultiThread; - } - */ - p->multiThread = (props.numThreads > 1); - #endif - - return SZ_OK; -} - -static const int kLiteralNextStates[kNumStates] = {0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5}; -static const int kMatchNextStates[kNumStates] = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10}; -static const int kRepNextStates[kNumStates] = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11}; -static const int kShortRepNextStates[kNumStates]= {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11}; - -#define IsCharState(s) ((s) < 7) - -#define GetLenToPosState(len) (((len) < kNumLenToPosStates + 1) ? (len) - 2 : kNumLenToPosStates - 1) - -#define kInfinityPrice (1 << 30) - -static void RangeEnc_Construct(CRangeEnc *p) -{ - p->outStream = 0; - p->bufBase = 0; -} - -#define RangeEnc_GetProcessed(p) ((p)->processed + ((p)->buf - (p)->bufBase) + (p)->cacheSize) - -#define RC_BUF_SIZE (1 << 16) -static int RangeEnc_Alloc(CRangeEnc *p, ISzAlloc *alloc) -{ - if (p->bufBase == 0) - { - p->bufBase = (Byte *)alloc->Alloc(alloc, RC_BUF_SIZE); - if (p->bufBase == 0) - return 0; - p->bufLim = p->bufBase + RC_BUF_SIZE; - } - return 1; -} - -static void RangeEnc_Free(CRangeEnc *p, ISzAlloc *alloc) -{ - alloc->Free(alloc, p->bufBase); - p->bufBase = 0; -} - -static void RangeEnc_Init(CRangeEnc *p) -{ - /* Stream.Init(); */ - p->low = 0; - p->range = 0xFFFFFFFF; - p->cacheSize = 1; - p->cache = 0; - - p->buf = p->bufBase; - - p->processed = 0; - p->res = SZ_OK; -} - -static void RangeEnc_FlushStream(CRangeEnc *p) -{ - size_t num; - if (p->res != SZ_OK) - return; - num = p->buf - p->bufBase; - if (num != p->outStream->Write(p->outStream, p->bufBase, num)) - p->res = SZ_ERROR_WRITE; - p->processed += num; - p->buf = p->bufBase; -} - -static void MY_FAST_CALL RangeEnc_ShiftLow(CRangeEnc *p) -{ - if ((UInt32)p->low < (UInt32)0xFF000000 || (int)(p->low >> 32) != 0) - { - Byte temp = p->cache; - do - { - Byte *buf = p->buf; - *buf++ = (Byte)(temp + (Byte)(p->low >> 32)); - p->buf = buf; - if (buf == p->bufLim) - RangeEnc_FlushStream(p); - temp = 0xFF; - } - while (--p->cacheSize != 0); - p->cache = (Byte)((UInt32)p->low >> 24); - } - p->cacheSize++; - p->low = (UInt32)p->low << 8; -} - -static void RangeEnc_FlushData(CRangeEnc *p) -{ - int i; - for (i = 0; i < 5; i++) - RangeEnc_ShiftLow(p); -} - -static void RangeEnc_EncodeDirectBits(CRangeEnc *p, UInt32 value, int numBits) -{ - do - { - p->range >>= 1; - p->low += p->range & (0 - ((value >> --numBits) & 1)); - if (p->range < kTopValue) - { - p->range <<= 8; - RangeEnc_ShiftLow(p); - } - } - while (numBits != 0); -} - -static void RangeEnc_EncodeBit(CRangeEnc *p, CLzmaProb *prob, UInt32 symbol) -{ - UInt32 ttt = *prob; - UInt32 newBound = (p->range >> kNumBitModelTotalBits) * ttt; - if (symbol == 0) - { - p->range = newBound; - ttt += (kBitModelTotal - ttt) >> kNumMoveBits; - } - else - { - p->low += newBound; - p->range -= newBound; - ttt -= ttt >> kNumMoveBits; - } - *prob = (CLzmaProb)ttt; - if (p->range < kTopValue) - { - p->range <<= 8; - RangeEnc_ShiftLow(p); - } -} - -static void LitEnc_Encode(CRangeEnc *p, CLzmaProb *probs, UInt32 symbol) -{ - symbol |= 0x100; - do - { - RangeEnc_EncodeBit(p, probs + (symbol >> 8), (symbol >> 7) & 1); - symbol <<= 1; - } - while (symbol < 0x10000); -} - -static void LitEnc_EncodeMatched(CRangeEnc *p, CLzmaProb *probs, UInt32 symbol, UInt32 matchByte) -{ - UInt32 offs = 0x100; - symbol |= 0x100; - do - { - matchByte <<= 1; - RangeEnc_EncodeBit(p, probs + (offs + (matchByte & offs) + (symbol >> 8)), (symbol >> 7) & 1); - symbol <<= 1; - offs &= ~(matchByte ^ symbol); - } - while (symbol < 0x10000); -} - -void LzmaEnc_InitPriceTables(UInt32 *ProbPrices) -{ - UInt32 i; - for (i = (1 << kNumMoveReducingBits) / 2; i < kBitModelTotal; i += (1 << kNumMoveReducingBits)) - { - const int kCyclesBits = kNumBitPriceShiftBits; - UInt32 w = i; - UInt32 bitCount = 0; - int j; - for (j = 0; j < kCyclesBits; j++) - { - w = w * w; - bitCount <<= 1; - while (w >= ((UInt32)1 << 16)) - { - w >>= 1; - bitCount++; - } - } - ProbPrices[i >> kNumMoveReducingBits] = ((kNumBitModelTotalBits << kCyclesBits) - 15 - bitCount); - } -} - - -#define GET_PRICE(prob, symbol) \ - p->ProbPrices[((prob) ^ (((-(int)(symbol))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits]; - -#define GET_PRICEa(prob, symbol) \ - ProbPrices[((prob) ^ ((-((int)(symbol))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits]; - -#define GET_PRICE_0(prob) p->ProbPrices[(prob) >> kNumMoveReducingBits] -#define GET_PRICE_1(prob) p->ProbPrices[((prob) ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits] - -#define GET_PRICE_0a(prob) ProbPrices[(prob) >> kNumMoveReducingBits] -#define GET_PRICE_1a(prob) ProbPrices[((prob) ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits] - -static UInt32 LitEnc_GetPrice(const CLzmaProb *probs, UInt32 symbol, UInt32 *ProbPrices) -{ - UInt32 price = 0; - symbol |= 0x100; - do - { - price += GET_PRICEa(probs[symbol >> 8], (symbol >> 7) & 1); - symbol <<= 1; - } - while (symbol < 0x10000); - return price; -} - -static UInt32 LitEnc_GetPriceMatched(const CLzmaProb *probs, UInt32 symbol, UInt32 matchByte, UInt32 *ProbPrices) -{ - UInt32 price = 0; - UInt32 offs = 0x100; - symbol |= 0x100; - do - { - matchByte <<= 1; - price += GET_PRICEa(probs[offs + (matchByte & offs) + (symbol >> 8)], (symbol >> 7) & 1); - symbol <<= 1; - offs &= ~(matchByte ^ symbol); - } - while (symbol < 0x10000); - return price; -} - - -static void RcTree_Encode(CRangeEnc *rc, CLzmaProb *probs, int numBitLevels, UInt32 symbol) -{ - UInt32 m = 1; - int i; - for (i = numBitLevels; i != 0;) - { - UInt32 bit; - i--; - bit = (symbol >> i) & 1; - RangeEnc_EncodeBit(rc, probs + m, bit); - m = (m << 1) | bit; - } -} - -static void RcTree_ReverseEncode(CRangeEnc *rc, CLzmaProb *probs, int numBitLevels, UInt32 symbol) -{ - UInt32 m = 1; - int i; - for (i = 0; i < numBitLevels; i++) - { - UInt32 bit = symbol & 1; - RangeEnc_EncodeBit(rc, probs + m, bit); - m = (m << 1) | bit; - symbol >>= 1; - } -} - -static UInt32 RcTree_GetPrice(const CLzmaProb *probs, int numBitLevels, UInt32 symbol, UInt32 *ProbPrices) -{ - UInt32 price = 0; - symbol |= (1 << numBitLevels); - while (symbol != 1) - { - price += GET_PRICEa(probs[symbol >> 1], symbol & 1); - symbol >>= 1; - } - return price; -} - -static UInt32 RcTree_ReverseGetPrice(const CLzmaProb *probs, int numBitLevels, UInt32 symbol, UInt32 *ProbPrices) -{ - UInt32 price = 0; - UInt32 m = 1; - int i; - for (i = numBitLevels; i != 0; i--) - { - UInt32 bit = symbol & 1; - symbol >>= 1; - price += GET_PRICEa(probs[m], bit); - m = (m << 1) | bit; - } - return price; -} - - -static void LenEnc_Init(CLenEnc *p) -{ - unsigned i; - p->choice = p->choice2 = kProbInitValue; - for (i = 0; i < (LZMA_NUM_PB_STATES_MAX << kLenNumLowBits); i++) - p->low[i] = kProbInitValue; - for (i = 0; i < (LZMA_NUM_PB_STATES_MAX << kLenNumMidBits); i++) - p->mid[i] = kProbInitValue; - for (i = 0; i < kLenNumHighSymbols; i++) - p->high[i] = kProbInitValue; -} - -static void LenEnc_Encode(CLenEnc *p, CRangeEnc *rc, UInt32 symbol, UInt32 posState) -{ - if (symbol < kLenNumLowSymbols) - { - RangeEnc_EncodeBit(rc, &p->choice, 0); - RcTree_Encode(rc, p->low + (posState << kLenNumLowBits), kLenNumLowBits, symbol); - } - else - { - RangeEnc_EncodeBit(rc, &p->choice, 1); - if (symbol < kLenNumLowSymbols + kLenNumMidSymbols) - { - RangeEnc_EncodeBit(rc, &p->choice2, 0); - RcTree_Encode(rc, p->mid + (posState << kLenNumMidBits), kLenNumMidBits, symbol - kLenNumLowSymbols); - } - else - { - RangeEnc_EncodeBit(rc, &p->choice2, 1); - RcTree_Encode(rc, p->high, kLenNumHighBits, symbol - kLenNumLowSymbols - kLenNumMidSymbols); - } - } -} - -static void LenEnc_SetPrices(CLenEnc *p, UInt32 posState, UInt32 numSymbols, UInt32 *prices, UInt32 *ProbPrices) -{ - UInt32 a0 = GET_PRICE_0a(p->choice); - UInt32 a1 = GET_PRICE_1a(p->choice); - UInt32 b0 = a1 + GET_PRICE_0a(p->choice2); - UInt32 b1 = a1 + GET_PRICE_1a(p->choice2); - UInt32 i = 0; - for (i = 0; i < kLenNumLowSymbols; i++) - { - if (i >= numSymbols) - return; - prices[i] = a0 + RcTree_GetPrice(p->low + (posState << kLenNumLowBits), kLenNumLowBits, i, ProbPrices); - } - for (; i < kLenNumLowSymbols + kLenNumMidSymbols; i++) - { - if (i >= numSymbols) - return; - prices[i] = b0 + RcTree_GetPrice(p->mid + (posState << kLenNumMidBits), kLenNumMidBits, i - kLenNumLowSymbols, ProbPrices); - } - for (; i < numSymbols; i++) - prices[i] = b1 + RcTree_GetPrice(p->high, kLenNumHighBits, i - kLenNumLowSymbols - kLenNumMidSymbols, ProbPrices); -} - -static void MY_FAST_CALL LenPriceEnc_UpdateTable(CLenPriceEnc *p, UInt32 posState, UInt32 *ProbPrices) -{ - LenEnc_SetPrices(&p->p, posState, p->tableSize, p->prices[posState], ProbPrices); - p->counters[posState] = p->tableSize; -} - -static void LenPriceEnc_UpdateTables(CLenPriceEnc *p, UInt32 numPosStates, UInt32 *ProbPrices) -{ - UInt32 posState; - for (posState = 0; posState < numPosStates; posState++) - LenPriceEnc_UpdateTable(p, posState, ProbPrices); -} - -static void LenEnc_Encode2(CLenPriceEnc *p, CRangeEnc *rc, UInt32 symbol, UInt32 posState, Bool updatePrice, UInt32 *ProbPrices) -{ - LenEnc_Encode(&p->p, rc, symbol, posState); - if (updatePrice) - if (--p->counters[posState] == 0) - LenPriceEnc_UpdateTable(p, posState, ProbPrices); -} - - - - -static void MovePos(CLzmaEnc *p, UInt32 num) -{ - #ifdef SHOW_STAT - ttt += num; - printf("\n MovePos %d", num); - #endif - if (num != 0) - { - p->additionalOffset += num; - p->matchFinder.Skip(p->matchFinderObj, num); - } -} - -static UInt32 ReadMatchDistances(CLzmaEnc *p, UInt32 *numDistancePairsRes) -{ - UInt32 lenRes = 0, numPairs; - p->numAvail = p->matchFinder.GetNumAvailableBytes(p->matchFinderObj); - numPairs = p->matchFinder.GetMatches(p->matchFinderObj, p->matches); - #ifdef SHOW_STAT - printf("\n i = %d numPairs = %d ", ttt, numPairs / 2); - ttt++; - { - UInt32 i; - for (i = 0; i < numPairs; i += 2) - printf("%2d %6d | ", p->matches[i], p->matches[i + 1]); - } - #endif - if (numPairs > 0) - { - lenRes = p->matches[numPairs - 2]; - if (lenRes == p->numFastBytes) - { - const Byte *pby = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; - UInt32 distance = p->matches[numPairs - 1] + 1; - UInt32 numAvail = p->numAvail; - if (numAvail > LZMA_MATCH_LEN_MAX) - numAvail = LZMA_MATCH_LEN_MAX; - { - const Byte *pby2 = pby - distance; - for (; lenRes < numAvail && pby[lenRes] == pby2[lenRes]; lenRes++); - } - } - } - p->additionalOffset++; - *numDistancePairsRes = numPairs; - return lenRes; -} - - -#define MakeAsChar(p) (p)->backPrev = (UInt32)(-1); (p)->prev1IsChar = False; -#define MakeAsShortRep(p) (p)->backPrev = 0; (p)->prev1IsChar = False; -#define IsShortRep(p) ((p)->backPrev == 0) - -static UInt32 GetRepLen1Price(CLzmaEnc *p, UInt32 state, UInt32 posState) -{ - return - GET_PRICE_0(p->isRepG0[state]) + - GET_PRICE_0(p->isRep0Long[state][posState]); -} - -static UInt32 GetPureRepPrice(CLzmaEnc *p, UInt32 repIndex, UInt32 state, UInt32 posState) -{ - UInt32 price; - if (repIndex == 0) - { - price = GET_PRICE_0(p->isRepG0[state]); - price += GET_PRICE_1(p->isRep0Long[state][posState]); - } - else - { - price = GET_PRICE_1(p->isRepG0[state]); - if (repIndex == 1) - price += GET_PRICE_0(p->isRepG1[state]); - else - { - price += GET_PRICE_1(p->isRepG1[state]); - price += GET_PRICE(p->isRepG2[state], repIndex - 2); - } - } - return price; -} - -static UInt32 GetRepPrice(CLzmaEnc *p, UInt32 repIndex, UInt32 len, UInt32 state, UInt32 posState) -{ - return p->repLenEnc.prices[posState][len - LZMA_MATCH_LEN_MIN] + - GetPureRepPrice(p, repIndex, state, posState); -} - -static UInt32 Backward(CLzmaEnc *p, UInt32 *backRes, UInt32 cur) -{ - UInt32 posMem = p->opt[cur].posPrev; - UInt32 backMem = p->opt[cur].backPrev; - p->optimumEndIndex = cur; - do - { - if (p->opt[cur].prev1IsChar) - { - MakeAsChar(&p->opt[posMem]) - p->opt[posMem].posPrev = posMem - 1; - if (p->opt[cur].prev2) - { - p->opt[posMem - 1].prev1IsChar = False; - p->opt[posMem - 1].posPrev = p->opt[cur].posPrev2; - p->opt[posMem - 1].backPrev = p->opt[cur].backPrev2; - } - } - { - UInt32 posPrev = posMem; - UInt32 backCur = backMem; - - backMem = p->opt[posPrev].backPrev; - posMem = p->opt[posPrev].posPrev; - - p->opt[posPrev].backPrev = backCur; - p->opt[posPrev].posPrev = cur; - cur = posPrev; - } - } - while (cur != 0); - *backRes = p->opt[0].backPrev; - p->optimumCurrentIndex = p->opt[0].posPrev; - return p->optimumCurrentIndex; -} - -#define LIT_PROBS(pos, prevByte) (p->litProbs + ((((pos) & p->lpMask) << p->lc) + ((prevByte) >> (8 - p->lc))) * 0x300) - -static UInt32 GetOptimum(CLzmaEnc *p, UInt32 position, UInt32 *backRes) -{ - UInt32 numAvail, mainLen, numPairs, repMaxIndex, i, posState, lenEnd, len, cur; - UInt32 matchPrice, repMatchPrice, normalMatchPrice; - UInt32 reps[LZMA_NUM_REPS], repLens[LZMA_NUM_REPS]; - UInt32 *matches; - const Byte *data; - Byte curByte, matchByte; - if (p->optimumEndIndex != p->optimumCurrentIndex) - { - const COptimal *opt = &p->opt[p->optimumCurrentIndex]; - UInt32 lenRes = opt->posPrev - p->optimumCurrentIndex; - *backRes = opt->backPrev; - p->optimumCurrentIndex = opt->posPrev; - return lenRes; - } - p->optimumCurrentIndex = p->optimumEndIndex = 0; - - if (p->additionalOffset == 0) - mainLen = ReadMatchDistances(p, &numPairs); - else - { - mainLen = p->longestMatchLength; - numPairs = p->numPairs; - } - - numAvail = p->numAvail; - if (numAvail < 2) - { - *backRes = (UInt32)(-1); - return 1; - } - if (numAvail > LZMA_MATCH_LEN_MAX) - numAvail = LZMA_MATCH_LEN_MAX; - - data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; - repMaxIndex = 0; - for (i = 0; i < LZMA_NUM_REPS; i++) - { - UInt32 lenTest; - const Byte *data2; - reps[i] = p->reps[i]; - data2 = data - (reps[i] + 1); - if (data[0] != data2[0] || data[1] != data2[1]) - { - repLens[i] = 0; - continue; - } - for (lenTest = 2; lenTest < numAvail && data[lenTest] == data2[lenTest]; lenTest++); - repLens[i] = lenTest; - if (lenTest > repLens[repMaxIndex]) - repMaxIndex = i; - } - if (repLens[repMaxIndex] >= p->numFastBytes) - { - UInt32 lenRes; - *backRes = repMaxIndex; - lenRes = repLens[repMaxIndex]; - MovePos(p, lenRes - 1); - return lenRes; - } - - matches = p->matches; - if (mainLen >= p->numFastBytes) - { - *backRes = matches[numPairs - 1] + LZMA_NUM_REPS; - MovePos(p, mainLen - 1); - return mainLen; - } - curByte = *data; - matchByte = *(data - (reps[0] + 1)); - - if (mainLen < 2 && curByte != matchByte && repLens[repMaxIndex] < 2) - { - *backRes = (UInt32)-1; - return 1; - } - - p->opt[0].state = (CState)p->state; - - posState = (position & p->pbMask); - - { - const CLzmaProb *probs = LIT_PROBS(position, *(data - 1)); - p->opt[1].price = GET_PRICE_0(p->isMatch[p->state][posState]) + - (!IsCharState(p->state) ? - LitEnc_GetPriceMatched(probs, curByte, matchByte, p->ProbPrices) : - LitEnc_GetPrice(probs, curByte, p->ProbPrices)); - } - - MakeAsChar(&p->opt[1]); - - matchPrice = GET_PRICE_1(p->isMatch[p->state][posState]); - repMatchPrice = matchPrice + GET_PRICE_1(p->isRep[p->state]); - - if (matchByte == curByte) - { - UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(p, p->state, posState); - if (shortRepPrice < p->opt[1].price) - { - p->opt[1].price = shortRepPrice; - MakeAsShortRep(&p->opt[1]); - } - } - lenEnd = ((mainLen >= repLens[repMaxIndex]) ? mainLen : repLens[repMaxIndex]); - - if (lenEnd < 2) - { - *backRes = p->opt[1].backPrev; - return 1; - } - - p->opt[1].posPrev = 0; - for (i = 0; i < LZMA_NUM_REPS; i++) - p->opt[0].backs[i] = reps[i]; - - len = lenEnd; - do - p->opt[len--].price = kInfinityPrice; - while (len >= 2); - - for (i = 0; i < LZMA_NUM_REPS; i++) - { - UInt32 repLen = repLens[i]; - UInt32 price; - if (repLen < 2) - continue; - price = repMatchPrice + GetPureRepPrice(p, i, p->state, posState); - do - { - UInt32 curAndLenPrice = price + p->repLenEnc.prices[posState][repLen - 2]; - COptimal *opt = &p->opt[repLen]; - if (curAndLenPrice < opt->price) - { - opt->price = curAndLenPrice; - opt->posPrev = 0; - opt->backPrev = i; - opt->prev1IsChar = False; - } - } - while (--repLen >= 2); - } - - normalMatchPrice = matchPrice + GET_PRICE_0(p->isRep[p->state]); - - len = ((repLens[0] >= 2) ? repLens[0] + 1 : 2); - if (len <= mainLen) - { - UInt32 offs = 0; - while (len > matches[offs]) - offs += 2; - for (; ; len++) - { - COptimal *opt; - UInt32 distance = matches[offs + 1]; - - UInt32 curAndLenPrice = normalMatchPrice + p->lenEnc.prices[posState][len - LZMA_MATCH_LEN_MIN]; - UInt32 lenToPosState = GetLenToPosState(len); - if (distance < kNumFullDistances) - curAndLenPrice += p->distancesPrices[lenToPosState][distance]; - else - { - UInt32 slot; - GetPosSlot2(distance, slot); - curAndLenPrice += p->alignPrices[distance & kAlignMask] + p->posSlotPrices[lenToPosState][slot]; - } - opt = &p->opt[len]; - if (curAndLenPrice < opt->price) - { - opt->price = curAndLenPrice; - opt->posPrev = 0; - opt->backPrev = distance + LZMA_NUM_REPS; - opt->prev1IsChar = False; - } - if (len == matches[offs]) - { - offs += 2; - if (offs == numPairs) - break; - } - } - } - - cur = 0; - - #ifdef SHOW_STAT2 - if (position >= 0) - { - unsigned i; - printf("\n pos = %4X", position); - for (i = cur; i <= lenEnd; i++) - printf("\nprice[%4X] = %d", position - cur + i, p->opt[i].price); - } - #endif - - for (;;) - { - UInt32 numAvailFull, newLen, numPairs, posPrev, state, posState, startLen; - UInt32 curPrice, curAnd1Price, matchPrice, repMatchPrice; - Bool nextIsChar; - Byte curByte, matchByte; - const Byte *data; - COptimal *curOpt; - COptimal *nextOpt; - - cur++; - if (cur == lenEnd) - return Backward(p, backRes, cur); - - newLen = ReadMatchDistances(p, &numPairs); - if (newLen >= p->numFastBytes) - { - p->numPairs = numPairs; - p->longestMatchLength = newLen; - return Backward(p, backRes, cur); - } - position++; - curOpt = &p->opt[cur]; - posPrev = curOpt->posPrev; - if (curOpt->prev1IsChar) - { - posPrev--; - if (curOpt->prev2) - { - state = p->opt[curOpt->posPrev2].state; - if (curOpt->backPrev2 < LZMA_NUM_REPS) - state = kRepNextStates[state]; - else - state = kMatchNextStates[state]; - } - else - state = p->opt[posPrev].state; - state = kLiteralNextStates[state]; - } - else - state = p->opt[posPrev].state; - if (posPrev == cur - 1) - { - if (IsShortRep(curOpt)) - state = kShortRepNextStates[state]; - else - state = kLiteralNextStates[state]; - } - else - { - UInt32 pos; - const COptimal *prevOpt; - if (curOpt->prev1IsChar && curOpt->prev2) - { - posPrev = curOpt->posPrev2; - pos = curOpt->backPrev2; - state = kRepNextStates[state]; - } - else - { - pos = curOpt->backPrev; - if (pos < LZMA_NUM_REPS) - state = kRepNextStates[state]; - else - state = kMatchNextStates[state]; - } - prevOpt = &p->opt[posPrev]; - if (pos < LZMA_NUM_REPS) - { - UInt32 i; - reps[0] = prevOpt->backs[pos]; - for (i = 1; i <= pos; i++) - reps[i] = prevOpt->backs[i - 1]; - for (; i < LZMA_NUM_REPS; i++) - reps[i] = prevOpt->backs[i]; - } - else - { - UInt32 i; - reps[0] = (pos - LZMA_NUM_REPS); - for (i = 1; i < LZMA_NUM_REPS; i++) - reps[i] = prevOpt->backs[i - 1]; - } - } - curOpt->state = (CState)state; - - curOpt->backs[0] = reps[0]; - curOpt->backs[1] = reps[1]; - curOpt->backs[2] = reps[2]; - curOpt->backs[3] = reps[3]; - - curPrice = curOpt->price; - nextIsChar = False; - data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; - curByte = *data; - matchByte = *(data - (reps[0] + 1)); - - posState = (position & p->pbMask); - - curAnd1Price = curPrice + GET_PRICE_0(p->isMatch[state][posState]); - { - const CLzmaProb *probs = LIT_PROBS(position, *(data - 1)); - curAnd1Price += - (!IsCharState(state) ? - LitEnc_GetPriceMatched(probs, curByte, matchByte, p->ProbPrices) : - LitEnc_GetPrice(probs, curByte, p->ProbPrices)); - } - - nextOpt = &p->opt[cur + 1]; - - if (curAnd1Price < nextOpt->price) - { - nextOpt->price = curAnd1Price; - nextOpt->posPrev = cur; - MakeAsChar(nextOpt); - nextIsChar = True; - } - - matchPrice = curPrice + GET_PRICE_1(p->isMatch[state][posState]); - repMatchPrice = matchPrice + GET_PRICE_1(p->isRep[state]); - - if (matchByte == curByte && !(nextOpt->posPrev < cur && nextOpt->backPrev == 0)) - { - UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(p, state, posState); - if (shortRepPrice <= nextOpt->price) - { - nextOpt->price = shortRepPrice; - nextOpt->posPrev = cur; - MakeAsShortRep(nextOpt); - nextIsChar = True; - } - } - numAvailFull = p->numAvail; - { - UInt32 temp = kNumOpts - 1 - cur; - if (temp < numAvailFull) - numAvailFull = temp; - } - - if (numAvailFull < 2) - continue; - numAvail = (numAvailFull <= p->numFastBytes ? numAvailFull : p->numFastBytes); - - if (!nextIsChar && matchByte != curByte) /* speed optimization */ - { - /* try Literal + rep0 */ - UInt32 temp; - UInt32 lenTest2; - const Byte *data2 = data - (reps[0] + 1); - UInt32 limit = p->numFastBytes + 1; - if (limit > numAvailFull) - limit = numAvailFull; - - for (temp = 1; temp < limit && data[temp] == data2[temp]; temp++); - lenTest2 = temp - 1; - if (lenTest2 >= 2) - { - UInt32 state2 = kLiteralNextStates[state]; - UInt32 posStateNext = (position + 1) & p->pbMask; - UInt32 nextRepMatchPrice = curAnd1Price + - GET_PRICE_1(p->isMatch[state2][posStateNext]) + - GET_PRICE_1(p->isRep[state2]); - /* for (; lenTest2 >= 2; lenTest2--) */ - { - UInt32 curAndLenPrice; - COptimal *opt; - UInt32 offset = cur + 1 + lenTest2; - while (lenEnd < offset) - p->opt[++lenEnd].price = kInfinityPrice; - curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext); - opt = &p->opt[offset]; - if (curAndLenPrice < opt->price) - { - opt->price = curAndLenPrice; - opt->posPrev = cur + 1; - opt->backPrev = 0; - opt->prev1IsChar = True; - opt->prev2 = False; - } - } - } - } - - startLen = 2; /* speed optimization */ - { - UInt32 repIndex; - for (repIndex = 0; repIndex < LZMA_NUM_REPS; repIndex++) - { - UInt32 lenTest; - UInt32 lenTestTemp; - UInt32 price; - const Byte *data2 = data - (reps[repIndex] + 1); - if (data[0] != data2[0] || data[1] != data2[1]) - continue; - for (lenTest = 2; lenTest < numAvail && data[lenTest] == data2[lenTest]; lenTest++); - while (lenEnd < cur + lenTest) - p->opt[++lenEnd].price = kInfinityPrice; - lenTestTemp = lenTest; - price = repMatchPrice + GetPureRepPrice(p, repIndex, state, posState); - do - { - UInt32 curAndLenPrice = price + p->repLenEnc.prices[posState][lenTest - 2]; - COptimal *opt = &p->opt[cur + lenTest]; - if (curAndLenPrice < opt->price) - { - opt->price = curAndLenPrice; - opt->posPrev = cur; - opt->backPrev = repIndex; - opt->prev1IsChar = False; - } - } - while (--lenTest >= 2); - lenTest = lenTestTemp; - - if (repIndex == 0) - startLen = lenTest + 1; - - /* if (_maxMode) */ - { - UInt32 lenTest2 = lenTest + 1; - UInt32 limit = lenTest2 + p->numFastBytes; - UInt32 nextRepMatchPrice; - if (limit > numAvailFull) - limit = numAvailFull; - for (; lenTest2 < limit && data[lenTest2] == data2[lenTest2]; lenTest2++); - lenTest2 -= lenTest + 1; - if (lenTest2 >= 2) - { - UInt32 state2 = kRepNextStates[state]; - UInt32 posStateNext = (position + lenTest) & p->pbMask; - UInt32 curAndLenCharPrice = - price + p->repLenEnc.prices[posState][lenTest - 2] + - GET_PRICE_0(p->isMatch[state2][posStateNext]) + - LitEnc_GetPriceMatched(LIT_PROBS(position + lenTest, data[lenTest - 1]), - data[lenTest], data2[lenTest], p->ProbPrices); - state2 = kLiteralNextStates[state2]; - posStateNext = (position + lenTest + 1) & p->pbMask; - nextRepMatchPrice = curAndLenCharPrice + - GET_PRICE_1(p->isMatch[state2][posStateNext]) + - GET_PRICE_1(p->isRep[state2]); - - /* for (; lenTest2 >= 2; lenTest2--) */ - { - UInt32 curAndLenPrice; - COptimal *opt; - UInt32 offset = cur + lenTest + 1 + lenTest2; - while (lenEnd < offset) - p->opt[++lenEnd].price = kInfinityPrice; - curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext); - opt = &p->opt[offset]; - if (curAndLenPrice < opt->price) - { - opt->price = curAndLenPrice; - opt->posPrev = cur + lenTest + 1; - opt->backPrev = 0; - opt->prev1IsChar = True; - opt->prev2 = True; - opt->posPrev2 = cur; - opt->backPrev2 = repIndex; - } - } - } - } - } - } - /* for (UInt32 lenTest = 2; lenTest <= newLen; lenTest++) */ - if (newLen > numAvail) - { - newLen = numAvail; - for (numPairs = 0; newLen > matches[numPairs]; numPairs += 2); - matches[numPairs] = newLen; - numPairs += 2; - } - if (newLen >= startLen) - { - UInt32 normalMatchPrice = matchPrice + GET_PRICE_0(p->isRep[state]); - UInt32 offs, curBack, posSlot; - UInt32 lenTest; - while (lenEnd < cur + newLen) - p->opt[++lenEnd].price = kInfinityPrice; - - offs = 0; - while (startLen > matches[offs]) - offs += 2; - curBack = matches[offs + 1]; - GetPosSlot2(curBack, posSlot); - for (lenTest = /*2*/ startLen; ; lenTest++) - { - UInt32 curAndLenPrice = normalMatchPrice + p->lenEnc.prices[posState][lenTest - LZMA_MATCH_LEN_MIN]; - UInt32 lenToPosState = GetLenToPosState(lenTest); - COptimal *opt; - if (curBack < kNumFullDistances) - curAndLenPrice += p->distancesPrices[lenToPosState][curBack]; - else - curAndLenPrice += p->posSlotPrices[lenToPosState][posSlot] + p->alignPrices[curBack & kAlignMask]; - - opt = &p->opt[cur + lenTest]; - if (curAndLenPrice < opt->price) - { - opt->price = curAndLenPrice; - opt->posPrev = cur; - opt->backPrev = curBack + LZMA_NUM_REPS; - opt->prev1IsChar = False; - } - - if (/*_maxMode && */lenTest == matches[offs]) - { - /* Try Match + Literal + Rep0 */ - const Byte *data2 = data - (curBack + 1); - UInt32 lenTest2 = lenTest + 1; - UInt32 limit = lenTest2 + p->numFastBytes; - UInt32 nextRepMatchPrice; - if (limit > numAvailFull) - limit = numAvailFull; - for (; lenTest2 < limit && data[lenTest2] == data2[lenTest2]; lenTest2++); - lenTest2 -= lenTest + 1; - if (lenTest2 >= 2) - { - UInt32 state2 = kMatchNextStates[state]; - UInt32 posStateNext = (position + lenTest) & p->pbMask; - UInt32 curAndLenCharPrice = curAndLenPrice + - GET_PRICE_0(p->isMatch[state2][posStateNext]) + - LitEnc_GetPriceMatched(LIT_PROBS(position + lenTest, data[lenTest - 1]), - data[lenTest], data2[lenTest], p->ProbPrices); - state2 = kLiteralNextStates[state2]; - posStateNext = (posStateNext + 1) & p->pbMask; - nextRepMatchPrice = curAndLenCharPrice + - GET_PRICE_1(p->isMatch[state2][posStateNext]) + - GET_PRICE_1(p->isRep[state2]); - - /* for (; lenTest2 >= 2; lenTest2--) */ - { - UInt32 offset = cur + lenTest + 1 + lenTest2; - UInt32 curAndLenPrice; - COptimal *opt; - while (lenEnd < offset) - p->opt[++lenEnd].price = kInfinityPrice; - curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext); - opt = &p->opt[offset]; - if (curAndLenPrice < opt->price) - { - opt->price = curAndLenPrice; - opt->posPrev = cur + lenTest + 1; - opt->backPrev = 0; - opt->prev1IsChar = True; - opt->prev2 = True; - opt->posPrev2 = cur; - opt->backPrev2 = curBack + LZMA_NUM_REPS; - } - } - } - offs += 2; - if (offs == numPairs) - break; - curBack = matches[offs + 1]; - if (curBack >= kNumFullDistances) - GetPosSlot2(curBack, posSlot); - } - } - } - } -} - -#define ChangePair(smallDist, bigDist) (((bigDist) >> 7) > (smallDist)) - -static UInt32 GetOptimumFast(CLzmaEnc *p, UInt32 *backRes) -{ - UInt32 numAvail, mainLen, mainDist, numPairs, repIndex, repLen, i; - const Byte *data; - const UInt32 *matches; - - if (p->additionalOffset == 0) - mainLen = ReadMatchDistances(p, &numPairs); - else - { - mainLen = p->longestMatchLength; - numPairs = p->numPairs; - } - - numAvail = p->numAvail; - *backRes = (UInt32)-1; - if (numAvail < 2) - return 1; - if (numAvail > LZMA_MATCH_LEN_MAX) - numAvail = LZMA_MATCH_LEN_MAX; - data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; - - repLen = repIndex = 0; - for (i = 0; i < LZMA_NUM_REPS; i++) - { - UInt32 len; - const Byte *data2 = data - (p->reps[i] + 1); - if (data[0] != data2[0] || data[1] != data2[1]) - continue; - for (len = 2; len < numAvail && data[len] == data2[len]; len++); - if (len >= p->numFastBytes) - { - *backRes = i; - MovePos(p, len - 1); - return len; - } - if (len > repLen) - { - repIndex = i; - repLen = len; - } - } - - matches = p->matches; - if (mainLen >= p->numFastBytes) - { - *backRes = matches[numPairs - 1] + LZMA_NUM_REPS; - MovePos(p, mainLen - 1); - return mainLen; - } - - mainDist = 0; /* for GCC */ - if (mainLen >= 2) - { - mainDist = matches[numPairs - 1]; - while (numPairs > 2 && mainLen == matches[numPairs - 4] + 1) - { - if (!ChangePair(matches[numPairs - 3], mainDist)) - break; - numPairs -= 2; - mainLen = matches[numPairs - 2]; - mainDist = matches[numPairs - 1]; - } - if (mainLen == 2 && mainDist >= 0x80) - mainLen = 1; - } - - if (repLen >= 2 && ( - (repLen + 1 >= mainLen) || - (repLen + 2 >= mainLen && mainDist >= (1 << 9)) || - (repLen + 3 >= mainLen && mainDist >= (1 << 15)))) - { - *backRes = repIndex; - MovePos(p, repLen - 1); - return repLen; - } - - if (mainLen < 2 || numAvail <= 2) - return 1; - - p->longestMatchLength = ReadMatchDistances(p, &p->numPairs); - if (p->longestMatchLength >= 2) - { - UInt32 newDistance = matches[p->numPairs - 1]; - if ((p->longestMatchLength >= mainLen && newDistance < mainDist) || - (p->longestMatchLength == mainLen + 1 && !ChangePair(mainDist, newDistance)) || - (p->longestMatchLength > mainLen + 1) || - (p->longestMatchLength + 1 >= mainLen && mainLen >= 3 && ChangePair(newDistance, mainDist))) - return 1; - } - - data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; - for (i = 0; i < LZMA_NUM_REPS; i++) - { - UInt32 len, limit; - const Byte *data2 = data - (p->reps[i] + 1); - if (data[0] != data2[0] || data[1] != data2[1]) - continue; - limit = mainLen - 1; - for (len = 2; len < limit && data[len] == data2[len]; len++); - if (len >= limit) - return 1; - } - *backRes = mainDist + LZMA_NUM_REPS; - MovePos(p, mainLen - 2); - return mainLen; -} - -static void WriteEndMarker(CLzmaEnc *p, UInt32 posState) -{ - UInt32 len; - RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][posState], 1); - RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 0); - p->state = kMatchNextStates[p->state]; - len = LZMA_MATCH_LEN_MIN; - LenEnc_Encode2(&p->lenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices); - RcTree_Encode(&p->rc, p->posSlotEncoder[GetLenToPosState(len)], kNumPosSlotBits, (1 << kNumPosSlotBits) - 1); - RangeEnc_EncodeDirectBits(&p->rc, (((UInt32)1 << 30) - 1) >> kNumAlignBits, 30 - kNumAlignBits); - RcTree_ReverseEncode(&p->rc, p->posAlignEncoder, kNumAlignBits, kAlignMask); -} - -static SRes CheckErrors(CLzmaEnc *p) -{ - if (p->result != SZ_OK) - return p->result; - if (p->rc.res != SZ_OK) - p->result = SZ_ERROR_WRITE; - if (p->matchFinderBase.result != SZ_OK) - p->result = SZ_ERROR_READ; - if (p->result != SZ_OK) - p->finished = True; - return p->result; -} - -static SRes Flush(CLzmaEnc *p, UInt32 nowPos) -{ - /* ReleaseMFStream(); */ - p->finished = True; - if (p->writeEndMark) - WriteEndMarker(p, nowPos & p->pbMask); - RangeEnc_FlushData(&p->rc); - RangeEnc_FlushStream(&p->rc); - return CheckErrors(p); -} - -static void FillAlignPrices(CLzmaEnc *p) -{ - UInt32 i; - for (i = 0; i < kAlignTableSize; i++) - p->alignPrices[i] = RcTree_ReverseGetPrice(p->posAlignEncoder, kNumAlignBits, i, p->ProbPrices); - p->alignPriceCount = 0; -} - -static void FillDistancesPrices(CLzmaEnc *p) -{ - UInt32 tempPrices[kNumFullDistances]; - UInt32 i, lenToPosState; - for (i = kStartPosModelIndex; i < kNumFullDistances; i++) - { - UInt32 posSlot = GetPosSlot1(i); - UInt32 footerBits = ((posSlot >> 1) - 1); - UInt32 base = ((2 | (posSlot & 1)) << footerBits); - tempPrices[i] = RcTree_ReverseGetPrice(p->posEncoders + base - posSlot - 1, footerBits, i - base, p->ProbPrices); - } - - for (lenToPosState = 0; lenToPosState < kNumLenToPosStates; lenToPosState++) - { - UInt32 posSlot; - const CLzmaProb *encoder = p->posSlotEncoder[lenToPosState]; - UInt32 *posSlotPrices = p->posSlotPrices[lenToPosState]; - for (posSlot = 0; posSlot < p->distTableSize; posSlot++) - posSlotPrices[posSlot] = RcTree_GetPrice(encoder, kNumPosSlotBits, posSlot, p->ProbPrices); - for (posSlot = kEndPosModelIndex; posSlot < p->distTableSize; posSlot++) - posSlotPrices[posSlot] += ((((posSlot >> 1) - 1) - kNumAlignBits) << kNumBitPriceShiftBits); - - { - UInt32 *distancesPrices = p->distancesPrices[lenToPosState]; - UInt32 i; - for (i = 0; i < kStartPosModelIndex; i++) - distancesPrices[i] = posSlotPrices[i]; - for (; i < kNumFullDistances; i++) - distancesPrices[i] = posSlotPrices[GetPosSlot1(i)] + tempPrices[i]; - } - } - p->matchPriceCount = 0; -} - -void LzmaEnc_Construct(CLzmaEnc *p) -{ - RangeEnc_Construct(&p->rc); - MatchFinder_Construct(&p->matchFinderBase); - #ifdef COMPRESS_MF_MT - MatchFinderMt_Construct(&p->matchFinderMt); - p->matchFinderMt.MatchFinder = &p->matchFinderBase; - #endif - - { - CLzmaEncProps props; - LzmaEncProps_Init(&props); - LzmaEnc_SetProps(p, &props); - } - - #ifndef LZMA_LOG_BSR - LzmaEnc_FastPosInit(p->g_FastPos); - #endif - - LzmaEnc_InitPriceTables(p->ProbPrices); - p->litProbs = 0; - p->saveState.litProbs = 0; -} - -CLzmaEncHandle LzmaEnc_Create(ISzAlloc *alloc) -{ - void *p; - p = alloc->Alloc(alloc, sizeof(CLzmaEnc)); - if (p != 0) - LzmaEnc_Construct((CLzmaEnc *)p); - return p; -} - -void LzmaEnc_FreeLits(CLzmaEnc *p, ISzAlloc *alloc) -{ - alloc->Free(alloc, p->litProbs); - alloc->Free(alloc, p->saveState.litProbs); - p->litProbs = 0; - p->saveState.litProbs = 0; -} - -void LzmaEnc_Destruct(CLzmaEnc *p, ISzAlloc *alloc, ISzAlloc *allocBig) -{ - #ifdef COMPRESS_MF_MT - MatchFinderMt_Destruct(&p->matchFinderMt, allocBig); - #endif - MatchFinder_Free(&p->matchFinderBase, allocBig); - LzmaEnc_FreeLits(p, alloc); - RangeEnc_Free(&p->rc, alloc); -} - -void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAlloc *alloc, ISzAlloc *allocBig) -{ - LzmaEnc_Destruct((CLzmaEnc *)p, alloc, allocBig); - alloc->Free(alloc, p); -} - -static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, Bool useLimits, UInt32 maxPackSize, UInt32 maxUnpackSize) -{ - UInt32 nowPos32, startPos32; - if (p->needInit) - { - p->matchFinder.Init(p->matchFinderObj); - p->needInit = 0; - } - - if (p->finished) - return p->result; - RINOK(CheckErrors(p)); - - nowPos32 = (UInt32)p->nowPos64; - startPos32 = nowPos32; - - if (p->nowPos64 == 0) - { - UInt32 numPairs; - Byte curByte; - if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) == 0) - return Flush(p, nowPos32); - ReadMatchDistances(p, &numPairs); - RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][0], 0); - p->state = kLiteralNextStates[p->state]; - curByte = p->matchFinder.GetIndexByte(p->matchFinderObj, 0 - p->additionalOffset); - LitEnc_Encode(&p->rc, p->litProbs, curByte); - p->additionalOffset--; - nowPos32++; - } - - if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) != 0) - for (;;) - { - UInt32 pos, len, posState; - - if (p->fastMode) - len = GetOptimumFast(p, &pos); - else - len = GetOptimum(p, nowPos32, &pos); - - #ifdef SHOW_STAT2 - printf("\n pos = %4X, len = %d pos = %d", nowPos32, len, pos); - #endif - - posState = nowPos32 & p->pbMask; - if (len == 1 && pos == (UInt32)-1) - { - Byte curByte; - CLzmaProb *probs; - const Byte *data; - - RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][posState], 0); - data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset; - curByte = *data; - probs = LIT_PROBS(nowPos32, *(data - 1)); - if (IsCharState(p->state)) - LitEnc_Encode(&p->rc, probs, curByte); - else - LitEnc_EncodeMatched(&p->rc, probs, curByte, *(data - p->reps[0] - 1)); - p->state = kLiteralNextStates[p->state]; - } - else - { - RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][posState], 1); - if (pos < LZMA_NUM_REPS) - { - RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 1); - if (pos == 0) - { - RangeEnc_EncodeBit(&p->rc, &p->isRepG0[p->state], 0); - RangeEnc_EncodeBit(&p->rc, &p->isRep0Long[p->state][posState], ((len == 1) ? 0 : 1)); - } - else - { - UInt32 distance = p->reps[pos]; - RangeEnc_EncodeBit(&p->rc, &p->isRepG0[p->state], 1); - if (pos == 1) - RangeEnc_EncodeBit(&p->rc, &p->isRepG1[p->state], 0); - else - { - RangeEnc_EncodeBit(&p->rc, &p->isRepG1[p->state], 1); - RangeEnc_EncodeBit(&p->rc, &p->isRepG2[p->state], pos - 2); - if (pos == 3) - p->reps[3] = p->reps[2]; - p->reps[2] = p->reps[1]; - } - p->reps[1] = p->reps[0]; - p->reps[0] = distance; - } - if (len == 1) - p->state = kShortRepNextStates[p->state]; - else - { - LenEnc_Encode2(&p->repLenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices); - p->state = kRepNextStates[p->state]; - } - } - else - { - UInt32 posSlot; - RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 0); - p->state = kMatchNextStates[p->state]; - LenEnc_Encode2(&p->lenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices); - pos -= LZMA_NUM_REPS; - GetPosSlot(pos, posSlot); - RcTree_Encode(&p->rc, p->posSlotEncoder[GetLenToPosState(len)], kNumPosSlotBits, posSlot); - - if (posSlot >= kStartPosModelIndex) - { - UInt32 footerBits = ((posSlot >> 1) - 1); - UInt32 base = ((2 | (posSlot & 1)) << footerBits); - UInt32 posReduced = pos - base; - - if (posSlot < kEndPosModelIndex) - RcTree_ReverseEncode(&p->rc, p->posEncoders + base - posSlot - 1, footerBits, posReduced); - else - { - RangeEnc_EncodeDirectBits(&p->rc, posReduced >> kNumAlignBits, footerBits - kNumAlignBits); - RcTree_ReverseEncode(&p->rc, p->posAlignEncoder, kNumAlignBits, posReduced & kAlignMask); - p->alignPriceCount++; - } - } - p->reps[3] = p->reps[2]; - p->reps[2] = p->reps[1]; - p->reps[1] = p->reps[0]; - p->reps[0] = pos; - p->matchPriceCount++; - } - } - p->additionalOffset -= len; - nowPos32 += len; - if (p->additionalOffset == 0) - { - UInt32 processed; - if (!p->fastMode) - { - if (p->matchPriceCount >= (1 << 7)) - FillDistancesPrices(p); - if (p->alignPriceCount >= kAlignTableSize) - FillAlignPrices(p); - } - if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) == 0) - break; - processed = nowPos32 - startPos32; - if (useLimits) - { - if (processed + kNumOpts + 300 >= maxUnpackSize || - RangeEnc_GetProcessed(&p->rc) + kNumOpts * 2 >= maxPackSize) - break; - } - else if (processed >= (1 << 15)) - { - p->nowPos64 += nowPos32 - startPos32; - return CheckErrors(p); - } - } - } - p->nowPos64 += nowPos32 - startPos32; - return Flush(p, nowPos32); -} - -#define kBigHashDicLimit ((UInt32)1 << 24) - -static SRes LzmaEnc_Alloc(CLzmaEnc *p, UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig) -{ - UInt32 beforeSize = kNumOpts; - Bool btMode; - if (!RangeEnc_Alloc(&p->rc, alloc)) - return SZ_ERROR_MEM; - btMode = (p->matchFinderBase.btMode != 0); - #ifdef COMPRESS_MF_MT - p->mtMode = (p->multiThread && !p->fastMode && btMode); - #endif - - { - unsigned lclp = p->lc + p->lp; - if (p->litProbs == 0 || p->saveState.litProbs == 0 || p->lclp != lclp) - { - LzmaEnc_FreeLits(p, alloc); - p->litProbs = (CLzmaProb *)alloc->Alloc(alloc, (0x300 << lclp) * sizeof(CLzmaProb)); - p->saveState.litProbs = (CLzmaProb *)alloc->Alloc(alloc, (0x300 << lclp) * sizeof(CLzmaProb)); - if (p->litProbs == 0 || p->saveState.litProbs == 0) - { - LzmaEnc_FreeLits(p, alloc); - return SZ_ERROR_MEM; - } - p->lclp = lclp; - } - } - - p->matchFinderBase.bigHash = (p->dictSize > kBigHashDicLimit); - - if (beforeSize + p->dictSize < keepWindowSize) - beforeSize = keepWindowSize - p->dictSize; - - #ifdef COMPRESS_MF_MT - if (p->mtMode) - { - RINOK(MatchFinderMt_Create(&p->matchFinderMt, p->dictSize, beforeSize, p->numFastBytes, LZMA_MATCH_LEN_MAX, allocBig)); - p->matchFinderObj = &p->matchFinderMt; - MatchFinderMt_CreateVTable(&p->matchFinderMt, &p->matchFinder); - } - else - #endif - { - if (!MatchFinder_Create(&p->matchFinderBase, p->dictSize, beforeSize, p->numFastBytes, LZMA_MATCH_LEN_MAX, allocBig)) - return SZ_ERROR_MEM; - p->matchFinderObj = &p->matchFinderBase; - MatchFinder_CreateVTable(&p->matchFinderBase, &p->matchFinder); - } - return SZ_OK; -} - -void LzmaEnc_Init(CLzmaEnc *p) -{ - UInt32 i; - p->state = 0; - for (i = 0 ; i < LZMA_NUM_REPS; i++) - p->reps[i] = 0; - - RangeEnc_Init(&p->rc); - - - for (i = 0; i < kNumStates; i++) - { - UInt32 j; - for (j = 0; j < LZMA_NUM_PB_STATES_MAX; j++) - { - p->isMatch[i][j] = kProbInitValue; - p->isRep0Long[i][j] = kProbInitValue; - } - p->isRep[i] = kProbInitValue; - p->isRepG0[i] = kProbInitValue; - p->isRepG1[i] = kProbInitValue; - p->isRepG2[i] = kProbInitValue; - } - - { - UInt32 num = 0x300 << (p->lp + p->lc); - for (i = 0; i < num; i++) - p->litProbs[i] = kProbInitValue; - } - - { - for (i = 0; i < kNumLenToPosStates; i++) - { - CLzmaProb *probs = p->posSlotEncoder[i]; - UInt32 j; - for (j = 0; j < (1 << kNumPosSlotBits); j++) - probs[j] = kProbInitValue; - } - } - { - for (i = 0; i < kNumFullDistances - kEndPosModelIndex; i++) - p->posEncoders[i] = kProbInitValue; - } - - LenEnc_Init(&p->lenEnc.p); - LenEnc_Init(&p->repLenEnc.p); - - for (i = 0; i < (1 << kNumAlignBits); i++) - p->posAlignEncoder[i] = kProbInitValue; - - p->optimumEndIndex = 0; - p->optimumCurrentIndex = 0; - p->additionalOffset = 0; - - p->pbMask = (1 << p->pb) - 1; - p->lpMask = (1 << p->lp) - 1; -} - -void LzmaEnc_InitPrices(CLzmaEnc *p) -{ - if (!p->fastMode) - { - FillDistancesPrices(p); - FillAlignPrices(p); - } - - p->lenEnc.tableSize = - p->repLenEnc.tableSize = - p->numFastBytes + 1 - LZMA_MATCH_LEN_MIN; - LenPriceEnc_UpdateTables(&p->lenEnc, 1 << p->pb, p->ProbPrices); - LenPriceEnc_UpdateTables(&p->repLenEnc, 1 << p->pb, p->ProbPrices); -} - -static SRes LzmaEnc_AllocAndInit(CLzmaEnc *p, UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig) -{ - UInt32 i; - for (i = 0; i < (UInt32)kDicLogSizeMaxCompress; i++) - if (p->dictSize <= ((UInt32)1 << i)) - break; - p->distTableSize = i * 2; - - p->finished = False; - p->result = SZ_OK; - RINOK(LzmaEnc_Alloc(p, keepWindowSize, alloc, allocBig)); - LzmaEnc_Init(p); - LzmaEnc_InitPrices(p); - p->nowPos64 = 0; - return SZ_OK; -} - -static SRes LzmaEnc_Prepare(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, - ISzAlloc *alloc, ISzAlloc *allocBig) -{ - CLzmaEnc *p = (CLzmaEnc *)pp; - p->matchFinderBase.stream = inStream; - p->needInit = 1; - p->rc.outStream = outStream; - return LzmaEnc_AllocAndInit(p, 0, alloc, allocBig); -} - -SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle pp, - ISeqInStream *inStream, UInt32 keepWindowSize, - ISzAlloc *alloc, ISzAlloc *allocBig) -{ - CLzmaEnc *p = (CLzmaEnc *)pp; - p->matchFinderBase.stream = inStream; - p->needInit = 1; - return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig); -} - -static void LzmaEnc_SetInputBuf(CLzmaEnc *p, const Byte *src, SizeT srcLen) -{ - p->matchFinderBase.directInput = 1; - p->matchFinderBase.bufferBase = (Byte *)src; - p->matchFinderBase.directInputRem = srcLen; -} - -SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen, - UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig) -{ - CLzmaEnc *p = (CLzmaEnc *)pp; - LzmaEnc_SetInputBuf(p, src, srcLen); - p->needInit = 1; - - return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig); -} - -void LzmaEnc_Finish(CLzmaEncHandle pp) -{ - #ifdef COMPRESS_MF_MT - CLzmaEnc *p = (CLzmaEnc *)pp; - if (p->mtMode) - MatchFinderMt_ReleaseStream(&p->matchFinderMt); - #else - pp = pp; - #endif -} - -typedef struct -{ - ISeqOutStream funcTable; - Byte *data; - SizeT rem; - Bool overflow; -} CSeqOutStreamBuf; - -static size_t MyWrite(void *pp, const void *data, size_t size) -{ - CSeqOutStreamBuf *p = (CSeqOutStreamBuf *)pp; - if (p->rem < size) - { - size = p->rem; - p->overflow = True; - } - memcpy(p->data, data, size); - p->rem -= size; - p->data += size; - return size; -} - - -UInt32 LzmaEnc_GetNumAvailableBytes(CLzmaEncHandle pp) -{ - const CLzmaEnc *p = (CLzmaEnc *)pp; - return p->matchFinder.GetNumAvailableBytes(p->matchFinderObj); -} - -const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle pp) -{ - const CLzmaEnc *p = (CLzmaEnc *)pp; - return p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset; -} - -SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, Bool reInit, - Byte *dest, size_t *destLen, UInt32 desiredPackSize, UInt32 *unpackSize) -{ - CLzmaEnc *p = (CLzmaEnc *)pp; - UInt64 nowPos64; - SRes res; - CSeqOutStreamBuf outStream; - - outStream.funcTable.Write = MyWrite; - outStream.data = dest; - outStream.rem = *destLen; - outStream.overflow = False; - - p->writeEndMark = False; - p->finished = False; - p->result = SZ_OK; - - if (reInit) - LzmaEnc_Init(p); - LzmaEnc_InitPrices(p); - nowPos64 = p->nowPos64; - RangeEnc_Init(&p->rc); - p->rc.outStream = &outStream.funcTable; - - res = LzmaEnc_CodeOneBlock(p, True, desiredPackSize, *unpackSize); - - *unpackSize = (UInt32)(p->nowPos64 - nowPos64); - *destLen -= outStream.rem; - if (outStream.overflow) - return SZ_ERROR_OUTPUT_EOF; - - return res; -} - -static SRes LzmaEnc_Encode2(CLzmaEnc *p, ICompressProgress *progress) -{ - SRes res = SZ_OK; - - #ifdef COMPRESS_MF_MT - Byte allocaDummy[0x300]; - int i = 0; - for (i = 0; i < 16; i++) - allocaDummy[i] = (Byte)i; - #endif - - for (;;) - { - res = LzmaEnc_CodeOneBlock(p, False, 0, 0); - if (res != SZ_OK || p->finished != 0) - break; - if (progress != 0) - { - res = progress->Progress(progress, p->nowPos64, RangeEnc_GetProcessed(&p->rc)); - if (res != SZ_OK) - { - res = SZ_ERROR_PROGRESS; - break; - } - } - } - LzmaEnc_Finish(p); - return res; -} - -SRes LzmaEnc_Encode(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress, - ISzAlloc *alloc, ISzAlloc *allocBig) -{ - RINOK(LzmaEnc_Prepare(pp, outStream, inStream, alloc, allocBig)); - return LzmaEnc_Encode2((CLzmaEnc *)pp, progress); -} - -SRes LzmaEnc_WriteProperties(CLzmaEncHandle pp, Byte *props, SizeT *size) -{ - CLzmaEnc *p = (CLzmaEnc *)pp; - int i; - UInt32 dictSize = p->dictSize; - if (*size < LZMA_PROPS_SIZE) - return SZ_ERROR_PARAM; - *size = LZMA_PROPS_SIZE; - props[0] = (Byte)((p->pb * 5 + p->lp) * 9 + p->lc); - - for (i = 11; i <= 30; i++) - { - if (dictSize <= ((UInt32)2 << i)) - { - dictSize = (2 << i); - break; - } - if (dictSize <= ((UInt32)3 << i)) - { - dictSize = (3 << i); - break; - } - } - - for (i = 0; i < 4; i++) - props[1 + i] = (Byte)(dictSize >> (8 * i)); - return SZ_OK; -} - -SRes LzmaEnc_MemEncode(CLzmaEncHandle pp, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, - int writeEndMark, ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig) -{ - SRes res; - CLzmaEnc *p = (CLzmaEnc *)pp; - - CSeqOutStreamBuf outStream; - - LzmaEnc_SetInputBuf(p, src, srcLen); - - outStream.funcTable.Write = MyWrite; - outStream.data = dest; - outStream.rem = *destLen; - outStream.overflow = False; - - p->writeEndMark = writeEndMark; - - p->rc.outStream = &outStream.funcTable; - res = LzmaEnc_MemPrepare(pp, src, srcLen, 0, alloc, allocBig); - if (res == SZ_OK) - res = LzmaEnc_Encode2(p, progress); - - *destLen -= outStream.rem; - if (outStream.overflow) - return SZ_ERROR_OUTPUT_EOF; - return res; -} - -SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, - const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark, - ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig) -{ - CLzmaEnc *p = (CLzmaEnc *)LzmaEnc_Create(alloc); - SRes res; - if (p == 0) - return SZ_ERROR_MEM; - - res = LzmaEnc_SetProps(p, props); - if (res == SZ_OK) - { - res = LzmaEnc_WriteProperties(p, propsEncoded, propsSize); - if (res == SZ_OK) - res = LzmaEnc_MemEncode(p, dest, destLen, src, srcLen, - writeEndMark, progress, alloc, allocBig); - } - - LzmaEnc_Destroy(p, alloc, allocBig); - return res; -} diff --git a/modules/lib7z/LZMASDK/C/LzmaEnc.h b/modules/lib7z/LZMASDK/C/LzmaEnc.h deleted file mode 100644 index 999f5afffdeb..000000000000 --- a/modules/lib7z/LZMASDK/C/LzmaEnc.h +++ /dev/null @@ -1,80 +0,0 @@ -/* LzmaEnc.h -- LZMA Encoder -2009-02-07 : Igor Pavlov : Public domain */ - -#ifndef __LZMA_ENC_H -#define __LZMA_ENC_H - -#include "Types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define LZMA_PROPS_SIZE 5 - -typedef struct _CLzmaEncProps -{ - int level; /* 0 <= level <= 9 */ - UInt32 dictSize; /* (1 << 12) <= dictSize <= (1 << 27) for 32-bit version - (1 << 12) <= dictSize <= (1 << 30) for 64-bit version - default = (1 << 24) */ - int lc; /* 0 <= lc <= 8, default = 3 */ - int lp; /* 0 <= lp <= 4, default = 0 */ - int pb; /* 0 <= pb <= 4, default = 2 */ - int algo; /* 0 - fast, 1 - normal, default = 1 */ - int fb; /* 5 <= fb <= 273, default = 32 */ - int btMode; /* 0 - hashChain Mode, 1 - binTree mode - normal, default = 1 */ - int numHashBytes; /* 2, 3 or 4, default = 4 */ - UInt32 mc; /* 1 <= mc <= (1 << 30), default = 32 */ - unsigned writeEndMark; /* 0 - do not write EOPM, 1 - write EOPM, default = 0 */ - int numThreads; /* 1 or 2, default = 2 */ -} CLzmaEncProps; - -void LzmaEncProps_Init(CLzmaEncProps *p); -void LzmaEncProps_Normalize(CLzmaEncProps *p); -UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2); - - -/* ---------- CLzmaEncHandle Interface ---------- */ - -/* LzmaEnc_* functions can return the following exit codes: -Returns: - SZ_OK - OK - SZ_ERROR_MEM - Memory allocation error - SZ_ERROR_PARAM - Incorrect paramater in props - SZ_ERROR_WRITE - Write callback error. - SZ_ERROR_PROGRESS - some break from progress callback - SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) -*/ - -typedef void * CLzmaEncHandle; - -CLzmaEncHandle LzmaEnc_Create(ISzAlloc *alloc); -void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAlloc *alloc, ISzAlloc *allocBig); -SRes LzmaEnc_SetProps(CLzmaEncHandle p, const CLzmaEncProps *props); -SRes LzmaEnc_WriteProperties(CLzmaEncHandle p, Byte *properties, SizeT *size); -SRes LzmaEnc_Encode(CLzmaEncHandle p, ISeqOutStream *outStream, ISeqInStream *inStream, - ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); -SRes LzmaEnc_MemEncode(CLzmaEncHandle p, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, - int writeEndMark, ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); - -/* ---------- One Call Interface ---------- */ - -/* LzmaEncode -Return code: - SZ_OK - OK - SZ_ERROR_MEM - Memory allocation error - SZ_ERROR_PARAM - Incorrect paramater - SZ_ERROR_OUTPUT_EOF - output buffer overflow - SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) -*/ - -SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, - const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark, - ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/LzmaLib.c b/modules/lib7z/LZMASDK/C/LzmaLib.c deleted file mode 100644 index 3e3cf40ae492..000000000000 --- a/modules/lib7z/LZMASDK/C/LzmaLib.c +++ /dev/null @@ -1,46 +0,0 @@ -/* LzmaLib.c -- LZMA library wrapper -2008-08-05 -Igor Pavlov -Public domain */ - -#include "LzmaEnc.h" -#include "LzmaDec.h" -#include "Alloc.h" -#include "LzmaLib.h" - -static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); } -static void SzFree(void *p, void *address) { p = p; MyFree(address); } -static ISzAlloc g_Alloc = { SzAlloc, SzFree }; - -MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen, - unsigned char *outProps, size_t *outPropsSize, - int level, /* 0 <= level <= 9, default = 5 */ - unsigned dictSize, /* use (1 << N) or (3 << N). 4 KB < dictSize <= 128 MB */ - int lc, /* 0 <= lc <= 8, default = 3 */ - int lp, /* 0 <= lp <= 4, default = 0 */ - int pb, /* 0 <= pb <= 4, default = 2 */ - int fb, /* 5 <= fb <= 273, default = 32 */ - int numThreads /* 1 or 2, default = 2 */ -) -{ - CLzmaEncProps props; - LzmaEncProps_Init(&props); - props.level = level; - props.dictSize = dictSize; - props.lc = lc; - props.lp = lp; - props.pb = pb; - props.fb = fb; - props.numThreads = numThreads; - - return LzmaEncode(dest, destLen, src, srcLen, &props, outProps, outPropsSize, 0, - NULL, &g_Alloc, &g_Alloc); -} - - -MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t *srcLen, - const unsigned char *props, size_t propsSize) -{ - ELzmaStatus status; - return LzmaDecode(dest, destLen, src, srcLen, props, (unsigned)propsSize, LZMA_FINISH_ANY, &status, &g_Alloc); -} diff --git a/modules/lib7z/LZMASDK/C/LzmaLib.h b/modules/lib7z/LZMASDK/C/LzmaLib.h deleted file mode 100644 index 55e1e1148004..000000000000 --- a/modules/lib7z/LZMASDK/C/LzmaLib.h +++ /dev/null @@ -1,135 +0,0 @@ -/* LzmaLib.h -- LZMA library interface -2009-04-07 : Igor Pavlov : Public domain */ - -#ifndef __LZMA_LIB_H -#define __LZMA_LIB_H - -#include "Types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define MY_STDAPI int MY_STD_CALL - -#define LZMA_PROPS_SIZE 5 - -/* -RAM requirements for LZMA: - for compression: (dictSize * 11.5 + 6 MB) + state_size - for decompression: dictSize + state_size - state_size = (4 + (1.5 << (lc + lp))) KB - by default (lc=3, lp=0), state_size = 16 KB. - -LZMA properties (5 bytes) format - Offset Size Description - 0 1 lc, lp and pb in encoded form. - 1 4 dictSize (little endian). -*/ - -/* -LzmaCompress ------------- - -outPropsSize - - In: the pointer to the size of outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5. - Out: the pointer to the size of written properties in outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5. - - LZMA Encoder will use defult values for any parameter, if it is - -1 for any from: level, loc, lp, pb, fb, numThreads - 0 for dictSize - -level - compression level: 0 <= level <= 9; - - level dictSize algo fb - 0: 16 KB 0 32 - 1: 64 KB 0 32 - 2: 256 KB 0 32 - 3: 1 MB 0 32 - 4: 4 MB 0 32 - 5: 16 MB 1 32 - 6: 32 MB 1 32 - 7+: 64 MB 1 64 - - The default value for "level" is 5. - - algo = 0 means fast method - algo = 1 means normal method - -dictSize - The dictionary size in bytes. The maximum value is - 128 MB = (1 << 27) bytes for 32-bit version - 1 GB = (1 << 30) bytes for 64-bit version - The default value is 16 MB = (1 << 24) bytes. - It's recommended to use the dictionary that is larger than 4 KB and - that can be calculated as (1 << N) or (3 << N) sizes. - -lc - The number of literal context bits (high bits of previous literal). - It can be in the range from 0 to 8. The default value is 3. - Sometimes lc=4 gives the gain for big files. - -lp - The number of literal pos bits (low bits of current position for literals). - It can be in the range from 0 to 4. The default value is 0. - The lp switch is intended for periodical data when the period is equal to 2^lp. - For example, for 32-bit (4 bytes) periodical data you can use lp=2. Often it's - better to set lc=0, if you change lp switch. - -pb - The number of pos bits (low bits of current position). - It can be in the range from 0 to 4. The default value is 2. - The pb switch is intended for periodical data when the period is equal 2^pb. - -fb - Word size (the number of fast bytes). - It can be in the range from 5 to 273. The default value is 32. - Usually, a big number gives a little bit better compression ratio and - slower compression process. - -numThreads - The number of thereads. 1 or 2. The default value is 2. - Fast mode (algo = 0) can use only 1 thread. - -Out: - destLen - processed output size -Returns: - SZ_OK - OK - SZ_ERROR_MEM - Memory allocation error - SZ_ERROR_PARAM - Incorrect paramater - SZ_ERROR_OUTPUT_EOF - output buffer overflow - SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) -*/ - -MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen, - unsigned char *outProps, size_t *outPropsSize, /* *outPropsSize must be = 5 */ - int level, /* 0 <= level <= 9, default = 5 */ - unsigned dictSize, /* default = (1 << 24) */ - int lc, /* 0 <= lc <= 8, default = 3 */ - int lp, /* 0 <= lp <= 4, default = 0 */ - int pb, /* 0 <= pb <= 4, default = 2 */ - int fb, /* 5 <= fb <= 273, default = 32 */ - int numThreads /* 1 or 2, default = 2 */ - ); - -/* -LzmaUncompress --------------- -In: - dest - output data - destLen - output data size - src - input data - srcLen - input data size -Out: - destLen - processed output size - srcLen - processed input size -Returns: - SZ_OK - OK - SZ_ERROR_DATA - Data error - SZ_ERROR_MEM - Memory allocation arror - SZ_ERROR_UNSUPPORTED - Unsupported properties - SZ_ERROR_INPUT_EOF - it needs more bytes in input buffer (src) -*/ - -MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, SizeT *srcLen, - const unsigned char *props, size_t propsSize); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/MtCoder.c b/modules/lib7z/LZMASDK/C/MtCoder.c deleted file mode 100644 index 830409e575fd..000000000000 --- a/modules/lib7z/LZMASDK/C/MtCoder.c +++ /dev/null @@ -1,327 +0,0 @@ -/* MtCoder.c -- Multi-thread Coder -2009-03-26 : Igor Pavlov : Public domain */ - -#include - -#include "MtCoder.h" - -void LoopThread_Construct(CLoopThread *p) -{ - Thread_Construct(&p->thread); - Event_Construct(&p->startEvent); - Event_Construct(&p->finishedEvent); -} - -void LoopThread_Close(CLoopThread *p) -{ - Thread_Close(&p->thread); - Event_Close(&p->startEvent); - Event_Close(&p->finishedEvent); -} - -static THREAD_FUNC_RET_TYPE THREAD_FUNC_CALL_TYPE LoopThreadFunc(void *pp) -{ - CLoopThread *p = (CLoopThread *)pp; - for (;;) - { - if (Event_Wait(&p->startEvent) != 0) - return SZ_ERROR_THREAD; - if (p->stop) - return 0; - p->res = p->func(p->param); - if (Event_Set(&p->finishedEvent) != 0) - return SZ_ERROR_THREAD; - } -} - -WRes LoopThread_Create(CLoopThread *p) -{ - p->stop = 0; - RINOK(AutoResetEvent_CreateNotSignaled(&p->startEvent)); - RINOK(AutoResetEvent_CreateNotSignaled(&p->finishedEvent)); - return Thread_Create(&p->thread, LoopThreadFunc, p); -} - -WRes LoopThread_StopAndWait(CLoopThread *p) -{ - p->stop = 1; - if (Event_Set(&p->startEvent) != 0) - return SZ_ERROR_THREAD; - return Thread_Wait(&p->thread); -} - -WRes LoopThread_StartSubThread(CLoopThread *p) { return Event_Set(&p->startEvent); } -WRes LoopThread_WaitSubThread(CLoopThread *p) { return Event_Wait(&p->finishedEvent); } - -static SRes Progress(ICompressProgress *p, UInt64 inSize, UInt64 outSize) -{ - return (p && p->Progress(p, inSize, outSize) != SZ_OK) ? SZ_ERROR_PROGRESS : SZ_OK; -} - -static void MtProgress_Init(CMtProgress *p, ICompressProgress *progress) -{ - unsigned i; - for (i = 0; i < NUM_MT_CODER_THREADS_MAX; i++) - p->inSizes[i] = p->outSizes[i] = 0; - p->totalInSize = p->totalOutSize = 0; - p->progress = progress; - p->res = SZ_OK; -} - -static void MtProgress_Reinit(CMtProgress *p, unsigned index) -{ - p->inSizes[index] = 0; - p->outSizes[index] = 0; -} - -#define UPDATE_PROGRESS(size, prev, total) \ - if (size != (UInt64)(Int64)-1) { total += size - prev; prev = size; } - -SRes MtProgress_Set(CMtProgress *p, unsigned index, UInt64 inSize, UInt64 outSize) -{ - SRes res; - CriticalSection_Enter(&p->cs); - UPDATE_PROGRESS(inSize, p->inSizes[index], p->totalInSize) - UPDATE_PROGRESS(outSize, p->outSizes[index], p->totalOutSize) - if (p->res == SZ_OK) - p->res = Progress(p->progress, p->totalInSize, p->totalOutSize); - res = p->res; - CriticalSection_Leave(&p->cs); - return res; -} - -static void MtProgress_SetError(CMtProgress *p, SRes res) -{ - CriticalSection_Enter(&p->cs); - if (p->res == SZ_OK) - p->res = res; - CriticalSection_Leave(&p->cs); -} - -static void MtCoder_SetError(CMtCoder* p, SRes res) -{ - CriticalSection_Enter(&p->cs); - if (p->res == SZ_OK) - p->res = res; - CriticalSection_Leave(&p->cs); -} - -/* ---------- MtThread ---------- */ - -void CMtThread_Construct(CMtThread *p, CMtCoder *mtCoder) -{ - p->mtCoder = mtCoder; - p->outBuf = 0; - p->inBuf = 0; - Event_Construct(&p->canRead); - Event_Construct(&p->canWrite); - LoopThread_Construct(&p->thread); -} - -#define RINOK_THREAD(x) { if((x) != 0) return SZ_ERROR_THREAD; } - -static void CMtThread_CloseEvents(CMtThread *p) -{ - Event_Close(&p->canRead); - Event_Close(&p->canWrite); -} - -static void CMtThread_Destruct(CMtThread *p) -{ - CMtThread_CloseEvents(p); - - if (Thread_WasCreated(&p->thread.thread)) - { - LoopThread_StopAndWait(&p->thread); - LoopThread_Close(&p->thread); - } - - if (p->mtCoder->alloc) - IAlloc_Free(p->mtCoder->alloc, p->outBuf); - p->outBuf = 0; - - if (p->mtCoder->alloc) - IAlloc_Free(p->mtCoder->alloc, p->inBuf); - p->inBuf = 0; -} - -#define MY_BUF_ALLOC(buf, size, newSize) \ - if (buf == 0 || size != newSize) \ - { IAlloc_Free(p->mtCoder->alloc, buf); \ - size = newSize; buf = IAlloc_Alloc(p->mtCoder->alloc, size); \ - if (buf == 0) return SZ_ERROR_MEM; } - -static SRes CMtThread_Prepare(CMtThread *p) -{ - MY_BUF_ALLOC(p->inBuf, p->inBufSize, p->mtCoder->blockSize) - MY_BUF_ALLOC(p->outBuf, p->outBufSize, p->mtCoder->destBlockSize) - - p->stopReading = False; - p->stopWriting = False; - RINOK_THREAD(AutoResetEvent_CreateNotSignaled(&p->canRead)); - RINOK_THREAD(AutoResetEvent_CreateNotSignaled(&p->canWrite)); - - return SZ_OK; -} - -static SRes FullRead(ISeqInStream *stream, Byte *data, size_t *processedSize) -{ - size_t size = *processedSize; - *processedSize = 0; - while (size != 0) - { - size_t curSize = size; - SRes res = stream->Read(stream, data, &curSize); - *processedSize += curSize; - data += curSize; - size -= curSize; - RINOK(res); - if (curSize == 0) - return SZ_OK; - } - return SZ_OK; -} - -#define GET_NEXT_THREAD(p) &p->mtCoder->threads[p->index == p->mtCoder->numThreads - 1 ? 0 : p->index + 1] - -static SRes MtThread_Process(CMtThread *p, Bool *stop) -{ - CMtThread *next; - *stop = True; - if (Event_Wait(&p->canRead) != 0) - return SZ_ERROR_THREAD; - - next = GET_NEXT_THREAD(p); - - if (p->stopReading) - { - next->stopReading = True; - return Event_Set(&next->canRead) == 0 ? SZ_OK : SZ_ERROR_THREAD; - } - - { - size_t size = p->mtCoder->blockSize; - size_t destSize = p->outBufSize; - - RINOK(FullRead(p->mtCoder->inStream, p->inBuf, &size)); - next->stopReading = *stop = (size != p->mtCoder->blockSize); - if (Event_Set(&next->canRead) != 0) - return SZ_ERROR_THREAD; - - RINOK(p->mtCoder->mtCallback->Code(p->mtCoder->mtCallback, p->index, - p->outBuf, &destSize, p->inBuf, size, *stop)); - - MtProgress_Reinit(&p->mtCoder->mtProgress, p->index); - - if (Event_Wait(&p->canWrite) != 0) - return SZ_ERROR_THREAD; - if (p->stopWriting) - return SZ_ERROR_FAIL; - if (p->mtCoder->outStream->Write(p->mtCoder->outStream, p->outBuf, destSize) != destSize) - return SZ_ERROR_WRITE; - return Event_Set(&next->canWrite) == 0 ? SZ_OK : SZ_ERROR_THREAD; - } -} - -static THREAD_FUNC_RET_TYPE THREAD_FUNC_CALL_TYPE ThreadFunc(void *pp) -{ - CMtThread *p = (CMtThread *)pp; - for (;;) - { - Bool stop; - CMtThread *next = GET_NEXT_THREAD(p); - SRes res = MtThread_Process(p, &stop); - if (res != SZ_OK) - { - MtCoder_SetError(p->mtCoder, res); - MtProgress_SetError(&p->mtCoder->mtProgress, res); - next->stopReading = True; - next->stopWriting = True; - Event_Set(&next->canRead); - Event_Set(&next->canWrite); - return res; - } - if (stop) - return 0; - } -} - -void MtCoder_Construct(CMtCoder* p) -{ - unsigned i; - p->alloc = 0; - for (i = 0; i < NUM_MT_CODER_THREADS_MAX; i++) - { - CMtThread *t = &p->threads[i]; - t->index = i; - CMtThread_Construct(t, p); - } - CriticalSection_Init(&p->cs); - CriticalSection_Init(&p->mtProgress.cs); -} - -void MtCoder_Destruct(CMtCoder* p) -{ - unsigned i; - for (i = 0; i < NUM_MT_CODER_THREADS_MAX; i++) - CMtThread_Destruct(&p->threads[i]); - CriticalSection_Delete(&p->cs); - CriticalSection_Delete(&p->mtProgress.cs); -} - -SRes MtCoder_Code(CMtCoder *p) -{ - unsigned i, numThreads = p->numThreads; - SRes res = SZ_OK; - p->res = SZ_OK; - - MtProgress_Init(&p->mtProgress, p->progress); - - for (i = 0; i < numThreads; i++) - { - RINOK(CMtThread_Prepare(&p->threads[i])); - } - - for (i = 0; i < numThreads; i++) - { - CMtThread *t = &p->threads[i]; - CLoopThread *lt = &t->thread; - - if (!Thread_WasCreated(<->thread)) - { - lt->func = ThreadFunc; - lt->param = t; - - if (LoopThread_Create(lt) != SZ_OK) - { - res = SZ_ERROR_THREAD; - break; - } - } - } - - if (res == SZ_OK) - { - unsigned j; - for (i = 0; i < numThreads; i++) - { - CMtThread *t = &p->threads[i]; - if (LoopThread_StartSubThread(&t->thread) != SZ_OK || i == 10) - { - res = SZ_ERROR_THREAD; - p->threads[0].stopReading = True; - break; - } - } - - Event_Set(&p->threads[0].canWrite); - Event_Set(&p->threads[0].canRead); - - for (j = 0; j < i; j++) - LoopThread_WaitSubThread(&p->threads[j].thread); - } - - for (i = 0; i < numThreads; i++) - CMtThread_CloseEvents(&p->threads[i]); - return (res == SZ_OK) ? p->res : res; -} diff --git a/modules/lib7z/LZMASDK/C/MtCoder.h b/modules/lib7z/LZMASDK/C/MtCoder.h deleted file mode 100644 index 640b70051fea..000000000000 --- a/modules/lib7z/LZMASDK/C/MtCoder.h +++ /dev/null @@ -1,102 +0,0 @@ -/* MtCoder.h -- Multi-thread Coder -2009-03-26 : Igor Pavlov : Public domain */ - -#ifndef __MT_CODER_H -#define __MT_CODER_H - -#include "Threads.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct -{ - CThread thread; - CAutoResetEvent startEvent; - CAutoResetEvent finishedEvent; - int stop; - - THREAD_FUNC_TYPE func; - LPVOID param; - THREAD_FUNC_RET_TYPE res; -} CLoopThread; - -void LoopThread_Construct(CLoopThread *p); -void LoopThread_Close(CLoopThread *p); -WRes LoopThread_Create(CLoopThread *p); -WRes LoopThread_StopAndWait(CLoopThread *p); -WRes LoopThread_StartSubThread(CLoopThread *p); -WRes LoopThread_WaitSubThread(CLoopThread *p); - -#ifdef COMPRESS_MT -#define NUM_MT_CODER_THREADS_MAX 32 -#else -#define NUM_MT_CODER_THREADS_MAX 1 -#endif - -typedef struct -{ - UInt64 totalInSize; - UInt64 totalOutSize; - ICompressProgress *progress; - SRes res; - CCriticalSection cs; - UInt64 inSizes[NUM_MT_CODER_THREADS_MAX]; - UInt64 outSizes[NUM_MT_CODER_THREADS_MAX]; -} CMtProgress; - -SRes MtProgress_Set(CMtProgress *p, unsigned index, UInt64 inSize, UInt64 outSize); - -struct _CMtCoder; - -typedef struct -{ - struct _CMtCoder *mtCoder; - Byte *outBuf; - size_t outBufSize; - Byte *inBuf; - size_t inBufSize; - unsigned index; - CLoopThread thread; - - Bool stopReading; - Bool stopWriting; - CAutoResetEvent canRead; - CAutoResetEvent canWrite; -} CMtThread; - -typedef struct -{ - SRes (*Code)(void *p, unsigned index, Byte *dest, size_t *destSize, - const Byte *src, size_t srcSize, int finished); -} IMtCoderCallback; - -typedef struct _CMtCoder -{ - size_t blockSize; - size_t destBlockSize; - unsigned numThreads; - - ISeqInStream *inStream; - ISeqOutStream *outStream; - ICompressProgress *progress; - ISzAlloc *alloc; - - IMtCoderCallback *mtCallback; - CCriticalSection cs; - SRes res; - - CMtProgress mtProgress; - CMtThread threads[NUM_MT_CODER_THREADS_MAX]; -} CMtCoder; - -void MtCoder_Construct(CMtCoder* p); -void MtCoder_Destruct(CMtCoder* p); -SRes MtCoder_Code(CMtCoder *p); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/RotateDefs.h b/modules/lib7z/LZMASDK/C/RotateDefs.h deleted file mode 100644 index ff9b7229020e..000000000000 --- a/modules/lib7z/LZMASDK/C/RotateDefs.h +++ /dev/null @@ -1,20 +0,0 @@ -/* RotateDefs.h -- Rotate functions -2009-02-07 : Igor Pavlov : Public domain */ - -#ifndef __ROTATE_DEFS_H -#define __ROTATE_DEFS_H - -#ifdef _MSC_VER - -#include -#define rotlFixed(x, n) _rotl((x), (n)) -#define rotrFixed(x, n) _rotr((x), (n)) - -#else - -#define rotlFixed(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) -#define rotrFixed(x, n) (((x) >> (n)) | ((x) << (32 - (n)))) - -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/Sha256.c b/modules/lib7z/LZMASDK/C/Sha256.c deleted file mode 100644 index cab4048c6efa..000000000000 --- a/modules/lib7z/LZMASDK/C/Sha256.c +++ /dev/null @@ -1,204 +0,0 @@ -/* Crypto/Sha256.c -- SHA-256 Hash function -2008-11-06 : Igor Pavlov : Public domain -This code is based on public domain code from Wei Dai's Crypto++ library. */ - -#include "Sha256.h" -#include "RotateDefs.h" - -/* define it for speed optimization */ -/* #define _SHA256_UNROLL */ -/* #define _SHA256_UNROLL2 */ - -void Sha256_Init(CSha256 *p) -{ - p->state[0] = 0x6a09e667; - p->state[1] = 0xbb67ae85; - p->state[2] = 0x3c6ef372; - p->state[3] = 0xa54ff53a; - p->state[4] = 0x510e527f; - p->state[5] = 0x9b05688c; - p->state[6] = 0x1f83d9ab; - p->state[7] = 0x5be0cd19; - p->count = 0; -} - -#define S0(x) (rotrFixed(x, 2) ^ rotrFixed(x,13) ^ rotrFixed(x, 22)) -#define S1(x) (rotrFixed(x, 6) ^ rotrFixed(x,11) ^ rotrFixed(x, 25)) -#define s0(x) (rotrFixed(x, 7) ^ rotrFixed(x,18) ^ (x >> 3)) -#define s1(x) (rotrFixed(x,17) ^ rotrFixed(x,19) ^ (x >> 10)) - -#define blk0(i) (W[i] = data[i]) -#define blk2(i) (W[i&15] += s1(W[(i-2)&15]) + W[(i-7)&15] + s0(W[(i-15)&15])) - -#define Ch(x,y,z) (z^(x&(y^z))) -#define Maj(x,y,z) ((x&y)|(z&(x|y))) - -#define a(i) T[(0-(i))&7] -#define b(i) T[(1-(i))&7] -#define c(i) T[(2-(i))&7] -#define d(i) T[(3-(i))&7] -#define e(i) T[(4-(i))&7] -#define f(i) T[(5-(i))&7] -#define g(i) T[(6-(i))&7] -#define h(i) T[(7-(i))&7] - - -#ifdef _SHA256_UNROLL2 - -#define R(a,b,c,d,e,f,g,h, i) h += S1(e) + Ch(e,f,g) + K[i+j] + (j?blk2(i):blk0(i));\ - d += h; h += S0(a) + Maj(a, b, c) - -#define RX_8(i) \ - R(a,b,c,d,e,f,g,h, i); \ - R(h,a,b,c,d,e,f,g, i+1); \ - R(g,h,a,b,c,d,e,f, i+2); \ - R(f,g,h,a,b,c,d,e, i+3); \ - R(e,f,g,h,a,b,c,d, i+4); \ - R(d,e,f,g,h,a,b,c, i+5); \ - R(c,d,e,f,g,h,a,b, i+6); \ - R(b,c,d,e,f,g,h,a, i+7) - -#else - -#define R(i) h(i) += S1(e(i)) + Ch(e(i),f(i),g(i)) + K[i+j] + (j?blk2(i):blk0(i));\ - d(i) += h(i); h(i) += S0(a(i)) + Maj(a(i), b(i), c(i)) - -#ifdef _SHA256_UNROLL - -#define RX_8(i) R(i+0); R(i+1); R(i+2); R(i+3); R(i+4); R(i+5); R(i+6); R(i+7); - -#endif - -#endif - -const UInt32 K[64] = { - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, - 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, - 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, - 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, - 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, - 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, - 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -}; - -static void Sha256_Transform(UInt32 *state, const UInt32 *data) -{ - UInt32 W[16]; - unsigned j; - #ifdef _SHA256_UNROLL2 - UInt32 a,b,c,d,e,f,g,h; - a = state[0]; - b = state[1]; - c = state[2]; - d = state[3]; - e = state[4]; - f = state[5]; - g = state[6]; - h = state[7]; - #else - UInt32 T[8]; - for (j = 0; j < 8; j++) - T[j] = state[j]; - #endif - - for (j = 0; j < 64; j += 16) - { - #if defined(_SHA256_UNROLL) || defined(_SHA256_UNROLL2) - RX_8(0); RX_8(8); - #else - unsigned i; - for (i = 0; i < 16; i++) { R(i); } - #endif - } - - #ifdef _SHA256_UNROLL2 - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - state[4] += e; - state[5] += f; - state[6] += g; - state[7] += h; - #else - for (j = 0; j < 8; j++) - state[j] += T[j]; - #endif - - /* Wipe variables */ - /* memset(W, 0, sizeof(W)); */ - /* memset(T, 0, sizeof(T)); */ -} - -#undef S0 -#undef S1 -#undef s0 -#undef s1 - -static void Sha256_WriteByteBlock(CSha256 *p) -{ - UInt32 data32[16]; - unsigned i; - for (i = 0; i < 16; i++) - data32[i] = - ((UInt32)(p->buffer[i * 4 ]) << 24) + - ((UInt32)(p->buffer[i * 4 + 1]) << 16) + - ((UInt32)(p->buffer[i * 4 + 2]) << 8) + - ((UInt32)(p->buffer[i * 4 + 3])); - Sha256_Transform(p->state, data32); -} - -void Sha256_Update(CSha256 *p, const Byte *data, size_t size) -{ - UInt32 curBufferPos = (UInt32)p->count & 0x3F; - while (size > 0) - { - p->buffer[curBufferPos++] = *data++; - p->count++; - size--; - if (curBufferPos == 64) - { - curBufferPos = 0; - Sha256_WriteByteBlock(p); - } - } -} - -void Sha256_Final(CSha256 *p, Byte *digest) -{ - UInt64 lenInBits = (p->count << 3); - UInt32 curBufferPos = (UInt32)p->count & 0x3F; - unsigned i; - p->buffer[curBufferPos++] = 0x80; - while (curBufferPos != (64 - 8)) - { - curBufferPos &= 0x3F; - if (curBufferPos == 0) - Sha256_WriteByteBlock(p); - p->buffer[curBufferPos++] = 0; - } - for (i = 0; i < 8; i++) - { - p->buffer[curBufferPos++] = (Byte)(lenInBits >> 56); - lenInBits <<= 8; - } - Sha256_WriteByteBlock(p); - - for (i = 0; i < 8; i++) - { - *digest++ = (Byte)(p->state[i] >> 24); - *digest++ = (Byte)(p->state[i] >> 16); - *digest++ = (Byte)(p->state[i] >> 8); - *digest++ = (Byte)(p->state[i]); - } - Sha256_Init(p); -} diff --git a/modules/lib7z/LZMASDK/C/Sha256.h b/modules/lib7z/LZMASDK/C/Sha256.h deleted file mode 100644 index 971c4f6e99ef..000000000000 --- a/modules/lib7z/LZMASDK/C/Sha256.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Sha256.h -- SHA-256 Hash -2009-02-07 : Igor Pavlov : Public domain */ - -#ifndef __CRYPTO_SHA256_H -#define __CRYPTO_SHA256_H - -#include "Types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define SHA256_DIGEST_SIZE 32 - -typedef struct -{ - UInt32 state[8]; - UInt64 count; - Byte buffer[64]; -} CSha256; - -void Sha256_Init(CSha256 *p); -void Sha256_Update(CSha256 *p, const Byte *data, size_t size); -void Sha256_Final(CSha256 *p, Byte *digest); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/Threads.c b/modules/lib7z/LZMASDK/C/Threads.c deleted file mode 100644 index e38cae080647..000000000000 --- a/modules/lib7z/LZMASDK/C/Threads.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Threads.c -- multithreading library -2009-07-20 : Igor Pavlov : Public domain */ - -#ifndef _WIN32_WCE -#include -#endif - -#include "Threads.h" - -static WRes GetError() -{ - DWORD res = GetLastError(); - return (res) ? (WRes)(res) : 1; -} - -WRes HandleToWRes(HANDLE h) { return (h != 0) ? 0 : GetError(); } -WRes BOOLToWRes(BOOL v) { return v ? 0 : GetError(); } - -WRes HandlePtr_Close(HANDLE *p) -{ - if (*p != NULL) - if (!CloseHandle(*p)) - return GetError(); - *p = NULL; - return 0; -} - -WRes Handle_WaitObject(HANDLE h) { return (WRes)WaitForSingleObject(h, INFINITE); } - -WRes Thread_Create(CThread *p, THREAD_FUNC_TYPE func, LPVOID param) -{ - unsigned threadId; /* Windows Me/98/95: threadId parameter may not be NULL in _beginthreadex/CreateThread functions */ - *p = - #ifdef UNDER_CE - CreateThread(0, 0, func, param, 0, &threadId); - #else - (HANDLE)_beginthreadex(NULL, 0, func, param, 0, &threadId); - #endif - /* maybe we must use errno here, but probably GetLastError() is also OK. */ - return HandleToWRes(*p); -} - -WRes Event_Create(CEvent *p, BOOL manualReset, int signaled) -{ - *p = CreateEvent(NULL, manualReset, (signaled ? TRUE : FALSE), NULL); - return HandleToWRes(*p); -} - -WRes Event_Set(CEvent *p) { return BOOLToWRes(SetEvent(*p)); } -WRes Event_Reset(CEvent *p) { return BOOLToWRes(ResetEvent(*p)); } - -WRes ManualResetEvent_Create(CManualResetEvent *p, int signaled) { return Event_Create(p, TRUE, signaled); } -WRes AutoResetEvent_Create(CAutoResetEvent *p, int signaled) { return Event_Create(p, FALSE, signaled); } -WRes ManualResetEvent_CreateNotSignaled(CManualResetEvent *p) { return ManualResetEvent_Create(p, 0); } -WRes AutoResetEvent_CreateNotSignaled(CAutoResetEvent *p) { return AutoResetEvent_Create(p, 0); } - - -WRes Semaphore_Create(CSemaphore *p, UInt32 initCount, UInt32 maxCount) -{ - *p = CreateSemaphore(NULL, (LONG)initCount, (LONG)maxCount, NULL); - return HandleToWRes(*p); -} - -static WRes Semaphore_Release(CSemaphore *p, LONG releaseCount, LONG *previousCount) - { return BOOLToWRes(ReleaseSemaphore(*p, releaseCount, previousCount)); } -WRes Semaphore_ReleaseN(CSemaphore *p, UInt32 num) - { return Semaphore_Release(p, (LONG)num, NULL); } -WRes Semaphore_Release1(CSemaphore *p) { return Semaphore_ReleaseN(p, 1); } - -WRes CriticalSection_Init(CCriticalSection *p) -{ - /* InitializeCriticalSection can raise only STATUS_NO_MEMORY exception */ - __try - { - InitializeCriticalSection(p); - /* InitializeCriticalSectionAndSpinCount(p, 0); */ - } - __except (EXCEPTION_EXECUTE_HANDLER) { return 1; } - return 0; -} diff --git a/modules/lib7z/LZMASDK/C/Threads.h b/modules/lib7z/LZMASDK/C/Threads.h deleted file mode 100644 index 6a7afa8299c8..000000000000 --- a/modules/lib7z/LZMASDK/C/Threads.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Threads.h -- multithreading library -2009-03-27 : Igor Pavlov : Public domain */ - -#ifndef __7Z_THREADS_H -#define __7Z_THREADS_H - -#include "Types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -WRes HandlePtr_Close(HANDLE *h); -WRes Handle_WaitObject(HANDLE h); - -typedef HANDLE CThread; -#define Thread_Construct(p) *(p) = NULL -#define Thread_WasCreated(p) (*(p) != NULL) -#define Thread_Close(p) HandlePtr_Close(p) -#define Thread_Wait(p) Handle_WaitObject(*(p)) -typedef unsigned THREAD_FUNC_RET_TYPE; -#define THREAD_FUNC_CALL_TYPE MY_STD_CALL -#define THREAD_FUNC_DECL THREAD_FUNC_RET_TYPE THREAD_FUNC_CALL_TYPE -typedef THREAD_FUNC_RET_TYPE (THREAD_FUNC_CALL_TYPE * THREAD_FUNC_TYPE)(void *); -WRes Thread_Create(CThread *p, THREAD_FUNC_TYPE func, LPVOID param); - -typedef HANDLE CEvent; -typedef CEvent CAutoResetEvent; -typedef CEvent CManualResetEvent; -#define Event_Construct(p) *(p) = NULL -#define Event_IsCreated(p) (*(p) != NULL) -#define Event_Close(p) HandlePtr_Close(p) -#define Event_Wait(p) Handle_WaitObject(*(p)) -WRes Event_Set(CEvent *p); -WRes Event_Reset(CEvent *p); -WRes ManualResetEvent_Create(CManualResetEvent *p, int signaled); -WRes ManualResetEvent_CreateNotSignaled(CManualResetEvent *p); -WRes AutoResetEvent_Create(CAutoResetEvent *p, int signaled); -WRes AutoResetEvent_CreateNotSignaled(CAutoResetEvent *p); - -typedef HANDLE CSemaphore; -#define Semaphore_Construct(p) (*p) = NULL -#define Semaphore_Close(p) HandlePtr_Close(p) -#define Semaphore_Wait(p) Handle_WaitObject(*(p)) -WRes Semaphore_Create(CSemaphore *p, UInt32 initCount, UInt32 maxCount); -WRes Semaphore_ReleaseN(CSemaphore *p, UInt32 num); -WRes Semaphore_Release1(CSemaphore *p); - -typedef CRITICAL_SECTION CCriticalSection; -WRes CriticalSection_Init(CCriticalSection *p); -#define CriticalSection_Delete(p) DeleteCriticalSection(p) -#define CriticalSection_Enter(p) EnterCriticalSection(p) -#define CriticalSection_Leave(p) LeaveCriticalSection(p) - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/Types.h b/modules/lib7z/LZMASDK/C/Types.h deleted file mode 100644 index 7632f2780594..000000000000 --- a/modules/lib7z/LZMASDK/C/Types.h +++ /dev/null @@ -1,222 +0,0 @@ -/* Types.h -- Basic types -2009-08-14 : Igor Pavlov : Public domain */ - -#ifndef __7Z_TYPES_H -#define __7Z_TYPES_H - -#include - -#ifdef _WIN32 -#include -#endif - -#ifndef EXTERN_C_BEGIN -#ifdef __cplusplus -#define EXTERN_C_BEGIN extern "C" { -#define EXTERN_C_END } -#else -#define EXTERN_C_BEGIN -#define EXTERN_C_END -#endif -#endif - -EXTERN_C_BEGIN - -#define SZ_OK 0 - -#define SZ_ERROR_DATA 1 -#define SZ_ERROR_MEM 2 -#define SZ_ERROR_CRC 3 -#define SZ_ERROR_UNSUPPORTED 4 -#define SZ_ERROR_PARAM 5 -#define SZ_ERROR_INPUT_EOF 6 -#define SZ_ERROR_OUTPUT_EOF 7 -#define SZ_ERROR_READ 8 -#define SZ_ERROR_WRITE 9 -#define SZ_ERROR_PROGRESS 10 -#define SZ_ERROR_FAIL 11 -#define SZ_ERROR_THREAD 12 - -#define SZ_ERROR_ARCHIVE 16 -#define SZ_ERROR_NO_ARCHIVE 17 - -typedef int SRes; - -#ifdef _WIN32 -typedef DWORD WRes; -#else -typedef int WRes; -#endif - -#ifndef RINOK -#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; } -#endif - -typedef unsigned char Byte; -typedef short Int16; -typedef unsigned short UInt16; - -#ifdef _LZMA_UINT32_IS_ULONG -typedef long Int32; -typedef unsigned long UInt32; -#else -typedef int Int32; -typedef unsigned int UInt32; -#endif - -#ifdef _SZ_NO_INT_64 - -/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers. - NOTES: Some code will work incorrectly in that case! */ - -typedef long Int64; -typedef unsigned long UInt64; - -#else - -#if defined(_MSC_VER) || defined(__BORLANDC__) -typedef __int64 Int64; -typedef unsigned __int64 UInt64; -#else -typedef long long int Int64; -typedef unsigned long long int UInt64; -#endif - -#endif - -#ifdef _LZMA_NO_SYSTEM_SIZE_T -typedef UInt32 SizeT; -#else -typedef size_t SizeT; -#endif - -typedef int Bool; -#define True 1 -#define False 0 - - -#ifdef _MSC_VER - -#if _MSC_VER >= 1300 -#define MY_NO_INLINE __declspec(noinline) -#else -#define MY_NO_INLINE -#endif - -#define MY_CDECL __cdecl -#define MY_STD_CALL __stdcall -#define MY_FAST_CALL MY_NO_INLINE __fastcall - -#else - -#define MY_CDECL -#define MY_STD_CALL -#define MY_FAST_CALL - -#endif - - -/* The following interfaces use first parameter as pointer to structure */ - -typedef struct -{ - SRes (*Read)(void *p, void *buf, size_t *size); - /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. - (output(*size) < input(*size)) is allowed */ -} ISeqInStream; - -/* it can return SZ_ERROR_INPUT_EOF */ -SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size); -SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType); -SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf); - -typedef struct -{ - size_t (*Write)(void *p, const void *buf, size_t size); - /* Returns: result - the number of actually written bytes. - (result < size) means error */ -} ISeqOutStream; - -typedef enum -{ - SZ_SEEK_SET = 0, - SZ_SEEK_CUR = 1, - SZ_SEEK_END = 2 -} ESzSeek; - -typedef struct -{ - SRes (*Read)(void *p, void *buf, size_t *size); /* same as ISeqInStream::Read */ - SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); -} ISeekInStream; - -typedef struct -{ - SRes (*Look)(void *p, void **buf, size_t *size); - /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. - (output(*size) > input(*size)) is not allowed - (output(*size) < input(*size)) is allowed */ - SRes (*Skip)(void *p, size_t offset); - /* offset must be <= output(*size) of Look */ - - SRes (*Read)(void *p, void *buf, size_t *size); - /* reads directly (without buffer). It's same as ISeqInStream::Read */ - SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); -} ILookInStream; - -SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size); -SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset); - -/* reads via ILookInStream::Read */ -SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType); -SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size); - -#define LookToRead_BUF_SIZE (1 << 14) - -typedef struct -{ - ILookInStream s; - ISeekInStream *realStream; - size_t pos; - size_t size; - Byte buf[LookToRead_BUF_SIZE]; -} CLookToRead; - -void LookToRead_CreateVTable(CLookToRead *p, int lookahead); -void LookToRead_Init(CLookToRead *p); - -typedef struct -{ - ISeqInStream s; - ILookInStream *realStream; -} CSecToLook; - -void SecToLook_CreateVTable(CSecToLook *p); - -typedef struct -{ - ISeqInStream s; - ILookInStream *realStream; -} CSecToRead; - -void SecToRead_CreateVTable(CSecToRead *p); - -typedef struct -{ - SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize); - /* Returns: result. (result != SZ_OK) means break. - Value (UInt64)(Int64)-1 for size means unknown value. */ -} ICompressProgress; - -typedef struct -{ - void *(*Alloc)(void *p, size_t size); - void (*Free)(void *p, void *address); /* address can be 0 */ -} ISzAlloc; - -#define IAlloc_Alloc(p, size) (p)->Alloc((p), size) -#define IAlloc_Free(p, a) (p)->Free((p), a) - -EXTERN_C_END - -#endif diff --git a/modules/lib7z/LZMASDK/C/Util/7z/7z.dsp b/modules/lib7z/LZMASDK/C/Util/7z/7z.dsp deleted file mode 100644 index 34300bb481af..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/7z/7z.dsp +++ /dev/null @@ -1,183 +0,0 @@ -# Microsoft Developer Studio Project File - Name="7z" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=7z - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "7z.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "7z.mak" CFG="7z - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "7z - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "7z - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "7z - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /FAs /YX /FD /c -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"Release/7zDec.exe" /opt:NOWIN98 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "7z - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W4 /Gm /GX /ZI /Od /D "_DEBUG" /D "_SZ_ALLOC_DEBUG2" /D "_SZ_NO_INT_64_A" /D "WIN32" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/7zDec.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "7z - Win32 Release" -# Name "7z - Win32 Debug" -# Begin Group "Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\7zBuf.c -# End Source File -# Begin Source File - -SOURCE=..\..\7zBuf.h -# End Source File -# Begin Source File - -SOURCE=..\..\7zCrc.c -# End Source File -# Begin Source File - -SOURCE=..\..\7zCrc.h -# End Source File -# Begin Source File - -SOURCE=..\..\7zFile.c -# End Source File -# Begin Source File - -SOURCE=..\..\7zFile.h -# End Source File -# Begin Source File - -SOURCE=..\..\7zStream.c -# End Source File -# Begin Source File - -SOURCE=..\..\Bcj2.c -# End Source File -# Begin Source File - -SOURCE=..\..\Bcj2.h -# End Source File -# Begin Source File - -SOURCE=..\..\Bra.h -# End Source File -# Begin Source File - -SOURCE=..\..\Bra86.c -# End Source File -# Begin Source File - -SOURCE=..\..\CpuArch.h -# End Source File -# Begin Source File - -SOURCE=..\..\Lzma2Dec.c -# End Source File -# Begin Source File - -SOURCE=..\..\Lzma2Dec.h -# End Source File -# Begin Source File - -SOURCE=..\..\LzmaDec.c -# End Source File -# Begin Source File - -SOURCE=..\..\LzmaDec.h -# End Source File -# Begin Source File - -SOURCE=..\..\Types.h -# End Source File -# End Group -# Begin Source File - -SOURCE=..\..\7z.h -# End Source File -# Begin Source File - -SOURCE=.\7zAlloc.c -# End Source File -# Begin Source File - -SOURCE=.\7zAlloc.h -# End Source File -# Begin Source File - -SOURCE=..\..\7zDec.c -# End Source File -# Begin Source File - -SOURCE=..\..\7zIn.c -# End Source File -# Begin Source File - -SOURCE=.\7zMain.c -# End Source File -# End Target -# End Project diff --git a/modules/lib7z/LZMASDK/C/Util/7z/7z.dsw b/modules/lib7z/LZMASDK/C/Util/7z/7z.dsw deleted file mode 100644 index 23089fb79ff3..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/7z/7z.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "7z"=.\7z.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/modules/lib7z/LZMASDK/C/Util/7z/7zAlloc.c b/modules/lib7z/LZMASDK/C/Util/7z/7zAlloc.c deleted file mode 100644 index b5918d000608..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/7z/7zAlloc.c +++ /dev/null @@ -1,77 +0,0 @@ -/* 7zAlloc.c -- Allocation functions -2008-10-04 : Igor Pavlov : Public domain */ - -#include -#include "7zAlloc.h" - -/* #define _SZ_ALLOC_DEBUG */ -/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */ - -#ifdef _SZ_ALLOC_DEBUG - -#ifdef _WIN32 -#include -#endif - -#include -int g_allocCount = 0; -int g_allocCountTemp = 0; - -#endif - -void *SzAlloc(void *p, size_t size) -{ - p = p; - if (size == 0) - return 0; - #ifdef _SZ_ALLOC_DEBUG - fprintf(stderr, "\nAlloc %10d bytes; count = %10d", size, g_allocCount); - g_allocCount++; - #endif - return malloc(size); -} - -void SzFree(void *p, void *address) -{ - p = p; - #ifdef _SZ_ALLOC_DEBUG - if (address != 0) - { - g_allocCount--; - fprintf(stderr, "\nFree; count = %10d", g_allocCount); - } - #endif - free(address); -} - -void *SzAllocTemp(void *p, size_t size) -{ - p = p; - if (size == 0) - return 0; - #ifdef _SZ_ALLOC_DEBUG - fprintf(stderr, "\nAlloc_temp %10d bytes; count = %10d", size, g_allocCountTemp); - g_allocCountTemp++; - #ifdef _WIN32 - return HeapAlloc(GetProcessHeap(), 0, size); - #endif - #endif - return malloc(size); -} - -void SzFreeTemp(void *p, void *address) -{ - p = p; - #ifdef _SZ_ALLOC_DEBUG - if (address != 0) - { - g_allocCountTemp--; - fprintf(stderr, "\nFree_temp; count = %10d", g_allocCountTemp); - } - #ifdef _WIN32 - HeapFree(GetProcessHeap(), 0, address); - return; - #endif - #endif - free(address); -} diff --git a/modules/lib7z/LZMASDK/C/Util/7z/7zAlloc.h b/modules/lib7z/LZMASDK/C/Util/7z/7zAlloc.h deleted file mode 100644 index caa712eda150..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/7z/7zAlloc.h +++ /dev/null @@ -1,23 +0,0 @@ -/* 7zAlloc.h -- Allocation functions -2009-02-07 : Igor Pavlov : Public domain */ - -#ifndef __7Z_ALLOC_H -#define __7Z_ALLOC_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -void *SzAlloc(void *p, size_t size); -void SzFree(void *p, void *address); - -void *SzAllocTemp(void *p, size_t size); -void SzFreeTemp(void *p, void *address); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/Util/7z/7zMain.c b/modules/lib7z/LZMASDK/C/Util/7z/7zMain.c deleted file mode 100644 index a662134d96c8..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/7z/7zMain.c +++ /dev/null @@ -1,464 +0,0 @@ -/* 7zMain.c - Test application for 7z Decoder -2009-08-17 : Igor Pavlov : Public domain */ - -#include -#include -#include - -#include "../../7z.h" -#include "../../7zCrc.h" -#include "../../7zFile.h" -#include "../../7zVersion.h" - -#include "7zAlloc.h" - -#ifndef USE_WINDOWS_FILE -/* for mkdir */ -#ifdef _WIN32 -#include -#else -#include -#include -#endif -#endif - -#ifdef _WIN32 -#define CHAR_PATH_SEPARATOR '\\' -#else -#define CHAR_PATH_SEPARATOR '/' -#endif - -static ISzAlloc g_Alloc = { SzAlloc, SzFree }; - -static int Buf_EnsureSize(CBuf *dest, size_t size) -{ - if (dest->size >= size) - return 1; - Buf_Free(dest, &g_Alloc); - return Buf_Create(dest, size, &g_Alloc); -} - -#ifndef _WIN32 - -static Byte kUtf8Limits[5] = { 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; - -static Bool Utf16_To_Utf8(Byte *dest, size_t *destLen, const UInt16 *src, size_t srcLen) -{ - size_t destPos = 0, srcPos = 0; - for (;;) - { - unsigned numAdds; - UInt32 value; - if (srcPos == srcLen) - { - *destLen = destPos; - return True; - } - value = src[srcPos++]; - if (value < 0x80) - { - if (dest) - dest[destPos] = (char)value; - destPos++; - continue; - } - if (value >= 0xD800 && value < 0xE000) - { - UInt32 c2; - if (value >= 0xDC00 || srcPos == srcLen) - break; - c2 = src[srcPos++]; - if (c2 < 0xDC00 || c2 >= 0xE000) - break; - value = ((value - 0xD800) << 10) | (c2 - 0xDC00); - } - for (numAdds = 1; numAdds < 5; numAdds++) - if (value < (((UInt32)1) << (numAdds * 5 + 6))) - break; - if (dest) - dest[destPos] = (char)(kUtf8Limits[numAdds - 1] + (value >> (6 * numAdds))); - destPos++; - do - { - numAdds--; - if (dest) - dest[destPos] = (char)(0x80 + ((value >> (6 * numAdds)) & 0x3F)); - destPos++; - } - while (numAdds != 0); - } - *destLen = destPos; - return False; -} - -static SRes Utf16_To_Utf8Buf(CBuf *dest, const UInt16 *src, size_t srcLen) -{ - size_t destLen = 0; - Bool res; - Utf16_To_Utf8(NULL, &destLen, src, srcLen); - destLen += 1; - if (!Buf_EnsureSize(dest, destLen)) - return SZ_ERROR_MEM; - res = Utf16_To_Utf8(dest->data, &destLen, src, srcLen); - dest->data[destLen] = 0; - return res ? SZ_OK : SZ_ERROR_FAIL; -} -#endif - -static WRes Utf16_To_Char(CBuf *buf, const UInt16 *s, int fileMode) -{ - int len = 0; - for (len = 0; s[len] != '\0'; len++); - - #ifdef _WIN32 - { - int size = len * 3 + 100; - if (!Buf_EnsureSize(buf, size)) - return SZ_ERROR_MEM; - { - char defaultChar = '_'; - BOOL defUsed; - int numChars = WideCharToMultiByte(fileMode ? (AreFileApisANSI() ? CP_ACP : CP_OEMCP) : CP_OEMCP, - 0, s, len, (char *)buf->data, size, &defaultChar, &defUsed); - if (numChars == 0 || numChars >= size) - return SZ_ERROR_FAIL; - buf->data[numChars] = 0; - return SZ_OK; - } - } - #else - fileMode = fileMode; - return Utf16_To_Utf8Buf(buf, s, len); - #endif -} - -static WRes MyCreateDir(const UInt16 *name) -{ - #ifdef USE_WINDOWS_FILE - - return CreateDirectoryW(name, NULL) ? 0 : GetLastError(); - - #else - - CBuf buf; - WRes res; - Buf_Init(&buf); - RINOK(Utf16_To_Char(&buf, name, 1)); - - res = - #ifdef _WIN32 - _mkdir((const char *)buf.data) - #else - mkdir((const char *)buf.data, 0777) - #endif - == 0 ? 0 : errno; - Buf_Free(&buf, &g_Alloc); - return res; - - #endif -} - -static WRes OutFile_OpenUtf16(CSzFile *p, const UInt16 *name) -{ - #ifdef USE_WINDOWS_FILE - return OutFile_OpenW(p, name); - #else - CBuf buf; - WRes res; - Buf_Init(&buf); - RINOK(Utf16_To_Char(&buf, name, 1)); - res = OutFile_Open(p, (const char *)buf.data); - Buf_Free(&buf, &g_Alloc); - return res; - #endif -} - -static void PrintString(const UInt16 *s) -{ - CBuf buf; - Buf_Init(&buf); - if (Utf16_To_Char(&buf, s, 0) == 0) - { - printf("%s", buf.data); - Buf_Free(&buf, &g_Alloc); - } -} - - -static void ConvertNumberToString(UInt64 value, char *s) -{ - char temp[32]; - int pos = 0; - do - { - temp[pos++] = (char)('0' + (int)(value % 10)); - value /= 10; - } - while (value != 0); - do - *s++ = temp[--pos]; - while (pos > 0); - *s = '\0'; -} - -#define PERIOD_4 (4 * 365 + 1) -#define PERIOD_100 (PERIOD_4 * 25 - 1) -#define PERIOD_400 (PERIOD_100 * 4 + 1) - -static void ConvertFileTimeToString(const CNtfsFileTime *ft, char *s) -{ - unsigned year, mon, day, hour, min, sec; - UInt64 v64 = ft->Low | ((UInt64)ft->High << 32); - Byte ms[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - unsigned temp; - UInt32 v; - v64 /= 10000000; - sec = (unsigned)(v64 % 60); - v64 /= 60; - min = (unsigned)(v64 % 60); - v64 /= 60; - hour = (unsigned)(v64 % 24); - v64 /= 24; - - v = (UInt32)v64; - - year = (unsigned)(1601 + v / PERIOD_400 * 400); - v %= PERIOD_400; - - temp = (unsigned)(v / PERIOD_100); - if (temp == 4) - temp = 3; - year += temp * 100; - v -= temp * PERIOD_100; - - temp = v / PERIOD_4; - if (temp == 25) - temp = 24; - year += temp * 4; - v -= temp * PERIOD_4; - - temp = v / 365; - if (temp == 4) - temp = 3; - year += temp; - v -= temp * 365; - - if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) - ms[1] = 29; - for (mon = 1; mon <= 12; mon++) - { - unsigned s = ms[mon - 1]; - if (v < s) - break; - v -= s; - } - day = (unsigned)v + 1; - sprintf(s, "%04d-%02d-%02d %02d:%02d:%02d", year, mon, day, hour, min, sec); -} - -void PrintError(char *sz) -{ - printf("\nERROR: %s\n", sz); -} - -int MY_CDECL main(int numargs, char *args[]) -{ - CFileInStream archiveStream; - CLookToRead lookStream; - CSzArEx db; - SRes res; - ISzAlloc allocImp; - ISzAlloc allocTempImp; - UInt16 *temp = NULL; - size_t tempSize = 0; - - printf("\n7z ANSI-C Decoder " MY_VERSION_COPYRIGHT_DATE "\n\n"); - if (numargs == 1) - { - printf( - "Usage: 7zDec \n\n" - "\n" - " e: Extract files from archive (without using directory names)\n" - " l: List contents of archive\n" - " t: Test integrity of archive\n" - " x: eXtract files with full paths\n"); - return 0; - } - if (numargs < 3) - { - PrintError("incorrect command"); - return 1; - } - - allocImp.Alloc = SzAlloc; - allocImp.Free = SzFree; - - allocTempImp.Alloc = SzAllocTemp; - allocTempImp.Free = SzFreeTemp; - - if (InFile_Open(&archiveStream.file, args[2])) - { - PrintError("can not open input file"); - return 1; - } - - FileInStream_CreateVTable(&archiveStream); - LookToRead_CreateVTable(&lookStream, False); - - lookStream.realStream = &archiveStream.s; - LookToRead_Init(&lookStream); - - CrcGenerateTable(); - - SzArEx_Init(&db); - res = SzArEx_Open(&db, &lookStream.s, &allocImp, &allocTempImp); - if (res == SZ_OK) - { - char *command = args[1]; - int listCommand = 0, testCommand = 0, extractCommand = 0, fullPaths = 0; - if (strcmp(command, "l") == 0) listCommand = 1; - else if (strcmp(command, "t") == 0) testCommand = 1; - else if (strcmp(command, "e") == 0) extractCommand = 1; - else if (strcmp(command, "x") == 0) { extractCommand = 1; fullPaths = 1; } - else - { - PrintError("incorrect command"); - res = SZ_ERROR_FAIL; - } - - if (res == SZ_OK) - { - UInt32 i; - - /* - if you need cache, use these 3 variables. - if you use external function, you can make these variable as static. - */ - UInt32 blockIndex = 0xFFFFFFFF; /* it can have any value before first call (if outBuffer = 0) */ - Byte *outBuffer = 0; /* it must be 0 before first call for each new archive. */ - size_t outBufferSize = 0; /* it can have any value before first call (if outBuffer = 0) */ - - for (i = 0; i < db.db.NumFiles; i++) - { - size_t offset = 0; - size_t outSizeProcessed = 0; - const CSzFileItem *f = db.db.Files + i; - size_t len; - if (listCommand == 0 && f->IsDir && !fullPaths) - continue; - len = SzArEx_GetFileNameUtf16(&db, i, NULL); - - if (len > tempSize) - { - SzFree(NULL, temp); - tempSize = len; - temp = (UInt16 *)SzAlloc(NULL, tempSize * sizeof(temp[0])); - if (temp == 0) - { - res = SZ_ERROR_MEM; - break; - } - } - - SzArEx_GetFileNameUtf16(&db, i, temp); - if (listCommand) - { - char s[32], t[32]; - ConvertNumberToString(f->Size, s); - if (f->MTimeDefined) - ConvertFileTimeToString(&f->MTime, t); - else - strcpy(t, " "); - - printf("%s %10s ", t, s); - PrintString(temp); - if (f->IsDir) - printf("/"); - printf("\n"); - continue; - } - printf(testCommand ? - "Testing ": - "Extracting "); - PrintString(temp); - if (f->IsDir) - printf("/"); - else - { - res = SzArEx_Extract(&db, &lookStream.s, i, - &blockIndex, &outBuffer, &outBufferSize, - &offset, &outSizeProcessed, - &allocImp, &allocTempImp); - if (res != SZ_OK) - break; - } - if (!testCommand) - { - CSzFile outFile; - size_t processedSize; - size_t j; - UInt16 *name = (UInt16 *)temp; - const UInt16 *destPath = (const UInt16 *)name; - for (j = 0; name[j] != 0; j++) - if (name[j] == '/') - { - if (fullPaths) - { - name[j] = 0; - MyCreateDir(name); - name[j] = CHAR_PATH_SEPARATOR; - } - else - destPath = name + j + 1; - } - - if (f->IsDir) - { - MyCreateDir(destPath); - printf("\n"); - continue; - } - else if (OutFile_OpenUtf16(&outFile, destPath)) - { - PrintError("can not open output file"); - res = SZ_ERROR_FAIL; - break; - } - processedSize = outSizeProcessed; - if (File_Write(&outFile, outBuffer + offset, &processedSize) != 0 || processedSize != outSizeProcessed) - { - PrintError("can not write output file"); - res = SZ_ERROR_FAIL; - break; - } - if (File_Close(&outFile)) - { - PrintError("can not close output file"); - res = SZ_ERROR_FAIL; - break; - } - } - printf("\n"); - } - IAlloc_Free(&allocImp, outBuffer); - } - } - SzArEx_Free(&db, &allocImp); - SzFree(NULL, temp); - - File_Close(&archiveStream.file); - if (res == SZ_OK) - { - printf("\nEverything is Ok\n"); - return 0; - } - if (res == SZ_ERROR_UNSUPPORTED) - PrintError("decoder doesn't support this archive"); - else if (res == SZ_ERROR_MEM) - PrintError("can not allocate memory"); - else if (res == SZ_ERROR_CRC) - PrintError("CRC error"); - else - printf("\nERROR #%d\n", res); - return 1; -} diff --git a/modules/lib7z/LZMASDK/C/Util/7z/makefile b/modules/lib7z/LZMASDK/C/Util/7z/makefile deleted file mode 100644 index 0ca3b374f8f0..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/7z/makefile +++ /dev/null @@ -1,31 +0,0 @@ -MY_STATIC_LINK=1 - -PROG = 7zDec.exe - -C_OBJS = \ - $O\7zBuf.obj \ - $O\7zBuf2.obj \ - $O\7zCrc.obj \ - $O\7zFile.obj \ - $O\7zDec.obj \ - $O\7zIn.obj \ - $O\7zStream.obj \ - $O\Bcj2.obj \ - $O\Bra86.obj \ - $O\Lzma2Dec.obj \ - $O\LzmaDec.obj \ - -7Z_OBJS = \ - $O\7zAlloc.obj \ - $O\7zMain.obj \ - -OBJS = \ - $(7Z_OBJS) \ - $(C_OBJS) \ - -!include "../../../CPP/Build.mak" - -$(7Z_OBJS): $(*B).c - $(COMPL_O1) -$(C_OBJS): ../../$(*B).c - $(COMPL_O2) diff --git a/modules/lib7z/LZMASDK/C/Util/7z/makefile.gcc b/modules/lib7z/LZMASDK/C/Util/7z/makefile.gcc deleted file mode 100644 index 1b4dfb001a60..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/7z/makefile.gcc +++ /dev/null @@ -1,55 +0,0 @@ -PROG = 7zDec -CXX = g++ -LIB = -RM = rm -f -CFLAGS = -c -O2 -Wall - -OBJS = 7zAlloc.o 7zBuf.o 7zBuf2.o 7zCrc.o 7zDec.o 7zIn.o 7zMain.o LzmaDec.o Lzma2Dec.o Bra86.o Bcj2.o 7zFile.o 7zStream.o - -all: $(PROG) - -$(PROG): $(OBJS) - $(CXX) -o $(PROG) $(LDFLAGS) $(OBJS) $(LIB) - -7zAlloc.o: 7zAlloc.c - $(CXX) $(CFLAGS) 7zAlloc.c - -7zBuf.o: ../../7zBuf.c - $(CXX) $(CFLAGS) ../../7zBuf.c - -7zBuf2.o: ../../7zBuf2.c - $(CXX) $(CFLAGS) ../../7zBuf2.c - -7zCrc.o: ../../7zCrc.c - $(CXX) $(CFLAGS) ../../7zCrc.c - -7zDec.o: ../../7zDec.c - $(CXX) $(CFLAGS) ../../7zDec.c - -7zIn.o: ../../7zIn.c - $(CXX) $(CFLAGS) ../../7zIn.c - -7zMain.o: 7zMain.c - $(CXX) $(CFLAGS) 7zMain.c - -LzmaDec.o: ../../LzmaDec.c - $(CXX) $(CFLAGS) ../../LzmaDec.c - -Lzma2Dec.o: ../../Lzma2Dec.c - $(CXX) $(CFLAGS) ../../Lzma2Dec.c - -Bra86.o: ../../Bra86.c - $(CXX) $(CFLAGS) ../../Bra86.c - -Bcj2.o: ../../Bcj2.c - $(CXX) $(CFLAGS) ../../Bcj2.c - -7zFile.o: ../../7zFile.c - $(CXX) $(CFLAGS) ../../7zFile.c - -7zStream.o: ../../7zStream.c - $(CXX) $(CFLAGS) ../../7zStream.c - -clean: - -$(RM) $(PROG) $(OBJS) - diff --git a/modules/lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.c b/modules/lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.c deleted file mode 100644 index 26b4092b2e16..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.c +++ /dev/null @@ -1,254 +0,0 @@ -/* LzmaUtil.c -- Test application for LZMA compression -2009-08-14 : Igor Pavlov : Public domain */ - -#define _CRT_SECURE_NO_WARNINGS - -#include -#include -#include - -#include "../../Alloc.h" -#include "../../7zFile.h" -#include "../../7zVersion.h" -#include "../../LzmaDec.h" -#include "../../LzmaEnc.h" - -const char *kCantReadMessage = "Can not read input file"; -const char *kCantWriteMessage = "Can not write output file"; -const char *kCantAllocateMessage = "Can not allocate memory"; -const char *kDataErrorMessage = "Data error"; - -static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); } -static void SzFree(void *p, void *address) { p = p; MyFree(address); } -static ISzAlloc g_Alloc = { SzAlloc, SzFree }; - -void PrintHelp(char *buffer) -{ - strcat(buffer, "\nLZMA Utility " MY_VERSION_COPYRIGHT_DATE "\n" - "\nUsage: lzma inputFile outputFile\n" - " e: encode file\n" - " d: decode file\n"); -} - -int PrintError(char *buffer, const char *message) -{ - strcat(buffer, "\nError: "); - strcat(buffer, message); - strcat(buffer, "\n"); - return 1; -} - -int PrintErrorNumber(char *buffer, SRes val) -{ - sprintf(buffer + strlen(buffer), "\nError code: %x\n", (unsigned)val); - return 1; -} - -int PrintUserError(char *buffer) -{ - return PrintError(buffer, "Incorrect command"); -} - -#define IN_BUF_SIZE (1 << 16) -#define OUT_BUF_SIZE (1 << 16) - -static SRes Decode2(CLzmaDec *state, ISeqOutStream *outStream, ISeqInStream *inStream, - UInt64 unpackSize) -{ - int thereIsSize = (unpackSize != (UInt64)(Int64)-1); - Byte inBuf[IN_BUF_SIZE]; - Byte outBuf[OUT_BUF_SIZE]; - size_t inPos = 0, inSize = 0, outPos = 0; - LzmaDec_Init(state); - for (;;) - { - if (inPos == inSize) - { - inSize = IN_BUF_SIZE; - RINOK(inStream->Read(inStream, inBuf, &inSize)); - inPos = 0; - } - { - SRes res; - SizeT inProcessed = inSize - inPos; - SizeT outProcessed = OUT_BUF_SIZE - outPos; - ELzmaFinishMode finishMode = LZMA_FINISH_ANY; - ELzmaStatus status; - if (thereIsSize && outProcessed > unpackSize) - { - outProcessed = (SizeT)unpackSize; - finishMode = LZMA_FINISH_END; - } - - res = LzmaDec_DecodeToBuf(state, outBuf + outPos, &outProcessed, - inBuf + inPos, &inProcessed, finishMode, &status); - inPos += inProcessed; - outPos += outProcessed; - unpackSize -= outProcessed; - - if (outStream) - if (outStream->Write(outStream, outBuf, outPos) != outPos) - return SZ_ERROR_WRITE; - - outPos = 0; - - if (res != SZ_OK || thereIsSize && unpackSize == 0) - return res; - - if (inProcessed == 0 && outProcessed == 0) - { - if (thereIsSize || status != LZMA_STATUS_FINISHED_WITH_MARK) - return SZ_ERROR_DATA; - return res; - } - } - } -} - -static SRes Decode(ISeqOutStream *outStream, ISeqInStream *inStream) -{ - UInt64 unpackSize; - int i; - SRes res = 0; - - CLzmaDec state; - - /* header: 5 bytes of LZMA properties and 8 bytes of uncompressed size */ - unsigned char header[LZMA_PROPS_SIZE + 8]; - - /* Read and parse header */ - - RINOK(SeqInStream_Read(inStream, header, sizeof(header))); - - unpackSize = 0; - for (i = 0; i < 8; i++) - unpackSize += (UInt64)header[LZMA_PROPS_SIZE + i] << (i * 8); - - LzmaDec_Construct(&state); - RINOK(LzmaDec_Allocate(&state, header, LZMA_PROPS_SIZE, &g_Alloc)); - res = Decode2(&state, outStream, inStream, unpackSize); - LzmaDec_Free(&state, &g_Alloc); - return res; -} - -static SRes Encode(ISeqOutStream *outStream, ISeqInStream *inStream, UInt64 fileSize, char *rs) -{ - CLzmaEncHandle enc; - SRes res; - CLzmaEncProps props; - - rs = rs; - - enc = LzmaEnc_Create(&g_Alloc); - if (enc == 0) - return SZ_ERROR_MEM; - - LzmaEncProps_Init(&props); - res = LzmaEnc_SetProps(enc, &props); - - if (res == SZ_OK) - { - Byte header[LZMA_PROPS_SIZE + 8]; - size_t headerSize = LZMA_PROPS_SIZE; - int i; - - res = LzmaEnc_WriteProperties(enc, header, &headerSize); - for (i = 0; i < 8; i++) - header[headerSize++] = (Byte)(fileSize >> (8 * i)); - if (outStream->Write(outStream, header, headerSize) != headerSize) - res = SZ_ERROR_WRITE; - else - { - if (res == SZ_OK) - res = LzmaEnc_Encode(enc, outStream, inStream, NULL, &g_Alloc, &g_Alloc); - } - } - LzmaEnc_Destroy(enc, &g_Alloc, &g_Alloc); - return res; -} - -int main2(int numArgs, const char *args[], char *rs) -{ - CFileSeqInStream inStream; - CFileOutStream outStream; - char c; - int res; - int encodeMode; - Bool useOutFile = False; - - FileSeqInStream_CreateVTable(&inStream); - File_Construct(&inStream.file); - - FileOutStream_CreateVTable(&outStream); - File_Construct(&outStream.file); - - if (numArgs == 1) - { - PrintHelp(rs); - return 0; - } - - if (numArgs < 3 || numArgs > 4 || strlen(args[1]) != 1) - return PrintUserError(rs); - - c = args[1][0]; - encodeMode = (c == 'e' || c == 'E'); - if (!encodeMode && c != 'd' && c != 'D') - return PrintUserError(rs); - - { - size_t t4 = sizeof(UInt32); - size_t t8 = sizeof(UInt64); - if (t4 != 4 || t8 != 8) - return PrintError(rs, "Incorrect UInt32 or UInt64"); - } - - if (InFile_Open(&inStream.file, args[2]) != 0) - return PrintError(rs, "Can not open input file"); - - if (numArgs > 3) - { - useOutFile = True; - if (OutFile_Open(&outStream.file, args[3]) != 0) - return PrintError(rs, "Can not open output file"); - } - else if (encodeMode) - PrintUserError(rs); - - if (encodeMode) - { - UInt64 fileSize; - File_GetLength(&inStream.file, &fileSize); - res = Encode(&outStream.s, &inStream.s, fileSize, rs); - } - else - { - res = Decode(&outStream.s, useOutFile ? &inStream.s : NULL); - } - - if (useOutFile) - File_Close(&outStream.file); - File_Close(&inStream.file); - - if (res != SZ_OK) - { - if (res == SZ_ERROR_MEM) - return PrintError(rs, kCantAllocateMessage); - else if (res == SZ_ERROR_DATA) - return PrintError(rs, kDataErrorMessage); - else if (res == SZ_ERROR_WRITE) - return PrintError(rs, kCantWriteMessage); - else if (res == SZ_ERROR_READ) - return PrintError(rs, kCantReadMessage); - return PrintErrorNumber(rs, res); - } - return 0; -} - -int MY_CDECL main(int numArgs, const char *args[]) -{ - char rs[800] = { 0 }; - int res = main2(numArgs, args, rs); - printf(rs); - return res; -} diff --git a/modules/lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.dsp b/modules/lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.dsp deleted file mode 100644 index 48155113120d..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.dsp +++ /dev/null @@ -1,168 +0,0 @@ -# Microsoft Developer Studio Project File - Name="LzmaUtil" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=LzmaUtil - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "LzmaUtil.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "LzmaUtil.mak" CFG="LzmaUtil - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "LzmaUtil - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "LzmaUtil - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "LzmaUtil - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"c:\util\7lzma.exe" - -!ELSEIF "$(CFG)" == "LzmaUtil - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"c:\util\7lzma.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "LzmaUtil - Win32 Release" -# Name "LzmaUtil - Win32 Debug" -# Begin Source File - -SOURCE=..\..\7zFile.c -# End Source File -# Begin Source File - -SOURCE=..\..\7zFile.h -# End Source File -# Begin Source File - -SOURCE=..\..\7zStream.c -# End Source File -# Begin Source File - -SOURCE=..\..\7zVersion.h -# End Source File -# Begin Source File - -SOURCE=..\..\Alloc.c -# End Source File -# Begin Source File - -SOURCE=..\..\Alloc.h -# End Source File -# Begin Source File - -SOURCE=..\..\CpuArch.h -# End Source File -# Begin Source File - -SOURCE=..\..\LzFind.c -# End Source File -# Begin Source File - -SOURCE=..\..\LzFind.h -# End Source File -# Begin Source File - -SOURCE=..\..\LzFindMt.c -# End Source File -# Begin Source File - -SOURCE=..\..\LzFindMt.h -# End Source File -# Begin Source File - -SOURCE=..\..\LzHash.h -# End Source File -# Begin Source File - -SOURCE=..\..\LzmaDec.c -# End Source File -# Begin Source File - -SOURCE=..\..\LzmaDec.h -# End Source File -# Begin Source File - -SOURCE=..\..\LzmaEnc.c -# End Source File -# Begin Source File - -SOURCE=..\..\LzmaEnc.h -# End Source File -# Begin Source File - -SOURCE=.\LzmaUtil.c -# End Source File -# Begin Source File - -SOURCE=..\..\Threads.c -# End Source File -# Begin Source File - -SOURCE=..\..\Threads.h -# End Source File -# Begin Source File - -SOURCE=..\..\Types.h -# End Source File -# End Target -# End Project diff --git a/modules/lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.dsw b/modules/lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.dsw deleted file mode 100644 index f43548752f16..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/Lzma/LzmaUtil.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "LzmaUtil"=.\LzmaUtil.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/modules/lib7z/LZMASDK/C/Util/Lzma/makefile b/modules/lib7z/LZMASDK/C/Util/Lzma/makefile deleted file mode 100644 index fdeeb1dfd1d1..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/Lzma/makefile +++ /dev/null @@ -1,29 +0,0 @@ -MY_STATIC_LINK=1 -PROG = LZMAc.exe - -CFLAGS = $(CFLAGS) \ - -DCOMPRESS_MF_MT \ - -LIB_OBJS = \ - $O\LzmaUtil.obj \ - -C_OBJS = \ - $O\Alloc.obj \ - $O\LzFind.obj \ - $O\LzFindMt.obj \ - $O\LzmaDec.obj \ - $O\LzmaEnc.obj \ - $O\7zFile.obj \ - $O\7zStream.obj \ - $O\Threads.obj \ - -OBJS = \ - $(LIB_OBJS) \ - $(C_OBJS) \ - -!include "../../../CPP/Build.mak" - -$(LIB_OBJS): $(*B).c - $(COMPL_O2) -$(C_OBJS): ../../$(*B).c - $(COMPL_O2) diff --git a/modules/lib7z/LZMASDK/C/Util/Lzma/makefile.gcc b/modules/lib7z/LZMASDK/C/Util/Lzma/makefile.gcc deleted file mode 100644 index 23967ced96a1..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/Lzma/makefile.gcc +++ /dev/null @@ -1,44 +0,0 @@ -PROG = lzma -CXX = g++ -LIB = -RM = rm -f -CFLAGS = -c -O2 -Wall - -OBJS = \ - LzmaUtil.o \ - Alloc.o \ - LzFind.o \ - LzmaDec.o \ - LzmaEnc.o \ - 7zFile.o \ - 7zStream.o \ - - -all: $(PROG) - -$(PROG): $(OBJS) - $(CXX) -o $(PROG) $(LDFLAGS) $(OBJS) $(LIB) $(LIB2) - -LzmaUtil.o: LzmaUtil.c - $(CXX) $(CFLAGS) LzmaUtil.c - -Alloc.o: ../../Alloc.c - $(CXX) $(CFLAGS) ../../Alloc.c - -LzFind.o: ../../LzFind.c - $(CXX) $(CFLAGS) ../../LzFind.c - -LzmaDec.o: ../../LzmaDec.c - $(CXX) $(CFLAGS) ../../LzmaDec.c - -LzmaEnc.o: ../../LzmaEnc.c - $(CXX) $(CFLAGS) ../../LzmaEnc.c - -7zFile.o: ../../7zFile.c - $(CXX) $(CFLAGS) ../../7zFile.c - -7zStream.o: ../../7zStream.c - $(CXX) $(CFLAGS) ../../7zStream.c - -clean: - -$(RM) $(PROG) $(OBJS) diff --git a/modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.def b/modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.def deleted file mode 100644 index 43b9597781ad..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.def +++ /dev/null @@ -1,4 +0,0 @@ -EXPORTS - LzmaCompress - LzmaUncompress - diff --git a/modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.dsp b/modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.dsp deleted file mode 100644 index 2597f292fe30..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.dsp +++ /dev/null @@ -1,178 +0,0 @@ -# Microsoft Developer Studio Project File - Name="LzmaLib" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=LzmaLib - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "LzmaLib.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "LzmaLib.mak" CFG="LzmaLib - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "LzmaLib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "LzmaLib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "LzmaLib - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LZMALIB_EXPORTS" /YX /FD /c -# ADD CPP /nologo /Gr /MT /W3 /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LZMALIB_EXPORTS" /D "COMPRESS_MF_MT" /FD /c -# SUBTRACT CPP /YX -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"C:\Util\LZMA.dll" /opt:NOWIN98 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "LzmaLib - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LZMALIB_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LZMALIB_EXPORTS" /D "COMPRESS_MF_MT" /FD /GZ /c -# SUBTRACT CPP /YX -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"C:\Util\LZMA.dll" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "LzmaLib - Win32 Release" -# Name "LzmaLib - Win32 Debug" -# Begin Group "Spec" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\LzmaLib.def -# End Source File -# Begin Source File - -SOURCE=.\LzmaLibExports.c -# End Source File -# End Group -# Begin Source File - -SOURCE=..\..\Alloc.c -# End Source File -# Begin Source File - -SOURCE=..\..\Alloc.h -# End Source File -# Begin Source File - -SOURCE=..\..\IStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\LzFind.c -# End Source File -# Begin Source File - -SOURCE=..\..\LzFind.h -# End Source File -# Begin Source File - -SOURCE=..\..\LzFindMt.c -# End Source File -# Begin Source File - -SOURCE=..\..\LzFindMt.h -# End Source File -# Begin Source File - -SOURCE=..\..\LzHash.h -# End Source File -# Begin Source File - -SOURCE=..\..\LzmaDec.c -# End Source File -# Begin Source File - -SOURCE=..\..\LzmaDec.h -# End Source File -# Begin Source File - -SOURCE=..\..\LzmaEnc.c -# End Source File -# Begin Source File - -SOURCE=..\..\LzmaEnc.h -# End Source File -# Begin Source File - -SOURCE=..\..\LzmaLib.c -# End Source File -# Begin Source File - -SOURCE=..\..\LzmaLib.h -# End Source File -# Begin Source File - -SOURCE=.\resource.rc -# End Source File -# Begin Source File - -SOURCE=..\..\Threads.c -# End Source File -# Begin Source File - -SOURCE=..\..\Threads.h -# End Source File -# Begin Source File - -SOURCE=..\..\Types.h -# End Source File -# End Target -# End Project diff --git a/modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.dsw b/modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.dsw deleted file mode 100644 index f6c55593f50a..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLib.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "LzmaLib"=.\LzmaLib.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLibExports.c b/modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLibExports.c deleted file mode 100644 index 7434536ec22a..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/LzmaLib/LzmaLibExports.c +++ /dev/null @@ -1,12 +0,0 @@ -/* LzmaLibExports.c -- LZMA library DLL Entry point -2008-10-04 : Igor Pavlov : Public domain */ - -#include - -BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) -{ - hInstance = hInstance; - dwReason = dwReason; - lpReserved = lpReserved; - return TRUE; -} diff --git a/modules/lib7z/LZMASDK/C/Util/LzmaLib/makefile b/modules/lib7z/LZMASDK/C/Util/LzmaLib/makefile deleted file mode 100644 index 4756ba5f8f82..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/LzmaLib/makefile +++ /dev/null @@ -1,35 +0,0 @@ -MY_STATIC_LINK=1 -SLIB = sLZMA.lib -PROG = LZMA.dll -SLIBPATH = $O\$(SLIB) - -DEF_FILE = LzmaLib.def -CFLAGS = $(CFLAGS) \ - -DCOMPRESS_MF_MT \ - -LIB_OBJS = \ - $O\LzmaLibExports.obj \ - -C_OBJS = \ - $O\Alloc.obj \ - $O\LzFind.obj \ - $O\LzFindMt.obj \ - $O\LzmaDec.obj \ - $O\LzmaEnc.obj \ - $O\LzmaLib.obj \ - $O\Threads.obj \ - -OBJS = \ - $(LIB_OBJS) \ - $(C_OBJS) \ - $O\resource.res - -!include "../../../CPP/Build.mak" - -$(SLIBPATH): $O $(OBJS) - lib -out:$(SLIBPATH) $(OBJS) $(LIBS) - -$(LIB_OBJS): $(*B).c - $(COMPL_O2) -$(C_OBJS): ../../$(*B).c - $(COMPL_O2) diff --git a/modules/lib7z/LZMASDK/C/Util/LzmaLib/resource.rc b/modules/lib7z/LZMASDK/C/Util/LzmaLib/resource.rc deleted file mode 100644 index cb62ed985217..000000000000 --- a/modules/lib7z/LZMASDK/C/Util/LzmaLib/resource.rc +++ /dev/null @@ -1,4 +0,0 @@ -#include "../../../CPP/7zip/MyVersionInfo.rc" - -MY_VERSION_INFO_DLL("LZMA library", "LZMA") - diff --git a/modules/lib7z/LZMASDK/C/Xz.c b/modules/lib7z/LZMASDK/C/Xz.c deleted file mode 100644 index 0bdf047c73fb..000000000000 --- a/modules/lib7z/LZMASDK/C/Xz.c +++ /dev/null @@ -1,88 +0,0 @@ -/* Xz.c - Xz -2009-04-15 : Igor Pavlov : Public domain */ - -#include "7zCrc.h" -#include "CpuArch.h" -#include "Xz.h" -#include "XzCrc64.h" - -Byte XZ_SIG[XZ_SIG_SIZE] = { 0xFD, '7', 'z', 'X', 'Z', 0 }; -Byte XZ_FOOTER_SIG[XZ_FOOTER_SIG_SIZE] = { 'Y', 'Z' }; - -unsigned Xz_WriteVarInt(Byte *buf, UInt64 v) -{ - unsigned i = 0; - do - { - buf[i++] = (Byte)((v & 0x7F) | 0x80); - v >>= 7; - } - while (v != 0); - buf[i - 1] &= 0x7F; - return i; -} - -void Xz_Construct(CXzStream *p) -{ - p->numBlocks = p->numBlocksAllocated = 0; - p->blocks = 0; - p->flags = 0; -} - -void Xz_Free(CXzStream *p, ISzAlloc *alloc) -{ - alloc->Free(alloc, p->blocks); - p->numBlocks = p->numBlocksAllocated = 0; - p->blocks = 0; -} - -unsigned XzFlags_GetCheckSize(CXzStreamFlags f) -{ - int t = XzFlags_GetCheckType(f); - return (t == 0) ? 0 : (4 << ((t - 1) / 3)); -} - -void XzCheck_Init(CXzCheck *p, int mode) -{ - p->mode = mode; - switch (mode) - { - case XZ_CHECK_CRC32: p->crc = CRC_INIT_VAL; break; - case XZ_CHECK_CRC64: p->crc64 = CRC64_INIT_VAL; break; - case XZ_CHECK_SHA256: Sha256_Init(&p->sha); break; - } -} - -void XzCheck_Update(CXzCheck *p, const void *data, size_t size) -{ - switch (p->mode) - { - case XZ_CHECK_CRC32: p->crc = CrcUpdate(p->crc, data, size); break; - case XZ_CHECK_CRC64: p->crc64 = Crc64Update(p->crc64, data, size); break; - case XZ_CHECK_SHA256: Sha256_Update(&p->sha, (const Byte *)data, size); break; - } -} - -int XzCheck_Final(CXzCheck *p, Byte *digest) -{ - switch (p->mode) - { - case XZ_CHECK_CRC32: - SetUi32(digest, CRC_GET_DIGEST(p->crc)); - break; - case XZ_CHECK_CRC64: - { - int i; - UInt64 v = CRC64_GET_DIGEST(p->crc64); - for (i = 0; i < 8; i++, v >>= 8) - digest[i] = (Byte)(v & 0xFF); - break; - } - case XZ_CHECK_SHA256: - Sha256_Final(&p->sha, digest); - break; - default: - return 0; - } - return 1; -} diff --git a/modules/lib7z/LZMASDK/C/Xz.h b/modules/lib7z/LZMASDK/C/Xz.h deleted file mode 100644 index 65359712dee3..000000000000 --- a/modules/lib7z/LZMASDK/C/Xz.h +++ /dev/null @@ -1,256 +0,0 @@ -/* Xz.h - Xz interface -2009-04-15 : Igor Pavlov : Public domain */ - -#ifndef __XZ_H -#define __XZ_H - -#include "Sha256.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define XZ_ID_Subblock 1 -#define XZ_ID_Delta 3 -#define XZ_ID_X86 4 -#define XZ_ID_PPC 5 -#define XZ_ID_IA64 6 -#define XZ_ID_ARM 7 -#define XZ_ID_ARMT 8 -#define XZ_ID_SPARC 9 -#define XZ_ID_LZMA2 0x21 - -unsigned Xz_ReadVarInt(const Byte *p, size_t maxSize, UInt64 *value); -unsigned Xz_WriteVarInt(Byte *buf, UInt64 v); - -/* ---------- xz block ---------- */ - -#define XZ_BLOCK_HEADER_SIZE_MAX 1024 - -#define XZ_NUM_FILTERS_MAX 4 -#define XZ_BF_NUM_FILTERS_MASK 3 -#define XZ_BF_PACK_SIZE (1 << 6) -#define XZ_BF_UNPACK_SIZE (1 << 7) - -#define XZ_FILTER_PROPS_SIZE_MAX 20 - -typedef struct -{ - UInt64 id; - UInt32 propsSize; - Byte props[XZ_FILTER_PROPS_SIZE_MAX]; -} CXzFilter; - -typedef struct -{ - UInt64 packSize; - UInt64 unpackSize; - Byte flags; - CXzFilter filters[XZ_NUM_FILTERS_MAX]; -} CXzBlock; - -#define XzBlock_GetNumFilters(p) (((p)->flags & XZ_BF_NUM_FILTERS_MASK) + 1) -#define XzBlock_HasPackSize(p) (((p)->flags & XZ_BF_PACK_SIZE) != 0) -#define XzBlock_HasUnpackSize(p) (((p)->flags & XZ_BF_UNPACK_SIZE) != 0) - -SRes XzBlock_Parse(CXzBlock *p, const Byte *header); -SRes XzBlock_ReadHeader(CXzBlock *p, ISeqInStream *inStream, Bool *isIndex, UInt32 *headerSizeRes); - -/* ---------- xz stream ---------- */ - -#define XZ_SIG_SIZE 6 -#define XZ_FOOTER_SIG_SIZE 2 - -extern Byte XZ_SIG[XZ_SIG_SIZE]; -extern Byte XZ_FOOTER_SIG[XZ_FOOTER_SIG_SIZE]; - -#define XZ_STREAM_FLAGS_SIZE 2 -#define XZ_STREAM_CRC_SIZE 4 - -#define XZ_STREAM_HEADER_SIZE (XZ_SIG_SIZE + XZ_STREAM_FLAGS_SIZE + XZ_STREAM_CRC_SIZE) -#define XZ_STREAM_FOOTER_SIZE (XZ_FOOTER_SIG_SIZE + XZ_STREAM_FLAGS_SIZE + XZ_STREAM_CRC_SIZE + 4) - -#define XZ_CHECK_MASK 0xF -#define XZ_CHECK_NO 0 -#define XZ_CHECK_CRC32 1 -#define XZ_CHECK_CRC64 4 -#define XZ_CHECK_SHA256 10 - -typedef struct -{ - int mode; - UInt32 crc; - UInt64 crc64; - CSha256 sha; -} CXzCheck; - -void XzCheck_Init(CXzCheck *p, int mode); -void XzCheck_Update(CXzCheck *p, const void *data, size_t size); -int XzCheck_Final(CXzCheck *p, Byte *digest); - -typedef UInt16 CXzStreamFlags; - -#define XzFlags_IsSupported(f) ((f) <= XZ_CHECK_MASK) -#define XzFlags_GetCheckType(f) ((f) & XZ_CHECK_MASK) -#define XzFlags_HasDataCrc32(f) (Xz_GetCheckType(f) == XZ_CHECK_CRC32) -unsigned XzFlags_GetCheckSize(CXzStreamFlags f); - -SRes Xz_ParseHeader(CXzStreamFlags *p, const Byte *buf); -SRes Xz_ReadHeader(CXzStreamFlags *p, ISeqInStream *inStream); - -typedef struct -{ - UInt64 unpackSize; - UInt64 totalSize; -} CXzBlockSizes; - -typedef struct -{ - CXzStreamFlags flags; - size_t numBlocks; - size_t numBlocksAllocated; - CXzBlockSizes *blocks; - UInt64 startOffset; -} CXzStream; - -void Xz_Construct(CXzStream *p); -void Xz_Free(CXzStream *p, ISzAlloc *alloc); - -#define XZ_SIZE_OVERFLOW ((UInt64)(Int64)-1) - -UInt64 Xz_GetUnpackSize(const CXzStream *p); -UInt64 Xz_GetPackSize(const CXzStream *p); - -typedef struct -{ - size_t num; - size_t numAllocated; - CXzStream *streams; -} CXzs; - -void Xzs_Construct(CXzs *p); -void Xzs_Free(CXzs *p, ISzAlloc *alloc); -SRes Xzs_ReadBackward(CXzs *p, ILookInStream *inStream, Int64 *startOffset, ICompressProgress *progress, ISzAlloc *alloc); - -UInt64 Xzs_GetNumBlocks(const CXzs *p); -UInt64 Xzs_GetUnpackSize(const CXzs *p); - -typedef enum -{ - CODER_STATUS_NOT_SPECIFIED, /* use main error code instead */ - CODER_STATUS_FINISHED_WITH_MARK, /* stream was finished with end mark. */ - CODER_STATUS_NOT_FINISHED, /* stream was not finished */ - CODER_STATUS_NEEDS_MORE_INPUT, /* you must provide more input bytes */ -} ECoderStatus; - -typedef enum -{ - CODER_FINISH_ANY, /* finish at any point */ - CODER_FINISH_END /* block must be finished at the end */ -} ECoderFinishMode; - -typedef struct _IStateCoder -{ - void *p; - void (*Free)(void *p, ISzAlloc *alloc); - SRes (*SetProps)(void *p, const Byte *props, size_t propSize, ISzAlloc *alloc); - void (*Init)(void *p); - SRes (*Code)(void *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, - int srcWasFinished, ECoderFinishMode finishMode, int *wasFinished); -} IStateCoder; - -#define MIXCODER_NUM_FILTERS_MAX 4 - -typedef struct -{ - ISzAlloc *alloc; - Byte *buf; - int numCoders; - int finished[MIXCODER_NUM_FILTERS_MAX - 1]; - size_t pos[MIXCODER_NUM_FILTERS_MAX - 1]; - size_t size[MIXCODER_NUM_FILTERS_MAX - 1]; - UInt64 ids[MIXCODER_NUM_FILTERS_MAX]; - IStateCoder coders[MIXCODER_NUM_FILTERS_MAX]; -} CMixCoder; - -void MixCoder_Construct(CMixCoder *p, ISzAlloc *alloc); -void MixCoder_Free(CMixCoder *p); -void MixCoder_Init(CMixCoder *p); -SRes MixCoder_SetFromMethod(CMixCoder *p, int coderIndex, UInt64 methodId); -SRes MixCoder_Code(CMixCoder *p, Byte *dest, SizeT *destLen, - const Byte *src, SizeT *srcLen, int srcWasFinished, - ECoderFinishMode finishMode, ECoderStatus *status); - -typedef enum -{ - XZ_STATE_STREAM_HEADER, - XZ_STATE_STREAM_INDEX, - XZ_STATE_STREAM_INDEX_CRC, - XZ_STATE_STREAM_FOOTER, - XZ_STATE_STREAM_PADDING, - XZ_STATE_BLOCK_HEADER, - XZ_STATE_BLOCK, - XZ_STATE_BLOCK_FOOTER -} EXzState; - -typedef struct -{ - EXzState state; - UInt32 pos; - unsigned alignPos; - unsigned indexPreSize; - - CXzStreamFlags streamFlags; - - UInt32 blockHeaderSize; - UInt64 packSize; - UInt64 unpackSize; - - UInt64 numBlocks; - UInt64 indexSize; - UInt64 indexPos; - UInt64 padSize; - - UInt64 numStreams; - - UInt32 crc; - CMixCoder decoder; - CXzBlock block; - CXzCheck check; - CSha256 sha; - Byte shaDigest[SHA256_DIGEST_SIZE]; - Byte buf[XZ_BLOCK_HEADER_SIZE_MAX]; -} CXzUnpacker; - -SRes XzUnpacker_Create(CXzUnpacker *p, ISzAlloc *alloc); -void XzUnpacker_Free(CXzUnpacker *p); - -/* -finishMode: - It has meaning only if the decoding reaches output limit (*destLen). - LZMA_FINISH_ANY - use smallest number of input bytes - LZMA_FINISH_END - read EndOfStream marker after decoding - -Returns: - SZ_OK - status: - LZMA_STATUS_FINISHED_WITH_MARK - LZMA_STATUS_NOT_FINISHED - SZ_ERROR_DATA - Data error - SZ_ERROR_MEM - Memory allocation error - SZ_ERROR_UNSUPPORTED - Unsupported properties - SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src). -*/ - - -SRes XzUnpacker_Code(CXzUnpacker *p, Byte *dest, SizeT *destLen, - const Byte *src, SizeT *srcLen, /* int srcWasFinished, */ int finishMode, - ECoderStatus *status); - -Bool XzUnpacker_IsStreamWasFinished(CXzUnpacker *p); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/XzCrc64.c b/modules/lib7z/LZMASDK/C/XzCrc64.c deleted file mode 100644 index b99495d40372..000000000000 --- a/modules/lib7z/LZMASDK/C/XzCrc64.c +++ /dev/null @@ -1,33 +0,0 @@ -/* XzCrc64.c -- CRC64 calculation -2009-04-15 : Igor Pavlov : Public domain */ - -#include "XzCrc64.h" - -#define kCrc64Poly 0xC96C5795D7870F42 -UInt64 g_Crc64Table[256]; - -void MY_FAST_CALL Crc64GenerateTable(void) -{ - UInt32 i; - for (i = 0; i < 256; i++) - { - UInt64 r = i; - int j; - for (j = 0; j < 8; j++) - r = (r >> 1) ^ ((UInt64)kCrc64Poly & ~((r & 1) - 1)); - g_Crc64Table[i] = r; - } -} - -UInt64 MY_FAST_CALL Crc64Update(UInt64 v, const void *data, size_t size) -{ - const Byte *p = (const Byte *)data; - for (; size > 0 ; size--, p++) - v = CRC64_UPDATE_BYTE(v, *p); - return v; -} - -UInt64 MY_FAST_CALL Crc64Calc(const void *data, size_t size) -{ - return CRC64_GET_DIGEST(Crc64Update(CRC64_INIT_VAL, data, size)); -} diff --git a/modules/lib7z/LZMASDK/C/XzCrc64.h b/modules/lib7z/LZMASDK/C/XzCrc64.h deleted file mode 100644 index 3cd1526a4e09..000000000000 --- a/modules/lib7z/LZMASDK/C/XzCrc64.h +++ /dev/null @@ -1,30 +0,0 @@ -/* XzCrc64.c -- CRC64 calculation -2009-04-15 : Igor Pavlov : Public domain */ - -#ifndef __XZ_CRC64_H -#define __XZ_CRC64_H - -#include - -#include "Types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -extern UInt64 g_Crc64Table[]; - -void MY_FAST_CALL Crc64GenerateTable(void); - -#define CRC64_INIT_VAL 0xFFFFFFFFFFFFFFFF -#define CRC64_GET_DIGEST(crc) ((crc) ^ 0xFFFFFFFFFFFFFFFF) -#define CRC64_UPDATE_BYTE(crc, b) (g_Crc64Table[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8)) - -UInt64 MY_FAST_CALL Crc64Update(UInt64 crc, const void *data, size_t size); -UInt64 MY_FAST_CALL Crc64Calc(const void *data, size_t size); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/XzDec.c b/modules/lib7z/LZMASDK/C/XzDec.c deleted file mode 100644 index 14a459e11613..000000000000 --- a/modules/lib7z/LZMASDK/C/XzDec.c +++ /dev/null @@ -1,873 +0,0 @@ -/* XzDec.c -- Xz Decode -2009-06-08 : Igor Pavlov : Public domain */ - -/* #define XZ_DUMP */ - -#ifdef XZ_DUMP -#include -#endif - -#include -#include - -#include "7zCrc.h" -#include "Alloc.h" -#include "Bra.h" -#include "CpuArch.h" -#include "Delta.h" -#include "Lzma2Dec.h" - -#ifdef USE_SUBBLOCK -#include "SbDec.h" -#endif - -#include "Xz.h" - -#define XZ_CHECK_SIZE_MAX 64 - -#define CODER_BUF_SIZE (1 << 17) - -unsigned Xz_ReadVarInt(const Byte *p, size_t maxSize, UInt64 *value) -{ - int i, limit; - *value = 0; - limit = (maxSize > 9) ? 9 : (int)maxSize; - - for (i = 0; i < limit;) - { - Byte b = p[i]; - *value |= (UInt64)(b & 0x7F) << (7 * i++); - if ((b & 0x80) == 0) - return (b == 0 && i != 1) ? 0 : i; - } - return 0; -} - -/* ---------- BraState ---------- */ - -#define BRA_BUF_SIZE (1 << 14) - -typedef struct -{ - size_t bufPos; - size_t bufConv; - size_t bufTotal; - - UInt32 methodId; - int encodeMode; - UInt32 delta; - UInt32 ip; - UInt32 x86State; - Byte deltaState[DELTA_STATE_SIZE]; - - Byte buf[BRA_BUF_SIZE]; -} CBraState; - -void BraState_Free(void *pp, ISzAlloc *alloc) -{ - alloc->Free(alloc, pp); -} - -SRes BraState_SetProps(void *pp, const Byte *props, size_t propSize, ISzAlloc *alloc) -{ - CBraState *p = ((CBraState *)pp); - alloc = alloc; - p->encodeMode = 0; - p->ip = 0; - if (p->methodId == XZ_ID_Delta) - { - if (propSize != 1) - return SZ_ERROR_UNSUPPORTED; - p->delta = (unsigned)props[0] + 1; - } - else - { - if (propSize == 4) - { - UInt32 v = GetUi32(props); - switch(p->methodId) - { - case XZ_ID_PPC: - case XZ_ID_ARM: - case XZ_ID_SPARC: - if ((v & 3) != 0) - return SZ_ERROR_UNSUPPORTED; - break; - case XZ_ID_ARMT: - if ((v & 1) != 0) - return SZ_ERROR_UNSUPPORTED; - break; - case XZ_ID_IA64: - if ((v & 0xF) != 0) - return SZ_ERROR_UNSUPPORTED; - break; - } - p->ip = v; - } - else if (propSize != 0) - return SZ_ERROR_UNSUPPORTED; - } - return SZ_OK; -} - -void BraState_Init(void *pp) -{ - CBraState *p = ((CBraState *)pp); - p->bufPos = p->bufConv = p->bufTotal = 0; - x86_Convert_Init(p->x86State); - if (p->methodId == XZ_ID_Delta) - Delta_Init(p->deltaState); -} - -#define CASE_BRA_CONV(isa) case XZ_ID_ ## isa: p->bufConv = isa ## _Convert(p->buf, p->bufTotal, p->ip, p->encodeMode); break; - -static SRes BraState_Code(void *pp, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, - int srcWasFinished, ECoderFinishMode finishMode, int *wasFinished) -{ - CBraState *p = ((CBraState *)pp); - SizeT destLenOrig = *destLen; - SizeT srcLenOrig = *srcLen; - *destLen = 0; - *srcLen = 0; - finishMode = finishMode; - *wasFinished = 0; - while (destLenOrig > 0) - { - if (p->bufPos != p->bufConv) - { - size_t curSize = p->bufConv - p->bufPos; - if (curSize > destLenOrig) - curSize = destLenOrig; - memcpy(dest, p->buf + p->bufPos, curSize); - p->bufPos += curSize; - *destLen += curSize; - dest += curSize; - destLenOrig -= curSize; - continue; - } - p->bufTotal -= p->bufPos; - memmove(p->buf, p->buf + p->bufPos, p->bufTotal); - p->bufPos = 0; - p->bufConv = 0; - { - size_t curSize = BRA_BUF_SIZE - p->bufTotal; - if (curSize > srcLenOrig) - curSize = srcLenOrig; - memcpy(p->buf + p->bufTotal, src, curSize); - *srcLen += curSize; - src += curSize; - srcLenOrig -= curSize; - p->bufTotal += curSize; - } - if (p->bufTotal == 0) - break; - switch(p->methodId) - { - case XZ_ID_Delta: - if (p->encodeMode) - Delta_Encode(p->deltaState, p->delta, p->buf, p->bufTotal); - else - Delta_Decode(p->deltaState, p->delta, p->buf, p->bufTotal); - p->bufConv = p->bufTotal; - break; - case XZ_ID_X86: - p->bufConv = x86_Convert(p->buf, p->bufTotal, p->ip, &p->x86State, p->encodeMode); - break; - CASE_BRA_CONV(PPC) - CASE_BRA_CONV(IA64) - CASE_BRA_CONV(ARM) - CASE_BRA_CONV(ARMT) - CASE_BRA_CONV(SPARC) - default: - return SZ_ERROR_UNSUPPORTED; - } - p->ip += (UInt32)p->bufConv; - - if (p->bufConv == 0) - { - if (!srcWasFinished) - break; - p->bufConv = p->bufTotal; - } - } - if (p->bufTotal == p->bufPos && srcLenOrig == 0 && srcWasFinished) - *wasFinished = 1; - return SZ_OK; -} - -SRes BraState_SetFromMethod(IStateCoder *p, UInt64 id, ISzAlloc *alloc) -{ - CBraState *decoder; - if (id != XZ_ID_Delta && - id != XZ_ID_X86 && - id != XZ_ID_PPC && - id != XZ_ID_IA64 && - id != XZ_ID_ARM && - id != XZ_ID_ARMT && - id != XZ_ID_SPARC) - return SZ_ERROR_UNSUPPORTED; - p->p = 0; - decoder = alloc->Alloc(alloc, sizeof(CBraState)); - if (decoder == 0) - return SZ_ERROR_MEM; - decoder->methodId = (UInt32)id; - p->p = decoder; - p->Free = BraState_Free; - p->SetProps = BraState_SetProps; - p->Init = BraState_Init; - p->Code = BraState_Code; - return SZ_OK; -} - -/* ---------- SbState ---------- */ - -#ifdef USE_SUBBLOCK - -static void SbState_Free(void *pp, ISzAlloc *alloc) -{ - CSubblockDec *p = (CSubblockDec *)pp; - SubblockDec_Free(p, alloc); - alloc->Free(alloc, pp); -} - -static SRes SbState_SetProps(void *pp, const Byte *props, size_t propSize, ISzAlloc *alloc) -{ - pp = pp; - props = props; - alloc = alloc; - return (propSize == 0) ? SZ_OK : SZ_ERROR_UNSUPPORTED; -} - -static void SbState_Init(void *pp) -{ - SubblockDec_Init((CSubblockDec *)pp); -} - -static SRes SbState_Code(void *pp, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, - int srcWasFinished, ECoderFinishMode finishMode, int *wasFinished) -{ - ECoderStatus status; - SRes res = SubblockDec_Decode((CSubblockDec *)pp, dest, destLen, src, srcLen, finishMode, &status); - srcWasFinished = srcWasFinished; - *wasFinished = (status == LZMA_STATUS_FINISHED_WITH_MARK); - return res; -} - -SRes SbState_SetFromMethod(IStateCoder *p, ISzAlloc *alloc) -{ - CSubblockDec *decoder; - p->p = 0; - decoder = alloc->Alloc(alloc, sizeof(CSubblockDec)); - if (decoder == 0) - return SZ_ERROR_MEM; - p->p = decoder; - p->Free = SbState_Free; - p->SetProps = SbState_SetProps; - p->Init = SbState_Init; - p->Code = SbState_Code; - SubblockDec_Construct(decoder); - return SZ_OK; -} -#endif - -/* ---------- Lzma2State ---------- */ - -static void Lzma2State_Free(void *pp, ISzAlloc *alloc) -{ - Lzma2Dec_Free((CLzma2Dec *)pp, alloc); - alloc->Free(alloc, pp); -} - -static SRes Lzma2State_SetProps(void *pp, const Byte *props, size_t propSize, ISzAlloc *alloc) -{ - if (propSize != 1) - return SZ_ERROR_UNSUPPORTED; - return Lzma2Dec_Allocate((CLzma2Dec *)pp, props[0], alloc); -} - -static void Lzma2State_Init(void *pp) -{ - Lzma2Dec_Init((CLzma2Dec *)pp); -} - -static SRes Lzma2State_Code(void *pp, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, - int srcWasFinished, ECoderFinishMode finishMode, int *wasFinished) -{ - ELzmaStatus status; - /* ELzmaFinishMode fm = (finishMode == LZMA_FINISH_ANY) ? LZMA_FINISH_ANY : LZMA_FINISH_END; */ - SRes res = Lzma2Dec_DecodeToBuf((CLzma2Dec *)pp, dest, destLen, src, srcLen, finishMode, &status); - srcWasFinished = srcWasFinished; - *wasFinished = (status == LZMA_STATUS_FINISHED_WITH_MARK); - return res; -} - -static SRes Lzma2State_SetFromMethod(IStateCoder *p, ISzAlloc *alloc) -{ - CLzma2Dec *decoder = alloc->Alloc(alloc, sizeof(CLzma2Dec)); - p->p = decoder; - if (decoder == 0) - return SZ_ERROR_MEM; - p->Free = Lzma2State_Free; - p->SetProps = Lzma2State_SetProps; - p->Init = Lzma2State_Init; - p->Code = Lzma2State_Code; - Lzma2Dec_Construct(decoder); - return SZ_OK; -} - - -void MixCoder_Construct(CMixCoder *p, ISzAlloc *alloc) -{ - int i; - p->alloc = alloc; - p->buf = 0; - p->numCoders = 0; - for (i = 0; i < MIXCODER_NUM_FILTERS_MAX; i++) - p->coders[i].p = NULL; -} - -void MixCoder_Free(CMixCoder *p) -{ - int i; - for (i = 0; i < p->numCoders; i++) - { - IStateCoder *sc = &p->coders[i]; - if (p->alloc && sc->p) - sc->Free(sc->p, p->alloc); - } - p->numCoders = 0; - if (p->buf) - p->alloc->Free(p->alloc, p->buf); -} - -void MixCoder_Init(CMixCoder *p) -{ - int i; - for (i = 0; i < p->numCoders - 1; i++) - { - p->size[i] = 0; - p->pos[i] = 0; - p->finished[i] = 0; - } - for (i = 0; i < p->numCoders; i++) - { - IStateCoder *coder = &p->coders[i]; - coder->Init(coder->p); - } -} - -SRes MixCoder_SetFromMethod(CMixCoder *p, int coderIndex, UInt64 methodId) -{ - IStateCoder *sc = &p->coders[coderIndex]; - p->ids[coderIndex] = methodId; - switch(methodId) - { - case XZ_ID_LZMA2: return Lzma2State_SetFromMethod(sc, p->alloc); - #ifdef USE_SUBBLOCK - case XZ_ID_Subblock: return SbState_SetFromMethod(sc, p->alloc); - #endif - } - if (coderIndex == 0) - return SZ_ERROR_UNSUPPORTED; - return BraState_SetFromMethod(sc, methodId, p->alloc); -} - -SRes MixCoder_Code(CMixCoder *p, Byte *dest, SizeT *destLen, - const Byte *src, SizeT *srcLen, int srcWasFinished, - ECoderFinishMode finishMode, ECoderStatus *status) -{ - SizeT destLenOrig = *destLen; - SizeT srcLenOrig = *srcLen; - Bool allFinished = True; - *destLen = 0; - *srcLen = 0; - *status = CODER_STATUS_NOT_FINISHED; - - if (p->buf == 0) - { - p->buf = p->alloc->Alloc(p->alloc, CODER_BUF_SIZE * (MIXCODER_NUM_FILTERS_MAX - 1)); - if (p->buf == 0) - return SZ_ERROR_MEM; - } - - if (p->numCoders != 1) - finishMode = CODER_FINISH_ANY; - - for (;;) - { - Bool processed = False; - int i; - /* - if (p->numCoders == 1 && *destLen == destLenOrig && finishMode == LZMA_FINISH_ANY) - break; - */ - - for (i = 0; i < p->numCoders; i++) - { - SRes res; - IStateCoder *coder = &p->coders[i]; - Byte *destCur; - SizeT destLenCur, srcLenCur; - const Byte *srcCur; - int srcFinishedCur; - int encodingWasFinished; - - if (i == 0) - { - srcCur = src; - srcLenCur = srcLenOrig - *srcLen; - srcFinishedCur = srcWasFinished; - } - else - { - srcCur = p->buf + (CODER_BUF_SIZE * (i - 1)) + p->pos[i - 1]; - srcLenCur = p->size[i - 1] - p->pos[i - 1]; - srcFinishedCur = p->finished[i - 1]; - } - - if (i == p->numCoders - 1) - { - destCur = dest; - destLenCur = destLenOrig - *destLen; - } - else - { - if (p->pos[i] != p->size[i]) - continue; - destCur = p->buf + (CODER_BUF_SIZE * i); - destLenCur = CODER_BUF_SIZE; - } - - res = coder->Code(coder->p, destCur, &destLenCur, srcCur, &srcLenCur, srcFinishedCur, finishMode, &encodingWasFinished); - - if (!encodingWasFinished) - allFinished = False; - - if (i == 0) - { - *srcLen += srcLenCur; - src += srcLenCur; - } - else - { - p->pos[i - 1] += srcLenCur; - } - - if (i == p->numCoders - 1) - { - *destLen += destLenCur; - dest += destLenCur; - } - else - { - p->size[i] = destLenCur; - p->pos[i] = 0; - p->finished[i] = encodingWasFinished; - } - - if (res != SZ_OK) - return res; - - if (destLenCur != 0 || srcLenCur != 0) - processed = True; - } - if (!processed) - break; - } - if (allFinished) - *status = CODER_STATUS_FINISHED_WITH_MARK; - return SZ_OK; -} - -SRes Xz_ParseHeader(CXzStreamFlags *p, const Byte *buf) -{ - *p = (CXzStreamFlags)GetBe16(buf + XZ_SIG_SIZE); - if (CrcCalc(buf + XZ_SIG_SIZE, XZ_STREAM_FLAGS_SIZE) != - GetUi32(buf + XZ_SIG_SIZE + XZ_STREAM_FLAGS_SIZE)) - return SZ_ERROR_NO_ARCHIVE; - return XzFlags_IsSupported(*p) ? SZ_OK : SZ_ERROR_UNSUPPORTED; -} - -static Bool Xz_CheckFooter(CXzStreamFlags flags, UInt64 indexSize, const Byte *buf) -{ - return - indexSize == (((UInt64)GetUi32(buf + 4) + 1) << 2) && - (GetUi32(buf) == CrcCalc(buf + 4, 6) && - flags == GetBe16(buf + 8) && - memcmp(buf + 10, XZ_FOOTER_SIG, XZ_FOOTER_SIG_SIZE) == 0); -} - -#define READ_VARINT_AND_CHECK(buf, pos, size, res) \ - { unsigned s = Xz_ReadVarInt(buf + pos, size - pos, res); \ - if (s == 0) return SZ_ERROR_ARCHIVE; pos += s; } - - -SRes XzBlock_Parse(CXzBlock *p, const Byte *header) -{ - unsigned pos; - int numFilters, i; - UInt32 headerSize = (UInt32)header[0] << 2; - - if (CrcCalc(header, headerSize) != GetUi32(header + headerSize)) - return SZ_ERROR_ARCHIVE; - - pos = 1; - if (pos == headerSize) - return SZ_ERROR_ARCHIVE; - p->flags = header[pos++]; - - if (XzBlock_HasPackSize(p)) - { - READ_VARINT_AND_CHECK(header, pos, headerSize, &p->packSize); - if (p->packSize == 0 || p->packSize + headerSize >= (UInt64)1 << 63) - return SZ_ERROR_ARCHIVE; - } - - if (XzBlock_HasUnpackSize(p)) - READ_VARINT_AND_CHECK(header, pos, headerSize, &p->unpackSize); - - numFilters = XzBlock_GetNumFilters(p); - for (i = 0; i < numFilters; i++) - { - CXzFilter *filter = p->filters + i; - UInt64 size; - READ_VARINT_AND_CHECK(header, pos, headerSize, &filter->id); - READ_VARINT_AND_CHECK(header, pos, headerSize, &size); - if (size > headerSize - pos || size > XZ_FILTER_PROPS_SIZE_MAX) - return SZ_ERROR_ARCHIVE; - filter->propsSize = (UInt32)size; - memcpy(filter->props, header + pos, (size_t)size); - pos += (unsigned)size; - - #ifdef XZ_DUMP - printf("\nf[%d] = %2X: ", i, filter->id); - { - int i; - for (i = 0; i < size; i++) - printf(" %2X", filter->props[i]); - } - #endif - } - - while (pos < headerSize) - if (header[pos++] != 0) - return SZ_ERROR_ARCHIVE; - return SZ_OK; -} - -SRes XzDec_Init(CMixCoder *p, const CXzBlock *block) -{ - int i; - Bool needReInit = True; - int numFilters = XzBlock_GetNumFilters(block); - if (numFilters == p->numCoders) - { - for (i = 0; i < numFilters; i++) - if (p->ids[i] != block->filters[numFilters - 1 - i].id) - break; - needReInit = (i != numFilters); - } - if (needReInit) - { - MixCoder_Free(p); - p->numCoders = numFilters; - for (i = 0; i < numFilters; i++) - { - const CXzFilter *f = &block->filters[numFilters - 1 - i]; - RINOK(MixCoder_SetFromMethod(p, i, f->id)); - } - } - for (i = 0; i < numFilters; i++) - { - const CXzFilter *f = &block->filters[numFilters - 1 - i]; - IStateCoder *sc = &p->coders[i]; - RINOK(sc->SetProps(sc->p, f->props, f->propsSize, p->alloc)); - } - MixCoder_Init(p); - return SZ_OK; -} - -SRes XzUnpacker_Create(CXzUnpacker *p, ISzAlloc *alloc) -{ - MixCoder_Construct(&p->decoder, alloc); - p->state = XZ_STATE_STREAM_HEADER; - p->pos = 0; - p->numStreams = 0; - return SZ_OK; -} - -void XzUnpacker_Free(CXzUnpacker *p) -{ - MixCoder_Free(&p->decoder); -} - -SRes XzUnpacker_Code(CXzUnpacker *p, Byte *dest, SizeT *destLen, - const Byte *src, SizeT *srcLen, int finishMode, ECoderStatus *status) -{ - SizeT destLenOrig = *destLen; - SizeT srcLenOrig = *srcLen; - *destLen = 0; - *srcLen = 0; - *status = CODER_STATUS_NOT_SPECIFIED; - for (;;) - { - SizeT srcRem = srcLenOrig - *srcLen; - - if (p->state == XZ_STATE_BLOCK) - { - SizeT destLen2 = destLenOrig - *destLen; - SizeT srcLen2 = srcLenOrig - *srcLen; - SRes res; - if (srcLen2 == 0 && destLen2 == 0) - { - *status = CODER_STATUS_NOT_FINISHED; - return SZ_OK; - } - - res = MixCoder_Code(&p->decoder, dest, &destLen2, src, &srcLen2, False, finishMode, status); - XzCheck_Update(&p->check, dest, destLen2); - - (*srcLen) += srcLen2; - src += srcLen2; - p->packSize += srcLen2; - - (*destLen) += destLen2; - dest += destLen2; - p->unpackSize += destLen2; - - RINOK(res); - - if (*status == CODER_STATUS_FINISHED_WITH_MARK) - { - Byte temp[32]; - unsigned num = Xz_WriteVarInt(temp, p->packSize + p->blockHeaderSize + XzFlags_GetCheckSize(p->streamFlags)); - num += Xz_WriteVarInt(temp + num, p->unpackSize); - Sha256_Update(&p->sha, temp, num); - p->indexSize += num; - p->numBlocks++; - - p->state = XZ_STATE_BLOCK_FOOTER; - p->pos = 0; - p->alignPos = 0; - } - else if (srcLen2 == 0 && destLen2 == 0) - return SZ_OK; - - continue; - } - - if (srcRem == 0) - { - *status = CODER_STATUS_NEEDS_MORE_INPUT; - return SZ_OK; - } - - switch(p->state) - { - case XZ_STATE_STREAM_HEADER: - { - if (p->pos < XZ_STREAM_HEADER_SIZE) - { - if (p->pos < XZ_SIG_SIZE && *src != XZ_SIG[p->pos]) - return SZ_ERROR_NO_ARCHIVE; - p->buf[p->pos++] = *src++; - (*srcLen)++; - } - else - { - RINOK(Xz_ParseHeader(&p->streamFlags, p->buf)); - p->state = XZ_STATE_BLOCK_HEADER; - Sha256_Init(&p->sha); - p->indexSize = 0; - p->numBlocks = 0; - p->pos = 0; - } - break; - } - - case XZ_STATE_BLOCK_HEADER: - { - if (p->pos == 0) - { - p->buf[p->pos++] = *src++; - (*srcLen)++; - if (p->buf[0] == 0) - { - p->indexPreSize = 1 + Xz_WriteVarInt(p->buf + 1, p->numBlocks); - p->indexPos = p->indexPreSize; - p->indexSize += p->indexPreSize; - Sha256_Final(&p->sha, p->shaDigest); - Sha256_Init(&p->sha); - p->crc = CrcUpdate(CRC_INIT_VAL, p->buf, p->indexPreSize); - p->state = XZ_STATE_STREAM_INDEX; - } - p->blockHeaderSize = ((UInt32)p->buf[0] << 2) + 4; - } - else if (p->pos != p->blockHeaderSize) - { - UInt32 cur = p->blockHeaderSize - p->pos; - if (cur > srcRem) - cur = (UInt32)srcRem; - memcpy(p->buf + p->pos, src, cur); - p->pos += cur; - (*srcLen) += cur; - src += cur; - } - else - { - RINOK(XzBlock_Parse(&p->block, p->buf)); - p->state = XZ_STATE_BLOCK; - p->packSize = 0; - p->unpackSize = 0; - XzCheck_Init(&p->check, XzFlags_GetCheckType(p->streamFlags)); - RINOK(XzDec_Init(&p->decoder, &p->block)); - } - break; - } - - case XZ_STATE_BLOCK_FOOTER: - { - if (((p->packSize + p->alignPos) & 3) != 0) - { - (*srcLen)++; - p->alignPos++; - if (*src++ != 0) - return SZ_ERROR_CRC; - } - else - { - UInt32 checkSize = XzFlags_GetCheckSize(p->streamFlags); - UInt32 cur = checkSize - p->pos; - if (cur != 0) - { - if (cur > srcRem) - cur = (UInt32)srcRem; - memcpy(p->buf + p->pos, src, cur); - p->pos += cur; - (*srcLen) += cur; - src += cur; - } - else - { - Byte digest[XZ_CHECK_SIZE_MAX]; - p->state = XZ_STATE_BLOCK_HEADER; - p->pos = 0; - if (XzCheck_Final(&p->check, digest) && memcmp(digest, p->buf, checkSize) != 0) - return SZ_ERROR_CRC; - } - } - break; - } - - case XZ_STATE_STREAM_INDEX: - { - if (p->pos < p->indexPreSize) - { - (*srcLen)++; - if (*src++ != p->buf[p->pos++]) - return SZ_ERROR_CRC; - } - else - { - if (p->indexPos < p->indexSize) - { - UInt64 cur = p->indexSize - p->indexPos; - if (srcRem > cur) - srcRem = (SizeT)cur; - p->crc = CrcUpdate(p->crc, src, srcRem); - Sha256_Update(&p->sha, src, srcRem); - (*srcLen) += srcRem; - src += srcRem; - p->indexPos += srcRem; - } - else if ((p->indexPos & 3) != 0) - { - Byte b = *src++; - p->crc = CRC_UPDATE_BYTE(p->crc, b); - (*srcLen)++; - p->indexPos++; - p->indexSize++; - if (b != 0) - return SZ_ERROR_CRC; - } - else - { - Byte digest[SHA256_DIGEST_SIZE]; - p->state = XZ_STATE_STREAM_INDEX_CRC; - p->indexSize += 4; - p->pos = 0; - Sha256_Final(&p->sha, digest); - if (memcmp(digest, p->shaDigest, SHA256_DIGEST_SIZE) != 0) - return SZ_ERROR_CRC; - } - } - break; - } - - case XZ_STATE_STREAM_INDEX_CRC: - { - if (p->pos < 4) - { - (*srcLen)++; - p->buf[p->pos++] = *src++; - } - else - { - p->state = XZ_STATE_STREAM_FOOTER; - p->pos = 0; - if (CRC_GET_DIGEST(p->crc) != GetUi32(p->buf)) - return SZ_ERROR_CRC; - } - break; - } - - case XZ_STATE_STREAM_FOOTER: - { - UInt32 cur = XZ_STREAM_FOOTER_SIZE - p->pos; - if (cur > srcRem) - cur = (UInt32)srcRem; - memcpy(p->buf + p->pos, src, cur); - p->pos += cur; - (*srcLen) += cur; - src += cur; - if (p->pos == XZ_STREAM_FOOTER_SIZE) - { - p->state = XZ_STATE_STREAM_PADDING; - p->numStreams++; - p->padSize = 0; - if (!Xz_CheckFooter(p->streamFlags, p->indexSize, p->buf)) - return SZ_ERROR_CRC; - } - break; - } - - case XZ_STATE_STREAM_PADDING: - { - if (*src != 0) - { - if (((UInt32)p->padSize & 3) != 0) - return SZ_ERROR_NO_ARCHIVE; - p->pos = 0; - p->state = XZ_STATE_STREAM_HEADER; - } - else - { - (*srcLen)++; - src++; - p->padSize++; - } - break; - } - } - } - /* - if (p->state == XZ_STATE_FINISHED) - *status = CODER_STATUS_FINISHED_WITH_MARK; - return SZ_OK; - */ -} - -Bool XzUnpacker_IsStreamWasFinished(CXzUnpacker *p) -{ - return (p->state == XZ_STATE_STREAM_PADDING) && (((UInt32)p->padSize & 3) == 0); -} diff --git a/modules/lib7z/LZMASDK/C/XzEnc.c b/modules/lib7z/LZMASDK/C/XzEnc.c deleted file mode 100644 index e6101406c9ac..000000000000 --- a/modules/lib7z/LZMASDK/C/XzEnc.c +++ /dev/null @@ -1,497 +0,0 @@ -/* XzEnc.c -- Xz Encode -2009-06-04 : Igor Pavlov : Public domain */ - -#include -#include - -#include "7zCrc.h" -#include "Alloc.h" -#include "Bra.h" -#include "CpuArch.h" -#ifdef USE_SUBBLOCK -#include "SbEnc.h" -#endif - -#include "XzEnc.h" - -static void *SzBigAlloc(void *p, size_t size) { p = p; return BigAlloc(size); } -static void SzBigFree(void *p, void *address) { p = p; BigFree(address); } -static ISzAlloc g_BigAlloc = { SzBigAlloc, SzBigFree }; - -static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); } -static void SzFree(void *p, void *address) { p = p; MyFree(address); } -static ISzAlloc g_Alloc = { SzAlloc, SzFree }; - -#define XzBlock_ClearFlags(p) (p)->flags = 0; -#define XzBlock_SetNumFilters(p, n) (p)->flags |= ((n) - 1); -#define XzBlock_SetHasPackSize(p) (p)->flags |= XZ_BF_PACK_SIZE; -#define XzBlock_SetHasUnpackSize(p) (p)->flags |= XZ_BF_UNPACK_SIZE; - -static SRes WriteBytes(ISeqOutStream *s, const void *buf, UInt32 size) -{ - return (s->Write(s, buf, size) == size) ? SZ_OK : SZ_ERROR_WRITE; -} - -static SRes WriteBytesAndCrc(ISeqOutStream *s, const void *buf, UInt32 size, UInt32 *crc) -{ - *crc = CrcUpdate(*crc, buf, size); - return WriteBytes(s, buf, size); -} - -SRes Xz_WriteHeader(CXzStreamFlags f, ISeqOutStream *s) -{ - UInt32 crc; - Byte header[XZ_STREAM_HEADER_SIZE]; - memcpy(header, XZ_SIG, XZ_SIG_SIZE); - header[XZ_SIG_SIZE] = (Byte)(f >> 8); - header[XZ_SIG_SIZE + 1] = (Byte)(f & 0xFF); - crc = CrcCalc(header + XZ_SIG_SIZE, XZ_STREAM_FLAGS_SIZE); - SetUi32(header + XZ_SIG_SIZE + XZ_STREAM_FLAGS_SIZE, crc); - return WriteBytes(s, header, XZ_STREAM_HEADER_SIZE); -} - -SRes XzBlock_WriteHeader(const CXzBlock *p, ISeqOutStream *s) -{ - Byte header[XZ_BLOCK_HEADER_SIZE_MAX]; - - unsigned pos = 1; - int numFilters, i; - header[pos++] = p->flags; - - if (XzBlock_HasPackSize(p)) pos += Xz_WriteVarInt(header + pos, p->packSize); - if (XzBlock_HasUnpackSize(p)) pos += Xz_WriteVarInt(header + pos, p->unpackSize); - numFilters = XzBlock_GetNumFilters(p); - for (i = 0; i < numFilters; i++) - { - const CXzFilter *f = &p->filters[i]; - pos += Xz_WriteVarInt(header + pos, f->id); - pos += Xz_WriteVarInt(header + pos, f->propsSize); - memcpy(header + pos, f->props, f->propsSize); - pos += f->propsSize; - } - while((pos & 3) != 0) - header[pos++] = 0; - header[0] = (Byte)(pos >> 2); - SetUi32(header + pos, CrcCalc(header, pos)); - return WriteBytes(s, header, pos + 4); -} - -SRes Xz_WriteFooter(CXzStream *p, ISeqOutStream *s) -{ - Byte buf[32]; - UInt64 globalPos; - { - UInt32 crc = CRC_INIT_VAL; - unsigned pos = 1 + Xz_WriteVarInt(buf + 1, p->numBlocks); - size_t i; - - globalPos = pos; - buf[0] = 0; - RINOK(WriteBytesAndCrc(s, buf, pos, &crc)); - for (i = 0; i < p->numBlocks; i++) - { - const CXzBlockSizes *block = &p->blocks[i]; - pos = Xz_WriteVarInt(buf, block->totalSize); - pos += Xz_WriteVarInt(buf + pos, block->unpackSize); - globalPos += pos; - RINOK(WriteBytesAndCrc(s, buf, pos, &crc)); - } - pos = ((unsigned)globalPos & 3); - if (pos != 0) - { - buf[0] = buf[1] = buf[2] = 0; - RINOK(WriteBytesAndCrc(s, buf, 4 - pos, &crc)); - globalPos += 4 - pos; - } - { - SetUi32(buf, CRC_GET_DIGEST(crc)); - RINOK(WriteBytes(s, buf, 4)); - globalPos += 4; - } - } - - { - UInt32 indexSize = (UInt32)((globalPos >> 2) - 1); - SetUi32(buf + 4, indexSize); - buf[8] = (Byte)(p->flags >> 8); - buf[9] = (Byte)(p->flags & 0xFF); - SetUi32(buf, CrcCalc(buf + 4, 6)); - memcpy(buf + 10, XZ_FOOTER_SIG, XZ_FOOTER_SIG_SIZE); - return WriteBytes(s, buf, 12); - } -} - -SRes Xz_AddIndexRecord(CXzStream *p, UInt64 unpackSize, UInt64 totalSize, ISzAlloc *alloc) -{ - if (p->blocks == 0 || p->numBlocksAllocated == p->numBlocks) - { - size_t num = (p->numBlocks + 1) * 2; - size_t newSize = sizeof(CXzBlockSizes) * num; - CXzBlockSizes *blocks; - if (newSize / sizeof(CXzBlockSizes) != num) - return SZ_ERROR_MEM; - blocks = alloc->Alloc(alloc, newSize); - if (blocks == 0) - return SZ_ERROR_MEM; - if (p->numBlocks != 0) - { - memcpy(blocks, p->blocks, p->numBlocks * sizeof(CXzBlockSizes)); - Xz_Free(p, alloc); - } - p->blocks = blocks; - p->numBlocksAllocated = num; - } - { - CXzBlockSizes *block = &p->blocks[p->numBlocks++]; - block->totalSize = totalSize; - block->unpackSize = unpackSize; - } - return SZ_OK; -} - -/* ---------- CSeqCheckInStream ---------- */ - -typedef struct -{ - ISeqInStream p; - ISeqInStream *realStream; - UInt64 processed; - CXzCheck check; -} CSeqCheckInStream; - -void SeqCheckInStream_Init(CSeqCheckInStream *p, int mode) -{ - p->processed = 0; - XzCheck_Init(&p->check, mode); -} - -void SeqCheckInStream_GetDigest(CSeqCheckInStream *p, Byte *digest) -{ - XzCheck_Final(&p->check, digest); -} - -static SRes SeqCheckInStream_Read(void *pp, void *data, size_t *size) -{ - CSeqCheckInStream *p = (CSeqCheckInStream *)pp; - SRes res = p->realStream->Read(p->realStream, data, size); - XzCheck_Update(&p->check, data, *size); - p->processed += *size; - return res; -} - -/* ---------- CSeqSizeOutStream ---------- */ - -typedef struct -{ - ISeqOutStream p; - ISeqOutStream *realStream; - UInt64 processed; -} CSeqSizeOutStream; - -static size_t MyWrite(void *pp, const void *data, size_t size) -{ - CSeqSizeOutStream *p = (CSeqSizeOutStream *)pp; - size = p->realStream->Write(p->realStream, data, size); - p->processed += size; - return size; -} - -/* ---------- CSeqInFilter ---------- */ - -/* -typedef struct _IFilter -{ - void *p; - void (*Free)(void *p, ISzAlloc *alloc); - SRes (*SetProps)(void *p, const Byte *props, size_t propSize, ISzAlloc *alloc); - void (*Init)(void *p); - size_t (*Filter)(void *p, Byte *data, SizeT destLen); -} IFilter; - -#define FILT_BUF_SIZE (1 << 19) - -typedef struct -{ - ISeqInStream p; - ISeqInStream *realStream; - UInt32 x86State; - UInt32 ip; - UInt64 processed; - CXzCheck check; - Byte buf[FILT_BUF_SIZE]; - UInt32 bufferPos; - UInt32 convertedPosBegin; - UInt32 convertedPosEnd; - IFilter *filter; -} CSeqInFilter; - -static SRes SeqInFilter_Read(void *pp, void *data, size_t *size) -{ - CSeqInFilter *p = (CSeqInFilter *)pp; - size_t remSize = *size; - *size = 0; - - while (remSize > 0) - { - int i; - if (p->convertedPosBegin != p->convertedPosEnd) - { - UInt32 sizeTemp = p->convertedPosEnd - p->convertedPosBegin; - if (remSize < sizeTemp) - sizeTemp = (UInt32)remSize; - memmove(data, p->buf + p->convertedPosBegin, sizeTemp); - p->convertedPosBegin += sizeTemp; - data = (void *)((Byte *)data + sizeTemp); - remSize -= sizeTemp; - *size += sizeTemp; - break; - } - for (i = 0; p->convertedPosEnd + i < p->bufferPos; i++) - p->buf[i] = p->buf[i + p->convertedPosEnd]; - p->bufferPos = i; - p->convertedPosBegin = p->convertedPosEnd = 0; - { - size_t processedSizeTemp = FILT_BUF_SIZE - p->bufferPos; - RINOK(p->realStream->Read(p->realStream, p->buf + p->bufferPos, &processedSizeTemp)); - p->bufferPos = p->bufferPos + (UInt32)processedSizeTemp; - } - p->convertedPosEnd = (UInt32)p->filter->Filter(p->filter->p, p->buf, p->bufferPos); - if (p->convertedPosEnd == 0) - { - if (p->bufferPos == 0) - break; - else - { - p->convertedPosEnd = p->bufferPos; - continue; - } - } - if (p->convertedPosEnd > p->bufferPos) - { - for (; p->bufferPos < p->convertedPosEnd; p->bufferPos++) - p->buf[p->bufferPos] = 0; - p->convertedPosEnd = (UInt32)p->filter->Filter(p->filter->p, p->buf, p->bufferPos); - } - } - return SZ_OK; -} -*/ - -/* -typedef struct -{ - ISeqInStream p; - ISeqInStream *realStream; - CMixCoder mixCoder; - Byte buf[FILT_BUF_SIZE]; - UInt32 bufPos; - UInt32 bufSize; -} CMixCoderSeqInStream; - -static SRes CMixCoderSeqInStream_Read(void *pp, void *data, size_t *size) -{ - CMixCoderSeqInStream *p = (CMixCoderSeqInStream *)pp; - SRes res = SZ_OK; - size_t remSize = *size; - *size = 0; - while (remSize > 0) - { - if (p->bufPos == p->bufSize) - { - size_t curSize; - p->bufPos = p->bufSize = 0; - if (*size != 0) - break; - curSize = FILT_BUF_SIZE; - RINOK(p->realStream->Read(p->realStream, p->buf, &curSize)); - p->bufSize = (UInt32)curSize; - } - { - SizeT destLen = remSize; - SizeT srcLen = p->bufSize - p->bufPos; - res = MixCoder_Code(&p->mixCoder, data, &destLen, p->buf + p->bufPos, &srcLen, 0); - data = (void *)((Byte *)data + destLen); - remSize -= destLen; - *size += destLen; - p->bufPos += srcLen; - } - } - return res; -} -*/ - -#ifdef USE_SUBBLOCK -typedef struct -{ - ISeqInStream p; - CSubblockEnc sb; - UInt64 processed; -} CSbEncInStream; - -void SbEncInStream_Init(CSbEncInStream *p) -{ - p->processed = 0; - SubblockEnc_Init(&p->sb); -} - -static SRes SbEncInStream_Read(void *pp, void *data, size_t *size) -{ - CSbEncInStream *p = (CSbEncInStream *)pp; - SRes res = SubblockEnc_Read(&p->sb, data, size); - p->processed += *size; - return res; -} -#endif - -typedef struct -{ - /* CMixCoderSeqInStream inStream; */ - CLzma2EncHandle lzma2; - #ifdef USE_SUBBLOCK - CSbEncInStream sb; - #endif - ISzAlloc *alloc; - ISzAlloc *bigAlloc; -} CLzma2WithFilters; - - -static void Lzma2WithFilters_Construct(CLzma2WithFilters *p, ISzAlloc *alloc, ISzAlloc *bigAlloc) -{ - p->alloc = alloc; - p->bigAlloc = bigAlloc; - p->lzma2 = NULL; - #ifdef USE_SUBBLOCK - p->sb.p.Read = SbEncInStream_Read; - SubblockEnc_Construct(&p->sb.sb, p->alloc); - #endif -} - -static SRes Lzma2WithFilters_Create(CLzma2WithFilters *p) -{ - p->lzma2 = Lzma2Enc_Create(p->alloc, p->bigAlloc); - if (p->lzma2 == 0) - return SZ_ERROR_MEM; - return SZ_OK; -} - -static void Lzma2WithFilters_Free(CLzma2WithFilters *p) -{ - #ifdef USE_SUBBLOCK - SubblockEnc_Free(&p->sb.sb); - #endif - if (p->lzma2) - { - Lzma2Enc_Destroy(p->lzma2); - p->lzma2 = NULL; - } -} - -static SRes Xz_Compress(CXzStream *xz, - CLzma2WithFilters *lzmaf, - ISeqOutStream *outStream, - ISeqInStream *inStream, - const CLzma2EncProps *lzma2Props, - Bool useSubblock, - ICompressProgress *progress) -{ - xz->flags = XZ_CHECK_CRC32; - - RINOK(Lzma2Enc_SetProps(lzmaf->lzma2, lzma2Props)); - RINOK(Xz_WriteHeader(xz->flags, outStream)); - - { - CSeqCheckInStream checkInStream; - CSeqSizeOutStream seqSizeOutStream; - CXzBlock block; - int filterIndex = 0; - - XzBlock_ClearFlags(&block); - XzBlock_SetNumFilters(&block, 1 + (useSubblock ? 1 : 0)); - - if (useSubblock) - { - CXzFilter *f = &block.filters[filterIndex++]; - f->id = XZ_ID_Subblock; - f->propsSize = 0; - } - - { - CXzFilter *f = &block.filters[filterIndex++]; - f->id = XZ_ID_LZMA2; - f->propsSize = 1; - f->props[0] = Lzma2Enc_WriteProperties(lzmaf->lzma2); - } - - seqSizeOutStream.p.Write = MyWrite; - seqSizeOutStream.realStream = outStream; - seqSizeOutStream.processed = 0; - - RINOK(XzBlock_WriteHeader(&block, &seqSizeOutStream.p)); - - checkInStream.p.Read = SeqCheckInStream_Read; - checkInStream.realStream = inStream; - SeqCheckInStream_Init(&checkInStream, XzFlags_GetCheckType(xz->flags)); - - #ifdef USE_SUBBLOCK - if (useSubblock) - { - lzmaf->sb.sb.inStream = &checkInStream.p; - SubblockEnc_Init(&lzmaf->sb.sb); - } - #endif - - { - UInt64 packPos = seqSizeOutStream.processed; - SRes res = Lzma2Enc_Encode(lzmaf->lzma2, &seqSizeOutStream.p, - #ifdef USE_SUBBLOCK - useSubblock ? &lzmaf->sb.p: - #endif - &checkInStream.p, - progress); - RINOK(res); - block.unpackSize = checkInStream.processed; - block.packSize = seqSizeOutStream.processed - packPos; - } - - { - unsigned padSize = 0; - Byte buf[128]; - while((((unsigned)block.packSize + padSize) & 3) != 0) - buf[padSize++] = 0; - SeqCheckInStream_GetDigest(&checkInStream, buf + padSize); - RINOK(WriteBytes(&seqSizeOutStream.p, buf, padSize + XzFlags_GetCheckSize(xz->flags))); - RINOK(Xz_AddIndexRecord(xz, block.unpackSize, seqSizeOutStream.processed - padSize, &g_Alloc)); - } - } - return Xz_WriteFooter(xz, outStream); -} - -SRes Xz_Encode(ISeqOutStream *outStream, ISeqInStream *inStream, - const CLzma2EncProps *lzma2Props, Bool useSubblock, - ICompressProgress *progress) -{ - SRes res; - CXzStream xz; - CLzma2WithFilters lzmaf; - Xz_Construct(&xz); - Lzma2WithFilters_Construct(&lzmaf, &g_Alloc, &g_BigAlloc); - res = Lzma2WithFilters_Create(&lzmaf); - if (res == SZ_OK) - res = Xz_Compress(&xz, &lzmaf, outStream, inStream, - lzma2Props, useSubblock, progress); - Lzma2WithFilters_Free(&lzmaf); - Xz_Free(&xz, &g_Alloc); - return res; -} - -SRes Xz_EncodeEmpty(ISeqOutStream *outStream) -{ - SRes res; - CXzStream xz; - Xz_Construct(&xz); - res = Xz_WriteHeader(xz.flags, outStream); - if (res == SZ_OK) - res = Xz_WriteFooter(&xz, outStream); - Xz_Free(&xz, &g_Alloc); - return res; -} diff --git a/modules/lib7z/LZMASDK/C/XzEnc.h b/modules/lib7z/LZMASDK/C/XzEnc.h deleted file mode 100644 index aad9aa4efa08..000000000000 --- a/modules/lib7z/LZMASDK/C/XzEnc.h +++ /dev/null @@ -1,25 +0,0 @@ -/* XzEnc.h -- Xz Encode -2009-04-15 : Igor Pavlov : Public domain */ - -#ifndef __XZ_ENC_H -#define __XZ_ENC_H - -#include "Lzma2Enc.h" - -#include "Xz.h" - -#ifdef __cplusplus -extern "C" { -#endif - -SRes Xz_Encode(ISeqOutStream *outStream, ISeqInStream *inStream, - const CLzma2EncProps *lzma2Props, Bool useSubblock, - ICompressProgress *progress); - -SRes Xz_EncodeEmpty(ISeqOutStream *outStream); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/C/XzIn.c b/modules/lib7z/LZMASDK/C/XzIn.c deleted file mode 100644 index 356d01937cb9..000000000000 --- a/modules/lib7z/LZMASDK/C/XzIn.c +++ /dev/null @@ -1,306 +0,0 @@ -/* XzIn.c - Xz input -2009-06-19 : Igor Pavlov : Public domain */ - -#include - -#include "7zCrc.h" -#include "CpuArch.h" -#include "Xz.h" - -SRes Xz_ReadHeader(CXzStreamFlags *p, ISeqInStream *inStream) -{ - Byte sig[XZ_STREAM_HEADER_SIZE]; - RINOK(SeqInStream_Read2(inStream, sig, XZ_STREAM_HEADER_SIZE, SZ_ERROR_NO_ARCHIVE)); - if (memcmp(sig, XZ_SIG, XZ_SIG_SIZE) != 0) - return SZ_ERROR_NO_ARCHIVE; - return Xz_ParseHeader(p, sig); -} - -#define READ_VARINT_AND_CHECK(buf, pos, size, res) \ - { unsigned s = Xz_ReadVarInt(buf + pos, size - pos, res); \ - if (s == 0) return SZ_ERROR_ARCHIVE; pos += s; } - -SRes XzBlock_ReadHeader(CXzBlock *p, ISeqInStream *inStream, Bool *isIndex, UInt32 *headerSizeRes) -{ - Byte header[XZ_BLOCK_HEADER_SIZE_MAX]; - unsigned headerSize; - *headerSizeRes = 0; - RINOK(SeqInStream_ReadByte(inStream, &header[0])); - headerSize = ((unsigned)header[0] << 2) + 4; - if (headerSize == 0) - { - *headerSizeRes = 1; - *isIndex = True; - return SZ_OK; - } - - *isIndex = False; - *headerSizeRes = headerSize; - RINOK(SeqInStream_Read(inStream, header + 1, headerSize - 1)); - return XzBlock_Parse(p, header); -} - -#define ADD_SIZE_CHECH(size, val) \ - { UInt64 newSize = size + (val); if (newSize < size) return XZ_SIZE_OVERFLOW; size = newSize; } - -UInt64 Xz_GetUnpackSize(const CXzStream *p) -{ - UInt64 size = 0; - size_t i; - for (i = 0; i < p->numBlocks; i++) - ADD_SIZE_CHECH(size, p->blocks[i].unpackSize); - return size; -} - -UInt64 Xz_GetPackSize(const CXzStream *p) -{ - UInt64 size = 0; - size_t i; - for (i = 0; i < p->numBlocks; i++) - ADD_SIZE_CHECH(size, (p->blocks[i].totalSize + 3) & ~(UInt64)3); - return size; -} - -/* -SRes XzBlock_ReadFooter(CXzBlock *p, CXzStreamFlags f, ISeqInStream *inStream) -{ - return SeqInStream_Read(inStream, p->check, XzFlags_GetCheckSize(f)); -} -*/ - -static SRes Xz_ReadIndex2(CXzStream *p, const Byte *buf, size_t size, ISzAlloc *alloc) -{ - size_t i, numBlocks, crcStartPos, pos = 1; - UInt32 crc; - - if (size < 5 || buf[0] != 0) - return SZ_ERROR_ARCHIVE; - - size -= 4; - crc = CrcCalc(buf, size); - if (crc != GetUi32(buf + size)) - return SZ_ERROR_ARCHIVE; - - { - UInt64 numBlocks64; - READ_VARINT_AND_CHECK(buf, pos, size, &numBlocks64); - numBlocks = (size_t)numBlocks64; - if (numBlocks != numBlocks64 || numBlocks * 2 > size) - return SZ_ERROR_ARCHIVE; - } - - crcStartPos = pos; - Xz_Free(p, alloc); - if (numBlocks != 0) - { - p->numBlocks = numBlocks; - p->numBlocksAllocated = numBlocks; - p->blocks = alloc->Alloc(alloc, sizeof(CXzBlockSizes) * numBlocks); - if (p->blocks == 0) - return SZ_ERROR_MEM; - for (i = 0; i < numBlocks; i++) - { - CXzBlockSizes *block = &p->blocks[i]; - READ_VARINT_AND_CHECK(buf, pos, size, &block->totalSize); - READ_VARINT_AND_CHECK(buf, pos, size, &block->unpackSize); - if (block->totalSize == 0) - return SZ_ERROR_ARCHIVE; - } - } - while ((pos & 3) != 0) - if (buf[pos++] != 0) - return SZ_ERROR_ARCHIVE; - return (pos == size) ? SZ_OK : SZ_ERROR_ARCHIVE; -} - -static SRes Xz_ReadIndex(CXzStream *p, ILookInStream *stream, UInt64 indexSize, ISzAlloc *alloc) -{ - SRes res; - size_t size; - Byte *buf; - if (indexSize > ((UInt32)1 << 31)) - return SZ_ERROR_UNSUPPORTED; - size = (size_t)indexSize; - if (size != indexSize) - return SZ_ERROR_UNSUPPORTED; - buf = alloc->Alloc(alloc, size); - if (buf == 0) - return SZ_ERROR_MEM; - res = LookInStream_Read2(stream, buf, size, SZ_ERROR_UNSUPPORTED); - if (res == SZ_OK) - res = Xz_ReadIndex2(p, buf, size, alloc); - alloc->Free(alloc, buf); - return res; -} - -static SRes SeekFromCur(ILookInStream *inStream, Int64 *res) -{ - return inStream->Seek(inStream, res, SZ_SEEK_CUR); -} - -static SRes Xz_ReadBackward(CXzStream *p, ILookInStream *stream, Int64 *startOffset, ISzAlloc *alloc) -{ - UInt64 indexSize; - Byte buf[XZ_STREAM_FOOTER_SIZE]; - - if ((*startOffset & 3) != 0 || *startOffset < XZ_STREAM_FOOTER_SIZE) - return SZ_ERROR_NO_ARCHIVE; - *startOffset = -XZ_STREAM_FOOTER_SIZE; - RINOK(SeekFromCur(stream, startOffset)); - - RINOK(LookInStream_Read2(stream, buf, XZ_STREAM_FOOTER_SIZE, SZ_ERROR_NO_ARCHIVE)); - - if (memcmp(buf + 10, XZ_FOOTER_SIG, XZ_FOOTER_SIG_SIZE) != 0) - { - Int64 i = 0; - *startOffset += XZ_STREAM_FOOTER_SIZE; - for (;;) - { - int j; - size_t processedSize; - #define TEMP_BUF_SIZE (1 << 10) - Byte tempBuf[TEMP_BUF_SIZE]; - if (*startOffset < XZ_STREAM_FOOTER_SIZE || i > (1 << 16)) - return SZ_ERROR_NO_ARCHIVE; - processedSize = (*startOffset > TEMP_BUF_SIZE) ? TEMP_BUF_SIZE : (size_t)*startOffset; - i += processedSize; - *startOffset = -(Int64)processedSize; - RINOK(SeekFromCur(stream, startOffset)); - RINOK(LookInStream_Read2(stream, tempBuf, processedSize, SZ_ERROR_NO_ARCHIVE)); - for (j = (int)processedSize; j >= 0; j--) - if (tempBuf[j -1] != 0) - break; - if (j != 0) - { - if ((j & 3) != 0) - return SZ_ERROR_NO_ARCHIVE; - *startOffset += j; - if (*startOffset < XZ_STREAM_FOOTER_SIZE) - return SZ_ERROR_NO_ARCHIVE; - *startOffset -= XZ_STREAM_FOOTER_SIZE; - RINOK(stream->Seek(stream, startOffset, SZ_SEEK_SET)); - RINOK(LookInStream_Read2(stream, buf, XZ_STREAM_FOOTER_SIZE, SZ_ERROR_NO_ARCHIVE)); - if (memcmp(buf + 10, XZ_FOOTER_SIG, XZ_FOOTER_SIG_SIZE) != 0) - return SZ_ERROR_NO_ARCHIVE; - break; - } - } - } - - p->flags = (CXzStreamFlags)GetBe16(buf + 8); - - if (!XzFlags_IsSupported(p->flags)) - return SZ_ERROR_UNSUPPORTED; - - if (GetUi32(buf) != CrcCalc(buf + 4, 6)) - return SZ_ERROR_ARCHIVE; - - indexSize = ((UInt64)GetUi32(buf + 4) + 1) << 2; - - *startOffset = -(Int64)(indexSize + XZ_STREAM_FOOTER_SIZE); - RINOK(SeekFromCur(stream, startOffset)); - - RINOK(Xz_ReadIndex(p, stream, indexSize, alloc)); - - { - UInt64 totalSize = Xz_GetPackSize(p); - UInt64 sum = XZ_STREAM_HEADER_SIZE + totalSize + indexSize; - if (totalSize == XZ_SIZE_OVERFLOW || - sum >= ((UInt64)1 << 63) || - totalSize >= ((UInt64)1 << 63)) - return SZ_ERROR_ARCHIVE; - *startOffset = -(Int64)sum; - RINOK(SeekFromCur(stream, startOffset)); - } - { - CXzStreamFlags headerFlags; - CSecToRead secToRead; - SecToRead_CreateVTable(&secToRead); - secToRead.realStream = stream; - - RINOK(Xz_ReadHeader(&headerFlags, &secToRead.s)); - return (p->flags == headerFlags) ? SZ_OK : SZ_ERROR_ARCHIVE; - } -} - - -/* ---------- Xz Streams ---------- */ - -void Xzs_Construct(CXzs *p) -{ - p->num = p->numAllocated = 0; - p->streams = 0; -} - -void Xzs_Free(CXzs *p, ISzAlloc *alloc) -{ - size_t i; - for (i = 0; i < p->num; i++) - Xz_Free(&p->streams[i], alloc); - alloc->Free(alloc, p->streams); - p->num = p->numAllocated = 0; - p->streams = 0; -} - -UInt64 Xzs_GetNumBlocks(const CXzs *p) -{ - UInt64 num = 0; - size_t i; - for (i = 0; i < p->num; i++) - num += p->streams[i].numBlocks; - return num; -} - -UInt64 Xzs_GetUnpackSize(const CXzs *p) -{ - UInt64 size = 0; - size_t i; - for (i = 0; i < p->num; i++) - ADD_SIZE_CHECH(size, Xz_GetUnpackSize(&p->streams[i])); - return size; -} - -/* -UInt64 Xzs_GetPackSize(const CXzs *p) -{ - UInt64 size = 0; - size_t i; - for (i = 0; i < p->num; i++) - ADD_SIZE_CHECH(size, Xz_GetTotalSize(&p->streams[i])); - return size; -} -*/ - -SRes Xzs_ReadBackward(CXzs *p, ILookInStream *stream, Int64 *startOffset, ICompressProgress *progress, ISzAlloc *alloc) -{ - Int64 endOffset = 0; - RINOK(stream->Seek(stream, &endOffset, SZ_SEEK_END)); - *startOffset = endOffset; - for (;;) - { - CXzStream st; - SRes res; - Xz_Construct(&st); - res = Xz_ReadBackward(&st, stream, startOffset, alloc); - st.startOffset = *startOffset; - RINOK(res); - if (p->num == p->numAllocated) - { - size_t newNum = p->num + p->num / 4 + 1; - Byte *data = (Byte *)alloc->Alloc(alloc, newNum * sizeof(CXzStream)); - if (data == 0) - return SZ_ERROR_MEM; - p->numAllocated = newNum; - memcpy(data, p->streams, p->num * sizeof(CXzStream)); - alloc->Free(alloc, p->streams); - p->streams = (CXzStream *)data; - } - p->streams[p->num++] = st; - if (*startOffset == 0) - break; - RINOK(stream->Seek(stream, startOffset, SZ_SEEK_SET)); - if (progress && progress->Progress(progress, endOffset - *startOffset, (UInt64)(Int64)-1) != SZ_OK) - return SZ_ERROR_PROGRESS; - } - return SZ_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zCompressionMode.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zCompressionMode.cpp deleted file mode 100644 index 232c638203db..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zCompressionMode.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// CompressionMethod.cpp - -#include "StdAfx.h" diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zCompressionMode.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zCompressionMode.h deleted file mode 100644 index 5e986355be1b..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zCompressionMode.h +++ /dev/null @@ -1,50 +0,0 @@ -// 7zCompressionMode.h - -#ifndef __7Z_COMPRESSION_MODE_H -#define __7Z_COMPRESSION_MODE_H - -#include "../../../Common/MyString.h" - -#include "../../../Windows/PropVariant.h" - -#include "../../Common/MethodProps.h" - -namespace NArchive { -namespace N7z { - -struct CMethodFull: public CMethod -{ - UInt32 NumInStreams; - UInt32 NumOutStreams; - bool IsSimpleCoder() const { return (NumInStreams == 1) && (NumOutStreams == 1); } -}; - -struct CBind -{ - UInt32 InCoder; - UInt32 InStream; - UInt32 OutCoder; - UInt32 OutStream; -}; - -struct CCompressionMethodMode -{ - CObjectVector Methods; - CRecordVector Binds; - #ifdef COMPRESS_MT - UInt32 NumThreads; - #endif - bool PasswordIsDefined; - UString Password; - - bool IsEmpty() const { return (Methods.IsEmpty() && !PasswordIsDefined); } - CCompressionMethodMode(): PasswordIsDefined(false) - #ifdef COMPRESS_MT - , NumThreads(1) - #endif - {} -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zDecode.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zDecode.cpp deleted file mode 100644 index 02744c96a4dc..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zDecode.cpp +++ /dev/null @@ -1,332 +0,0 @@ -// 7zDecode.cpp - -#include "StdAfx.h" - -#include "../../Common/LimitedStreams.h" -#include "../../Common/LockedStream.h" -#include "../../Common/ProgressUtils.h" -#include "../../Common/StreamObjects.h" - -#include "7zDecode.h" - -namespace NArchive { -namespace N7z { - -static void ConvertFolderItemInfoToBindInfo(const CFolder &folder, - CBindInfoEx &bindInfo) -{ - bindInfo.Clear(); - int i; - for (i = 0; i < folder.BindPairs.Size(); i++) - { - NCoderMixer::CBindPair bindPair; - bindPair.InIndex = (UInt32)folder.BindPairs[i].InIndex; - bindPair.OutIndex = (UInt32)folder.BindPairs[i].OutIndex; - bindInfo.BindPairs.Add(bindPair); - } - UInt32 outStreamIndex = 0; - for (i = 0; i < folder.Coders.Size(); i++) - { - NCoderMixer::CCoderStreamsInfo coderStreamsInfo; - const CCoderInfo &coderInfo = folder.Coders[i]; - coderStreamsInfo.NumInStreams = (UInt32)coderInfo.NumInStreams; - coderStreamsInfo.NumOutStreams = (UInt32)coderInfo.NumOutStreams; - bindInfo.Coders.Add(coderStreamsInfo); - bindInfo.CoderMethodIDs.Add(coderInfo.MethodID); - for (UInt32 j = 0; j < coderStreamsInfo.NumOutStreams; j++, outStreamIndex++) - if (folder.FindBindPairForOutStream(outStreamIndex) < 0) - bindInfo.OutStreams.Add(outStreamIndex); - } - for (i = 0; i < folder.PackStreams.Size(); i++) - bindInfo.InStreams.Add((UInt32)folder.PackStreams[i]); -} - -static bool AreCodersEqual(const NCoderMixer::CCoderStreamsInfo &a1, - const NCoderMixer::CCoderStreamsInfo &a2) -{ - return (a1.NumInStreams == a2.NumInStreams) && - (a1.NumOutStreams == a2.NumOutStreams); -} - -static bool AreBindPairsEqual(const NCoderMixer::CBindPair &a1, const NCoderMixer::CBindPair &a2) -{ - return (a1.InIndex == a2.InIndex) && - (a1.OutIndex == a2.OutIndex); -} - -static bool AreBindInfoExEqual(const CBindInfoEx &a1, const CBindInfoEx &a2) -{ - if (a1.Coders.Size() != a2.Coders.Size()) - return false; - int i; - for (i = 0; i < a1.Coders.Size(); i++) - if (!AreCodersEqual(a1.Coders[i], a2.Coders[i])) - return false; - if (a1.BindPairs.Size() != a2.BindPairs.Size()) - return false; - for (i = 0; i < a1.BindPairs.Size(); i++) - if (!AreBindPairsEqual(a1.BindPairs[i], a2.BindPairs[i])) - return false; - for (i = 0; i < a1.CoderMethodIDs.Size(); i++) - if (a1.CoderMethodIDs[i] != a2.CoderMethodIDs[i]) - return false; - if (a1.InStreams.Size() != a2.InStreams.Size()) - return false; - if (a1.OutStreams.Size() != a2.OutStreams.Size()) - return false; - return true; -} - -CDecoder::CDecoder(bool multiThread) -{ - #ifndef _ST_MODE - multiThread = true; - #endif - _multiThread = multiThread; - _bindInfoExPrevIsDefined = false; -} - -HRESULT CDecoder::Decode( - DECL_EXTERNAL_CODECS_LOC_VARS - IInStream *inStream, - UInt64 startPos, - const UInt64 *packSizes, - const CFolder &folderInfo, - ISequentialOutStream *outStream, - ICompressProgressInfo *compressProgress - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPassword, bool &passwordIsDefined - #endif - #ifdef COMPRESS_MT - , bool mtMode, UInt32 numThreads - #endif - ) -{ - if (!folderInfo.CheckStructure()) - return E_NOTIMPL; - #ifndef _NO_CRYPTO - passwordIsDefined = false; - #endif - CObjectVector< CMyComPtr > inStreams; - - CLockedInStream lockedInStream; - lockedInStream.Init(inStream); - - for (int j = 0; j < folderInfo.PackStreams.Size(); j++) - { - CLockedSequentialInStreamImp *lockedStreamImpSpec = new - CLockedSequentialInStreamImp; - CMyComPtr lockedStreamImp = lockedStreamImpSpec; - lockedStreamImpSpec->Init(&lockedInStream, startPos); - startPos += packSizes[j]; - - CLimitedSequentialInStream *streamSpec = new - CLimitedSequentialInStream; - CMyComPtr inStream = streamSpec; - streamSpec->SetStream(lockedStreamImp); - streamSpec->Init(packSizes[j]); - inStreams.Add(inStream); - } - - int numCoders = folderInfo.Coders.Size(); - - CBindInfoEx bindInfo; - ConvertFolderItemInfoToBindInfo(folderInfo, bindInfo); - bool createNewCoders; - if (!_bindInfoExPrevIsDefined) - createNewCoders = true; - else - createNewCoders = !AreBindInfoExEqual(bindInfo, _bindInfoExPrev); - if (createNewCoders) - { - int i; - _decoders.Clear(); - // _decoders2.Clear(); - - _mixerCoder.Release(); - - if (_multiThread) - { - _mixerCoderMTSpec = new NCoderMixer::CCoderMixer2MT; - _mixerCoder = _mixerCoderMTSpec; - _mixerCoderCommon = _mixerCoderMTSpec; - } - else - { - #ifdef _ST_MODE - _mixerCoderSTSpec = new NCoderMixer::CCoderMixer2ST; - _mixerCoder = _mixerCoderSTSpec; - _mixerCoderCommon = _mixerCoderSTSpec; - #endif - } - RINOK(_mixerCoderCommon->SetBindInfo(bindInfo)); - - for (i = 0; i < numCoders; i++) - { - const CCoderInfo &coderInfo = folderInfo.Coders[i]; - - - CMyComPtr decoder; - CMyComPtr decoder2; - RINOK(CreateCoder( - EXTERNAL_CODECS_LOC_VARS - coderInfo.MethodID, decoder, decoder2, false)); - CMyComPtr decoderUnknown; - if (coderInfo.IsSimpleCoder()) - { - if (decoder == 0) - return E_NOTIMPL; - - decoderUnknown = (IUnknown *)decoder; - - if (_multiThread) - _mixerCoderMTSpec->AddCoder(decoder); - #ifdef _ST_MODE - else - _mixerCoderSTSpec->AddCoder(decoder, false); - #endif - } - else - { - if (decoder2 == 0) - return E_NOTIMPL; - decoderUnknown = (IUnknown *)decoder2; - if (_multiThread) - _mixerCoderMTSpec->AddCoder2(decoder2); - #ifdef _ST_MODE - else - _mixerCoderSTSpec->AddCoder2(decoder2, false); - #endif - } - _decoders.Add(decoderUnknown); - #ifdef EXTERNAL_CODECS - CMyComPtr setCompressCodecsInfo; - decoderUnknown.QueryInterface(IID_ISetCompressCodecsInfo, (void **)&setCompressCodecsInfo); - if (setCompressCodecsInfo) - { - RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(codecsInfo)); - } - #endif - } - _bindInfoExPrev = bindInfo; - _bindInfoExPrevIsDefined = true; - } - int i; - _mixerCoderCommon->ReInit(); - - UInt32 packStreamIndex = 0, unpackStreamIndex = 0; - UInt32 coderIndex = 0; - // UInt32 coder2Index = 0; - - for (i = 0; i < numCoders; i++) - { - const CCoderInfo &coderInfo = folderInfo.Coders[i]; - CMyComPtr &decoder = _decoders[coderIndex]; - - { - CMyComPtr setDecoderProperties; - decoder.QueryInterface(IID_ICompressSetDecoderProperties2, &setDecoderProperties); - if (setDecoderProperties) - { - const CByteBuffer &props = coderInfo.Props; - size_t size = props.GetCapacity(); - if (size > 0xFFFFFFFF) - return E_NOTIMPL; - if (size > 0) - { - RINOK(setDecoderProperties->SetDecoderProperties2((const Byte *)props, (UInt32)size)); - } - } - } - - #ifdef COMPRESS_MT - if (mtMode) - { - CMyComPtr setCoderMt; - decoder.QueryInterface(IID_ICompressSetCoderMt, &setCoderMt); - if (setCoderMt) - { - RINOK(setCoderMt->SetNumberOfThreads(numThreads)); - } - } - #endif - - #ifndef _NO_CRYPTO - { - CMyComPtr cryptoSetPassword; - decoder.QueryInterface(IID_ICryptoSetPassword, &cryptoSetPassword); - if (cryptoSetPassword) - { - if (getTextPassword == 0) - return E_FAIL; - CMyComBSTR passwordBSTR; - RINOK(getTextPassword->CryptoGetTextPassword(&passwordBSTR)); - CByteBuffer buffer; - passwordIsDefined = true; - const UString password(passwordBSTR); - const UInt32 sizeInBytes = password.Length() * 2; - buffer.SetCapacity(sizeInBytes); - for (int i = 0; i < password.Length(); i++) - { - wchar_t c = password[i]; - ((Byte *)buffer)[i * 2] = (Byte)c; - ((Byte *)buffer)[i * 2 + 1] = (Byte)(c >> 8); - } - RINOK(cryptoSetPassword->CryptoSetPassword((const Byte *)buffer, sizeInBytes)); - } - } - #endif - - coderIndex++; - - UInt32 numInStreams = (UInt32)coderInfo.NumInStreams; - UInt32 numOutStreams = (UInt32)coderInfo.NumOutStreams; - CRecordVector packSizesPointers; - CRecordVector unpackSizesPointers; - packSizesPointers.Reserve(numInStreams); - unpackSizesPointers.Reserve(numOutStreams); - UInt32 j; - for (j = 0; j < numOutStreams; j++, unpackStreamIndex++) - unpackSizesPointers.Add(&folderInfo.UnpackSizes[unpackStreamIndex]); - - for (j = 0; j < numInStreams; j++, packStreamIndex++) - { - int bindPairIndex = folderInfo.FindBindPairForInStream(packStreamIndex); - if (bindPairIndex >= 0) - packSizesPointers.Add( - &folderInfo.UnpackSizes[(UInt32)folderInfo.BindPairs[bindPairIndex].OutIndex]); - else - { - int index = folderInfo.FindPackStreamArrayIndex(packStreamIndex); - if (index < 0) - return E_FAIL; - packSizesPointers.Add(&packSizes[index]); - } - } - - _mixerCoderCommon->SetCoderInfo(i, - &packSizesPointers.Front(), - &unpackSizesPointers.Front()); - } - UInt32 mainCoder, temp; - bindInfo.FindOutStream(bindInfo.OutStreams[0], mainCoder, temp); - - if (_multiThread) - _mixerCoderMTSpec->SetProgressCoderIndex(mainCoder); - /* - else - _mixerCoderSTSpec->SetProgressCoderIndex(mainCoder);; - */ - - if (numCoders == 0) - return 0; - CRecordVector inStreamPointers; - inStreamPointers.Reserve(inStreams.Size()); - for (i = 0; i < inStreams.Size(); i++) - inStreamPointers.Add(inStreams[i]); - ISequentialOutStream *outStreamPointer = outStream; - return _mixerCoder->Code(&inStreamPointers.Front(), NULL, - inStreams.Size(), &outStreamPointer, NULL, 1, compressProgress); -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zDecode.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zDecode.h deleted file mode 100644 index aa3904a7c2ab..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zDecode.h +++ /dev/null @@ -1,68 +0,0 @@ -// 7zDecode.h - -#ifndef __7Z_DECODE_H -#define __7Z_DECODE_H - -#include "../../IStream.h" -#include "../../IPassword.h" - -#include "../Common/CoderMixer2.h" -#include "../Common/CoderMixer2MT.h" -#ifdef _ST_MODE -#include "../Common/CoderMixer2ST.h" -#endif - -#include "../../Common/CreateCoder.h" - -#include "7zItem.h" - -namespace NArchive { -namespace N7z { - -struct CBindInfoEx: public NCoderMixer::CBindInfo -{ - CRecordVector CoderMethodIDs; - void Clear() - { - CBindInfo::Clear(); - CoderMethodIDs.Clear(); - } -}; - -class CDecoder -{ - bool _bindInfoExPrevIsDefined; - CBindInfoEx _bindInfoExPrev; - - bool _multiThread; - #ifdef _ST_MODE - NCoderMixer::CCoderMixer2ST *_mixerCoderSTSpec; - #endif - NCoderMixer::CCoderMixer2MT *_mixerCoderMTSpec; - NCoderMixer::CCoderMixer2 *_mixerCoderCommon; - - CMyComPtr _mixerCoder; - CObjectVector > _decoders; - // CObjectVector > _decoders2; -public: - CDecoder(bool multiThread); - HRESULT Decode( - DECL_EXTERNAL_CODECS_LOC_VARS - IInStream *inStream, - UInt64 startPos, - const UInt64 *packSizes, - const CFolder &folder, - ISequentialOutStream *outStream, - ICompressProgressInfo *compressProgress - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPasswordSpec, bool &passwordIsDefined - #endif - #ifdef COMPRESS_MT - , bool mtMode, UInt32 numThreads - #endif - ); -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zEncode.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zEncode.cpp deleted file mode 100644 index f9447e339d54..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zEncode.cpp +++ /dev/null @@ -1,450 +0,0 @@ -// 7zEncode.cpp - -#include "StdAfx.h" - -#include "../../Common/CreateCoder.h" -#include "../../Common/FilterCoder.h" -#include "../../Common/LimitedStreams.h" -#include "../../Common/InOutTempBuffer.h" -#include "../../Common/ProgressUtils.h" -#include "../../Common/StreamObjects.h" - -#include "7zEncode.h" -#include "7zSpecStream.h" - -static const UInt64 k_Delta = 0x03; -static const UInt64 k_BCJ = 0x03030103; -static const UInt64 k_BCJ2 = 0x0303011B; -static const UInt64 k_AES = 0x06F10701; - -namespace NArchive { -namespace N7z { - -static void ConvertBindInfoToFolderItemInfo(const NCoderMixer::CBindInfo &bindInfo, - const CRecordVector decompressionMethods, - CFolder &folder) -{ - folder.Coders.Clear(); - // bindInfo.CoderMethodIDs.Clear(); - // folder.OutStreams.Clear(); - folder.PackStreams.Clear(); - folder.BindPairs.Clear(); - int i; - for (i = 0; i < bindInfo.BindPairs.Size(); i++) - { - CBindPair bindPair; - bindPair.InIndex = bindInfo.BindPairs[i].InIndex; - bindPair.OutIndex = bindInfo.BindPairs[i].OutIndex; - folder.BindPairs.Add(bindPair); - } - for (i = 0; i < bindInfo.Coders.Size(); i++) - { - CCoderInfo coderInfo; - const NCoderMixer::CCoderStreamsInfo &coderStreamsInfo = bindInfo.Coders[i]; - coderInfo.NumInStreams = coderStreamsInfo.NumInStreams; - coderInfo.NumOutStreams = coderStreamsInfo.NumOutStreams; - coderInfo.MethodID = decompressionMethods[i]; - folder.Coders.Add(coderInfo); - } - for (i = 0; i < bindInfo.InStreams.Size(); i++) - folder.PackStreams.Add(bindInfo.InStreams[i]); -} - -HRESULT CEncoder::CreateMixerCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - const UInt64 *inSizeForReduce) -{ - _mixerCoderSpec = new NCoderMixer::CCoderMixer2MT; - _mixerCoder = _mixerCoderSpec; - RINOK(_mixerCoderSpec->SetBindInfo(_bindInfo)); - for (int i = 0; i < _options.Methods.Size(); i++) - { - const CMethodFull &methodFull = _options.Methods[i]; - _codersInfo.Add(CCoderInfo()); - CCoderInfo &encodingInfo = _codersInfo.Back(); - encodingInfo.MethodID = methodFull.Id; - CMyComPtr encoder; - CMyComPtr encoder2; - - - RINOK(CreateCoder( - EXTERNAL_CODECS_LOC_VARS - methodFull.Id, encoder, encoder2, true)); - - if (!encoder && !encoder2) - return E_FAIL; - - CMyComPtr encoderCommon = encoder ? (IUnknown *)encoder : (IUnknown *)encoder2; - - #ifdef COMPRESS_MT - { - CMyComPtr setCoderMt; - encoderCommon.QueryInterface(IID_ICompressSetCoderMt, &setCoderMt); - if (setCoderMt) - { - RINOK(setCoderMt->SetNumberOfThreads(_options.NumThreads)); - } - } - #endif - - - RINOK(SetMethodProperties(methodFull, inSizeForReduce, encoderCommon)); - - /* - CMyComPtr resetSalt; - encoderCommon.QueryInterface(IID_ICryptoResetSalt, (void **)&resetSalt); - if (resetSalt != NULL) - { - resetSalt->ResetSalt(); - } - */ - - #ifdef EXTERNAL_CODECS - CMyComPtr setCompressCodecsInfo; - encoderCommon.QueryInterface(IID_ISetCompressCodecsInfo, (void **)&setCompressCodecsInfo); - if (setCompressCodecsInfo) - { - RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(codecsInfo)); - } - #endif - - CMyComPtr cryptoSetPassword; - encoderCommon.QueryInterface(IID_ICryptoSetPassword, &cryptoSetPassword); - - if (cryptoSetPassword) - { - CByteBuffer buffer; - const UInt32 sizeInBytes = _options.Password.Length() * 2; - buffer.SetCapacity(sizeInBytes); - for (int i = 0; i < _options.Password.Length(); i++) - { - wchar_t c = _options.Password[i]; - ((Byte *)buffer)[i * 2] = (Byte)c; - ((Byte *)buffer)[i * 2 + 1] = (Byte)(c >> 8); - } - RINOK(cryptoSetPassword->CryptoSetPassword((const Byte *)buffer, sizeInBytes)); - } - - if (encoder) - _mixerCoderSpec->AddCoder(encoder); - else - _mixerCoderSpec->AddCoder2(encoder2); - } - return S_OK; -} - -HRESULT CEncoder::Encode( - DECL_EXTERNAL_CODECS_LOC_VARS - ISequentialInStream *inStream, - const UInt64 *inStreamSize, const UInt64 *inSizeForReduce, - CFolder &folderItem, - ISequentialOutStream *outStream, - CRecordVector &packSizes, - ICompressProgressInfo *compressProgress) -{ - RINOK(EncoderConstr()); - - if (_mixerCoderSpec == NULL) - { - RINOK(CreateMixerCoder(EXTERNAL_CODECS_LOC_VARS inSizeForReduce)); - } - _mixerCoderSpec->ReInit(); - // _mixerCoderSpec->SetCoderInfo(0, NULL, NULL, progress); - - CObjectVector inOutTempBuffers; - CObjectVector tempBufferSpecs; - CObjectVector > tempBuffers; - int numMethods = _bindInfo.Coders.Size(); - int i; - for (i = 1; i < _bindInfo.OutStreams.Size(); i++) - { - inOutTempBuffers.Add(CInOutTempBuffer()); - inOutTempBuffers.Back().Create(); - inOutTempBuffers.Back().InitWriting(); - } - for (i = 1; i < _bindInfo.OutStreams.Size(); i++) - { - CSequentialOutTempBufferImp *tempBufferSpec = new CSequentialOutTempBufferImp; - CMyComPtr tempBuffer = tempBufferSpec; - tempBufferSpec->Init(&inOutTempBuffers[i - 1]); - tempBuffers.Add(tempBuffer); - tempBufferSpecs.Add(tempBufferSpec); - } - - for (i = 0; i < numMethods; i++) - _mixerCoderSpec->SetCoderInfo(i, NULL, NULL); - - if (_bindInfo.InStreams.IsEmpty()) - return E_FAIL; - UInt32 mainCoderIndex, mainStreamIndex; - _bindInfo.FindInStream(_bindInfo.InStreams[0], mainCoderIndex, mainStreamIndex); - - if (inStreamSize != NULL) - { - CRecordVector sizePointers; - for (UInt32 i = 0; i < _bindInfo.Coders[mainCoderIndex].NumInStreams; i++) - if (i == mainStreamIndex) - sizePointers.Add(inStreamSize); - else - sizePointers.Add(NULL); - _mixerCoderSpec->SetCoderInfo(mainCoderIndex, &sizePointers.Front(), NULL); - } - - - // UInt64 outStreamStartPos; - // RINOK(stream->Seek(0, STREAM_SEEK_CUR, &outStreamStartPos)); - - CSequentialInStreamSizeCount2 *inStreamSizeCountSpec = - new CSequentialInStreamSizeCount2; - CMyComPtr inStreamSizeCount = inStreamSizeCountSpec; - CSequentialOutStreamSizeCount *outStreamSizeCountSpec = - new CSequentialOutStreamSizeCount; - CMyComPtr outStreamSizeCount = outStreamSizeCountSpec; - - inStreamSizeCountSpec->Init(inStream); - outStreamSizeCountSpec->SetStream(outStream); - outStreamSizeCountSpec->Init(); - - CRecordVector inStreamPointers; - CRecordVector outStreamPointers; - inStreamPointers.Add(inStreamSizeCount); - outStreamPointers.Add(outStreamSizeCount); - for (i = 1; i < _bindInfo.OutStreams.Size(); i++) - outStreamPointers.Add(tempBuffers[i - 1]); - - for (i = 0; i < _codersInfo.Size(); i++) - { - CCoderInfo &encodingInfo = _codersInfo[i]; - - CMyComPtr resetInitVector; - _mixerCoderSpec->_coders[i].QueryInterface(IID_ICryptoResetInitVector, (void **)&resetInitVector); - if (resetInitVector != NULL) - { - resetInitVector->ResetInitVector(); - } - - CMyComPtr writeCoderProperties; - _mixerCoderSpec->_coders[i].QueryInterface(IID_ICompressWriteCoderProperties, (void **)&writeCoderProperties); - if (writeCoderProperties != NULL) - { - CSequentialOutStreamImp *outStreamSpec = new CSequentialOutStreamImp; - CMyComPtr outStream(outStreamSpec); - outStreamSpec->Init(); - writeCoderProperties->WriteCoderProperties(outStream); - size_t size = outStreamSpec->GetSize(); - encodingInfo.Props.SetCapacity(size); - memmove(encodingInfo.Props, outStreamSpec->GetBuffer(), size); - } - } - - UInt32 progressIndex = mainCoderIndex; - - for (i = 0; i + 1 < _codersInfo.Size(); i++) - { - UInt64 m = _codersInfo[i].MethodID; - if (m == k_Delta || m == k_BCJ || m == k_BCJ2) - progressIndex = i + 1; - } - - _mixerCoderSpec->SetProgressCoderIndex(progressIndex); - - RINOK(_mixerCoder->Code(&inStreamPointers.Front(), NULL, 1, - &outStreamPointers.Front(), NULL, outStreamPointers.Size(), compressProgress)); - - ConvertBindInfoToFolderItemInfo(_decompressBindInfo, _decompressionMethods, - folderItem); - - packSizes.Add(outStreamSizeCountSpec->GetSize()); - - for (i = 1; i < _bindInfo.OutStreams.Size(); i++) - { - CInOutTempBuffer &inOutTempBuffer = inOutTempBuffers[i - 1]; - RINOK(inOutTempBuffer.WriteToStream(outStream)); - packSizes.Add(inOutTempBuffer.GetDataSize()); - } - - for (i = 0; i < (int)_bindReverseConverter->NumSrcInStreams; i++) - { - int binder = _bindInfo.FindBinderForInStream( - _bindReverseConverter->DestOutToSrcInMap[i]); - UInt64 streamSize; - if (binder < 0) - streamSize = inStreamSizeCountSpec->GetSize(); - else - streamSize = _mixerCoderSpec->GetWriteProcessedSize(binder); - folderItem.UnpackSizes.Add(streamSize); - } - for (i = numMethods - 1; i >= 0; i--) - folderItem.Coders[numMethods - 1 - i].Props = _codersInfo[i].Props; - return S_OK; -} - - -CEncoder::CEncoder(const CCompressionMethodMode &options): - _bindReverseConverter(0), - _constructed(false) -{ - if (options.IsEmpty()) - throw 1; - - _options = options; - _mixerCoderSpec = NULL; -} - -HRESULT CEncoder::EncoderConstr() -{ - if (_constructed) - return S_OK; - if (_options.Methods.IsEmpty()) - { - // it has only password method; - if (!_options.PasswordIsDefined) - throw 1; - if (!_options.Binds.IsEmpty()) - throw 1; - NCoderMixer::CCoderStreamsInfo coderStreamsInfo; - CMethodFull method; - - method.NumInStreams = 1; - method.NumOutStreams = 1; - coderStreamsInfo.NumInStreams = 1; - coderStreamsInfo.NumOutStreams = 1; - method.Id = k_AES; - - _options.Methods.Add(method); - _bindInfo.Coders.Add(coderStreamsInfo); - - _bindInfo.InStreams.Add(0); - _bindInfo.OutStreams.Add(0); - } - else - { - - UInt32 numInStreams = 0, numOutStreams = 0; - int i; - for (i = 0; i < _options.Methods.Size(); i++) - { - const CMethodFull &methodFull = _options.Methods[i]; - NCoderMixer::CCoderStreamsInfo coderStreamsInfo; - coderStreamsInfo.NumInStreams = methodFull.NumOutStreams; - coderStreamsInfo.NumOutStreams = methodFull.NumInStreams; - if (_options.Binds.IsEmpty()) - { - if (i < _options.Methods.Size() - 1) - { - NCoderMixer::CBindPair bindPair; - bindPair.InIndex = numInStreams + coderStreamsInfo.NumInStreams; - bindPair.OutIndex = numOutStreams; - _bindInfo.BindPairs.Add(bindPair); - } - else - _bindInfo.OutStreams.Insert(0, numOutStreams); - for (UInt32 j = 1; j < coderStreamsInfo.NumOutStreams; j++) - _bindInfo.OutStreams.Add(numOutStreams + j); - } - - numInStreams += coderStreamsInfo.NumInStreams; - numOutStreams += coderStreamsInfo.NumOutStreams; - - _bindInfo.Coders.Add(coderStreamsInfo); - } - - if (!_options.Binds.IsEmpty()) - { - for (i = 0; i < _options.Binds.Size(); i++) - { - NCoderMixer::CBindPair bindPair; - const CBind &bind = _options.Binds[i]; - bindPair.InIndex = _bindInfo.GetCoderInStreamIndex(bind.InCoder) + bind.InStream; - bindPair.OutIndex = _bindInfo.GetCoderOutStreamIndex(bind.OutCoder) + bind.OutStream; - _bindInfo.BindPairs.Add(bindPair); - } - for (i = 0; i < (int)numOutStreams; i++) - if (_bindInfo.FindBinderForOutStream(i) == -1) - _bindInfo.OutStreams.Add(i); - } - - for (i = 0; i < (int)numInStreams; i++) - if (_bindInfo.FindBinderForInStream(i) == -1) - _bindInfo.InStreams.Add(i); - - if (_bindInfo.InStreams.IsEmpty()) - throw 1; // this is error - - // Make main stream first in list - int inIndex = _bindInfo.InStreams[0]; - for (;;) - { - UInt32 coderIndex, coderStreamIndex; - _bindInfo.FindInStream(inIndex, coderIndex, coderStreamIndex); - UInt32 outIndex = _bindInfo.GetCoderOutStreamIndex(coderIndex); - int binder = _bindInfo.FindBinderForOutStream(outIndex); - if (binder >= 0) - { - inIndex = _bindInfo.BindPairs[binder].InIndex; - continue; - } - for (i = 0; i < _bindInfo.OutStreams.Size(); i++) - if (_bindInfo.OutStreams[i] == outIndex) - { - _bindInfo.OutStreams.Delete(i); - _bindInfo.OutStreams.Insert(0, outIndex); - break; - } - break; - } - - if (_options.PasswordIsDefined) - { - int numCryptoStreams = _bindInfo.OutStreams.Size(); - - for (i = 0; i < numCryptoStreams; i++) - { - NCoderMixer::CBindPair bindPair; - bindPair.InIndex = numInStreams + i; - bindPair.OutIndex = _bindInfo.OutStreams[i]; - _bindInfo.BindPairs.Add(bindPair); - } - _bindInfo.OutStreams.Clear(); - - /* - if (numCryptoStreams == 0) - numCryptoStreams = 1; - */ - - for (i = 0; i < numCryptoStreams; i++) - { - NCoderMixer::CCoderStreamsInfo coderStreamsInfo; - CMethodFull method; - method.NumInStreams = 1; - method.NumOutStreams = 1; - coderStreamsInfo.NumInStreams = method.NumOutStreams; - coderStreamsInfo.NumOutStreams = method.NumInStreams; - method.Id = k_AES; - - _options.Methods.Add(method); - _bindInfo.Coders.Add(coderStreamsInfo); - _bindInfo.OutStreams.Add(numOutStreams + i); - } - } - - } - - for (int i = _options.Methods.Size() - 1; i >= 0; i--) - { - const CMethodFull &methodFull = _options.Methods[i]; - _decompressionMethods.Add(methodFull.Id); - } - - _bindReverseConverter = new NCoderMixer::CBindReverseConverter(_bindInfo); - _bindReverseConverter->CreateReverseBindInfo(_decompressBindInfo); - _constructed = true; - return S_OK; -} - -CEncoder::~CEncoder() -{ - delete _bindReverseConverter; -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zEncode.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zEncode.h deleted file mode 100644 index c75f02fa7e29..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zEncode.h +++ /dev/null @@ -1,55 +0,0 @@ -// 7zEncode.h - -#ifndef __7Z_ENCODE_H -#define __7Z_ENCODE_H - -// #include "../../Common/StreamObjects.h" - -#include "7zCompressionMode.h" - -#include "../Common/CoderMixer2.h" -#include "../Common/CoderMixer2MT.h" -#ifdef _ST_MODE -#include "../Common/CoderMixer2ST.h" -#endif -#include "7zItem.h" - -#include "../../Common/CreateCoder.h" - -namespace NArchive { -namespace N7z { - -class CEncoder -{ - NCoderMixer::CCoderMixer2MT *_mixerCoderSpec; - CMyComPtr _mixerCoder; - - CObjectVector _codersInfo; - - CCompressionMethodMode _options; - NCoderMixer::CBindInfo _bindInfo; - NCoderMixer::CBindInfo _decompressBindInfo; - NCoderMixer::CBindReverseConverter *_bindReverseConverter; - CRecordVector _decompressionMethods; - - HRESULT CreateMixerCoder(DECL_EXTERNAL_CODECS_LOC_VARS - const UInt64 *inSizeForReduce); - - bool _constructed; -public: - CEncoder(const CCompressionMethodMode &options); - ~CEncoder(); - HRESULT EncoderConstr(); - HRESULT Encode( - DECL_EXTERNAL_CODECS_LOC_VARS - ISequentialInStream *inStream, - const UInt64 *inStreamSize, const UInt64 *inSizeForReduce, - CFolder &folderItem, - ISequentialOutStream *outStream, - CRecordVector &packSizes, - ICompressProgressInfo *compressProgress); -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zExtract.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zExtract.cpp deleted file mode 100644 index ee74f552e745..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zExtract.cpp +++ /dev/null @@ -1,273 +0,0 @@ -// 7zExtract.cpp - -#include "StdAfx.h" - -#include "7zHandler.h" -#include "7zFolderOutStream.h" -#include "7zDecode.h" -// #include "7z1Decode.h" - -#include "../../../Common/ComTry.h" -#include "../../Common/StreamObjects.h" -#include "../../Common/ProgressUtils.h" -#include "../../Common/LimitedStreams.h" - -namespace NArchive { -namespace N7z { - -struct CExtractFolderInfo -{ - #ifdef _7Z_VOL - int VolumeIndex; - #endif - CNum FileIndex; - CNum FolderIndex; - CBoolVector ExtractStatuses; - UInt64 UnpackSize; - CExtractFolderInfo( - #ifdef _7Z_VOL - int volumeIndex, - #endif - CNum fileIndex, CNum folderIndex): - #ifdef _7Z_VOL - VolumeIndex(volumeIndex), - #endif - FileIndex(fileIndex), - FolderIndex(folderIndex), - UnpackSize(0) - { - if (fileIndex != kNumNoIndex) - { - ExtractStatuses.Reserve(1); - ExtractStatuses.Add(true); - } - }; -}; - -STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems, - Int32 testModeSpec, IArchiveExtractCallback *extractCallbackSpec) -{ - COM_TRY_BEGIN - bool testMode = (testModeSpec != 0); - CMyComPtr extractCallback = extractCallbackSpec; - UInt64 importantTotalUnpacked = 0; - - bool allFilesMode = (numItems == (UInt32)-1); - if (allFilesMode) - numItems = - #ifdef _7Z_VOL - _refs.Size(); - #else - _db.Files.Size(); - #endif - - if(numItems == 0) - return S_OK; - - /* - if(_volumes.Size() != 1) - return E_FAIL; - const CVolume &volume = _volumes.Front(); - const CArchiveDatabaseEx &_db = volume.Database; - IInStream *_inStream = volume.Stream; - */ - - CObjectVector extractFolderInfoVector; - for(UInt32 ii = 0; ii < numItems; ii++) - { - // UInt32 fileIndex = allFilesMode ? indexIndex : indices[indexIndex]; - UInt32 ref2Index = allFilesMode ? ii : indices[ii]; - // const CRef2 &ref2 = _refs[ref2Index]; - - // for(UInt32 ri = 0; ri < ref2.Refs.Size(); ri++) - { - #ifdef _7Z_VOL - // const CRef &ref = ref2.Refs[ri]; - const CRef &ref = _refs[ref2Index]; - - int volumeIndex = ref.VolumeIndex; - const CVolume &volume = _volumes[volumeIndex]; - const CArchiveDatabaseEx &db = volume.Database; - UInt32 fileIndex = ref.ItemIndex; - #else - const CArchiveDatabaseEx &db = _db; - UInt32 fileIndex = ref2Index; - #endif - - CNum folderIndex = db.FileIndexToFolderIndexMap[fileIndex]; - if (folderIndex == kNumNoIndex) - { - extractFolderInfoVector.Add(CExtractFolderInfo( - #ifdef _7Z_VOL - volumeIndex, - #endif - fileIndex, kNumNoIndex)); - continue; - } - if (extractFolderInfoVector.IsEmpty() || - folderIndex != extractFolderInfoVector.Back().FolderIndex - #ifdef _7Z_VOL - || volumeIndex != extractFolderInfoVector.Back().VolumeIndex - #endif - ) - { - extractFolderInfoVector.Add(CExtractFolderInfo( - #ifdef _7Z_VOL - volumeIndex, - #endif - kNumNoIndex, folderIndex)); - const CFolder &folderInfo = db.Folders[folderIndex]; - UInt64 unpackSize = folderInfo.GetUnpackSize(); - importantTotalUnpacked += unpackSize; - extractFolderInfoVector.Back().UnpackSize = unpackSize; - } - - CExtractFolderInfo &efi = extractFolderInfoVector.Back(); - - // const CFolderInfo &folderInfo = m_dam_Folders[folderIndex]; - CNum startIndex = db.FolderStartFileIndex[folderIndex]; - for (CNum index = efi.ExtractStatuses.Size(); - index <= fileIndex - startIndex; index++) - { - // UInt64 unpackSize = _db.Files[startIndex + index].UnpackSize; - // Count partial_folder_size - // efi.UnpackSize += unpackSize; - // importantTotalUnpacked += unpackSize; - efi.ExtractStatuses.Add(index == fileIndex - startIndex); - } - } - } - - extractCallback->SetTotal(importantTotalUnpacked); - - CDecoder decoder( - #ifdef _ST_MODE - false - #else - true - #endif - ); - // CDecoder1 decoder; - - UInt64 currentTotalPacked = 0; - UInt64 currentTotalUnpacked = 0; - UInt64 totalFolderUnpacked; - UInt64 totalFolderPacked; - - CLocalProgress *lps = new CLocalProgress; - CMyComPtr progress = lps; - lps->Init(extractCallback, false); - - for(int i = 0; i < extractFolderInfoVector.Size(); i++, - currentTotalUnpacked += totalFolderUnpacked, - currentTotalPacked += totalFolderPacked) - { - lps->OutSize = currentTotalUnpacked; - lps->InSize = currentTotalPacked; - RINOK(lps->SetCur()); - - const CExtractFolderInfo &efi = extractFolderInfoVector[i]; - totalFolderUnpacked = efi.UnpackSize; - - totalFolderPacked = 0; - - CFolderOutStream *folderOutStream = new CFolderOutStream; - CMyComPtr outStream(folderOutStream); - - #ifdef _7Z_VOL - const CVolume &volume = _volumes[efi.VolumeIndex]; - const CArchiveDatabaseEx &db = volume.Database; - #else - const CArchiveDatabaseEx &db = _db; - #endif - - CNum startIndex; - if (efi.FileIndex != kNumNoIndex) - startIndex = efi.FileIndex; - else - startIndex = db.FolderStartFileIndex[efi.FolderIndex]; - - - HRESULT result = folderOutStream->Init(&db, - #ifdef _7Z_VOL - volume.StartRef2Index, - #else - 0, - #endif - startIndex, - &efi.ExtractStatuses, extractCallback, testMode, _crcSize != 0); - - RINOK(result); - - if (efi.FileIndex != kNumNoIndex) - continue; - - CNum folderIndex = efi.FolderIndex; - const CFolder &folderInfo = db.Folders[folderIndex]; - - totalFolderPacked = _db.GetFolderFullPackSize(folderIndex); - - CNum packStreamIndex = db.FolderStartPackStreamIndex[folderIndex]; - UInt64 folderStartPackPos = db.GetFolderStreamPos(folderIndex, 0); - - #ifndef _NO_CRYPTO - CMyComPtr getTextPassword; - if (extractCallback) - extractCallback.QueryInterface(IID_ICryptoGetTextPassword, &getTextPassword); - #endif - - try - { - #ifndef _NO_CRYPTO - bool passwordIsDefined; - #endif - - HRESULT result = decoder.Decode( - EXTERNAL_CODECS_VARS - #ifdef _7Z_VOL - volume.Stream, - #else - _inStream, - #endif - folderStartPackPos, - &db.PackSizes[packStreamIndex], - folderInfo, - outStream, - progress - #ifndef _NO_CRYPTO - , getTextPassword, passwordIsDefined - #endif - #ifdef COMPRESS_MT - , true, _numThreads - #endif - ); - - if (result == S_FALSE) - { - RINOK(folderOutStream->FlushCorrupted(NExtract::NOperationResult::kDataError)); - continue; - } - if (result == E_NOTIMPL) - { - RINOK(folderOutStream->FlushCorrupted(NExtract::NOperationResult::kUnSupportedMethod)); - continue; - } - if (result != S_OK) - return result; - if (folderOutStream->WasWritingFinished() != S_OK) - { - RINOK(folderOutStream->FlushCorrupted(NExtract::NOperationResult::kDataError)); - continue; - } - } - catch(...) - { - RINOK(folderOutStream->FlushCorrupted(NExtract::NOperationResult::kDataError)); - continue; - } - } - return S_OK; - COM_TRY_END -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderInStream.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderInStream.cpp deleted file mode 100644 index 3b11f16868ba..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderInStream.cpp +++ /dev/null @@ -1,130 +0,0 @@ -// 7zFolderInStream.cpp - -#include "StdAfx.h" - -#include "7zFolderInStream.h" - -namespace NArchive { -namespace N7z { - -CFolderInStream::CFolderInStream() -{ - _inStreamWithHashSpec = new CSequentialInStreamWithCRC; - _inStreamWithHash = _inStreamWithHashSpec; -} - -void CFolderInStream::Init(IArchiveUpdateCallback *updateCallback, - const UInt32 *fileIndices, UInt32 numFiles) -{ - _updateCallback = updateCallback; - _numFiles = numFiles; - _fileIndex = 0; - _fileIndices = fileIndices; - Processed.Clear(); - CRCs.Clear(); - Sizes.Clear(); - _fileIsOpen = false; - _currentSizeIsDefined = false; -} - -HRESULT CFolderInStream::OpenStream() -{ - _filePos = 0; - while (_fileIndex < _numFiles) - { - _currentSizeIsDefined = false; - CMyComPtr stream; - HRESULT result = _updateCallback->GetStream(_fileIndices[_fileIndex], &stream); - if (result != S_OK && result != S_FALSE) - return result; - _fileIndex++; - _inStreamWithHashSpec->SetStream(stream); - _inStreamWithHashSpec->Init(); - if (!stream) - { - RINOK(_updateCallback->SetOperationResult(NArchive::NUpdate::NOperationResult::kOK)); - Sizes.Add(0); - Processed.Add(result == S_OK); - AddDigest(); - continue; - } - CMyComPtr streamGetSize; - if (stream.QueryInterface(IID_IStreamGetSize, &streamGetSize) == S_OK) - { - if(streamGetSize) - { - _currentSizeIsDefined = true; - RINOK(streamGetSize->GetSize(&_currentSize)); - } - } - - _fileIsOpen = true; - return S_OK; - } - return S_OK; -} - -void CFolderInStream::AddDigest() -{ - CRCs.Add(_inStreamWithHashSpec->GetCRC()); -} - -HRESULT CFolderInStream::CloseStream() -{ - RINOK(_updateCallback->SetOperationResult(NArchive::NUpdate::NOperationResult::kOK)); - _inStreamWithHashSpec->ReleaseStream(); - _fileIsOpen = false; - Processed.Add(true); - Sizes.Add(_filePos); - AddDigest(); - return S_OK; -} - -STDMETHODIMP CFolderInStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize = 0; - while ((_fileIndex < _numFiles || _fileIsOpen) && size > 0) - { - if (_fileIsOpen) - { - UInt32 localProcessedSize; - RINOK(_inStreamWithHash->Read( - ((Byte *)data) + realProcessedSize, size, &localProcessedSize)); - if (localProcessedSize == 0) - { - RINOK(CloseStream()); - continue; - } - realProcessedSize += localProcessedSize; - _filePos += localProcessedSize; - size -= localProcessedSize; - break; - } - else - { - RINOK(OpenStream()); - } - } - if (processedSize != 0) - *processedSize = realProcessedSize; - return S_OK; -} - -STDMETHODIMP CFolderInStream::GetSubStreamSize(UInt64 subStream, UInt64 *value) -{ - *value = 0; - int subStreamIndex = (int)subStream; - if (subStreamIndex < 0 || subStream > Sizes.Size()) - return E_FAIL; - if (subStreamIndex < Sizes.Size()) - { - *value= Sizes[subStreamIndex]; - return S_OK; - } - if (!_currentSizeIsDefined) - return S_FALSE; - *value = _currentSize; - return S_OK; -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderInStream.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderInStream.h deleted file mode 100644 index b4df6d62aa1a..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderInStream.h +++ /dev/null @@ -1,66 +0,0 @@ -// 7z/FolderInStream.h - -#ifndef __7Z_FOLDERINSTREAM_H -#define __7Z_FOLDERINSTREAM_H - -#include "7zItem.h" -#include "7zHeader.h" - -#include "../IArchive.h" -#include "../Common/InStreamWithCRC.h" -#include "../../IStream.h" -#include "../../ICoder.h" - -namespace NArchive { -namespace N7z { - -class CFolderInStream: - public ISequentialInStream, - public ICompressGetSubStreamSize, - public CMyUnknownImp -{ -public: - - MY_UNKNOWN_IMP1(ICompressGetSubStreamSize) - - CFolderInStream(); - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - - STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value); -private: - CSequentialInStreamWithCRC *_inStreamWithHashSpec; - CMyComPtr _inStreamWithHash; - CMyComPtr _updateCallback; - - bool _currentSizeIsDefined; - UInt64 _currentSize; - - bool _fileIsOpen; - UInt64 _filePos; - - const UInt32 *_fileIndices; - UInt32 _numFiles; - UInt32 _fileIndex; - - HRESULT OpenStream(); - HRESULT CloseStream(); - void AddDigest(); -public: - void Init(IArchiveUpdateCallback *updateCallback, - const UInt32 *fileIndices, UInt32 numFiles); - CRecordVector Processed; - CRecordVector CRCs; - CRecordVector Sizes; - UInt64 GetFullSize() const - { - UInt64 size = 0; - for (int i = 0; i < Sizes.Size(); i++) - size += Sizes[i]; - return size; - } -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderOutStream.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderOutStream.cpp deleted file mode 100644 index d301baadf48b..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderOutStream.cpp +++ /dev/null @@ -1,140 +0,0 @@ -// 7zFolderOutStream.cpp - -#include "StdAfx.h" - -#include "7zFolderOutStream.h" - -namespace NArchive { -namespace N7z { - -CFolderOutStream::CFolderOutStream() -{ - _crcStreamSpec = new COutStreamWithCRC; - _crcStream = _crcStreamSpec; -} - -HRESULT CFolderOutStream::Init( - const CArchiveDatabaseEx *archiveDatabase, - UInt32 ref2Offset, UInt32 startIndex, - const CBoolVector *extractStatuses, - IArchiveExtractCallback *extractCallback, - bool testMode, bool checkCrc) -{ - _db = archiveDatabase; - _ref2Offset = ref2Offset; - _startIndex = startIndex; - - _extractStatuses = extractStatuses; - _extractCallback = extractCallback; - _testMode = testMode; - _checkCrc = checkCrc; - - _currentIndex = 0; - _fileIsOpen = false; - return ProcessEmptyFiles(); -} - -HRESULT CFolderOutStream::OpenFile() -{ - Int32 askMode = ((*_extractStatuses)[_currentIndex]) ? (_testMode ? - NExtract::NAskMode::kTest : - NExtract::NAskMode::kExtract) : - NExtract::NAskMode::kSkip; - CMyComPtr realOutStream; - UInt32 index = _startIndex + _currentIndex; - RINOK(_extractCallback->GetStream(_ref2Offset + index, &realOutStream, askMode)); - _crcStreamSpec->SetStream(realOutStream); - _crcStreamSpec->Init(_checkCrc); - _fileIsOpen = true; - const CFileItem &fi = _db->Files[index]; - _rem = fi.Size; - if (askMode == NExtract::NAskMode::kExtract && !realOutStream && - !_db->IsItemAnti(index) && !fi.IsDir) - askMode = NExtract::NAskMode::kSkip; - return _extractCallback->PrepareOperation(askMode); -} - -HRESULT CFolderOutStream::CloseFileAndSetResult(Int32 res) -{ - _crcStreamSpec->ReleaseStream(); - _fileIsOpen = false; - _currentIndex++; - return _extractCallback->SetOperationResult(res); -} - -HRESULT CFolderOutStream::CloseFileAndSetResult() -{ - const CFileItem &fi = _db->Files[_startIndex + _currentIndex]; - return CloseFileAndSetResult( - (fi.IsDir || !fi.CrcDefined || !_checkCrc || fi.Crc == _crcStreamSpec->GetCRC()) ? - NExtract::NOperationResult::kOK : - NExtract::NOperationResult::kCRCError); -} - -HRESULT CFolderOutStream::ProcessEmptyFiles() -{ - while (_currentIndex < _extractStatuses->Size() && _db->Files[_startIndex + _currentIndex].Size == 0) - { - RINOK(OpenFile()); - RINOK(CloseFileAndSetResult()); - } - return S_OK; -} - -STDMETHODIMP CFolderOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - if (processedSize != NULL) - *processedSize = 0; - while (size != 0) - { - if (_fileIsOpen) - { - UInt32 cur = size < _rem ? size : (UInt32)_rem; - RINOK(_crcStream->Write(data, cur, &cur)); - if (cur == 0) - break; - data = (const Byte *)data + cur; - size -= cur; - _rem -= cur; - if (processedSize != NULL) - *processedSize += cur; - if (_rem == 0) - { - RINOK(CloseFileAndSetResult()); - RINOK(ProcessEmptyFiles()); - continue; - } - } - else - { - RINOK(ProcessEmptyFiles()); - if (_currentIndex == _extractStatuses->Size()) - { - // we support partial extracting - if (processedSize != NULL) - *processedSize += size; - break; - } - RINOK(OpenFile()); - } - } - return S_OK; -} - -HRESULT CFolderOutStream::FlushCorrupted(Int32 resultEOperationResult) -{ - while (_currentIndex < _extractStatuses->Size()) - { - if (_fileIsOpen) - { - RINOK(CloseFileAndSetResult(resultEOperationResult)); - } - else - { - RINOK(OpenFile()); - } - } - return S_OK; -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderOutStream.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderOutStream.h deleted file mode 100644 index 7dd02a21fd04..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zFolderOutStream.h +++ /dev/null @@ -1,56 +0,0 @@ -// 7zFolderOutStream.h - -#ifndef __7Z_FOLDER_OUT_STREAM_H -#define __7Z_FOLDER_OUT_STREAM_H - -#include "7zIn.h" - -#include "../../IStream.h" -#include "../IArchive.h" -#include "../Common/OutStreamWithCRC.h" - -namespace NArchive { -namespace N7z { - -class CFolderOutStream: - public ISequentialOutStream, - public CMyUnknownImp -{ - COutStreamWithCRC *_crcStreamSpec; - CMyComPtr _crcStream; - const CArchiveDatabaseEx *_db; - const CBoolVector *_extractStatuses; - CMyComPtr _extractCallback; - UInt32 _ref2Offset; - UInt32 _startIndex; - int _currentIndex; - bool _testMode; - bool _checkCrc; - bool _fileIsOpen; - UInt64 _rem; - - HRESULT OpenFile(); - HRESULT CloseFileAndSetResult(Int32 res); - HRESULT CloseFileAndSetResult(); - HRESULT ProcessEmptyFiles(); -public: - MY_UNKNOWN_IMP - - CFolderOutStream(); - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - - HRESULT Init( - const CArchiveDatabaseEx *archiveDatabase, - UInt32 ref2Offset, UInt32 startIndex, - const CBoolVector *extractStatuses, - IArchiveExtractCallback *extractCallback, - bool testMode, bool checkCrc); - HRESULT FlushCorrupted(Int32 resultEOperationResult); - HRESULT WasWritingFinished() const - { return (_currentIndex == _extractStatuses->Size()) ? S_OK: E_FAIL; } -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHandler.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHandler.cpp deleted file mode 100644 index 01fb78d62d93..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHandler.cpp +++ /dev/null @@ -1,493 +0,0 @@ -// 7zHandler.cpp - -#include "StdAfx.h" - -#include "../../../../C/CpuArch.h" - -#include "../../../Common/ComTry.h" -#include "../../../Common/IntToString.h" - -#ifdef COMPRESS_MT -#include "../../../Windows/System.h" -#endif - -#include "../Common/ItemNameUtils.h" - -#include "7zHandler.h" -#include "7zProperties.h" - -#ifdef __7Z_SET_PROPERTIES -#ifdef EXTRACT_ONLY -#include "../Common/ParseProperties.h" -#endif -#endif - -using namespace NWindows; - -extern UString ConvertMethodIdToString(UInt64 id); - -namespace NArchive { -namespace N7z { - -CHandler::CHandler() -{ - _crcSize = 4; - - #ifndef _NO_CRYPTO - _passwordIsDefined = false; - #endif - - #ifdef EXTRACT_ONLY - #ifdef COMPRESS_MT - _numThreads = NSystem::GetNumberOfProcessors(); - #endif - #else - Init(); - #endif -} - -STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems) -{ - *numItems = _db.Files.Size(); - return S_OK; -} - -#ifdef _SFX - -IMP_IInArchive_ArcProps_NO - -STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 * /* numProperties */) -{ - return E_NOTIMPL; -} - -STDMETHODIMP CHandler::GetPropertyInfo(UInt32 /* index */, - BSTR * /* name */, PROPID * /* propID */, VARTYPE * /* varType */) -{ - return E_NOTIMPL; -} - - -#else - -STATPROPSTG kArcProps[] = -{ - { NULL, kpidMethod, VT_BSTR}, - { NULL, kpidSolid, VT_BOOL}, - { NULL, kpidNumBlocks, VT_UI4}, - { NULL, kpidPhySize, VT_UI8}, - { NULL, kpidHeadersSize, VT_UI8}, - { NULL, kpidOffset, VT_UI8} -}; - -STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value) -{ - COM_TRY_BEGIN - NCOM::CPropVariant prop; - switch(propID) - { - case kpidMethod: - { - UString resString; - CRecordVector ids; - int i; - for (i = 0; i < _db.Folders.Size(); i++) - { - const CFolder &f = _db.Folders[i]; - for (int j = f.Coders.Size() - 1; j >= 0; j--) - ids.AddToUniqueSorted(f.Coders[j].MethodID); - } - - for (i = 0; i < ids.Size(); i++) - { - UInt64 id = ids[i]; - UString methodName; - /* bool methodIsKnown = */ FindMethod(EXTERNAL_CODECS_VARS id, methodName); - if (methodName.IsEmpty()) - methodName = ConvertMethodIdToString(id); - if (!resString.IsEmpty()) - resString += L' '; - resString += methodName; - } - prop = resString; - break; - } - case kpidSolid: prop = _db.IsSolid(); break; - case kpidNumBlocks: prop = (UInt32)_db.Folders.Size(); break; - case kpidHeadersSize: prop = _db.HeadersSize; break; - case kpidPhySize: prop = _db.PhySize; break; - case kpidOffset: if (_db.ArchiveInfo.StartPosition != 0) prop = _db.ArchiveInfo.StartPosition; break; - } - prop.Detach(value); - return S_OK; - COM_TRY_END -} - -IMP_IInArchive_ArcProps - -#endif - -static void SetPropFromUInt64Def(CUInt64DefVector &v, int index, NCOM::CPropVariant &prop) -{ - UInt64 value; - if (v.GetItem(index, value)) - { - FILETIME ft; - ft.dwLowDateTime = (DWORD)value; - ft.dwHighDateTime = (DWORD)(value >> 32); - prop = ft; - } -} - -#ifndef _SFX - -static UString ConvertUInt32ToString(UInt32 value) -{ - wchar_t buffer[32]; - ConvertUInt64ToString(value, buffer); - return buffer; -} - -static UString GetStringForSizeValue(UInt32 value) -{ - for (int i = 31; i >= 0; i--) - if ((UInt32(1) << i) == value) - return ConvertUInt32ToString(i); - UString result; - if (value % (1 << 20) == 0) - { - result += ConvertUInt32ToString(value >> 20); - result += L"m"; - } - else if (value % (1 << 10) == 0) - { - result += ConvertUInt32ToString(value >> 10); - result += L"k"; - } - else - { - result += ConvertUInt32ToString(value); - result += L"b"; - } - return result; -} - -static const UInt64 k_Copy = 0x0; -static const UInt64 k_Delta = 3; -static const UInt64 k_LZMA2 = 0x21; -static const UInt64 k_LZMA = 0x030101; -static const UInt64 k_PPMD = 0x030401; - -static wchar_t GetHex(Byte value) -{ - return (wchar_t)((value < 10) ? (L'0' + value) : (L'A' + (value - 10))); -} -static inline void AddHexToString(UString &res, Byte value) -{ - res += GetHex((Byte)(value >> 4)); - res += GetHex((Byte)(value & 0xF)); -} - -#endif - -static const UInt64 k_AES = 0x06F10701; - -bool CHandler::IsEncrypted(UInt32 index2) const -{ - CNum folderIndex = _db.FileIndexToFolderIndexMap[index2]; - if (folderIndex != kNumNoIndex) - { - const CFolder &folderInfo = _db.Folders[folderIndex]; - for (int i = folderInfo.Coders.Size() - 1; i >= 0; i--) - if (folderInfo.Coders[i].MethodID == k_AES) - return true; - } - return false; -} - -STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value) -{ - COM_TRY_BEGIN - NCOM::CPropVariant prop; - - /* - const CRef2 &ref2 = _refs[index]; - if (ref2.Refs.IsEmpty()) - return E_FAIL; - const CRef &ref = ref2.Refs.Front(); - */ - - const CFileItem &item = _db.Files[index]; - UInt32 index2 = index; - - switch(propID) - { - case kpidPath: - if (!item.Name.IsEmpty()) - prop = NItemName::GetOSName(item.Name); - break; - case kpidIsDir: prop = item.IsDir; break; - case kpidSize: - { - prop = item.Size; - // prop = ref2.Size; - break; - } - case kpidPackSize: - { - // prop = ref2.PackSize; - { - CNum folderIndex = _db.FileIndexToFolderIndexMap[index2]; - if (folderIndex != kNumNoIndex) - { - if (_db.FolderStartFileIndex[folderIndex] == (CNum)index2) - prop = _db.GetFolderFullPackSize(folderIndex); - /* - else - prop = (UInt64)0; - */ - } - else - prop = (UInt64)0; - } - break; - } - case kpidPosition: { UInt64 v; if (_db.StartPos.GetItem(index2, v)) prop = v; break; } - case kpidCTime: SetPropFromUInt64Def(_db.CTime, index2, prop); break; - case kpidATime: SetPropFromUInt64Def(_db.ATime, index2, prop); break; - case kpidMTime: SetPropFromUInt64Def(_db.MTime, index2, prop); break; - case kpidAttrib: if (item.AttribDefined) prop = item.Attrib; break; - case kpidCRC: if (item.CrcDefined) prop = item.Crc; break; - case kpidEncrypted: prop = IsEncrypted(index2); break; - case kpidIsAnti: prop = _db.IsItemAnti(index2); break; - #ifndef _SFX - case kpidMethod: - { - CNum folderIndex = _db.FileIndexToFolderIndexMap[index2]; - if (folderIndex != kNumNoIndex) - { - const CFolder &folderInfo = _db.Folders[folderIndex]; - UString methodsString; - for (int i = folderInfo.Coders.Size() - 1; i >= 0; i--) - { - const CCoderInfo &coder = folderInfo.Coders[i]; - if (!methodsString.IsEmpty()) - methodsString += L' '; - - UString methodName, propsString; - bool methodIsKnown = FindMethod( - EXTERNAL_CODECS_VARS - coder.MethodID, methodName); - - if (!methodIsKnown) - methodsString += ConvertMethodIdToString(coder.MethodID); - else - { - methodsString += methodName; - if (coder.MethodID == k_Delta && coder.Props.GetCapacity() == 1) - propsString = ConvertUInt32ToString((UInt32)coder.Props[0] + 1); - else if (coder.MethodID == k_LZMA && coder.Props.GetCapacity() == 5) - { - UInt32 dicSize = GetUi32((const Byte *)coder.Props + 1); - propsString = GetStringForSizeValue(dicSize); - } - else if (coder.MethodID == k_LZMA2 && coder.Props.GetCapacity() == 1) - { - Byte p = coder.Props[0]; - UInt32 dicSize = (((UInt32)2 | ((p) & 1)) << ((p) / 2 + 11)); - propsString = GetStringForSizeValue(dicSize); - } - else if (coder.MethodID == k_PPMD && coder.Props.GetCapacity() == 5) - { - Byte order = *(const Byte *)coder.Props; - propsString = L'o'; - propsString += ConvertUInt32ToString(order); - propsString += L":mem"; - UInt32 dicSize = GetUi32((const Byte *)coder.Props + 1); - propsString += GetStringForSizeValue(dicSize); - } - else if (coder.MethodID == k_AES && coder.Props.GetCapacity() >= 1) - { - const Byte *data = (const Byte *)coder.Props; - Byte firstByte = *data++; - UInt32 numCyclesPower = firstByte & 0x3F; - propsString = ConvertUInt32ToString(numCyclesPower); - /* - if ((firstByte & 0xC0) != 0) - { - UInt32 saltSize = (firstByte >> 7) & 1; - UInt32 ivSize = (firstByte >> 6) & 1; - if (coder.Props.GetCapacity() >= 2) - { - Byte secondByte = *data++; - saltSize += (secondByte >> 4); - ivSize += (secondByte & 0x0F); - } - } - */ - } - } - if (!propsString.IsEmpty()) - { - methodsString += L':'; - methodsString += propsString; - } - else if (coder.Props.GetCapacity() > 0) - { - methodsString += L":["; - for (size_t bi = 0; bi < coder.Props.GetCapacity(); bi++) - { - if (bi > 5 && bi + 1 < coder.Props.GetCapacity()) - { - methodsString += L".."; - break; - } - else - AddHexToString(methodsString, coder.Props[bi]); - } - methodsString += L']'; - } - } - prop = methodsString; - } - } - break; - case kpidBlock: - { - CNum folderIndex = _db.FileIndexToFolderIndexMap[index2]; - if (folderIndex != kNumNoIndex) - prop = (UInt32)folderIndex; - } - break; - case kpidPackedSize0: - case kpidPackedSize1: - case kpidPackedSize2: - case kpidPackedSize3: - case kpidPackedSize4: - { - CNum folderIndex = _db.FileIndexToFolderIndexMap[index2]; - if (folderIndex != kNumNoIndex) - { - const CFolder &folderInfo = _db.Folders[folderIndex]; - if (_db.FolderStartFileIndex[folderIndex] == (CNum)index2 && - folderInfo.PackStreams.Size() > (int)(propID - kpidPackedSize0)) - { - prop = _db.GetFolderPackStreamSize(folderIndex, propID - kpidPackedSize0); - } - else - prop = (UInt64)0; - } - else - prop = (UInt64)0; - } - break; - #endif - } - prop.Detach(value); - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CHandler::Open(IInStream *stream, - const UInt64 *maxCheckStartPosition, - IArchiveOpenCallback *openArchiveCallback) -{ - COM_TRY_BEGIN - Close(); - #ifndef _SFX - _fileInfoPopIDs.Clear(); - #endif - try - { - CMyComPtr openArchiveCallbackTemp = openArchiveCallback; - - #ifndef _NO_CRYPTO - CMyComPtr getTextPassword; - if (openArchiveCallback) - { - openArchiveCallbackTemp.QueryInterface( - IID_ICryptoGetTextPassword, &getTextPassword); - } - #endif - CInArchive archive; - RINOK(archive.Open(stream, maxCheckStartPosition)); - #ifndef _NO_CRYPTO - _passwordIsDefined = false; - UString password; - #endif - HRESULT result = archive.ReadDatabase( - EXTERNAL_CODECS_VARS - _db - #ifndef _NO_CRYPTO - , getTextPassword, _passwordIsDefined - #endif - ); - RINOK(result); - _db.Fill(); - _inStream = stream; - } - catch(...) - { - Close(); - return S_FALSE; - } - // _inStream = stream; - #ifndef _SFX - FillPopIDs(); - #endif - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CHandler::Close() -{ - COM_TRY_BEGIN - _inStream.Release(); - _db.Clear(); - return S_OK; - COM_TRY_END -} - -#ifdef __7Z_SET_PROPERTIES -#ifdef EXTRACT_ONLY - -STDMETHODIMP CHandler::SetProperties(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) -{ - COM_TRY_BEGIN - #ifdef COMPRESS_MT - const UInt32 numProcessors = NSystem::GetNumberOfProcessors(); - _numThreads = numProcessors; - #endif - - for (int i = 0; i < numProperties; i++) - { - UString name = names[i]; - name.MakeUpper(); - if (name.IsEmpty()) - return E_INVALIDARG; - const PROPVARIANT &value = values[i]; - UInt32 number; - int index = ParseStringToUInt32(name, number); - if (index == 0) - { - if(name.Left(2).CompareNoCase(L"MT") == 0) - { - #ifdef COMPRESS_MT - RINOK(ParseMtProp(name.Mid(2), value, numProcessors, _numThreads)); - #endif - continue; - } - else - return E_INVALIDARG; - } - } - return S_OK; - COM_TRY_END -} - -#endif -#endif - -IMPL_ISetCompressCodecsInfo - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHandler.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHandler.h deleted file mode 100644 index 9e6d421fd61e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHandler.h +++ /dev/null @@ -1,119 +0,0 @@ -// 7z/Handler.h - -#ifndef __7Z_HANDLER_H -#define __7Z_HANDLER_H - -#include "../../ICoder.h" -#include "../IArchive.h" - -#include "../../Common/CreateCoder.h" - -#ifndef EXTRACT_ONLY -#include "../Common/HandlerOut.h" -#endif - -#include "7zCompressionMode.h" -#include "7zIn.h" - -namespace NArchive { -namespace N7z { - -#ifndef __7Z_SET_PROPERTIES - -#ifdef EXTRACT_ONLY -#ifdef COMPRESS_MT -#define __7Z_SET_PROPERTIES -#endif -#else -#define __7Z_SET_PROPERTIES -#endif - -#endif - - -class CHandler: - #ifndef EXTRACT_ONLY - public NArchive::COutHandler, - #endif - public IInArchive, - #ifdef __7Z_SET_PROPERTIES - public ISetProperties, - #endif - #ifndef EXTRACT_ONLY - public IOutArchive, - #endif - PUBLIC_ISetCompressCodecsInfo - public CMyUnknownImp -{ -public: - MY_QUERYINTERFACE_BEGIN2(IInArchive) - #ifdef __7Z_SET_PROPERTIES - MY_QUERYINTERFACE_ENTRY(ISetProperties) - #endif - #ifndef EXTRACT_ONLY - MY_QUERYINTERFACE_ENTRY(IOutArchive) - #endif - QUERY_ENTRY_ISetCompressCodecsInfo - MY_QUERYINTERFACE_END - MY_ADDREF_RELEASE - - INTERFACE_IInArchive(;) - - #ifdef __7Z_SET_PROPERTIES - STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties); - #endif - - #ifndef EXTRACT_ONLY - INTERFACE_IOutArchive(;) - #endif - - DECL_ISetCompressCodecsInfo - - CHandler(); - -private: - CMyComPtr _inStream; - NArchive::N7z::CArchiveDatabaseEx _db; - #ifndef _NO_CRYPTO - bool _passwordIsDefined; - #endif - - #ifdef EXTRACT_ONLY - - #ifdef COMPRESS_MT - UInt32 _numThreads; - #endif - - UInt32 _crcSize; - - #else - - CRecordVector _binds; - - HRESULT SetCompressionMethod(CCompressionMethodMode &method, - CObjectVector &methodsInfo - #ifdef COMPRESS_MT - , UInt32 numThreads - #endif - ); - - HRESULT SetCompressionMethod( - CCompressionMethodMode &method, - CCompressionMethodMode &headerMethod); - - #endif - - bool IsEncrypted(UInt32 index2) const; - #ifndef _SFX - - CRecordVector _fileInfoPopIDs; - void FillPopIDs(); - - #endif - - DECL_EXTERNAL_CODECS_VARS -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHandlerOut.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHandlerOut.cpp deleted file mode 100644 index f4d0f30766de..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHandlerOut.cpp +++ /dev/null @@ -1,483 +0,0 @@ -// 7zHandlerOut.cpp - -#include "StdAfx.h" - -#include "../../../Windows/PropVariant.h" - -#include "../../../Common/ComTry.h" -#include "../../../Common/StringToInt.h" - -#include "../../ICoder.h" - -#include "../Common/ItemNameUtils.h" -#include "../Common/ParseProperties.h" - -#include "7zHandler.h" -#include "7zOut.h" -#include "7zUpdate.h" - -using namespace NWindows; - -namespace NArchive { -namespace N7z { - -static const wchar_t *kLZMAMethodName = L"LZMA"; -static const wchar_t *kCopyMethod = L"Copy"; -static const wchar_t *kDefaultMethodName = kLZMAMethodName; - -static const UInt32 kLzmaAlgorithmX5 = 1; -static const wchar_t *kLzmaMatchFinderForHeaders = L"BT2"; -static const UInt32 kDictionaryForHeaders = - #ifdef UNDER_CE - 1 << 18 - #else - 1 << 20 - #endif -; -static const UInt32 kNumFastBytesForHeaders = 273; -static const UInt32 kAlgorithmForHeaders = kLzmaAlgorithmX5; - -static inline bool IsCopyMethod(const UString &methodName) - { return (methodName.CompareNoCase(kCopyMethod) == 0); } - -STDMETHODIMP CHandler::GetFileTimeType(UInt32 *type) -{ - *type = NFileTimeType::kWindows; - return S_OK; -} - -HRESULT CHandler::SetCompressionMethod( - CCompressionMethodMode &methodMode, - CCompressionMethodMode &headerMethod) -{ - HRESULT res = SetCompressionMethod(methodMode, _methods - #ifdef COMPRESS_MT - , _numThreads - #endif - ); - RINOK(res); - methodMode.Binds = _binds; - - if (_compressHeaders) - { - // headerMethod.Methods.Add(methodMode.Methods.Back()); - - CObjectVector headerMethodInfoVector; - COneMethodInfo oneMethodInfo; - oneMethodInfo.MethodName = kLZMAMethodName; - { - CProp prop; - prop.Id = NCoderPropID::kMatchFinder; - prop.Value = kLzmaMatchFinderForHeaders; - oneMethodInfo.Props.Add(prop); - } - { - CProp prop; - prop.Id = NCoderPropID::kAlgorithm; - prop.Value = kAlgorithmForHeaders; - oneMethodInfo.Props.Add(prop); - } - { - CProp prop; - prop.Id = NCoderPropID::kNumFastBytes; - prop.Value = (UInt32)kNumFastBytesForHeaders; - oneMethodInfo.Props.Add(prop); - } - { - CProp prop; - prop.Id = NCoderPropID::kDictionarySize; - prop.Value = (UInt32)kDictionaryForHeaders; - oneMethodInfo.Props.Add(prop); - } - headerMethodInfoVector.Add(oneMethodInfo); - HRESULT res = SetCompressionMethod(headerMethod, headerMethodInfoVector - #ifdef COMPRESS_MT - ,1 - #endif - ); - RINOK(res); - } - return S_OK; -} - -HRESULT CHandler::SetCompressionMethod( - CCompressionMethodMode &methodMode, - CObjectVector &methodsInfo - #ifdef COMPRESS_MT - , UInt32 numThreads - #endif - ) -{ - UInt32 level = _level; - - if (methodsInfo.IsEmpty()) - { - COneMethodInfo oneMethodInfo; - oneMethodInfo.MethodName = ((level == 0) ? kCopyMethod : kDefaultMethodName); - methodsInfo.Add(oneMethodInfo); - } - - bool needSolid = false; - for(int i = 0; i < methodsInfo.Size(); i++) - { - COneMethodInfo &oneMethodInfo = methodsInfo[i]; - SetCompressionMethod2(oneMethodInfo - #ifdef COMPRESS_MT - , numThreads - #endif - ); - - if (!IsCopyMethod(oneMethodInfo.MethodName)) - needSolid = true; - - CMethodFull methodFull; - - if (!FindMethod( - EXTERNAL_CODECS_VARS - oneMethodInfo.MethodName, methodFull.Id, methodFull.NumInStreams, methodFull.NumOutStreams)) - return E_INVALIDARG; - methodFull.Props = oneMethodInfo.Props; - methodMode.Methods.Add(methodFull); - - if (!_numSolidBytesDefined) - { - for (int j = 0; j < methodFull.Props.Size(); j++) - { - const CProp &prop = methodFull.Props[j]; - if ((prop.Id == NCoderPropID::kDictionarySize || - prop.Id == NCoderPropID::kUsedMemorySize) && prop.Value.vt == VT_UI4) - { - _numSolidBytes = ((UInt64)prop.Value.ulVal) << 7; - const UInt64 kMinSize = (1 << 24); - if (_numSolidBytes < kMinSize) - _numSolidBytes = kMinSize; - _numSolidBytesDefined = true; - break; - } - } - } - } - - if (!needSolid && !_numSolidBytesDefined) - { - _numSolidBytesDefined = true; - _numSolidBytes = 0; - } - return S_OK; -} - -static HRESULT GetTime(IArchiveUpdateCallback *updateCallback, int index, bool writeTime, PROPID propID, UInt64 &ft, bool &ftDefined) -{ - ft = 0; - ftDefined = false; - if (!writeTime) - return S_OK; - NCOM::CPropVariant prop; - RINOK(updateCallback->GetProperty(index, propID, &prop)); - if (prop.vt == VT_FILETIME) - { - ft = prop.filetime.dwLowDateTime | ((UInt64)prop.filetime.dwHighDateTime << 32); - ftDefined = true; - } - else if (prop.vt != VT_EMPTY) - return E_INVALIDARG; - return S_OK; -} - -STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numItems, - IArchiveUpdateCallback *updateCallback) -{ - COM_TRY_BEGIN - - const CArchiveDatabaseEx *db = 0; - #ifdef _7Z_VOL - if (_volumes.Size() > 1) - return E_FAIL; - const CVolume *volume = 0; - if (_volumes.Size() == 1) - { - volume = &_volumes.Front(); - db = &volume->Database; - } - #else - if (_inStream != 0) - db = &_db; - #endif - - CObjectVector updateItems; - - for (UInt32 i = 0; i < numItems; i++) - { - Int32 newData, newProps; - UInt32 indexInArchive; - if (!updateCallback) - return E_FAIL; - RINOK(updateCallback->GetUpdateItemInfo(i, &newData, &newProps, &indexInArchive)); - CUpdateItem ui; - ui.NewProps = IntToBool(newProps); - ui.NewData = IntToBool(newData); - ui.IndexInArchive = indexInArchive; - ui.IndexInClient = i; - ui.IsAnti = false; - ui.Size = 0; - - if (ui.IndexInArchive != -1) - { - if (db == 0 || ui.IndexInArchive >= db->Files.Size()) - return E_INVALIDARG; - const CFileItem &fi = db->Files[ui.IndexInArchive]; - ui.Name = fi.Name; - ui.IsDir = fi.IsDir; - ui.Size = fi.Size; - ui.IsAnti = db->IsItemAnti(ui.IndexInArchive); - - ui.CTimeDefined = db->CTime.GetItem(ui.IndexInArchive, ui.CTime); - ui.ATimeDefined = db->ATime.GetItem(ui.IndexInArchive, ui.ATime); - ui.MTimeDefined = db->MTime.GetItem(ui.IndexInArchive, ui.MTime); - } - - if (ui.NewProps) - { - bool nameIsDefined; - bool folderStatusIsDefined; - { - NCOM::CPropVariant prop; - RINOK(updateCallback->GetProperty(i, kpidAttrib, &prop)); - if (prop.vt == VT_EMPTY) - ui.AttribDefined = false; - else if (prop.vt != VT_UI4) - return E_INVALIDARG; - else - { - ui.Attrib = prop.ulVal; - ui.AttribDefined = true; - } - } - - // we need MTime to sort files. - RINOK(GetTime(updateCallback, i, WriteCTime, kpidCTime, ui.CTime, ui.CTimeDefined)); - RINOK(GetTime(updateCallback, i, WriteATime, kpidATime, ui.ATime, ui.ATimeDefined)); - RINOK(GetTime(updateCallback, i, true, kpidMTime, ui.MTime, ui.MTimeDefined)); - - { - NCOM::CPropVariant prop; - RINOK(updateCallback->GetProperty(i, kpidPath, &prop)); - if (prop.vt == VT_EMPTY) - nameIsDefined = false; - else if (prop.vt != VT_BSTR) - return E_INVALIDARG; - else - { - ui.Name = NItemName::MakeLegalName(prop.bstrVal); - nameIsDefined = true; - } - } - { - NCOM::CPropVariant prop; - RINOK(updateCallback->GetProperty(i, kpidIsDir, &prop)); - if (prop.vt == VT_EMPTY) - folderStatusIsDefined = false; - else if (prop.vt != VT_BOOL) - return E_INVALIDARG; - else - { - ui.IsDir = (prop.boolVal != VARIANT_FALSE); - folderStatusIsDefined = true; - } - } - - { - NCOM::CPropVariant prop; - RINOK(updateCallback->GetProperty(i, kpidIsAnti, &prop)); - if (prop.vt == VT_EMPTY) - ui.IsAnti = false; - else if (prop.vt != VT_BOOL) - return E_INVALIDARG; - else - ui.IsAnti = (prop.boolVal != VARIANT_FALSE); - } - - if (ui.IsAnti) - { - ui.AttribDefined = false; - - ui.CTimeDefined = false; - ui.ATimeDefined = false; - ui.MTimeDefined = false; - - ui.Size = 0; - } - - if (!folderStatusIsDefined && ui.AttribDefined) - ui.SetDirStatusFromAttrib(); - } - - if (ui.NewData) - { - NCOM::CPropVariant prop; - RINOK(updateCallback->GetProperty(i, kpidSize, &prop)); - if (prop.vt != VT_UI8) - return E_INVALIDARG; - ui.Size = (UInt64)prop.uhVal.QuadPart; - if (ui.Size != 0 && ui.IsAnti) - return E_INVALIDARG; - } - updateItems.Add(ui); - } - - CCompressionMethodMode methodMode, headerMethod; - RINOK(SetCompressionMethod(methodMode, headerMethod)); - #ifdef COMPRESS_MT - methodMode.NumThreads = _numThreads; - headerMethod.NumThreads = 1; - #endif - - CMyComPtr getPassword2; - updateCallback->QueryInterface(IID_ICryptoGetTextPassword2, (void **)&getPassword2); - - if (getPassword2) - { - CMyComBSTR password; - Int32 passwordIsDefined; - RINOK(getPassword2->CryptoGetTextPassword2(&passwordIsDefined, &password)); - methodMode.PasswordIsDefined = IntToBool(passwordIsDefined); - if (methodMode.PasswordIsDefined) - methodMode.Password = password; - } - else - methodMode.PasswordIsDefined = false; - - bool compressMainHeader = _compressHeaders; // check it - - bool encryptHeaders = false; - - if (methodMode.PasswordIsDefined) - { - if (_encryptHeadersSpecified) - encryptHeaders = _encryptHeaders; - #ifndef _NO_CRYPTO - else - encryptHeaders = _passwordIsDefined; - #endif - compressMainHeader = true; - if (encryptHeaders) - { - headerMethod.PasswordIsDefined = methodMode.PasswordIsDefined; - headerMethod.Password = methodMode.Password; - } - } - - if (numItems < 2) - compressMainHeader = false; - - CUpdateOptions options; - options.Method = &methodMode; - options.HeaderMethod = (_compressHeaders || encryptHeaders) ? &headerMethod : 0; - options.UseFilters = _level != 0 && _autoFilter; - options.MaxFilter = _level >= 8; - - options.HeaderOptions.CompressMainHeader = compressMainHeader; - options.HeaderOptions.WriteCTime = WriteCTime; - options.HeaderOptions.WriteATime = WriteATime; - options.HeaderOptions.WriteMTime = WriteMTime; - - options.NumSolidFiles = _numSolidFiles; - options.NumSolidBytes = _numSolidBytes; - options.SolidExtension = _solidExtension; - options.RemoveSfxBlock = _removeSfxBlock; - options.VolumeMode = _volumeMode; - - COutArchive archive; - CArchiveDatabase newDatabase; - - CMyComPtr getPassword; - updateCallback->QueryInterface(IID_ICryptoGetTextPassword, (void **)&getPassword); - - HRESULT res = Update( - EXTERNAL_CODECS_VARS - #ifdef _7Z_VOL - volume ? volume->Stream: 0, - volume ? db : 0, - #else - _inStream, - db, - #endif - updateItems, - archive, newDatabase, outStream, updateCallback, options - #ifndef _NO_CRYPTO - , getPassword - #endif - ); - - RINOK(res); - - updateItems.ClearAndFree(); - - return archive.WriteDatabase(EXTERNAL_CODECS_VARS - newDatabase, options.HeaderMethod, options.HeaderOptions); - - COM_TRY_END -} - -static HRESULT GetBindInfoPart(UString &srcString, UInt32 &coder, UInt32 &stream) -{ - stream = 0; - int index = ParseStringToUInt32(srcString, coder); - if (index == 0) - return E_INVALIDARG; - srcString.Delete(0, index); - if (srcString[0] == 'S') - { - srcString.Delete(0); - int index = ParseStringToUInt32(srcString, stream); - if (index == 0) - return E_INVALIDARG; - srcString.Delete(0, index); - } - return S_OK; -} - -static HRESULT GetBindInfo(UString &srcString, CBind &bind) -{ - RINOK(GetBindInfoPart(srcString, bind.OutCoder, bind.OutStream)); - if (srcString[0] != ':') - return E_INVALIDARG; - srcString.Delete(0); - RINOK(GetBindInfoPart(srcString, bind.InCoder, bind.InStream)); - if (!srcString.IsEmpty()) - return E_INVALIDARG; - return S_OK; -} - -STDMETHODIMP CHandler::SetProperties(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) -{ - COM_TRY_BEGIN - _binds.Clear(); - BeforeSetProperty(); - - for (int i = 0; i < numProperties; i++) - { - UString name = names[i]; - name.MakeUpper(); - if (name.IsEmpty()) - return E_INVALIDARG; - - const PROPVARIANT &value = values[i]; - - if (name[0] == 'B') - { - name.Delete(0); - CBind bind; - RINOK(GetBindInfo(name, bind)); - _binds.Add(bind); - continue; - } - - RINOK(SetProperty(name, value)); - } - - return S_OK; - COM_TRY_END -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHeader.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHeader.cpp deleted file mode 100644 index d93670cc2abf..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHeader.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// 7zHeader.cpp - -#include "StdAfx.h" -#include "7zHeader.h" - -namespace NArchive { -namespace N7z { - -Byte kSignature[kSignatureSize] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}; -#ifdef _7Z_VOL -Byte kFinishSignature[kSignatureSize] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C + 1}; -#endif - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHeader.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHeader.h deleted file mode 100644 index 57f455b81495..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zHeader.h +++ /dev/null @@ -1,97 +0,0 @@ -// 7z/7zHeader.h - -#ifndef __7Z_HEADER_H -#define __7Z_HEADER_H - -#include "../../../Common/Types.h" - -namespace NArchive { -namespace N7z { - -const int kSignatureSize = 6; -extern Byte kSignature[kSignatureSize]; - -// #define _7Z_VOL -// 7z-MultiVolume is not finished yet. -// It can work already, but I still do not like some -// things of that new multivolume format. -// So please keep it commented. - -#ifdef _7Z_VOL -extern Byte kFinishSignature[kSignatureSize]; -#endif - -struct CArchiveVersion -{ - Byte Major; - Byte Minor; -}; - -const Byte kMajorVersion = 0; - -struct CStartHeader -{ - UInt64 NextHeaderOffset; - UInt64 NextHeaderSize; - UInt32 NextHeaderCRC; -}; - -const UInt32 kStartHeaderSize = 20; - -#ifdef _7Z_VOL -struct CFinishHeader: public CStartHeader -{ - UInt64 ArchiveStartOffset; // data offset from end if that struct - UInt64 AdditionalStartBlockSize; // start signature & start header size -}; - -const UInt32 kFinishHeaderSize = kStartHeaderSize + 16; -#endif - -namespace NID -{ - enum EEnum - { - kEnd, - - kHeader, - - kArchiveProperties, - - kAdditionalStreamsInfo, - kMainStreamsInfo, - kFilesInfo, - - kPackInfo, - kUnpackInfo, - kSubStreamsInfo, - - kSize, - kCRC, - - kFolder, - - kCodersUnpackSize, - kNumUnpackStream, - - kEmptyStream, - kEmptyFile, - kAnti, - - kName, - kCTime, - kATime, - kMTime, - kWinAttributes, - kComment, - - kEncodedHeader, - - kStartPos, - kDummy - }; -} - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zIn.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zIn.cpp deleted file mode 100644 index df4c362de817..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zIn.cpp +++ /dev/null @@ -1,1257 +0,0 @@ -// 7zIn.cpp - -#include "StdAfx.h" - -#include "../../../../C/7zCrc.h" -#include "../../../../C/CpuArch.h" - -#include "../../Common/StreamObjects.h" -#include "../../Common/StreamUtils.h" - -#include "7zDecode.h" -#include "7zIn.h" - -#define Get16(p) GetUi16(p) -#define Get32(p) GetUi32(p) -#define Get64(p) GetUi64(p) - -// define FORMAT_7Z_RECOVERY if you want to recover multivolume archives with empty StartHeader -#ifndef _SFX -#define FORMAT_7Z_RECOVERY -#endif - -namespace NArchive { -namespace N7z { - -static void BoolVector_Fill_False(CBoolVector &v, int size) -{ - v.Clear(); - v.Reserve(size); - for (int i = 0; i < size; i++) - v.Add(false); -} - -static bool BoolVector_GetAndSet(CBoolVector &v, UInt32 index) -{ - if (index >= (UInt32)v.Size()) - return true; - bool res = v[index]; - v[index] = true; - return res; -} - -bool CFolder::CheckStructure() const -{ - const int kNumCodersMax = sizeof(UInt32) * 8; // don't change it - const int kMaskSize = sizeof(UInt32) * 8; // it must be >= kNumCodersMax - const int kNumBindsMax = 32; - - if (Coders.Size() > kNumCodersMax || BindPairs.Size() > kNumBindsMax) - return false; - - { - CBoolVector v; - BoolVector_Fill_False(v, BindPairs.Size() + PackStreams.Size()); - - int i; - for (i = 0; i < BindPairs.Size(); i++) - if (BoolVector_GetAndSet(v, BindPairs[i].InIndex)) - return false; - for (i = 0; i < PackStreams.Size(); i++) - if (BoolVector_GetAndSet(v, PackStreams[i])) - return false; - - BoolVector_Fill_False(v, UnpackSizes.Size()); - for (i = 0; i < BindPairs.Size(); i++) - if (BoolVector_GetAndSet(v, BindPairs[i].OutIndex)) - return false; - } - - UInt32 mask[kMaskSize]; - int i; - for (i = 0; i < kMaskSize; i++) - mask[i] = 0; - - { - CIntVector inStreamToCoder, outStreamToCoder; - for (i = 0; i < Coders.Size(); i++) - { - CNum j; - const CCoderInfo &coder = Coders[i]; - for (j = 0; j < coder.NumInStreams; j++) - inStreamToCoder.Add(i); - for (j = 0; j < coder.NumOutStreams; j++) - outStreamToCoder.Add(i); - } - - for (i = 0; i < BindPairs.Size(); i++) - { - const CBindPair &bp = BindPairs[i]; - mask[inStreamToCoder[bp.InIndex]] |= (1 << outStreamToCoder[bp.OutIndex]); - } - } - - for (i = 0; i < kMaskSize; i++) - for (int j = 0; j < kMaskSize; j++) - if (((1 << j) & mask[i]) != 0) - mask[i] |= mask[j]; - - for (i = 0; i < kMaskSize; i++) - if (((1 << i) & mask[i]) != 0) - return false; - - return true; -} - -class CInArchiveException {}; - -static void ThrowException() { throw CInArchiveException(); } -static inline void ThrowEndOfData() { ThrowException(); } -static inline void ThrowUnsupported() { ThrowException(); } -static inline void ThrowIncorrect() { ThrowException(); } -static inline void ThrowUnsupportedVersion() { ThrowException(); } - -/* -class CInArchiveException -{ -public: - enum CCauseType - { - kUnsupportedVersion = 0, - kUnsupported, - kIncorrect, - kEndOfData, - } Cause; - CInArchiveException(CCauseType cause): Cause(cause) {}; -}; - -static void ThrowException(CInArchiveException::CCauseType c) { throw CInArchiveException(c); } -static void ThrowEndOfData() { ThrowException(CInArchiveException::kEndOfData); } -static void ThrowUnsupported() { ThrowException(CInArchiveException::kUnsupported); } -static void ThrowIncorrect() { ThrowException(CInArchiveException::kIncorrect); } -static void ThrowUnsupportedVersion() { ThrowException(CInArchiveException::kUnsupportedVersion); } -*/ - -class CStreamSwitch -{ - CInArchive *_archive; - bool _needRemove; -public: - CStreamSwitch(): _needRemove(false) {} - ~CStreamSwitch() { Remove(); } - void Remove(); - void Set(CInArchive *archive, const Byte *data, size_t size); - void Set(CInArchive *archive, const CByteBuffer &byteBuffer); - void Set(CInArchive *archive, const CObjectVector *dataVector); -}; - -void CStreamSwitch::Remove() -{ - if (_needRemove) - { - _archive->DeleteByteStream(); - _needRemove = false; - } -} - -void CStreamSwitch::Set(CInArchive *archive, const Byte *data, size_t size) -{ - Remove(); - _archive = archive; - _archive->AddByteStream(data, size); - _needRemove = true; -} - -void CStreamSwitch::Set(CInArchive *archive, const CByteBuffer &byteBuffer) -{ - Set(archive, byteBuffer, byteBuffer.GetCapacity()); -} - -void CStreamSwitch::Set(CInArchive *archive, const CObjectVector *dataVector) -{ - Remove(); - Byte external = archive->ReadByte(); - if (external != 0) - { - int dataIndex = (int)archive->ReadNum(); - if (dataIndex < 0 || dataIndex >= dataVector->Size()) - ThrowIncorrect(); - Set(archive, (*dataVector)[dataIndex]); - } -} - -Byte CInByte2::ReadByte() -{ - if (_pos >= _size) - ThrowEndOfData(); - return _buffer[_pos++]; -} - -void CInByte2::ReadBytes(Byte *data, size_t size) -{ - if (size > _size - _pos) - ThrowEndOfData(); - for (size_t i = 0; i < size; i++) - data[i] = _buffer[_pos++]; -} - -void CInByte2::SkipData(UInt64 size) -{ - if (size > _size - _pos) - ThrowEndOfData(); - _pos += (size_t)size; -} - -void CInByte2::SkipData() -{ - SkipData(ReadNumber()); -} - -UInt64 CInByte2::ReadNumber() -{ - if (_pos >= _size) - ThrowEndOfData(); - Byte firstByte = _buffer[_pos++]; - Byte mask = 0x80; - UInt64 value = 0; - for (int i = 0; i < 8; i++) - { - if ((firstByte & mask) == 0) - { - UInt64 highPart = firstByte & (mask - 1); - value += (highPart << (i * 8)); - return value; - } - if (_pos >= _size) - ThrowEndOfData(); - value |= ((UInt64)_buffer[_pos++] << (8 * i)); - mask >>= 1; - } - return value; -} - -CNum CInByte2::ReadNum() -{ - UInt64 value = ReadNumber(); - if (value > kNumMax) - ThrowUnsupported(); - return (CNum)value; -} - -UInt32 CInByte2::ReadUInt32() -{ - if (_pos + 4 > _size) - ThrowEndOfData(); - UInt32 res = Get32(_buffer + _pos); - _pos += 4; - return res; -} - -UInt64 CInByte2::ReadUInt64() -{ - if (_pos + 8 > _size) - ThrowEndOfData(); - UInt64 res = Get64(_buffer + _pos); - _pos += 8; - return res; -} - -void CInByte2::ReadString(UString &s) -{ - const Byte *buf = _buffer + _pos; - size_t rem = (_size - _pos) / 2 * 2; - { - size_t i; - for (i = 0; i < rem; i += 2) - if (buf[i] == 0 && buf[i + 1] == 0) - break; - if (i == rem) - ThrowEndOfData(); - rem = i; - } - int len = (int)(rem / 2); - if (len < 0 || (size_t)len * 2 != rem) - ThrowUnsupported(); - wchar_t *p = s.GetBuffer(len); - int i; - for (i = 0; i < len; i++, buf += 2) - p[i] = (wchar_t)Get16(buf); - s.ReleaseBuffer(len); - _pos += rem + 2; -} - -static inline bool TestSignatureCandidate(const Byte *p) -{ - for (int i = 0; i < kSignatureSize; i++) - if (p[i] != kSignature[i]) - return false; - return (p[0x1A] == 0 && p[0x1B] == 0); -} - -HRESULT CInArchive::FindAndReadSignature(IInStream *stream, const UInt64 *searchHeaderSizeLimit) -{ - RINOK(ReadStream_FALSE(stream, _header, kHeaderSize)); - - if (TestSignatureCandidate(_header)) - return S_OK; - - CByteBuffer byteBuffer; - const UInt32 kBufferSize = (1 << 16); - byteBuffer.SetCapacity(kBufferSize); - Byte *buffer = byteBuffer; - UInt32 numPrevBytes = kHeaderSize - 1; - memcpy(buffer, _header + 1, numPrevBytes); - UInt64 curTestPos = _arhiveBeginStreamPosition + 1; - for (;;) - { - if (searchHeaderSizeLimit != NULL) - if (curTestPos - _arhiveBeginStreamPosition > *searchHeaderSizeLimit) - break; - do - { - UInt32 numReadBytes = kBufferSize - numPrevBytes; - UInt32 processedSize; - RINOK(stream->Read(buffer + numPrevBytes, numReadBytes, &processedSize)); - numPrevBytes += processedSize; - if (processedSize == 0) - return S_FALSE; - } - while (numPrevBytes < kHeaderSize); - UInt32 numTests = numPrevBytes - kHeaderSize + 1; - for (UInt32 pos = 0; pos < numTests; pos++) - { - for (; buffer[pos] != '7' && pos < numTests; pos++); - if (pos == numTests) - break; - if (TestSignatureCandidate(buffer + pos)) - { - memcpy(_header, buffer + pos, kHeaderSize); - curTestPos += pos; - _arhiveBeginStreamPosition = curTestPos; - return stream->Seek(curTestPos + kHeaderSize, STREAM_SEEK_SET, NULL); - } - } - curTestPos += numTests; - numPrevBytes -= numTests; - memmove(buffer, buffer + numTests, numPrevBytes); - } - return S_FALSE; -} - -// S_FALSE means that file is not archive -HRESULT CInArchive::Open(IInStream *stream, const UInt64 *searchHeaderSizeLimit) -{ - HeadersSize = 0; - Close(); - RINOK(stream->Seek(0, STREAM_SEEK_CUR, &_arhiveBeginStreamPosition)) - RINOK(FindAndReadSignature(stream, searchHeaderSizeLimit)); - _stream = stream; - return S_OK; -} - -void CInArchive::Close() -{ - _stream.Release(); -} - -void CInArchive::ReadArchiveProperties(CInArchiveInfo & /* archiveInfo */) -{ - for (;;) - { - if (ReadID() == NID::kEnd) - break; - SkipData(); - } -} - -void CInArchive::GetNextFolderItem(CFolder &folder) -{ - CNum numCoders = ReadNum(); - - folder.Coders.Clear(); - folder.Coders.Reserve((int)numCoders); - CNum numInStreams = 0; - CNum numOutStreams = 0; - CNum i; - for (i = 0; i < numCoders; i++) - { - folder.Coders.Add(CCoderInfo()); - CCoderInfo &coder = folder.Coders.Back(); - - { - Byte mainByte = ReadByte(); - int idSize = (mainByte & 0xF); - Byte longID[15]; - ReadBytes(longID, idSize); - if (idSize > 8) - ThrowUnsupported(); - UInt64 id = 0; - for (int j = 0; j < idSize; j++) - id |= (UInt64)longID[idSize - 1 - j] << (8 * j); - coder.MethodID = id; - - if ((mainByte & 0x10) != 0) - { - coder.NumInStreams = ReadNum(); - coder.NumOutStreams = ReadNum(); - } - else - { - coder.NumInStreams = 1; - coder.NumOutStreams = 1; - } - if ((mainByte & 0x20) != 0) - { - CNum propsSize = ReadNum(); - coder.Props.SetCapacity((size_t)propsSize); - ReadBytes((Byte *)coder.Props, (size_t)propsSize); - } - if ((mainByte & 0x80) != 0) - ThrowUnsupported(); - } - numInStreams += coder.NumInStreams; - numOutStreams += coder.NumOutStreams; - } - - CNum numBindPairs = numOutStreams - 1; - folder.BindPairs.Clear(); - folder.BindPairs.Reserve(numBindPairs); - for (i = 0; i < numBindPairs; i++) - { - CBindPair bp; - bp.InIndex = ReadNum(); - bp.OutIndex = ReadNum(); - folder.BindPairs.Add(bp); - } - - if (numInStreams < numBindPairs) - ThrowUnsupported(); - CNum numPackStreams = numInStreams - numBindPairs; - folder.PackStreams.Reserve(numPackStreams); - if (numPackStreams == 1) - { - for (i = 0; i < numInStreams; i++) - if (folder.FindBindPairForInStream(i) < 0) - { - folder.PackStreams.Add(i); - break; - } - if (folder.PackStreams.Size() != 1) - ThrowUnsupported(); - } - else - for (i = 0; i < numPackStreams; i++) - folder.PackStreams.Add(ReadNum()); -} - -void CInArchive::WaitAttribute(UInt64 attribute) -{ - for (;;) - { - UInt64 type = ReadID(); - if (type == attribute) - return; - if (type == NID::kEnd) - ThrowIncorrect(); - SkipData(); - } -} - -void CInArchive::ReadHashDigests(int numItems, - CBoolVector &digestsDefined, - CRecordVector &digests) -{ - ReadBoolVector2(numItems, digestsDefined); - digests.Clear(); - digests.Reserve(numItems); - for (int i = 0; i < numItems; i++) - { - UInt32 crc = 0; - if (digestsDefined[i]) - crc = ReadUInt32(); - digests.Add(crc); - } -} - -void CInArchive::ReadPackInfo( - UInt64 &dataOffset, - CRecordVector &packSizes, - CBoolVector &packCRCsDefined, - CRecordVector &packCRCs) -{ - dataOffset = ReadNumber(); - CNum numPackStreams = ReadNum(); - - WaitAttribute(NID::kSize); - packSizes.Clear(); - packSizes.Reserve(numPackStreams); - for (CNum i = 0; i < numPackStreams; i++) - packSizes.Add(ReadNumber()); - - UInt64 type; - for (;;) - { - type = ReadID(); - if (type == NID::kEnd) - break; - if (type == NID::kCRC) - { - ReadHashDigests(numPackStreams, packCRCsDefined, packCRCs); - continue; - } - SkipData(); - } - if (packCRCsDefined.IsEmpty()) - { - BoolVector_Fill_False(packCRCsDefined, numPackStreams); - packCRCs.Reserve(numPackStreams); - packCRCs.Clear(); - for (CNum i = 0; i < numPackStreams; i++) - packCRCs.Add(0); - } -} - -void CInArchive::ReadUnpackInfo( - const CObjectVector *dataVector, - CObjectVector &folders) -{ - WaitAttribute(NID::kFolder); - CNum numFolders = ReadNum(); - - { - CStreamSwitch streamSwitch; - streamSwitch.Set(this, dataVector); - folders.Clear(); - folders.Reserve(numFolders); - for (CNum i = 0; i < numFolders; i++) - { - folders.Add(CFolder()); - GetNextFolderItem(folders.Back()); - } - } - - WaitAttribute(NID::kCodersUnpackSize); - - CNum i; - for (i = 0; i < numFolders; i++) - { - CFolder &folder = folders[i]; - CNum numOutStreams = folder.GetNumOutStreams(); - folder.UnpackSizes.Reserve(numOutStreams); - for (CNum j = 0; j < numOutStreams; j++) - folder.UnpackSizes.Add(ReadNumber()); - } - - for (;;) - { - UInt64 type = ReadID(); - if (type == NID::kEnd) - return; - if (type == NID::kCRC) - { - CBoolVector crcsDefined; - CRecordVector crcs; - ReadHashDigests(numFolders, crcsDefined, crcs); - for (i = 0; i < numFolders; i++) - { - CFolder &folder = folders[i]; - folder.UnpackCRCDefined = crcsDefined[i]; - folder.UnpackCRC = crcs[i]; - } - continue; - } - SkipData(); - } -} - -void CInArchive::ReadSubStreamsInfo( - const CObjectVector &folders, - CRecordVector &numUnpackStreamsInFolders, - CRecordVector &unpackSizes, - CBoolVector &digestsDefined, - CRecordVector &digests) -{ - numUnpackStreamsInFolders.Clear(); - numUnpackStreamsInFolders.Reserve(folders.Size()); - UInt64 type; - for (;;) - { - type = ReadID(); - if (type == NID::kNumUnpackStream) - { - for (int i = 0; i < folders.Size(); i++) - numUnpackStreamsInFolders.Add(ReadNum()); - continue; - } - if (type == NID::kCRC || type == NID::kSize) - break; - if (type == NID::kEnd) - break; - SkipData(); - } - - if (numUnpackStreamsInFolders.IsEmpty()) - for (int i = 0; i < folders.Size(); i++) - numUnpackStreamsInFolders.Add(1); - - int i; - for (i = 0; i < numUnpackStreamsInFolders.Size(); i++) - { - // v3.13 incorrectly worked with empty folders - // v4.07: we check that folder is empty - CNum numSubstreams = numUnpackStreamsInFolders[i]; - if (numSubstreams == 0) - continue; - UInt64 sum = 0; - for (CNum j = 1; j < numSubstreams; j++) - if (type == NID::kSize) - { - UInt64 size = ReadNumber(); - unpackSizes.Add(size); - sum += size; - } - unpackSizes.Add(folders[i].GetUnpackSize() - sum); - } - if (type == NID::kSize) - type = ReadID(); - - int numDigests = 0; - int numDigestsTotal = 0; - for (i = 0; i < folders.Size(); i++) - { - CNum numSubstreams = numUnpackStreamsInFolders[i]; - if (numSubstreams != 1 || !folders[i].UnpackCRCDefined) - numDigests += numSubstreams; - numDigestsTotal += numSubstreams; - } - - for (;;) - { - if (type == NID::kCRC) - { - CBoolVector digestsDefined2; - CRecordVector digests2; - ReadHashDigests(numDigests, digestsDefined2, digests2); - int digestIndex = 0; - for (i = 0; i < folders.Size(); i++) - { - CNum numSubstreams = numUnpackStreamsInFolders[i]; - const CFolder &folder = folders[i]; - if (numSubstreams == 1 && folder.UnpackCRCDefined) - { - digestsDefined.Add(true); - digests.Add(folder.UnpackCRC); - } - else - for (CNum j = 0; j < numSubstreams; j++, digestIndex++) - { - digestsDefined.Add(digestsDefined2[digestIndex]); - digests.Add(digests2[digestIndex]); - } - } - } - else if (type == NID::kEnd) - { - if (digestsDefined.IsEmpty()) - { - BoolVector_Fill_False(digestsDefined, numDigestsTotal); - digests.Clear(); - for (int i = 0; i < numDigestsTotal; i++) - digests.Add(0); - } - return; - } - else - SkipData(); - type = ReadID(); - } -} - -void CInArchive::ReadStreamsInfo( - const CObjectVector *dataVector, - UInt64 &dataOffset, - CRecordVector &packSizes, - CBoolVector &packCRCsDefined, - CRecordVector &packCRCs, - CObjectVector &folders, - CRecordVector &numUnpackStreamsInFolders, - CRecordVector &unpackSizes, - CBoolVector &digestsDefined, - CRecordVector &digests) -{ - for (;;) - { - UInt64 type = ReadID(); - if (type > ((UInt32)1 << 30)) - ThrowIncorrect(); - switch((UInt32)type) - { - case NID::kEnd: - return; - case NID::kPackInfo: - { - ReadPackInfo(dataOffset, packSizes, packCRCsDefined, packCRCs); - break; - } - case NID::kUnpackInfo: - { - ReadUnpackInfo(dataVector, folders); - break; - } - case NID::kSubStreamsInfo: - { - ReadSubStreamsInfo(folders, numUnpackStreamsInFolders, - unpackSizes, digestsDefined, digests); - break; - } - default: - ThrowIncorrect(); - } - } -} - -void CInArchive::ReadBoolVector(int numItems, CBoolVector &v) -{ - v.Clear(); - v.Reserve(numItems); - Byte b = 0; - Byte mask = 0; - for (int i = 0; i < numItems; i++) - { - if (mask == 0) - { - b = ReadByte(); - mask = 0x80; - } - v.Add((b & mask) != 0); - mask >>= 1; - } -} - -void CInArchive::ReadBoolVector2(int numItems, CBoolVector &v) -{ - Byte allAreDefined = ReadByte(); - if (allAreDefined == 0) - { - ReadBoolVector(numItems, v); - return; - } - v.Clear(); - v.Reserve(numItems); - for (int i = 0; i < numItems; i++) - v.Add(true); -} - -void CInArchive::ReadUInt64DefVector(const CObjectVector &dataVector, - CUInt64DefVector &v, int numFiles) -{ - ReadBoolVector2(numFiles, v.Defined); - - CStreamSwitch streamSwitch; - streamSwitch.Set(this, &dataVector); - v.Values.Reserve(numFiles); - - for (int i = 0; i < numFiles; i++) - { - UInt64 t = 0; - if (v.Defined[i]) - t = ReadUInt64(); - v.Values.Add(t); - } -} - -HRESULT CInArchive::ReadAndDecodePackedStreams( - DECL_EXTERNAL_CODECS_LOC_VARS - UInt64 baseOffset, - UInt64 &dataOffset, CObjectVector &dataVector - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPassword, bool &passwordIsDefined - #endif - ) -{ - CRecordVector packSizes; - CBoolVector packCRCsDefined; - CRecordVector packCRCs; - CObjectVector folders; - - CRecordVector numUnpackStreamsInFolders; - CRecordVector unpackSizes; - CBoolVector digestsDefined; - CRecordVector digests; - - ReadStreamsInfo(NULL, - dataOffset, - packSizes, - packCRCsDefined, - packCRCs, - folders, - numUnpackStreamsInFolders, - unpackSizes, - digestsDefined, - digests); - - // db.ArchiveInfo.DataStartPosition2 += db.ArchiveInfo.StartPositionAfterHeader; - - CNum packIndex = 0; - CDecoder decoder( - #ifdef _ST_MODE - false - #else - true - #endif - ); - UInt64 dataStartPos = baseOffset + dataOffset; - for (int i = 0; i < folders.Size(); i++) - { - const CFolder &folder = folders[i]; - dataVector.Add(CByteBuffer()); - CByteBuffer &data = dataVector.Back(); - UInt64 unpackSize64 = folder.GetUnpackSize(); - size_t unpackSize = (size_t)unpackSize64; - if (unpackSize != unpackSize64) - ThrowUnsupported(); - data.SetCapacity(unpackSize); - - CSequentialOutStreamImp2 *outStreamSpec = new CSequentialOutStreamImp2; - CMyComPtr outStream = outStreamSpec; - outStreamSpec->Init(data, unpackSize); - - HRESULT result = decoder.Decode( - EXTERNAL_CODECS_LOC_VARS - _stream, dataStartPos, - &packSizes[packIndex], folder, outStream, NULL - #ifndef _NO_CRYPTO - , getTextPassword, passwordIsDefined - #endif - #ifdef COMPRESS_MT - , false, 1 - #endif - ); - RINOK(result); - - if (folder.UnpackCRCDefined) - if (CrcCalc(data, unpackSize) != folder.UnpackCRC) - ThrowIncorrect(); - for (int j = 0; j < folder.PackStreams.Size(); j++) - { - UInt64 packSize = packSizes[packIndex++]; - dataStartPos += packSize; - HeadersSize += packSize; - } - } - return S_OK; -} - -HRESULT CInArchive::ReadHeader( - DECL_EXTERNAL_CODECS_LOC_VARS - CArchiveDatabaseEx &db - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPassword, bool &passwordIsDefined - #endif - ) -{ - UInt64 type = ReadID(); - - if (type == NID::kArchiveProperties) - { - ReadArchiveProperties(db.ArchiveInfo); - type = ReadID(); - } - - CObjectVector dataVector; - - if (type == NID::kAdditionalStreamsInfo) - { - HRESULT result = ReadAndDecodePackedStreams( - EXTERNAL_CODECS_LOC_VARS - db.ArchiveInfo.StartPositionAfterHeader, - db.ArchiveInfo.DataStartPosition2, - dataVector - #ifndef _NO_CRYPTO - , getTextPassword, passwordIsDefined - #endif - ); - RINOK(result); - db.ArchiveInfo.DataStartPosition2 += db.ArchiveInfo.StartPositionAfterHeader; - type = ReadID(); - } - - CRecordVector unpackSizes; - CBoolVector digestsDefined; - CRecordVector digests; - - if (type == NID::kMainStreamsInfo) - { - ReadStreamsInfo(&dataVector, - db.ArchiveInfo.DataStartPosition, - db.PackSizes, - db.PackCRCsDefined, - db.PackCRCs, - db.Folders, - db.NumUnpackStreamsVector, - unpackSizes, - digestsDefined, - digests); - db.ArchiveInfo.DataStartPosition += db.ArchiveInfo.StartPositionAfterHeader; - type = ReadID(); - } - else - { - for (int i = 0; i < db.Folders.Size(); i++) - { - db.NumUnpackStreamsVector.Add(1); - CFolder &folder = db.Folders[i]; - unpackSizes.Add(folder.GetUnpackSize()); - digestsDefined.Add(folder.UnpackCRCDefined); - digests.Add(folder.UnpackCRC); - } - } - - db.Files.Clear(); - - if (type == NID::kEnd) - return S_OK; - if (type != NID::kFilesInfo) - ThrowIncorrect(); - - CNum numFiles = ReadNum(); - db.Files.Reserve(numFiles); - CNum i; - for (i = 0; i < numFiles; i++) - db.Files.Add(CFileItem()); - - db.ArchiveInfo.FileInfoPopIDs.Add(NID::kSize); - if (!db.PackSizes.IsEmpty()) - db.ArchiveInfo.FileInfoPopIDs.Add(NID::kPackInfo); - if (numFiles > 0 && !digests.IsEmpty()) - db.ArchiveInfo.FileInfoPopIDs.Add(NID::kCRC); - - CBoolVector emptyStreamVector; - BoolVector_Fill_False(emptyStreamVector, (int)numFiles); - CBoolVector emptyFileVector; - CBoolVector antiFileVector; - CNum numEmptyStreams = 0; - - for (;;) - { - UInt64 type = ReadID(); - if (type == NID::kEnd) - break; - UInt64 size = ReadNumber(); - size_t ppp = _inByteBack->_pos; - bool addPropIdToList = true; - bool isKnownType = true; - if (type > ((UInt32)1 << 30)) - isKnownType = false; - else switch((UInt32)type) - { - case NID::kName: - { - CStreamSwitch streamSwitch; - streamSwitch.Set(this, &dataVector); - for (int i = 0; i < db.Files.Size(); i++) - _inByteBack->ReadString(db.Files[i].Name); - break; - } - case NID::kWinAttributes: - { - CBoolVector boolVector; - ReadBoolVector2(db.Files.Size(), boolVector); - CStreamSwitch streamSwitch; - streamSwitch.Set(this, &dataVector); - for (i = 0; i < numFiles; i++) - { - CFileItem &file = db.Files[i]; - file.AttribDefined = boolVector[i]; - if (file.AttribDefined) - file.Attrib = ReadUInt32(); - } - break; - } - case NID::kEmptyStream: - { - ReadBoolVector(numFiles, emptyStreamVector); - for (i = 0; i < (CNum)emptyStreamVector.Size(); i++) - if (emptyStreamVector[i]) - numEmptyStreams++; - - BoolVector_Fill_False(emptyFileVector, numEmptyStreams); - BoolVector_Fill_False(antiFileVector, numEmptyStreams); - - break; - } - case NID::kEmptyFile: ReadBoolVector(numEmptyStreams, emptyFileVector); break; - case NID::kAnti: ReadBoolVector(numEmptyStreams, antiFileVector); break; - case NID::kStartPos: ReadUInt64DefVector(dataVector, db.StartPos, (int)numFiles); break; - case NID::kCTime: ReadUInt64DefVector(dataVector, db.CTime, (int)numFiles); break; - case NID::kATime: ReadUInt64DefVector(dataVector, db.ATime, (int)numFiles); break; - case NID::kMTime: ReadUInt64DefVector(dataVector, db.MTime, (int)numFiles); break; - case NID::kDummy: - { - for (UInt64 j = 0; j < size; j++) - if (ReadByte() != 0) - ThrowIncorrect(); - addPropIdToList = false; - break; - } - default: - addPropIdToList = isKnownType = false; - } - if (isKnownType) - { - if(addPropIdToList) - db.ArchiveInfo.FileInfoPopIDs.Add(type); - } - else - SkipData(size); - bool checkRecordsSize = (db.ArchiveInfo.Version.Major > 0 || - db.ArchiveInfo.Version.Minor > 2); - if (checkRecordsSize && _inByteBack->_pos - ppp != size) - ThrowIncorrect(); - } - - CNum emptyFileIndex = 0; - CNum sizeIndex = 0; - - CNum numAntiItems = 0; - for (i = 0; i < numEmptyStreams; i++) - if (antiFileVector[i]) - numAntiItems++; - - for (i = 0; i < numFiles; i++) - { - CFileItem &file = db.Files[i]; - bool isAnti; - file.HasStream = !emptyStreamVector[i]; - if (file.HasStream) - { - file.IsDir = false; - isAnti = false; - file.Size = unpackSizes[sizeIndex]; - file.Crc = digests[sizeIndex]; - file.CrcDefined = digestsDefined[sizeIndex]; - sizeIndex++; - } - else - { - file.IsDir = !emptyFileVector[emptyFileIndex]; - isAnti = antiFileVector[emptyFileIndex]; - emptyFileIndex++; - file.Size = 0; - file.CrcDefined = false; - } - if (numAntiItems != 0) - db.IsAnti.Add(isAnti); - } - return S_OK; -} - - -void CArchiveDatabaseEx::FillFolderStartPackStream() -{ - FolderStartPackStreamIndex.Clear(); - FolderStartPackStreamIndex.Reserve(Folders.Size()); - CNum startPos = 0; - for (int i = 0; i < Folders.Size(); i++) - { - FolderStartPackStreamIndex.Add(startPos); - startPos += (CNum)Folders[i].PackStreams.Size(); - } -} - -void CArchiveDatabaseEx::FillStartPos() -{ - PackStreamStartPositions.Clear(); - PackStreamStartPositions.Reserve(PackSizes.Size()); - UInt64 startPos = 0; - for (int i = 0; i < PackSizes.Size(); i++) - { - PackStreamStartPositions.Add(startPos); - startPos += PackSizes[i]; - } -} - -void CArchiveDatabaseEx::FillFolderStartFileIndex() -{ - FolderStartFileIndex.Clear(); - FolderStartFileIndex.Reserve(Folders.Size()); - FileIndexToFolderIndexMap.Clear(); - FileIndexToFolderIndexMap.Reserve(Files.Size()); - - int folderIndex = 0; - CNum indexInFolder = 0; - for (int i = 0; i < Files.Size(); i++) - { - const CFileItem &file = Files[i]; - bool emptyStream = !file.HasStream; - if (emptyStream && indexInFolder == 0) - { - FileIndexToFolderIndexMap.Add(kNumNoIndex); - continue; - } - if (indexInFolder == 0) - { - // v3.13 incorrectly worked with empty folders - // v4.07: Loop for skipping empty folders - for (;;) - { - if (folderIndex >= Folders.Size()) - ThrowIncorrect(); - FolderStartFileIndex.Add(i); // check it - if (NumUnpackStreamsVector[folderIndex] != 0) - break; - folderIndex++; - } - } - FileIndexToFolderIndexMap.Add(folderIndex); - if (emptyStream) - continue; - indexInFolder++; - if (indexInFolder >= NumUnpackStreamsVector[folderIndex]) - { - folderIndex++; - indexInFolder = 0; - } - } -} - -HRESULT CInArchive::ReadDatabase2( - DECL_EXTERNAL_CODECS_LOC_VARS - CArchiveDatabaseEx &db - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPassword, bool &passwordIsDefined - #endif - ) -{ - db.Clear(); - db.ArchiveInfo.StartPosition = _arhiveBeginStreamPosition; - - db.ArchiveInfo.Version.Major = _header[6]; - db.ArchiveInfo.Version.Minor = _header[7]; - - if (db.ArchiveInfo.Version.Major != kMajorVersion) - ThrowUnsupportedVersion(); - - UInt32 crcFromArchive = Get32(_header + 8); - UInt64 nextHeaderOffset = Get64(_header + 0xC); - UInt64 nextHeaderSize = Get64(_header + 0x14); - UInt32 nextHeaderCRC = Get32(_header + 0x1C); - UInt32 crc = CrcCalc(_header + 0xC, 20); - - #ifdef FORMAT_7Z_RECOVERY - if (crcFromArchive == 0 && nextHeaderOffset == 0 && nextHeaderSize == 0 && nextHeaderCRC == 0) - { - UInt64 cur, cur2; - RINOK(_stream->Seek(0, STREAM_SEEK_CUR, &cur)); - const int kCheckSize = 500; - Byte buf[kCheckSize]; - RINOK(_stream->Seek(0, STREAM_SEEK_END, &cur2)); - int checkSize = kCheckSize; - if (cur2 - cur < kCheckSize) - checkSize = (int)(cur2 - cur); - RINOK(_stream->Seek(-checkSize, STREAM_SEEK_END, &cur2)); - - RINOK(ReadStream_FALSE(_stream, buf, (size_t)checkSize)); - - int i; - for (i = (int)checkSize - 2; i >= 0; i--) - if (buf[i] == 0x17 && buf[i + 1] == 0x6 || buf[i] == 0x01 && buf[i + 1] == 0x04) - break; - if (i < 0) - return S_FALSE; - nextHeaderSize = checkSize - i; - nextHeaderOffset = cur2 - cur + i; - nextHeaderCRC = CrcCalc(buf + i, (size_t)nextHeaderSize); - RINOK(_stream->Seek(cur, STREAM_SEEK_SET, NULL)); - } - #endif - - #ifdef FORMAT_7Z_RECOVERY - crcFromArchive = crc; - #endif - - db.ArchiveInfo.StartPositionAfterHeader = _arhiveBeginStreamPosition + kHeaderSize; - - if (crc != crcFromArchive) - ThrowIncorrect(); - - if (nextHeaderSize == 0) - return S_OK; - - if (nextHeaderSize > (UInt64)0xFFFFFFFF) - return S_FALSE; - - RINOK(_stream->Seek(nextHeaderOffset, STREAM_SEEK_CUR, NULL)); - - CByteBuffer buffer2; - buffer2.SetCapacity((size_t)nextHeaderSize); - - RINOK(ReadStream_FALSE(_stream, buffer2, (size_t)nextHeaderSize)); - HeadersSize += kHeaderSize + nextHeaderSize; - db.PhySize = kHeaderSize + nextHeaderOffset + nextHeaderSize; - - if (CrcCalc(buffer2, (UInt32)nextHeaderSize) != nextHeaderCRC) - ThrowIncorrect(); - - CStreamSwitch streamSwitch; - streamSwitch.Set(this, buffer2); - - CObjectVector dataVector; - - UInt64 type = ReadID(); - if (type != NID::kHeader) - { - if (type != NID::kEncodedHeader) - ThrowIncorrect(); - HRESULT result = ReadAndDecodePackedStreams( - EXTERNAL_CODECS_LOC_VARS - db.ArchiveInfo.StartPositionAfterHeader, - db.ArchiveInfo.DataStartPosition2, - dataVector - #ifndef _NO_CRYPTO - , getTextPassword, passwordIsDefined - #endif - ); - RINOK(result); - if (dataVector.Size() == 0) - return S_OK; - if (dataVector.Size() > 1) - ThrowIncorrect(); - streamSwitch.Remove(); - streamSwitch.Set(this, dataVector.Front()); - if (ReadID() != NID::kHeader) - ThrowIncorrect(); - } - - db.HeadersSize = HeadersSize; - - return ReadHeader( - EXTERNAL_CODECS_LOC_VARS - db - #ifndef _NO_CRYPTO - , getTextPassword, passwordIsDefined - #endif - ); -} - -HRESULT CInArchive::ReadDatabase( - DECL_EXTERNAL_CODECS_LOC_VARS - CArchiveDatabaseEx &db - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPassword, bool &passwordIsDefined - #endif - ) -{ - try - { - return ReadDatabase2( - EXTERNAL_CODECS_LOC_VARS db - #ifndef _NO_CRYPTO - , getTextPassword, passwordIsDefined - #endif - ); - } - catch(CInArchiveException &) { return S_FALSE; } -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zIn.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zIn.h deleted file mode 100644 index b82a020cdfc6..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zIn.h +++ /dev/null @@ -1,245 +0,0 @@ -// 7zIn.h - -#ifndef __7Z_IN_H -#define __7Z_IN_H - -#include "../../../Common/MyCom.h" - -#include "../../IPassword.h" -#include "../../IStream.h" - -#include "../../Common/CreateCoder.h" -#include "../../Common/InBuffer.h" - -#include "7zItem.h" - -namespace NArchive { -namespace N7z { - -struct CInArchiveInfo -{ - CArchiveVersion Version; - UInt64 StartPosition; - UInt64 StartPositionAfterHeader; - UInt64 DataStartPosition; - UInt64 DataStartPosition2; - CRecordVector FileInfoPopIDs; - void Clear() - { - FileInfoPopIDs.Clear(); - } -}; - -struct CArchiveDatabaseEx: public CArchiveDatabase -{ - CInArchiveInfo ArchiveInfo; - CRecordVector PackStreamStartPositions; - CRecordVector FolderStartPackStreamIndex; - CRecordVector FolderStartFileIndex; - CRecordVector FileIndexToFolderIndexMap; - - UInt64 HeadersSize; - UInt64 PhySize; - - void Clear() - { - CArchiveDatabase::Clear(); - ArchiveInfo.Clear(); - PackStreamStartPositions.Clear(); - FolderStartPackStreamIndex.Clear(); - FolderStartFileIndex.Clear(); - FileIndexToFolderIndexMap.Clear(); - - HeadersSize = 0; - PhySize = 0; - } - - void FillFolderStartPackStream(); - void FillStartPos(); - void FillFolderStartFileIndex(); - - void Fill() - { - FillFolderStartPackStream(); - FillStartPos(); - FillFolderStartFileIndex(); - } - - UInt64 GetFolderStreamPos(int folderIndex, int indexInFolder) const - { - return ArchiveInfo.DataStartPosition + - PackStreamStartPositions[FolderStartPackStreamIndex[folderIndex] + indexInFolder]; - } - - UInt64 GetFolderFullPackSize(int folderIndex) const - { - CNum packStreamIndex = FolderStartPackStreamIndex[folderIndex]; - const CFolder &folder = Folders[folderIndex]; - UInt64 size = 0; - for (int i = 0; i < folder.PackStreams.Size(); i++) - size += PackSizes[packStreamIndex + i]; - return size; - } - - UInt64 GetFolderPackStreamSize(int folderIndex, int streamIndex) const - { - return PackSizes[FolderStartPackStreamIndex[folderIndex] + streamIndex]; - } - - UInt64 GetFilePackSize(CNum fileIndex) const - { - CNum folderIndex = FileIndexToFolderIndexMap[fileIndex]; - if (folderIndex != kNumNoIndex) - if (FolderStartFileIndex[folderIndex] == fileIndex) - return GetFolderFullPackSize(folderIndex); - return 0; - } -}; - -class CInByte2 -{ - const Byte *_buffer; - size_t _size; -public: - size_t _pos; - void Init(const Byte *buffer, size_t size) - { - _buffer = buffer; - _size = size; - _pos = 0; - } - Byte ReadByte(); - void ReadBytes(Byte *data, size_t size); - void SkipData(UInt64 size); - void SkipData(); - UInt64 ReadNumber(); - CNum ReadNum(); - UInt32 ReadUInt32(); - UInt64 ReadUInt64(); - void ReadString(UString &s); -}; - -class CStreamSwitch; - -const UInt32 kHeaderSize = 32; - -class CInArchive -{ - friend class CStreamSwitch; - - CMyComPtr _stream; - - CObjectVector _inByteVector; - CInByte2 *_inByteBack; - - UInt64 _arhiveBeginStreamPosition; - - Byte _header[kHeaderSize]; - - UInt64 HeadersSize; - - void AddByteStream(const Byte *buffer, size_t size) - { - _inByteVector.Add(CInByte2()); - _inByteBack = &_inByteVector.Back(); - _inByteBack->Init(buffer, size); - } - - void DeleteByteStream() - { - _inByteVector.DeleteBack(); - if (!_inByteVector.IsEmpty()) - _inByteBack = &_inByteVector.Back(); - } - -private: - HRESULT FindAndReadSignature(IInStream *stream, const UInt64 *searchHeaderSizeLimit); - - void ReadBytes(Byte *data, size_t size) { _inByteBack->ReadBytes(data, size); } - Byte ReadByte() { return _inByteBack->ReadByte(); } - UInt64 ReadNumber() { return _inByteBack->ReadNumber(); } - CNum ReadNum() { return _inByteBack->ReadNum(); } - UInt64 ReadID() { return _inByteBack->ReadNumber(); } - UInt32 ReadUInt32() { return _inByteBack->ReadUInt32(); } - UInt64 ReadUInt64() { return _inByteBack->ReadUInt64(); } - void SkipData(UInt64 size) { _inByteBack->SkipData(size); } - void SkipData() { _inByteBack->SkipData(); } - void WaitAttribute(UInt64 attribute); - - void ReadArchiveProperties(CInArchiveInfo &archiveInfo); - void GetNextFolderItem(CFolder &itemInfo); - void ReadHashDigests(int numItems, - CBoolVector &digestsDefined, CRecordVector &digests); - - void ReadPackInfo( - UInt64 &dataOffset, - CRecordVector &packSizes, - CBoolVector &packCRCsDefined, - CRecordVector &packCRCs); - - void ReadUnpackInfo( - const CObjectVector *dataVector, - CObjectVector &folders); - - void ReadSubStreamsInfo( - const CObjectVector &folders, - CRecordVector &numUnpackStreamsInFolders, - CRecordVector &unpackSizes, - CBoolVector &digestsDefined, - CRecordVector &digests); - - void ReadStreamsInfo( - const CObjectVector *dataVector, - UInt64 &dataOffset, - CRecordVector &packSizes, - CBoolVector &packCRCsDefined, - CRecordVector &packCRCs, - CObjectVector &folders, - CRecordVector &numUnpackStreamsInFolders, - CRecordVector &unpackSizes, - CBoolVector &digestsDefined, - CRecordVector &digests); - - - void ReadBoolVector(int numItems, CBoolVector &v); - void ReadBoolVector2(int numItems, CBoolVector &v); - void ReadUInt64DefVector(const CObjectVector &dataVector, - CUInt64DefVector &v, int numFiles); - HRESULT ReadAndDecodePackedStreams( - DECL_EXTERNAL_CODECS_LOC_VARS - UInt64 baseOffset, UInt64 &dataOffset, - CObjectVector &dataVector - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPassword, bool &passwordIsDefined - #endif - ); - HRESULT ReadHeader( - DECL_EXTERNAL_CODECS_LOC_VARS - CArchiveDatabaseEx &db - #ifndef _NO_CRYPTO - ,ICryptoGetTextPassword *getTextPassword, bool &passwordIsDefined - #endif - ); - HRESULT ReadDatabase2( - DECL_EXTERNAL_CODECS_LOC_VARS - CArchiveDatabaseEx &db - #ifndef _NO_CRYPTO - ,ICryptoGetTextPassword *getTextPassword, bool &passwordIsDefined - #endif - ); -public: - HRESULT Open(IInStream *stream, const UInt64 *searchHeaderSizeLimit); // S_FALSE means is not archive - void Close(); - - HRESULT ReadDatabase( - DECL_EXTERNAL_CODECS_LOC_VARS - CArchiveDatabaseEx &db - #ifndef _NO_CRYPTO - ,ICryptoGetTextPassword *getTextPassword, bool &passwordIsDefined - #endif - ); -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zItem.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zItem.h deleted file mode 100644 index 6cc9ccc55284..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zItem.h +++ /dev/null @@ -1,258 +0,0 @@ -// 7zItem.h - -#ifndef __7Z_ITEM_H -#define __7Z_ITEM_H - -#include "../../../Common/Buffer.h" -#include "../../../Common/MyString.h" - -#include "../../Common/MethodId.h" - -#include "7zHeader.h" - -namespace NArchive { -namespace N7z { - -typedef UInt32 CNum; -const CNum kNumMax = 0x7FFFFFFF; -const CNum kNumNoIndex = 0xFFFFFFFF; - -struct CCoderInfo -{ - CMethodId MethodID; - CByteBuffer Props; - CNum NumInStreams; - CNum NumOutStreams; - bool IsSimpleCoder() const { return (NumInStreams == 1) && (NumOutStreams == 1); } -}; - -struct CBindPair -{ - CNum InIndex; - CNum OutIndex; -}; - -struct CFolder -{ - CObjectVector Coders; - CRecordVector BindPairs; - CRecordVector PackStreams; - CRecordVector UnpackSizes; - UInt32 UnpackCRC; - bool UnpackCRCDefined; - - CFolder(): UnpackCRCDefined(false) {} - - UInt64 GetUnpackSize() const // test it - { - if (UnpackSizes.IsEmpty()) - return 0; - for (int i = UnpackSizes.Size() - 1; i >= 0; i--) - if (FindBindPairForOutStream(i) < 0) - return UnpackSizes[i]; - throw 1; - } - - CNum GetNumOutStreams() const - { - CNum result = 0; - for (int i = 0; i < Coders.Size(); i++) - result += Coders[i].NumOutStreams; - return result; - } - - int FindBindPairForInStream(CNum inStreamIndex) const - { - for(int i = 0; i < BindPairs.Size(); i++) - if (BindPairs[i].InIndex == inStreamIndex) - return i; - return -1; - } - int FindBindPairForOutStream(CNum outStreamIndex) const - { - for(int i = 0; i < BindPairs.Size(); i++) - if (BindPairs[i].OutIndex == outStreamIndex) - return i; - return -1; - } - int FindPackStreamArrayIndex(CNum inStreamIndex) const - { - for(int i = 0; i < PackStreams.Size(); i++) - if (PackStreams[i] == inStreamIndex) - return i; - return -1; - } - - bool CheckStructure() const; -}; - -struct CUInt64DefVector -{ - CRecordVector Values; - CRecordVector Defined; - - void Clear() - { - Values.Clear(); - Defined.Clear(); - } - - void ReserveDown() - { - Values.ReserveDown(); - Values.ReserveDown(); - } - - bool GetItem(int index, UInt64 &value) const - { - if (index < Defined.Size() && Defined[index]) - { - value = Values[index]; - return true; - } - value = 0; - return false; - } - - void SetItem(int index, bool defined, UInt64 value) - { - while (index >= Defined.Size()) - Defined.Add(false); - Defined[index] = defined; - if (!defined) - return; - while (index >= Values.Size()) - Values.Add(0); - Values[index] = value; - } - - bool CheckSize(int size) const { return Defined.Size() == size || Defined.Size() == 0; } -}; - -struct CFileItem -{ - UInt64 Size; - UInt32 Attrib; - UInt32 Crc; - UString Name; - - bool HasStream; // Test it !!! it means that there is - // stream in some folder. It can be empty stream - bool IsDir; - bool CrcDefined; - bool AttribDefined; - - CFileItem(): - HasStream(true), - IsDir(false), - CrcDefined(false), - AttribDefined(false) - {} - void SetAttrib(UInt32 attrib) - { - AttribDefined = true; - Attrib = attrib; - } -}; - -struct CFileItem2 -{ - UInt64 CTime; - UInt64 ATime; - UInt64 MTime; - UInt64 StartPos; - bool CTimeDefined; - bool ATimeDefined; - bool MTimeDefined; - bool StartPosDefined; - bool IsAnti; -}; - -struct CArchiveDatabase -{ - CRecordVector PackSizes; - CRecordVector PackCRCsDefined; - CRecordVector PackCRCs; - CObjectVector Folders; - CRecordVector NumUnpackStreamsVector; - CObjectVector Files; - - CUInt64DefVector CTime; - CUInt64DefVector ATime; - CUInt64DefVector MTime; - CUInt64DefVector StartPos; - CRecordVector IsAnti; - - void Clear() - { - PackSizes.Clear(); - PackCRCsDefined.Clear(); - PackCRCs.Clear(); - Folders.Clear(); - NumUnpackStreamsVector.Clear(); - Files.Clear(); - CTime.Clear(); - ATime.Clear(); - MTime.Clear(); - StartPos.Clear(); - IsAnti.Clear(); - } - - void ReserveDown() - { - PackSizes.ReserveDown(); - PackCRCsDefined.ReserveDown(); - PackCRCs.ReserveDown(); - Folders.ReserveDown(); - NumUnpackStreamsVector.ReserveDown(); - Files.ReserveDown(); - CTime.ReserveDown(); - ATime.ReserveDown(); - MTime.ReserveDown(); - StartPos.ReserveDown(); - IsAnti.ReserveDown(); - } - - bool IsEmpty() const - { - return (PackSizes.IsEmpty() && - PackCRCsDefined.IsEmpty() && - PackCRCs.IsEmpty() && - Folders.IsEmpty() && - NumUnpackStreamsVector.IsEmpty() && - Files.IsEmpty()); - } - - bool CheckNumFiles() const - { - int size = Files.Size(); - return ( - CTime.CheckSize(size) && - ATime.CheckSize(size) && - MTime.CheckSize(size) && - StartPos.CheckSize(size) && - (size == IsAnti.Size() || IsAnti.Size() == 0)); - } - - bool IsSolid() const - { - for (int i = 0; i < NumUnpackStreamsVector.Size(); i++) - if (NumUnpackStreamsVector[i] > 1) - return true; - return false; - } - bool IsItemAnti(int index) const { return (index < IsAnti.Size() && IsAnti[index]); } - void SetItemAnti(int index, bool isAnti) - { - while (index >= IsAnti.Size()) - IsAnti.Add(false); - IsAnti[index] = isAnti; - } - - void GetFile(int index, CFileItem &file, CFileItem2 &file2) const; - void AddFile(const CFileItem &file, const CFileItem2 &file2); -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zOut.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zOut.cpp deleted file mode 100644 index b79089e2fc66..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zOut.cpp +++ /dev/null @@ -1,864 +0,0 @@ -// 7zOut.cpp - -#include "StdAfx.h" - -#include "../../../../C/7zCrc.h" - -#include "../../../Common/AutoPtr.h" - -#include "../../Common/StreamObjects.h" - -#include "7zOut.h" - -static HRESULT WriteBytes(ISequentialOutStream *stream, const void *data, size_t size) -{ - while (size > 0) - { - UInt32 curSize = (UInt32)MyMin(size, (size_t)0xFFFFFFFF); - UInt32 processedSize; - RINOK(stream->Write(data, curSize, &processedSize)); - if (processedSize == 0) - return E_FAIL; - data = (const void *)((const Byte *)data + processedSize); - size -= processedSize; - } - return S_OK; -} - -namespace NArchive { -namespace N7z { - -HRESULT COutArchive::WriteDirect(const void *data, UInt32 size) -{ - return ::WriteBytes(SeqStream, data, size); -} - -HRESULT COutArchive::WriteSignature() -{ - Byte buf[8]; - memcpy(buf, kSignature, kSignatureSize); - buf[kSignatureSize] = kMajorVersion; - buf[kSignatureSize + 1] = 3; - return WriteDirect(buf, 8); -} - -#ifdef _7Z_VOL -HRESULT COutArchive::WriteFinishSignature() -{ - RINOK(WriteDirect(kFinishSignature, kSignatureSize)); - CArchiveVersion av; - av.Major = kMajorVersion; - av.Minor = 2; - RINOK(WriteDirectByte(av.Major)); - return WriteDirectByte(av.Minor); -} -#endif - -static void SetUInt32(Byte *p, UInt32 d) -{ - for (int i = 0; i < 4; i++, d >>= 8) - p[i] = (Byte)d; -} - -static void SetUInt64(Byte *p, UInt64 d) -{ - for (int i = 0; i < 8; i++, d >>= 8) - p[i] = (Byte)d; -} - -HRESULT COutArchive::WriteStartHeader(const CStartHeader &h) -{ - Byte buf[24]; - SetUInt64(buf + 4, h.NextHeaderOffset); - SetUInt64(buf + 12, h.NextHeaderSize); - SetUInt32(buf + 20, h.NextHeaderCRC); - SetUInt32(buf, CrcCalc(buf + 4, 20)); - return WriteDirect(buf, 24); -} - -#ifdef _7Z_VOL -HRESULT COutArchive::WriteFinishHeader(const CFinishHeader &h) -{ - CCRC crc; - crc.UpdateUInt64(h.NextHeaderOffset); - crc.UpdateUInt64(h.NextHeaderSize); - crc.UpdateUInt32(h.NextHeaderCRC); - crc.UpdateUInt64(h.ArchiveStartOffset); - crc.UpdateUInt64(h.AdditionalStartBlockSize); - RINOK(WriteDirectUInt32(crc.GetDigest())); - RINOK(WriteDirectUInt64(h.NextHeaderOffset)); - RINOK(WriteDirectUInt64(h.NextHeaderSize)); - RINOK(WriteDirectUInt32(h.NextHeaderCRC)); - RINOK(WriteDirectUInt64(h.ArchiveStartOffset)); - return WriteDirectUInt64(h.AdditionalStartBlockSize); -} -#endif - -HRESULT COutArchive::Create(ISequentialOutStream *stream, bool endMarker) -{ - Close(); - #ifdef _7Z_VOL - // endMarker = false; - _endMarker = endMarker; - #endif - SeqStream = stream; - if (!endMarker) - { - SeqStream.QueryInterface(IID_IOutStream, &Stream); - if (!Stream) - { - return E_NOTIMPL; - // endMarker = true; - } - } - #ifdef _7Z_VOL - if (endMarker) - { - /* - CStartHeader sh; - sh.NextHeaderOffset = (UInt32)(Int32)-1; - sh.NextHeaderSize = (UInt32)(Int32)-1; - sh.NextHeaderCRC = 0; - WriteStartHeader(sh); - */ - } - else - #endif - { - if (!Stream) - return E_FAIL; - RINOK(WriteSignature()); - RINOK(Stream->Seek(0, STREAM_SEEK_CUR, &_prefixHeaderPos)); - } - return S_OK; -} - -void COutArchive::Close() -{ - SeqStream.Release(); - Stream.Release(); -} - -HRESULT COutArchive::SkipPrefixArchiveHeader() -{ - #ifdef _7Z_VOL - if (_endMarker) - return S_OK; - #endif - return Stream->Seek(24, STREAM_SEEK_CUR, NULL); -} - -UInt64 COutArchive::GetPos() const -{ - if (_countMode) - return _countSize; - if (_writeToStream) - return _outByte.GetProcessedSize(); - return _outByte2.GetPos(); -} - -void COutArchive::WriteBytes(const void *data, size_t size) -{ - if (_countMode) - _countSize += size; - else if (_writeToStream) - { - _outByte.WriteBytes(data, size); - _crc = CrcUpdate(_crc, data, size); - } - else - _outByte2.WriteBytes(data, size); -} - -void COutArchive::WriteByte(Byte b) -{ - if (_countMode) - _countSize++; - else if (_writeToStream) - { - _outByte.WriteByte(b); - _crc = CRC_UPDATE_BYTE(_crc, b); - } - else - _outByte2.WriteByte(b); -} - -void COutArchive::WriteUInt32(UInt32 value) -{ - for (int i = 0; i < 4; i++) - { - WriteByte((Byte)value); - value >>= 8; - } -} - -void COutArchive::WriteUInt64(UInt64 value) -{ - for (int i = 0; i < 8; i++) - { - WriteByte((Byte)value); - value >>= 8; - } -} - -void COutArchive::WriteNumber(UInt64 value) -{ - Byte firstByte = 0; - Byte mask = 0x80; - int i; - for (i = 0; i < 8; i++) - { - if (value < ((UInt64(1) << ( 7 * (i + 1))))) - { - firstByte |= Byte(value >> (8 * i)); - break; - } - firstByte |= mask; - mask >>= 1; - } - WriteByte(firstByte); - for (;i > 0; i--) - { - WriteByte((Byte)value); - value >>= 8; - } -} - -static UInt32 GetBigNumberSize(UInt64 value) -{ - int i; - for (i = 1; i < 9; i++) - if (value < (((UInt64)1 << (i * 7)))) - break; - return i; -} - -#ifdef _7Z_VOL -UInt32 COutArchive::GetVolHeadersSize(UInt64 dataSize, int nameLength, bool props) -{ - UInt32 result = GetBigNumberSize(dataSize) * 2 + 41; - if (nameLength != 0) - { - nameLength = (nameLength + 1) * 2; - result += nameLength + GetBigNumberSize(nameLength) + 2; - } - if (props) - { - result += 20; - } - if (result >= 128) - result++; - result += kSignatureSize + 2 + kFinishHeaderSize; - return result; -} - -UInt64 COutArchive::GetVolPureSize(UInt64 volSize, int nameLength, bool props) -{ - UInt32 headersSizeBase = COutArchive::GetVolHeadersSize(1, nameLength, props); - int testSize; - if (volSize > headersSizeBase) - testSize = volSize - headersSizeBase; - else - testSize = 1; - UInt32 headersSize = COutArchive::GetVolHeadersSize(testSize, nameLength, props); - UInt64 pureSize = 1; - if (volSize > headersSize) - pureSize = volSize - headersSize; - return pureSize; -} -#endif - -void COutArchive::WriteFolder(const CFolder &folder) -{ - WriteNumber(folder.Coders.Size()); - int i; - for (i = 0; i < folder.Coders.Size(); i++) - { - const CCoderInfo &coder = folder.Coders[i]; - { - size_t propsSize = coder.Props.GetCapacity(); - - UInt64 id = coder.MethodID; - int idSize; - for (idSize = 1; idSize < sizeof(id); idSize++) - if ((id >> (8 * idSize)) == 0) - break; - BYTE longID[15]; - for (int t = idSize - 1; t >= 0 ; t--, id >>= 8) - longID[t] = (Byte)(id & 0xFF); - Byte b; - b = (Byte)(idSize & 0xF); - bool isComplex = !coder.IsSimpleCoder(); - b |= (isComplex ? 0x10 : 0); - b |= ((propsSize != 0) ? 0x20 : 0 ); - WriteByte(b); - WriteBytes(longID, idSize); - if (isComplex) - { - WriteNumber(coder.NumInStreams); - WriteNumber(coder.NumOutStreams); - } - if (propsSize == 0) - continue; - WriteNumber(propsSize); - WriteBytes(coder.Props, propsSize); - } - } - for (i = 0; i < folder.BindPairs.Size(); i++) - { - const CBindPair &bindPair = folder.BindPairs[i]; - WriteNumber(bindPair.InIndex); - WriteNumber(bindPair.OutIndex); - } - if (folder.PackStreams.Size() > 1) - for (i = 0; i < folder.PackStreams.Size(); i++) - { - WriteNumber(folder.PackStreams[i]); - } -} - -void COutArchive::WriteBoolVector(const CBoolVector &boolVector) -{ - Byte b = 0; - Byte mask = 0x80; - for (int i = 0; i < boolVector.Size(); i++) - { - if (boolVector[i]) - b |= mask; - mask >>= 1; - if (mask == 0) - { - WriteByte(b); - mask = 0x80; - b = 0; - } - } - if (mask != 0x80) - WriteByte(b); -} - - -void COutArchive::WriteHashDigests( - const CRecordVector &digestsDefined, - const CRecordVector &digests) -{ - int numDefined = 0; - int i; - for (i = 0; i < digestsDefined.Size(); i++) - if (digestsDefined[i]) - numDefined++; - if (numDefined == 0) - return; - - WriteByte(NID::kCRC); - if (numDefined == digestsDefined.Size()) - WriteByte(1); - else - { - WriteByte(0); - WriteBoolVector(digestsDefined); - } - for (i = 0; i < digests.Size(); i++) - if (digestsDefined[i]) - WriteUInt32(digests[i]); -} - -void COutArchive::WritePackInfo( - UInt64 dataOffset, - const CRecordVector &packSizes, - const CRecordVector &packCRCsDefined, - const CRecordVector &packCRCs) -{ - if (packSizes.IsEmpty()) - return; - WriteByte(NID::kPackInfo); - WriteNumber(dataOffset); - WriteNumber(packSizes.Size()); - WriteByte(NID::kSize); - for (int i = 0; i < packSizes.Size(); i++) - WriteNumber(packSizes[i]); - - WriteHashDigests(packCRCsDefined, packCRCs); - - WriteByte(NID::kEnd); -} - -void COutArchive::WriteUnpackInfo(const CObjectVector &folders) -{ - if (folders.IsEmpty()) - return; - - WriteByte(NID::kUnpackInfo); - - WriteByte(NID::kFolder); - WriteNumber(folders.Size()); - { - WriteByte(0); - for (int i = 0; i < folders.Size(); i++) - WriteFolder(folders[i]); - } - - WriteByte(NID::kCodersUnpackSize); - int i; - for (i = 0; i < folders.Size(); i++) - { - const CFolder &folder = folders[i]; - for (int j = 0; j < folder.UnpackSizes.Size(); j++) - WriteNumber(folder.UnpackSizes[j]); - } - - CRecordVector unpackCRCsDefined; - CRecordVector unpackCRCs; - for (i = 0; i < folders.Size(); i++) - { - const CFolder &folder = folders[i]; - unpackCRCsDefined.Add(folder.UnpackCRCDefined); - unpackCRCs.Add(folder.UnpackCRC); - } - WriteHashDigests(unpackCRCsDefined, unpackCRCs); - - WriteByte(NID::kEnd); -} - -void COutArchive::WriteSubStreamsInfo( - const CObjectVector &folders, - const CRecordVector &numUnpackStreamsInFolders, - const CRecordVector &unpackSizes, - const CRecordVector &digestsDefined, - const CRecordVector &digests) -{ - WriteByte(NID::kSubStreamsInfo); - - int i; - for (i = 0; i < numUnpackStreamsInFolders.Size(); i++) - { - if (numUnpackStreamsInFolders[i] != 1) - { - WriteByte(NID::kNumUnpackStream); - for (i = 0; i < numUnpackStreamsInFolders.Size(); i++) - WriteNumber(numUnpackStreamsInFolders[i]); - break; - } - } - - - bool needFlag = true; - CNum index = 0; - for (i = 0; i < numUnpackStreamsInFolders.Size(); i++) - for (CNum j = 0; j < numUnpackStreamsInFolders[i]; j++) - { - if (j + 1 != numUnpackStreamsInFolders[i]) - { - if (needFlag) - WriteByte(NID::kSize); - needFlag = false; - WriteNumber(unpackSizes[index]); - } - index++; - } - - CRecordVector digestsDefined2; - CRecordVector digests2; - - int digestIndex = 0; - for (i = 0; i < folders.Size(); i++) - { - int numSubStreams = (int)numUnpackStreamsInFolders[i]; - if (numSubStreams == 1 && folders[i].UnpackCRCDefined) - digestIndex++; - else - for (int j = 0; j < numSubStreams; j++, digestIndex++) - { - digestsDefined2.Add(digestsDefined[digestIndex]); - digests2.Add(digests[digestIndex]); - } - } - WriteHashDigests(digestsDefined2, digests2); - WriteByte(NID::kEnd); -} - -void COutArchive::SkipAlign(unsigned /* pos */, unsigned /* alignSize */) -{ - return; -} - -/* -7-Zip 4.50 - 4.58 contain BUG, so they do not support .7z archives with Unknown field. - -void COutArchive::SkipAlign(unsigned pos, unsigned alignSize) -{ - pos += (unsigned)GetPos(); - pos &= (alignSize - 1); - if (pos == 0) - return; - unsigned skip = alignSize - pos; - if (skip < 2) - skip += alignSize; - skip -= 2; - WriteByte(NID::kDummy); - WriteByte((Byte)skip); - for (unsigned i = 0; i < skip; i++) - WriteByte(0); -} -*/ - -void COutArchive::WriteAlignedBoolHeader(const CBoolVector &v, int numDefined, Byte type, unsigned itemSize) -{ - const UInt64 bvSize = (numDefined == v.Size()) ? 0 : (v.Size() + 7) / 8; - const UInt64 dataSize = (UInt64)numDefined * itemSize + bvSize + 2; - SkipAlign(3 + (unsigned)bvSize + (unsigned)GetBigNumberSize(dataSize), itemSize); - - WriteByte(type); - WriteNumber(dataSize); - if (numDefined == v.Size()) - WriteByte(1); - else - { - WriteByte(0); - WriteBoolVector(v); - } - WriteByte(0); -} - -void COutArchive::WriteUInt64DefVector(const CUInt64DefVector &v, Byte type) -{ - int numDefined = 0; - - int i; - for (i = 0; i < v.Defined.Size(); i++) - if (v.Defined[i]) - numDefined++; - - if (numDefined == 0) - return; - - WriteAlignedBoolHeader(v.Defined, numDefined, type, 8); - - for (i = 0; i < v.Defined.Size(); i++) - if (v.Defined[i]) - WriteUInt64(v.Values[i]); -} - -HRESULT COutArchive::EncodeStream( - DECL_EXTERNAL_CODECS_LOC_VARS - CEncoder &encoder, const CByteBuffer &data, - CRecordVector &packSizes, CObjectVector &folders) -{ - CBufInStream *streamSpec = new CBufInStream; - CMyComPtr stream = streamSpec; - streamSpec->Init(data, data.GetCapacity()); - CFolder folderItem; - folderItem.UnpackCRCDefined = true; - folderItem.UnpackCRC = CrcCalc(data, data.GetCapacity()); - UInt64 dataSize64 = data.GetCapacity(); - RINOK(encoder.Encode( - EXTERNAL_CODECS_LOC_VARS - stream, NULL, &dataSize64, folderItem, SeqStream, packSizes, NULL)) - folders.Add(folderItem); - return S_OK; -} - -void COutArchive::WriteHeader( - const CArchiveDatabase &db, - const CHeaderOptions &headerOptions, - UInt64 &headerOffset) -{ - int i; - - UInt64 packedSize = 0; - for (i = 0; i < db.PackSizes.Size(); i++) - packedSize += db.PackSizes[i]; - - headerOffset = packedSize; - - WriteByte(NID::kHeader); - - // Archive Properties - - if (db.Folders.Size() > 0) - { - WriteByte(NID::kMainStreamsInfo); - WritePackInfo(0, db.PackSizes, - db.PackCRCsDefined, - db.PackCRCs); - - WriteUnpackInfo(db.Folders); - - CRecordVector unpackSizes; - CRecordVector digestsDefined; - CRecordVector digests; - for (i = 0; i < db.Files.Size(); i++) - { - const CFileItem &file = db.Files[i]; - if (!file.HasStream) - continue; - unpackSizes.Add(file.Size); - digestsDefined.Add(file.CrcDefined); - digests.Add(file.Crc); - } - - WriteSubStreamsInfo( - db.Folders, - db.NumUnpackStreamsVector, - unpackSizes, - digestsDefined, - digests); - WriteByte(NID::kEnd); - } - - if (db.Files.IsEmpty()) - { - WriteByte(NID::kEnd); - return; - } - - WriteByte(NID::kFilesInfo); - WriteNumber(db.Files.Size()); - - { - /* ---------- Empty Streams ---------- */ - CBoolVector emptyStreamVector; - emptyStreamVector.Reserve(db.Files.Size()); - int numEmptyStreams = 0; - for (i = 0; i < db.Files.Size(); i++) - if (db.Files[i].HasStream) - emptyStreamVector.Add(false); - else - { - emptyStreamVector.Add(true); - numEmptyStreams++; - } - if (numEmptyStreams > 0) - { - WriteByte(NID::kEmptyStream); - WriteNumber((emptyStreamVector.Size() + 7) / 8); - WriteBoolVector(emptyStreamVector); - - CBoolVector emptyFileVector, antiVector; - emptyFileVector.Reserve(numEmptyStreams); - antiVector.Reserve(numEmptyStreams); - CNum numEmptyFiles = 0, numAntiItems = 0; - for (i = 0; i < db.Files.Size(); i++) - { - const CFileItem &file = db.Files[i]; - if (!file.HasStream) - { - emptyFileVector.Add(!file.IsDir); - if (!file.IsDir) - numEmptyFiles++; - bool isAnti = db.IsItemAnti(i); - antiVector.Add(isAnti); - if (isAnti) - numAntiItems++; - } - } - - if (numEmptyFiles > 0) - { - WriteByte(NID::kEmptyFile); - WriteNumber((emptyFileVector.Size() + 7) / 8); - WriteBoolVector(emptyFileVector); - } - - if (numAntiItems > 0) - { - WriteByte(NID::kAnti); - WriteNumber((antiVector.Size() + 7) / 8); - WriteBoolVector(antiVector); - } - } - } - - - { - /* ---------- Names ---------- */ - - int numDefined = 0; - size_t namesDataSize = 0; - for (int i = 0; i < db.Files.Size(); i++) - { - const UString &name = db.Files[i].Name; - if (!name.IsEmpty()) - numDefined++; - namesDataSize += (name.Length() + 1) * 2; - } - - if (numDefined > 0) - { - namesDataSize++; - SkipAlign(2 + GetBigNumberSize(namesDataSize), 2); - - WriteByte(NID::kName); - WriteNumber(namesDataSize); - WriteByte(0); - for (int i = 0; i < db.Files.Size(); i++) - { - const UString &name = db.Files[i].Name; - for (int t = 0; t <= name.Length(); t++) - { - wchar_t c = name[t]; - WriteByte((Byte)c); - WriteByte((Byte)(c >> 8)); - } - } - } - } - - if (headerOptions.WriteCTime) WriteUInt64DefVector(db.CTime, NID::kCTime); - if (headerOptions.WriteATime) WriteUInt64DefVector(db.ATime, NID::kATime); - if (headerOptions.WriteMTime) WriteUInt64DefVector(db.MTime, NID::kMTime); - WriteUInt64DefVector(db.StartPos, NID::kStartPos); - - { - /* ---------- Write Attrib ---------- */ - CBoolVector boolVector; - boolVector.Reserve(db.Files.Size()); - int numDefined = 0; - for (i = 0; i < db.Files.Size(); i++) - { - bool defined = db.Files[i].AttribDefined; - boolVector.Add(defined); - if (defined) - numDefined++; - } - if (numDefined > 0) - { - WriteAlignedBoolHeader(boolVector, numDefined, NID::kWinAttributes, 4); - for (i = 0; i < db.Files.Size(); i++) - { - const CFileItem &file = db.Files[i]; - if (file.AttribDefined) - WriteUInt32(file.Attrib); - } - } - } - - WriteByte(NID::kEnd); // for files - WriteByte(NID::kEnd); // for headers -} - -HRESULT COutArchive::WriteDatabase( - DECL_EXTERNAL_CODECS_LOC_VARS - const CArchiveDatabase &db, - const CCompressionMethodMode *options, - const CHeaderOptions &headerOptions) -{ - if (!db.CheckNumFiles()) - return E_FAIL; - - UInt64 headerOffset; - UInt32 headerCRC; - UInt64 headerSize; - if (db.IsEmpty()) - { - headerSize = 0; - headerOffset = 0; - headerCRC = CrcCalc(0, 0); - } - else - { - bool encodeHeaders = false; - if (options != 0) - if (options->IsEmpty()) - options = 0; - if (options != 0) - if (options->PasswordIsDefined || headerOptions.CompressMainHeader) - encodeHeaders = true; - - _outByte.SetStream(SeqStream); - _outByte.Init(); - _crc = CRC_INIT_VAL; - _countMode = encodeHeaders; - _writeToStream = true; - _countSize = 0; - WriteHeader(db, headerOptions, headerOffset); - - if (encodeHeaders) - { - CByteBuffer buf; - buf.SetCapacity(_countSize); - _outByte2.Init((Byte *)buf, _countSize); - - _countMode = false; - _writeToStream = false; - WriteHeader(db, headerOptions, headerOffset); - - if (_countSize != _outByte2.GetPos()) - return E_FAIL; - - CCompressionMethodMode encryptOptions; - encryptOptions.PasswordIsDefined = options->PasswordIsDefined; - encryptOptions.Password = options->Password; - CEncoder encoder(headerOptions.CompressMainHeader ? *options : encryptOptions); - CRecordVector packSizes; - CObjectVector folders; - RINOK(EncodeStream( - EXTERNAL_CODECS_LOC_VARS - encoder, buf, - packSizes, folders)); - - _writeToStream = true; - - if (folders.Size() == 0) - throw 1; - - WriteID(NID::kEncodedHeader); - WritePackInfo(headerOffset, packSizes, - CRecordVector(), CRecordVector()); - WriteUnpackInfo(folders); - WriteByte(NID::kEnd); - for (int i = 0; i < packSizes.Size(); i++) - headerOffset += packSizes[i]; - } - RINOK(_outByte.Flush()); - headerCRC = CRC_GET_DIGEST(_crc); - headerSize = _outByte.GetProcessedSize(); - } - #ifdef _7Z_VOL - if (_endMarker) - { - CFinishHeader h; - h.NextHeaderSize = headerSize; - h.NextHeaderCRC = headerCRC; - h.NextHeaderOffset = - UInt64(0) - (headerSize + - 4 + kFinishHeaderSize); - h.ArchiveStartOffset = h.NextHeaderOffset - headerOffset; - h.AdditionalStartBlockSize = 0; - RINOK(WriteFinishHeader(h)); - return WriteFinishSignature(); - } - else - #endif - { - CStartHeader h; - h.NextHeaderSize = headerSize; - h.NextHeaderCRC = headerCRC; - h.NextHeaderOffset = headerOffset; - RINOK(Stream->Seek(_prefixHeaderPos, STREAM_SEEK_SET, NULL)); - return WriteStartHeader(h); - } -} - -void CArchiveDatabase::GetFile(int index, CFileItem &file, CFileItem2 &file2) const -{ - file = Files[index]; - file2.CTimeDefined = CTime.GetItem(index, file2.CTime); - file2.ATimeDefined = ATime.GetItem(index, file2.ATime); - file2.MTimeDefined = MTime.GetItem(index, file2.MTime); - file2.StartPosDefined = StartPos.GetItem(index, file2.StartPos); - file2.IsAnti = IsItemAnti(index); -} - -void CArchiveDatabase::AddFile(const CFileItem &file, const CFileItem2 &file2) -{ - int index = Files.Size(); - CTime.SetItem(index, file2.CTimeDefined, file2.CTime); - ATime.SetItem(index, file2.ATimeDefined, file2.ATime); - MTime.SetItem(index, file2.MTimeDefined, file2.MTime); - StartPos.SetItem(index, file2.StartPosDefined, file2.StartPos); - SetItemAnti(index, file2.IsAnti); - Files.Add(file); -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zOut.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zOut.h deleted file mode 100644 index bdd465c1d920..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zOut.h +++ /dev/null @@ -1,152 +0,0 @@ -// 7zOut.h - -#ifndef __7Z_OUT_H -#define __7Z_OUT_H - -#include "7zCompressionMode.h" -#include "7zEncode.h" -#include "7zHeader.h" -#include "7zItem.h" - -#include "../../Common/OutBuffer.h" - -namespace NArchive { -namespace N7z { - -class CWriteBufferLoc -{ - Byte *_data; - size_t _size; - size_t _pos; -public: - CWriteBufferLoc(): _size(0), _pos(0) {} - void Init(Byte *data, size_t size) - { - _data = data; - _size = size; - _pos = 0; - } - void WriteBytes(const void *data, size_t size) - { - if (size > _size - _pos) - throw 1; - memcpy(_data + _pos, data, size); - _pos += size; - } - void WriteByte(Byte b) - { - if (_size == _pos) - throw 1; - _data[_pos++] = b; - } - size_t GetPos() const { return _pos; } -}; - -struct CHeaderOptions -{ - bool CompressMainHeader; - bool WriteCTime; - bool WriteATime; - bool WriteMTime; - - CHeaderOptions(): - CompressMainHeader(true), - WriteCTime(false), - WriteATime(false), - WriteMTime(true) - {} -}; - -class COutArchive -{ - UInt64 _prefixHeaderPos; - - HRESULT WriteDirect(const void *data, UInt32 size); - - UInt64 GetPos() const; - void WriteBytes(const void *data, size_t size); - void WriteBytes(const CByteBuffer &data) { WriteBytes(data, data.GetCapacity()); } - void WriteByte(Byte b); - void WriteUInt32(UInt32 value); - void WriteUInt64(UInt64 value); - void WriteNumber(UInt64 value); - void WriteID(UInt64 value) { WriteNumber(value); } - - void WriteFolder(const CFolder &folder); - HRESULT WriteFileHeader(const CFileItem &itemInfo); - void WriteBoolVector(const CBoolVector &boolVector); - void WriteHashDigests( - const CRecordVector &digestsDefined, - const CRecordVector &hashDigests); - - void WritePackInfo( - UInt64 dataOffset, - const CRecordVector &packSizes, - const CRecordVector &packCRCsDefined, - const CRecordVector &packCRCs); - - void WriteUnpackInfo(const CObjectVector &folders); - - void WriteSubStreamsInfo( - const CObjectVector &folders, - const CRecordVector &numUnpackStreamsInFolders, - const CRecordVector &unpackSizes, - const CRecordVector &digestsDefined, - const CRecordVector &hashDigests); - - void SkipAlign(unsigned pos, unsigned alignSize); - void WriteAlignedBoolHeader(const CBoolVector &v, int numDefined, Byte type, unsigned itemSize); - void WriteUInt64DefVector(const CUInt64DefVector &v, Byte type); - - HRESULT EncodeStream( - DECL_EXTERNAL_CODECS_LOC_VARS - CEncoder &encoder, const CByteBuffer &data, - CRecordVector &packSizes, CObjectVector &folders); - void WriteHeader( - const CArchiveDatabase &db, - const CHeaderOptions &headerOptions, - UInt64 &headerOffset); - - bool _countMode; - bool _writeToStream; - size_t _countSize; - UInt32 _crc; - COutBuffer _outByte; - CWriteBufferLoc _outByte2; - - #ifdef _7Z_VOL - bool _endMarker; - #endif - - HRESULT WriteSignature(); - #ifdef _7Z_VOL - HRESULT WriteFinishSignature(); - #endif - HRESULT WriteStartHeader(const CStartHeader &h); - #ifdef _7Z_VOL - HRESULT WriteFinishHeader(const CFinishHeader &h); - #endif - CMyComPtr Stream; -public: - - COutArchive() { _outByte.Create(1 << 16); } - CMyComPtr SeqStream; - HRESULT Create(ISequentialOutStream *stream, bool endMarker); - void Close(); - HRESULT SkipPrefixArchiveHeader(); - HRESULT WriteDatabase( - DECL_EXTERNAL_CODECS_LOC_VARS - const CArchiveDatabase &db, - const CCompressionMethodMode *options, - const CHeaderOptions &headerOptions); - - #ifdef _7Z_VOL - static UInt32 GetVolHeadersSize(UInt64 dataSize, int nameLength = 0, bool props = false); - static UInt64 GetVolPureSize(UInt64 volSize, int nameLength = 0, bool props = false); - #endif - -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zProperties.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zProperties.cpp deleted file mode 100644 index f5ac3b9bf495..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zProperties.cpp +++ /dev/null @@ -1,163 +0,0 @@ -// 7zProperties.cpp - -#include "StdAfx.h" - -#include "7zProperties.h" -#include "7zHeader.h" -#include "7zHandler.h" - -// #define _MULTI_PACK - -namespace NArchive { -namespace N7z { - -struct CPropMap -{ - UInt64 FilePropID; - STATPROPSTG StatPROPSTG; -}; - -CPropMap kPropMap[] = -{ - { NID::kName, NULL, kpidPath, VT_BSTR}, - { NID::kSize, NULL, kpidSize, VT_UI8}, - { NID::kPackInfo, NULL, kpidPackSize, VT_UI8}, - - #ifdef _MULTI_PACK - { 100, L"Pack0", kpidPackedSize0, VT_UI8}, - { 101, L"Pack1", kpidPackedSize1, VT_UI8}, - { 102, L"Pack2", kpidPackedSize2, VT_UI8}, - { 103, L"Pack3", kpidPackedSize3, VT_UI8}, - { 104, L"Pack4", kpidPackedSize4, VT_UI8}, - #endif - - { NID::kCTime, NULL, kpidCTime, VT_FILETIME}, - { NID::kMTime, NULL, kpidMTime, VT_FILETIME}, - { NID::kATime, NULL, kpidATime, VT_FILETIME}, - { NID::kWinAttributes, NULL, kpidAttrib, VT_UI4}, - { NID::kStartPos, NULL, kpidPosition, VT_UI4}, - - { NID::kCRC, NULL, kpidCRC, VT_UI4}, - - { NID::kAnti, NULL, kpidIsAnti, VT_BOOL}, - - #ifndef _SFX - { 97, NULL, kpidEncrypted, VT_BOOL}, - { 98, NULL, kpidMethod, VT_BSTR}, - { 99, NULL, kpidBlock, VT_UI4} - #endif -}; - -static const int kPropMapSize = sizeof(kPropMap) / sizeof(kPropMap[0]); - -static int FindPropInMap(UInt64 filePropID) -{ - for (int i = 0; i < kPropMapSize; i++) - if (kPropMap[i].FilePropID == filePropID) - return i; - return -1; -} - -static void CopyOneItem(CRecordVector &src, - CRecordVector &dest, UInt32 item) -{ - for (int i = 0; i < src.Size(); i++) - if (src[i] == item) - { - dest.Add(item); - src.Delete(i); - return; - } -} - -static void RemoveOneItem(CRecordVector &src, UInt32 item) -{ - for (int i = 0; i < src.Size(); i++) - if (src[i] == item) - { - src.Delete(i); - return; - } -} - -static void InsertToHead(CRecordVector &dest, UInt32 item) -{ - for (int i = 0; i < dest.Size(); i++) - if (dest[i] == item) - { - dest.Delete(i); - break; - } - dest.Insert(0, item); -} - -void CHandler::FillPopIDs() -{ - _fileInfoPopIDs.Clear(); - - #ifdef _7Z_VOL - if(_volumes.Size() < 1) - return; - const CVolume &volume = _volumes.Front(); - const CArchiveDatabaseEx &_db = volume.Database; - #endif - - CRecordVector fileInfoPopIDs = _db.ArchiveInfo.FileInfoPopIDs; - - RemoveOneItem(fileInfoPopIDs, NID::kEmptyStream); - RemoveOneItem(fileInfoPopIDs, NID::kEmptyFile); - - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kName); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kAnti); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kSize); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kPackInfo); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kCTime); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kMTime); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kATime); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kWinAttributes); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kCRC); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kComment); - _fileInfoPopIDs += fileInfoPopIDs; - - #ifndef _SFX - _fileInfoPopIDs.Add(97); - _fileInfoPopIDs.Add(98); - _fileInfoPopIDs.Add(99); - #endif - #ifdef _MULTI_PACK - _fileInfoPopIDs.Add(100); - _fileInfoPopIDs.Add(101); - _fileInfoPopIDs.Add(102); - _fileInfoPopIDs.Add(103); - _fileInfoPopIDs.Add(104); - #endif - - #ifndef _SFX - InsertToHead(_fileInfoPopIDs, NID::kMTime); - InsertToHead(_fileInfoPopIDs, NID::kPackInfo); - InsertToHead(_fileInfoPopIDs, NID::kSize); - InsertToHead(_fileInfoPopIDs, NID::kName); - #endif -} - -STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProperties) -{ - *numProperties = _fileInfoPopIDs.Size(); - return S_OK; -} - -STDMETHODIMP CHandler::GetPropertyInfo(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) -{ - if ((int)index >= _fileInfoPopIDs.Size()) - return E_INVALIDARG; - int indexInMap = FindPropInMap(_fileInfoPopIDs[index]); - if (indexInMap == -1) - return E_INVALIDARG; - const STATPROPSTG &srcItem = kPropMap[indexInMap].StatPROPSTG; - *propID = srcItem.propid; - *varType = srcItem.vt; - *name = 0; - return S_OK; -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zProperties.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zProperties.h deleted file mode 100644 index 7b78130ef541..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zProperties.h +++ /dev/null @@ -1,22 +0,0 @@ -// 7zProperties.h - -#ifndef __7Z_PROPERTIES_H -#define __7Z_PROPERTIES_H - -#include "../../PropID.h" - -namespace NArchive { -namespace N7z { - -enum -{ - kpidPackedSize0 = kpidUserDefined, - kpidPackedSize1, - kpidPackedSize2, - kpidPackedSize3, - kpidPackedSize4 -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zRegister.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zRegister.cpp deleted file mode 100644 index 0aca792e6572..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zRegister.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// 7zRegister.cpp - -#include "StdAfx.h" - -#include "../../Common/RegisterArc.h" - -#include "7zHandler.h" -static IInArchive *CreateArc() { return new NArchive::N7z::CHandler; } -#ifndef EXTRACT_ONLY -static IOutArchive *CreateArcOut() { return new NArchive::N7z::CHandler; } -#else -#define CreateArcOut 0 -#endif - -static CArcInfo g_ArcInfo = - { L"7z", L"7z", 0, 7, {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}, 6, false, CreateArc, CreateArcOut }; - -REGISTER_ARC_DEC_SIG(7z) diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zSpecStream.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zSpecStream.cpp deleted file mode 100644 index 58f2ec45936d..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zSpecStream.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// 7zSpecStream.cpp - -#include "StdAfx.h" - -#include "7zSpecStream.h" - -STDMETHODIMP CSequentialInStreamSizeCount2::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize; - HRESULT result = _stream->Read(data, size, &realProcessedSize); - _size += realProcessedSize; - if (processedSize != 0) - *processedSize = realProcessedSize; - return result; -} - -STDMETHODIMP CSequentialInStreamSizeCount2::GetSubStreamSize( - UInt64 subStream, UInt64 *value) -{ - if (_getSubStreamSize == NULL) - return E_NOTIMPL; - return _getSubStreamSize->GetSubStreamSize(subStream, value); -} - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zSpecStream.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zSpecStream.h deleted file mode 100644 index 0058ac27ccb5..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zSpecStream.h +++ /dev/null @@ -1,35 +0,0 @@ -// 7zSpecStream.h - -#ifndef __7Z_SPEC_STREAM_H -#define __7Z_SPEC_STREAM_H - -#include "../../IStream.h" -#include "../../ICoder.h" -#include "../../../Common/MyCom.h" - -class CSequentialInStreamSizeCount2: - public ISequentialInStream, - public ICompressGetSubStreamSize, - public CMyUnknownImp -{ - CMyComPtr _stream; - CMyComPtr _getSubStreamSize; - UInt64 _size; -public: - void Init(ISequentialInStream *stream) - { - _stream = stream; - _getSubStreamSize = 0; - _stream.QueryInterface(IID_ICompressGetSubStreamSize, &_getSubStreamSize); - _size = 0; - } - UInt64 GetSize() const { return _size; } - - MY_UNKNOWN_IMP1(ICompressGetSubStreamSize) - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - - STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zUpdate.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zUpdate.cpp deleted file mode 100644 index a58345a611dd..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zUpdate.cpp +++ /dev/null @@ -1,1183 +0,0 @@ -// 7zUpdate.cpp - -#include "StdAfx.h" - -#include "../../../../C/CpuArch.h" - -#include "../../Common/LimitedStreams.h" -#include "../../Common/ProgressUtils.h" - -#include "../../Common/CreateCoder.h" - -#include "../../Compress/CopyCoder.h" - -#include "../Common/ItemNameUtils.h" -#include "../Common/OutStreamWithCRC.h" - -#include "7zDecode.h" -#include "7zEncode.h" -#include "7zFolderInStream.h" -#include "7zHandler.h" -#include "7zOut.h" -#include "7zUpdate.h" - -namespace NArchive { -namespace N7z { - -static const UInt64 k_LZMA = 0x030101; -static const UInt64 k_BCJ = 0x03030103; -static const UInt64 k_BCJ2 = 0x0303011B; -static const UInt64 k_AES = 0x06F10701; - -static const wchar_t *kMatchFinderForBCJ2_LZMA = L"BT2"; -static const UInt32 kDictionaryForBCJ2_LZMA = 1 << 20; -static const UInt32 kAlgorithmForBCJ2_LZMA = 1; -static const UInt32 kNumFastBytesForBCJ2_LZMA = 64; - -#ifdef MY_CPU_X86_OR_AMD64 -#define USE_86_FILTER -#endif - -static HRESULT WriteRange(IInStream *inStream, ISequentialOutStream *outStream, - UInt64 position, UInt64 size, ICompressProgressInfo *progress) -{ - RINOK(inStream->Seek(position, STREAM_SEEK_SET, 0)); - CLimitedSequentialInStream *streamSpec = new CLimitedSequentialInStream; - CMyComPtr inStreamLimited(streamSpec); - streamSpec->SetStream(inStream); - streamSpec->Init(size); - - NCompress::CCopyCoder *copyCoderSpec = new NCompress::CCopyCoder; - CMyComPtr copyCoder = copyCoderSpec; - RINOK(copyCoder->Code(inStreamLimited, outStream, NULL, NULL, progress)); - return (copyCoderSpec->TotalSize == size ? S_OK : E_FAIL); -} - -static int GetReverseSlashPos(const UString &name) -{ - int slashPos = name.ReverseFind(L'/'); - #ifdef _WIN32 - int slash1Pos = name.ReverseFind(L'\\'); - slashPos = MyMax(slashPos, slash1Pos); - #endif - return slashPos; -} - -int CUpdateItem::GetExtensionPos() const -{ - int slashPos = GetReverseSlashPos(Name); - int dotPos = Name.ReverseFind(L'.'); - if (dotPos < 0 || (dotPos < slashPos && slashPos >= 0)) - return Name.Length(); - return dotPos + 1; -} - -UString CUpdateItem::GetExtension() const -{ - return Name.Mid(GetExtensionPos()); -} - -#define RINOZ(x) { int __tt = (x); if (__tt != 0) return __tt; } - -#define RINOZ_COMP(a, b) RINOZ(MyCompare(a, b)) - -static int CompareBuffers(const CByteBuffer &a1, const CByteBuffer &a2) -{ - size_t c1 = a1.GetCapacity(); - size_t c2 = a2.GetCapacity(); - RINOZ_COMP(c1, c2); - for (size_t i = 0; i < c1; i++) - RINOZ_COMP(a1[i], a2[i]); - return 0; -} - -static int CompareCoders(const CCoderInfo &c1, const CCoderInfo &c2) -{ - RINOZ_COMP(c1.NumInStreams, c2.NumInStreams); - RINOZ_COMP(c1.NumOutStreams, c2.NumOutStreams); - RINOZ_COMP(c1.MethodID, c2.MethodID); - return CompareBuffers(c1.Props, c2.Props); -} - -static int CompareBindPairs(const CBindPair &b1, const CBindPair &b2) -{ - RINOZ_COMP(b1.InIndex, b2.InIndex); - return MyCompare(b1.OutIndex, b2.OutIndex); -} - -static int CompareFolders(const CFolder &f1, const CFolder &f2) -{ - int s1 = f1.Coders.Size(); - int s2 = f2.Coders.Size(); - RINOZ_COMP(s1, s2); - int i; - for (i = 0; i < s1; i++) - RINOZ(CompareCoders(f1.Coders[i], f2.Coders[i])); - s1 = f1.BindPairs.Size(); - s2 = f2.BindPairs.Size(); - RINOZ_COMP(s1, s2); - for (i = 0; i < s1; i++) - RINOZ(CompareBindPairs(f1.BindPairs[i], f2.BindPairs[i])); - return 0; -} - -/* -static int CompareFiles(const CFileItem &f1, const CFileItem &f2) -{ - return MyStringCompareNoCase(f1.Name, f2.Name); -} -*/ - -struct CFolderRepack -{ - int FolderIndex; - int Group; - CNum NumCopyFiles; -}; - -static int CompareFolderRepacks(const CFolderRepack *p1, const CFolderRepack *p2, void *param) -{ - RINOZ_COMP(p1->Group, p2->Group); - int i1 = p1->FolderIndex; - int i2 = p2->FolderIndex; - const CArchiveDatabaseEx &db = *(const CArchiveDatabaseEx *)param; - RINOZ(CompareFolders( - db.Folders[i1], - db.Folders[i2])); - return MyCompare(i1, i2); - /* - RINOZ_COMP( - db.NumUnpackStreamsVector[i1], - db.NumUnpackStreamsVector[i2]); - if (db.NumUnpackStreamsVector[i1] == 0) - return 0; - return CompareFiles( - db.Files[db.FolderStartFileIndex[i1]], - db.Files[db.FolderStartFileIndex[i2]]); - */ -} - -//////////////////////////////////////////////////////////// - -static int CompareEmptyItems(const int *p1, const int *p2, void *param) -{ - const CObjectVector &updateItems = *(const CObjectVector *)param; - const CUpdateItem &u1 = updateItems[*p1]; - const CUpdateItem &u2 = updateItems[*p2]; - if (u1.IsDir != u2.IsDir) - return (u1.IsDir) ? 1 : -1; - if (u1.IsDir) - { - if (u1.IsAnti != u2.IsAnti) - return (u1.IsAnti ? 1 : -1); - int n = MyStringCompareNoCase(u1.Name, u2.Name); - return -n; - } - if (u1.IsAnti != u2.IsAnti) - return (u1.IsAnti ? 1 : -1); - return MyStringCompareNoCase(u1.Name, u2.Name); -} - -static const char *g_Exts = - " lzma 7z ace arc arj bz bz2 deb lzo lzx gz pak rpm sit tgz tbz tbz2 tgz cab ha lha lzh rar zoo" - " zip jar ear war msi" - " 3gp avi mov mpeg mpg mpe wmv" - " aac ape fla flac la mp3 m4a mp4 ofr ogg pac ra rm rka shn swa tta wv wma wav" - " swf " - " chm hxi hxs" - " gif jpeg jpg jp2 png tiff bmp ico psd psp" - " awg ps eps cgm dxf svg vrml wmf emf ai md" - " cad dwg pps key sxi" - " max 3ds" - " iso bin nrg mdf img pdi tar cpio xpi" - " vfd vhd vud vmc vsv" - " vmdk dsk nvram vmem vmsd vmsn vmss vmtm" - " inl inc idl acf asa h hpp hxx c cpp cxx rc java cs pas bas vb cls ctl frm dlg def" - " f77 f f90 f95" - " asm sql manifest dep " - " mak clw csproj vcproj sln dsp dsw " - " class " - " bat cmd" - " xml xsd xsl xslt hxk hxc htm html xhtml xht mht mhtml htw asp aspx css cgi jsp shtml" - " awk sed hta js php php3 php4 php5 phptml pl pm py pyo rb sh tcl vbs" - " text txt tex ans asc srt reg ini doc docx mcw dot rtf hlp xls xlr xlt xlw ppt pdf" - " sxc sxd sxi sxg sxw stc sti stw stm odt ott odg otg odp otp ods ots odf" - " abw afp cwk lwp wpd wps wpt wrf wri" - " abf afm bdf fon mgf otf pcf pfa snf ttf" - " dbf mdb nsf ntf wdb db fdb gdb" - " exe dll ocx vbx sfx sys tlb awx com obj lib out o so " - " pdb pch idb ncb opt"; - -int GetExtIndex(const char *ext) -{ - int extIndex = 1; - const char *p = g_Exts; - for (;;) - { - char c = *p++; - if (c == 0) - return extIndex; - if (c == ' ') - continue; - int pos = 0; - for (;;) - { - char c2 = ext[pos++]; - if (c2 == 0 && (c == 0 || c == ' ')) - return extIndex; - if (c != c2) - break; - c = *p++; - } - extIndex++; - for (;;) - { - if (c == 0) - return extIndex; - if (c == ' ') - break; - c = *p++; - } - } -} - -struct CRefItem -{ - const CUpdateItem *UpdateItem; - UInt32 Index; - UInt32 ExtensionPos; - UInt32 NamePos; - int ExtensionIndex; - CRefItem(UInt32 index, const CUpdateItem &ui, bool sortByType): - UpdateItem(&ui), - Index(index), - ExtensionPos(0), - NamePos(0), - ExtensionIndex(0) - { - if (sortByType) - { - int slashPos = GetReverseSlashPos(ui.Name); - NamePos = ((slashPos >= 0) ? (slashPos + 1) : 0); - int dotPos = ui.Name.ReverseFind(L'.'); - if (dotPos < 0 || (dotPos < slashPos && slashPos >= 0)) - ExtensionPos = ui.Name.Length(); - else - { - ExtensionPos = dotPos + 1; - UString us = ui.Name.Mid(ExtensionPos); - if (!us.IsEmpty()) - { - us.MakeLower(); - int i; - AString s; - for (i = 0; i < us.Length(); i++) - { - wchar_t c = us[i]; - if (c >= 0x80) - break; - s += (char)c; - } - if (i == us.Length()) - ExtensionIndex = GetExtIndex(s); - else - ExtensionIndex = 0; - } - } - } - } -}; - -static int CompareUpdateItems(const CRefItem *p1, const CRefItem *p2, void *param) -{ - const CRefItem &a1 = *p1; - const CRefItem &a2 = *p2; - const CUpdateItem &u1 = *a1.UpdateItem; - const CUpdateItem &u2 = *a2.UpdateItem; - int n; - if (u1.IsDir != u2.IsDir) - return (u1.IsDir) ? 1 : -1; - if (u1.IsDir) - { - if (u1.IsAnti != u2.IsAnti) - return (u1.IsAnti ? 1 : -1); - n = MyStringCompareNoCase(u1.Name, u2.Name); - return -n; - } - bool sortByType = *(bool *)param; - if (sortByType) - { - RINOZ_COMP(a1.ExtensionIndex, a2.ExtensionIndex); - RINOZ(MyStringCompareNoCase(u1.Name + a1.ExtensionPos, u2.Name + a2.ExtensionPos)); - RINOZ(MyStringCompareNoCase(u1.Name + a1.NamePos, u2.Name + a2.NamePos)); - if (!u1.MTimeDefined && u2.MTimeDefined) return 1; - if (u1.MTimeDefined && !u2.MTimeDefined) return -1; - if (u1.MTimeDefined && u2.MTimeDefined) RINOZ_COMP(u1.MTime, u2.MTime); - RINOZ_COMP(u1.Size, u2.Size); - } - return MyStringCompareNoCase(u1.Name, u2.Name); -} - -struct CSolidGroup -{ - CRecordVector Indices; -}; - -static wchar_t *g_ExeExts[] = -{ - L"dll", - L"exe", - L"ocx", - L"sfx", - L"sys" -}; - -static bool IsExeExt(const UString &ext) -{ - for (int i = 0; i < sizeof(g_ExeExts) / sizeof(g_ExeExts[0]); i++) - if (ext.CompareNoCase(g_ExeExts[i]) == 0) - return true; - return false; -} - -#ifdef USE_86_FILTER - -static inline void GetMethodFull(UInt64 methodID, UInt32 numInStreams, CMethodFull &methodResult) -{ - methodResult.Id = methodID; - methodResult.NumInStreams = numInStreams; - methodResult.NumOutStreams = 1; -} - -static void MakeExeMethod(const CCompressionMethodMode &method, - bool bcj2Filter, CCompressionMethodMode &exeMethod) -{ - exeMethod = method; - if (bcj2Filter) - { - CMethodFull methodFull; - GetMethodFull(k_BCJ2, 4, methodFull); - exeMethod.Methods.Insert(0, methodFull); - GetMethodFull(k_LZMA, 1, methodFull); - { - CProp prop; - prop.Id = NCoderPropID::kAlgorithm; - prop.Value = kAlgorithmForBCJ2_LZMA; - methodFull.Props.Add(prop); - } - { - CProp prop; - prop.Id = NCoderPropID::kMatchFinder; - prop.Value = kMatchFinderForBCJ2_LZMA; - methodFull.Props.Add(prop); - } - { - CProp prop; - prop.Id = NCoderPropID::kDictionarySize; - prop.Value = kDictionaryForBCJ2_LZMA; - methodFull.Props.Add(prop); - } - { - CProp prop; - prop.Id = NCoderPropID::kNumFastBytes; - prop.Value = kNumFastBytesForBCJ2_LZMA; - methodFull.Props.Add(prop); - } - - exeMethod.Methods.Add(methodFull); - exeMethod.Methods.Add(methodFull); - CBind bind; - - bind.OutCoder = 0; - bind.InStream = 0; - - bind.InCoder = 1; - bind.OutStream = 0; - exeMethod.Binds.Add(bind); - - bind.InCoder = 2; - bind.OutStream = 1; - exeMethod.Binds.Add(bind); - - bind.InCoder = 3; - bind.OutStream = 2; - exeMethod.Binds.Add(bind); - } - else - { - CMethodFull methodFull; - GetMethodFull(k_BCJ, 1, methodFull); - exeMethod.Methods.Insert(0, methodFull); - CBind bind; - bind.OutCoder = 0; - bind.InStream = 0; - bind.InCoder = 1; - bind.OutStream = 0; - exeMethod.Binds.Add(bind); - } -} - -#endif - -static void FromUpdateItemToFileItem(const CUpdateItem &ui, - CFileItem &file, CFileItem2 &file2) -{ - file.Name = NItemName::MakeLegalName(ui.Name); - if (ui.AttribDefined) - file.SetAttrib(ui.Attrib); - - file2.CTime = ui.CTime; file2.CTimeDefined = ui.CTimeDefined; - file2.ATime = ui.ATime; file2.ATimeDefined = ui.ATimeDefined; - file2.MTime = ui.MTime; file2.MTimeDefined = ui.MTimeDefined; - file2.IsAnti = ui.IsAnti; - file2.StartPosDefined = false; - - file.Size = ui.Size; - file.IsDir = ui.IsDir; - file.HasStream = ui.HasStream(); -} - -class CFolderOutStream2: - public ISequentialOutStream, - public CMyUnknownImp -{ - COutStreamWithCRC *_crcStreamSpec; - CMyComPtr _crcStream; - const CArchiveDatabaseEx *_db; - const CBoolVector *_extractStatuses; - CMyComPtr _outStream; - UInt32 _startIndex; - int _currentIndex; - bool _fileIsOpen; - UInt64 _rem; - - void OpenFile(); - void CloseFile(); - HRESULT CloseFileAndSetResult(); - HRESULT ProcessEmptyFiles(); -public: - MY_UNKNOWN_IMP - - CFolderOutStream2() - { - _crcStreamSpec = new COutStreamWithCRC; - _crcStream = _crcStreamSpec; - } - - HRESULT Init(const CArchiveDatabaseEx *db, UInt32 startIndex, - const CBoolVector *extractStatuses, ISequentialOutStream *outStream); - void ReleaseOutStream(); - HRESULT CheckFinishedState() const { return (_currentIndex == _extractStatuses->Size()) ? S_OK: E_FAIL; } - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -HRESULT CFolderOutStream2::Init(const CArchiveDatabaseEx *db, UInt32 startIndex, - const CBoolVector *extractStatuses, ISequentialOutStream *outStream) -{ - _db = db; - _startIndex = startIndex; - _extractStatuses = extractStatuses; - _outStream = outStream; - - _currentIndex = 0; - _fileIsOpen = false; - return ProcessEmptyFiles(); -} - -void CFolderOutStream2::ReleaseOutStream() -{ - _outStream.Release(); - _crcStreamSpec->ReleaseStream(); -} - -void CFolderOutStream2::OpenFile() -{ - _crcStreamSpec->SetStream((*_extractStatuses)[_currentIndex] ? _outStream : NULL); - _crcStreamSpec->Init(true); - _fileIsOpen = true; - _rem = _db->Files[_startIndex + _currentIndex].Size; -} - -void CFolderOutStream2::CloseFile() -{ - _crcStreamSpec->ReleaseStream(); - _fileIsOpen = false; - _currentIndex++; -} - -HRESULT CFolderOutStream2::CloseFileAndSetResult() -{ - const CFileItem &file = _db->Files[_startIndex + _currentIndex]; - CloseFile(); - return (file.IsDir || !file.CrcDefined || file.Crc == _crcStreamSpec->GetCRC()) ? S_OK: S_FALSE; -} - -HRESULT CFolderOutStream2::ProcessEmptyFiles() -{ - while (_currentIndex < _extractStatuses->Size() && _db->Files[_startIndex + _currentIndex].Size == 0) - { - OpenFile(); - RINOK(CloseFileAndSetResult()); - } - return S_OK; -} - -STDMETHODIMP CFolderOutStream2::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - if (processedSize != NULL) - *processedSize = 0; - while (size != 0) - { - if (_fileIsOpen) - { - UInt32 cur = size < _rem ? size : (UInt32)_rem; - RINOK(_crcStream->Write(data, cur, &cur)); - if (cur == 0) - break; - data = (const Byte *)data + cur; - size -= cur; - _rem -= cur; - if (processedSize != NULL) - *processedSize += cur; - if (_rem == 0) - { - RINOK(CloseFileAndSetResult()); - RINOK(ProcessEmptyFiles()); - continue; - } - } - else - { - RINOK(ProcessEmptyFiles()); - if (_currentIndex == _extractStatuses->Size()) - { - // we don't support partial extracting - return E_FAIL; - } - OpenFile(); - } - } - return S_OK; -} - -class CThreadDecoder: public CVirtThread -{ -public: - HRESULT Result; - CMyComPtr InStream; - - CFolderOutStream2 *FosSpec; - CMyComPtr Fos; - - UInt64 StartPos; - const UInt64 *PackSizes; - const CFolder *Folder; - #ifndef _NO_CRYPTO - CMyComPtr GetTextPassword; - #endif - - DECL_EXTERNAL_CODECS_VARS - CDecoder Decoder; - - #ifdef COMPRESS_MT - bool MtMode; - UInt32 NumThreads; - #endif - - CThreadDecoder(): - Decoder(true) - { - #ifdef COMPRESS_MT - MtMode = false; - NumThreads = 1; - #endif - FosSpec = new CFolderOutStream2; - Fos = FosSpec; - Result = E_FAIL; - } - virtual void Execute(); -}; - -void CThreadDecoder::Execute() -{ - try - { - #ifndef _NO_CRYPTO - bool passwordIsDefined; - #endif - Result = Decoder.Decode( - EXTERNAL_CODECS_VARS - InStream, - StartPos, - PackSizes, - *Folder, - Fos, - NULL - #ifndef _NO_CRYPTO - , GetTextPassword, passwordIsDefined - #endif - #ifdef COMPRESS_MT - , MtMode, NumThreads - #endif - ); - } - catch(...) - { - Result = E_FAIL; - } - if (Result == S_OK) - Result = FosSpec->CheckFinishedState(); - FosSpec->ReleaseOutStream(); -} - -bool static Is86FilteredFolder(const CFolder &f) -{ - for (int i = 0; i < f.Coders.Size(); i++) - { - CMethodId m = f.Coders[i].MethodID; - if (m == k_BCJ || m == k_BCJ2) - return true; - } - return false; -} - -bool static IsEncryptedFolder(const CFolder &f) -{ - for (int i = 0; i < f.Coders.Size(); i++) - { - CMethodId m = f.Coders[i].MethodID; - if (m == k_AES) - return true; - } - return false; -} - -#ifndef _NO_CRYPTO - -class CCryptoGetTextPassword: - public ICryptoGetTextPassword, - public CMyUnknownImp -{ -public: - UString Password; - - MY_UNKNOWN_IMP - STDMETHOD(CryptoGetTextPassword)(BSTR *password); -}; - -STDMETHODIMP CCryptoGetTextPassword::CryptoGetTextPassword(BSTR *password) -{ - return StringToBstr(Password, password); -} - -#endif - -static const int kNumGroupsMax = 4; - -#ifdef USE_86_FILTER -static bool Is86Group(int group) { return (group & 1) != 0; } -#endif -static bool IsEncryptedGroup(int group) { return (group & 2) != 0; } -static int GetGroupIndex(bool encrypted, int bcjFiltered) - { return (encrypted ? 2 : 0) + (bcjFiltered ? 1 : 0); } - -HRESULT Update( - DECL_EXTERNAL_CODECS_LOC_VARS - IInStream *inStream, - const CArchiveDatabaseEx *db, - const CObjectVector &updateItems, - COutArchive &archive, - CArchiveDatabase &newDatabase, - ISequentialOutStream *seqOutStream, - IArchiveUpdateCallback *updateCallback, - const CUpdateOptions &options - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getDecoderPassword - #endif - ) -{ - UInt64 numSolidFiles = options.NumSolidFiles; - if (numSolidFiles == 0) - numSolidFiles = 1; - /* - CMyComPtr outStream; - RINOK(seqOutStream->QueryInterface(IID_IOutStream, (void **)&outStream)); - if (!outStream) - return E_NOTIMPL; - */ - - UInt64 startBlockSize = db != 0 ? db->ArchiveInfo.StartPosition: 0; - if (startBlockSize > 0 && !options.RemoveSfxBlock) - { - RINOK(WriteRange(inStream, seqOutStream, 0, startBlockSize, NULL)); - } - - CRecordVector fileIndexToUpdateIndexMap; - CRecordVector folderRefs; - UInt64 complexity = 0; - UInt64 inSizeForReduce2 = 0; - bool needEncryptedRepack = false; - if (db != 0) - { - fileIndexToUpdateIndexMap.Reserve(db->Files.Size()); - int i; - for (i = 0; i < db->Files.Size(); i++) - fileIndexToUpdateIndexMap.Add(-1); - - for (i = 0; i < updateItems.Size(); i++) - { - int index = updateItems[i].IndexInArchive; - if (index != -1) - fileIndexToUpdateIndexMap[index] = i; - } - - for (i = 0; i < db->Folders.Size(); i++) - { - CNum indexInFolder = 0; - CNum numCopyItems = 0; - CNum numUnpackStreams = db->NumUnpackStreamsVector[i]; - UInt64 repackSize = 0; - for (CNum fi = db->FolderStartFileIndex[i]; indexInFolder < numUnpackStreams; fi++) - { - const CFileItem &file = db->Files[fi]; - if (file.HasStream) - { - indexInFolder++; - int updateIndex = fileIndexToUpdateIndexMap[fi]; - if (updateIndex >= 0 && !updateItems[updateIndex].NewData) - { - numCopyItems++; - repackSize += file.Size; - } - } - } - - if (numCopyItems == 0) - continue; - - CFolderRepack rep; - rep.FolderIndex = i; - rep.NumCopyFiles = numCopyItems; - const CFolder &f = db->Folders[i]; - bool isEncrypted = IsEncryptedFolder(f); - rep.Group = GetGroupIndex(isEncrypted, Is86FilteredFolder(f)); - folderRefs.Add(rep); - if (numCopyItems == numUnpackStreams) - complexity += db->GetFolderFullPackSize(i); - else - { - complexity += repackSize; - if (repackSize > inSizeForReduce2) - inSizeForReduce2 = repackSize; - if (isEncrypted) - needEncryptedRepack = true; - } - } - folderRefs.Sort(CompareFolderRepacks, (void *)db); - } - - UInt64 inSizeForReduce = 0; - int i; - for (i = 0; i < updateItems.Size(); i++) - { - const CUpdateItem &ui = updateItems[i]; - if (ui.NewData) - { - complexity += ui.Size; - if (numSolidFiles != 1) - inSizeForReduce += ui.Size; - else if (ui.Size > inSizeForReduce) - inSizeForReduce = ui.Size; - } - } - - if (inSizeForReduce2 > inSizeForReduce) - inSizeForReduce = inSizeForReduce2; - - const UInt32 kMinReduceSize = (1 << 16); - if (inSizeForReduce < kMinReduceSize) - inSizeForReduce = kMinReduceSize; - - RINOK(updateCallback->SetTotal(complexity)); - - CLocalProgress *lps = new CLocalProgress; - CMyComPtr progress = lps; - lps->Init(updateCallback, true); - - CThreadDecoder threadDecoder; - if (!folderRefs.IsEmpty()) - { - #ifdef EXTERNAL_CODECS - threadDecoder._codecsInfo = codecsInfo; - threadDecoder._externalCodecs = *externalCodecs; - #endif - RINOK(threadDecoder.Create()); - } - - CObjectVector groups; - for (i = 0; i < kNumGroupsMax; i++) - groups.Add(CSolidGroup()); - - { - // ---------- Split files to 2 groups ---------- - - bool useFilters = options.UseFilters; - const CCompressionMethodMode &method = *options.Method; - if (method.Methods.Size() != 1 || method.Binds.Size() != 0) - useFilters = false; - for (i = 0; i < updateItems.Size(); i++) - { - const CUpdateItem &ui = updateItems[i]; - if (!ui.NewData || !ui.HasStream()) - continue; - bool filteredGroup = false; - if (useFilters) - { - int dotPos = ui.Name.ReverseFind(L'.'); - if (dotPos >= 0) - filteredGroup = IsExeExt(ui.Name.Mid(dotPos + 1)); - } - groups[GetGroupIndex(method.PasswordIsDefined, filteredGroup)].Indices.Add(i); - } - } - - #ifndef _NO_CRYPTO - - CCryptoGetTextPassword *getPasswordSpec = NULL; - if (needEncryptedRepack) - { - getPasswordSpec = new CCryptoGetTextPassword; - threadDecoder.GetTextPassword = getPasswordSpec; - - if (options.Method->PasswordIsDefined) - getPasswordSpec->Password = options.Method->Password; - else - { - if (!getDecoderPassword) - return E_NOTIMPL; - CMyComBSTR password; - RINOK(getDecoderPassword->CryptoGetTextPassword(&password)); - getPasswordSpec->Password = password; - } - } - - #endif - - // ---------- Compress ---------- - - RINOK(archive.Create(seqOutStream, false)); - RINOK(archive.SkipPrefixArchiveHeader()); - - int folderRefIndex = 0; - lps->ProgressOffset = 0; - - for (int groupIndex = 0; groupIndex < kNumGroupsMax; groupIndex++) - { - const CSolidGroup &group = groups[groupIndex]; - - CCompressionMethodMode method; - #ifdef USE_86_FILTER - if (Is86Group(groupIndex)) - MakeExeMethod(*options.Method, options.MaxFilter, method); - else - #endif - method = *options.Method; - - if (IsEncryptedGroup(groupIndex)) - { - if (!method.PasswordIsDefined) - { - #ifndef _NO_CRYPTO - if (getPasswordSpec) - method.Password = getPasswordSpec->Password; - #endif - method.PasswordIsDefined = true; - } - } - else - { - method.PasswordIsDefined = false; - method.Password.Empty(); - } - - CEncoder encoder(method); - - for (; folderRefIndex < folderRefs.Size(); folderRefIndex++) - { - const CFolderRepack &rep = folderRefs[folderRefIndex]; - if (rep.Group != groupIndex) - break; - int folderIndex = rep.FolderIndex; - - if (rep.NumCopyFiles == db->NumUnpackStreamsVector[folderIndex]) - { - UInt64 packSize = db->GetFolderFullPackSize(folderIndex); - RINOK(WriteRange(inStream, archive.SeqStream, - db->GetFolderStreamPos(folderIndex, 0), packSize, progress)); - lps->ProgressOffset += packSize; - - const CFolder &folder = db->Folders[folderIndex]; - CNum startIndex = db->FolderStartPackStreamIndex[folderIndex]; - for (int j = 0; j < folder.PackStreams.Size(); j++) - { - newDatabase.PackSizes.Add(db->PackSizes[startIndex + j]); - // newDatabase.PackCRCsDefined.Add(db.PackCRCsDefined[startIndex + j]); - // newDatabase.PackCRCs.Add(db.PackCRCs[startIndex + j]); - } - newDatabase.Folders.Add(folder); - } - else - { - CStreamBinder sb; - RINOK(sb.CreateEvents()); - CMyComPtr sbOutStream; - CMyComPtr sbInStream; - sb.CreateStreams(&sbInStream, &sbOutStream); - CBoolVector extractStatuses; - - CNum numUnpackStreams = db->NumUnpackStreamsVector[folderIndex]; - CNum indexInFolder = 0; - - for (CNum fi = db->FolderStartFileIndex[folderIndex]; indexInFolder < numUnpackStreams; fi++) - { - bool needExtract = false; - if (db->Files[fi].HasStream) - { - indexInFolder++; - int updateIndex = fileIndexToUpdateIndexMap[fi]; - if (updateIndex >= 0 && !updateItems[updateIndex].NewData) - needExtract = true; - } - extractStatuses.Add(needExtract); - } - - RINOK(threadDecoder.FosSpec->Init(db, db->FolderStartFileIndex[folderIndex], &extractStatuses, sbOutStream)); - sbOutStream.Release(); - - threadDecoder.InStream = inStream; - threadDecoder.Folder = &db->Folders[folderIndex]; - threadDecoder.StartPos = db->GetFolderStreamPos(folderIndex, 0); - threadDecoder.PackSizes = &db->PackSizes[db->FolderStartPackStreamIndex[folderIndex]]; - - threadDecoder.Start(); - - int startPackIndex = newDatabase.PackSizes.Size(); - CFolder newFolder; - RINOK(encoder.Encode( - EXTERNAL_CODECS_LOC_VARS - sbInStream, NULL, &inSizeForReduce, newFolder, - archive.SeqStream, newDatabase.PackSizes, progress)); - - threadDecoder.WaitFinish(); - - RINOK(threadDecoder.Result); - - for (; startPackIndex < newDatabase.PackSizes.Size(); startPackIndex++) - lps->OutSize += newDatabase.PackSizes[startPackIndex]; - lps->InSize += newFolder.GetUnpackSize(); - - newDatabase.Folders.Add(newFolder); - } - - newDatabase.NumUnpackStreamsVector.Add(rep.NumCopyFiles); - - CNum numUnpackStreams = db->NumUnpackStreamsVector[folderIndex]; - - CNum indexInFolder = 0; - for (CNum fi = db->FolderStartFileIndex[folderIndex]; indexInFolder < numUnpackStreams; fi++) - { - CFileItem file; - CFileItem2 file2; - db->GetFile(fi, file, file2); - if (file.HasStream) - { - indexInFolder++; - int updateIndex = fileIndexToUpdateIndexMap[fi]; - if (updateIndex >= 0) - { - const CUpdateItem &ui = updateItems[updateIndex]; - if (ui.NewData) - continue; - if (ui.NewProps) - { - CFileItem uf; - FromUpdateItemToFileItem(ui, uf, file2); - uf.Size = file.Size; - uf.Crc = file.Crc; - uf.CrcDefined = file.CrcDefined; - uf.HasStream = file.HasStream; - file = uf; - } - newDatabase.AddFile(file, file2); - } - } - } - } - - int numFiles = group.Indices.Size(); - if (numFiles == 0) - continue; - CRecordVector refItems; - refItems.Reserve(numFiles); - bool sortByType = (numSolidFiles > 1); - for (i = 0; i < numFiles; i++) - refItems.Add(CRefItem(group.Indices[i], updateItems[group.Indices[i]], sortByType)); - refItems.Sort(CompareUpdateItems, (void *)&sortByType); - - CRecordVector indices; - indices.Reserve(numFiles); - - for (i = 0; i < numFiles; i++) - { - UInt32 index = refItems[i].Index; - indices.Add(index); - /* - const CUpdateItem &ui = updateItems[index]; - CFileItem file; - if (ui.NewProps) - FromUpdateItemToFileItem(ui, file); - else - file = db.Files[ui.IndexInArchive]; - if (file.IsAnti || file.IsDir) - return E_FAIL; - newDatabase.Files.Add(file); - */ - } - - for (i = 0; i < numFiles;) - { - UInt64 totalSize = 0; - int numSubFiles; - UString prevExtension; - for (numSubFiles = 0; i + numSubFiles < numFiles && - numSubFiles < numSolidFiles; numSubFiles++) - { - const CUpdateItem &ui = updateItems[indices[i + numSubFiles]]; - totalSize += ui.Size; - if (totalSize > options.NumSolidBytes) - break; - if (options.SolidExtension) - { - UString ext = ui.GetExtension(); - if (numSubFiles == 0) - prevExtension = ext; - else - if (ext.CompareNoCase(prevExtension) != 0) - break; - } - } - if (numSubFiles < 1) - numSubFiles = 1; - - CFolderInStream *inStreamSpec = new CFolderInStream; - CMyComPtr solidInStream(inStreamSpec); - inStreamSpec->Init(updateCallback, &indices[i], numSubFiles); - - CFolder folderItem; - - int startPackIndex = newDatabase.PackSizes.Size(); - RINOK(encoder.Encode( - EXTERNAL_CODECS_LOC_VARS - solidInStream, NULL, &inSizeForReduce, folderItem, - archive.SeqStream, newDatabase.PackSizes, progress)); - - for (; startPackIndex < newDatabase.PackSizes.Size(); startPackIndex++) - lps->OutSize += newDatabase.PackSizes[startPackIndex]; - - lps->InSize += folderItem.GetUnpackSize(); - // for () - // newDatabase.PackCRCsDefined.Add(false); - // newDatabase.PackCRCs.Add(0); - - newDatabase.Folders.Add(folderItem); - - CNum numUnpackStreams = 0; - for (int subIndex = 0; subIndex < numSubFiles; subIndex++) - { - const CUpdateItem &ui = updateItems[indices[i + subIndex]]; - CFileItem file; - CFileItem2 file2; - if (ui.NewProps) - FromUpdateItemToFileItem(ui, file, file2); - else - db->GetFile(ui.IndexInArchive, file, file2); - if (file2.IsAnti || file.IsDir) - return E_FAIL; - - /* - CFileItem &file = newDatabase.Files[ - startFileIndexInDatabase + i + subIndex]; - */ - if (!inStreamSpec->Processed[subIndex]) - { - continue; - // file.Name += L".locked"; - } - - file.Crc = inStreamSpec->CRCs[subIndex]; - file.Size = inStreamSpec->Sizes[subIndex]; - if (file.Size != 0) - { - file.CrcDefined = true; - file.HasStream = true; - numUnpackStreams++; - } - else - { - file.CrcDefined = false; - file.HasStream = false; - } - newDatabase.AddFile(file, file2); - } - // numUnpackStreams = 0 is very bad case for locked files - // v3.13 doesn't understand it. - newDatabase.NumUnpackStreamsVector.Add(numUnpackStreams); - i += numSubFiles; - } - } - - if (folderRefIndex != folderRefs.Size()) - return E_FAIL; - - /* - folderRefs.ClearAndFree(); - fileIndexToUpdateIndexMap.ClearAndFree(); - groups.ClearAndFree(); - */ - - { - // ---------- Write Folders & Empty Files ---------- - - CRecordVector emptyRefs; - for (i = 0; i < updateItems.Size(); i++) - { - const CUpdateItem &ui = updateItems[i]; - if (ui.NewData) - { - if (ui.HasStream()) - continue; - } - else if (ui.IndexInArchive != -1 && db->Files[ui.IndexInArchive].HasStream) - continue; - emptyRefs.Add(i); - } - emptyRefs.Sort(CompareEmptyItems, (void *)&updateItems); - for (i = 0; i < emptyRefs.Size(); i++) - { - const CUpdateItem &ui = updateItems[emptyRefs[i]]; - CFileItem file; - CFileItem2 file2; - if (ui.NewProps) - FromUpdateItemToFileItem(ui, file, file2); - else - db->GetFile(ui.IndexInArchive, file, file2); - newDatabase.AddFile(file, file2); - } - } - - newDatabase.ReserveDown(); - return S_OK; -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zUpdate.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zUpdate.h deleted file mode 100644 index f3dc88509ee2..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/7zUpdate.h +++ /dev/null @@ -1,88 +0,0 @@ -// 7zUpdate.h - -#ifndef __7Z_UPDATE_H -#define __7Z_UPDATE_H - -#include "7zCompressionMode.h" -#include "7zIn.h" -#include "7zOut.h" - -#include "../IArchive.h" - -namespace NArchive { -namespace N7z { - -struct CUpdateItem -{ - int IndexInArchive; - int IndexInClient; - - UInt64 CTime; - UInt64 ATime; - UInt64 MTime; - - UInt64 Size; - UString Name; - - UInt32 Attrib; - - bool NewData; - bool NewProps; - - bool IsAnti; - bool IsDir; - - bool AttribDefined; - bool CTimeDefined; - bool ATimeDefined; - bool MTimeDefined; - - bool HasStream() const { return !IsDir && !IsAnti && Size != 0; } - - CUpdateItem(): - IsAnti(false), - IsDir(false), - AttribDefined(false), - CTimeDefined(false), - ATimeDefined(false), - MTimeDefined(false) - {} - void SetDirStatusFromAttrib() { IsDir = ((Attrib & FILE_ATTRIBUTE_DIRECTORY) != 0); }; - - int GetExtensionPos() const; - UString GetExtension() const; -}; - -struct CUpdateOptions -{ - const CCompressionMethodMode *Method; - const CCompressionMethodMode *HeaderMethod; - bool UseFilters; - bool MaxFilter; - - CHeaderOptions HeaderOptions; - - UInt64 NumSolidFiles; - UInt64 NumSolidBytes; - bool SolidExtension; - bool RemoveSfxBlock; - bool VolumeMode; -}; - -HRESULT Update( - DECL_EXTERNAL_CODECS_LOC_VARS - IInStream *inStream, - const CArchiveDatabaseEx *db, - const CObjectVector &updateItems, - COutArchive &archive, - CArchiveDatabase &newDatabase, - ISequentialOutStream *seqOutStream, - IArchiveUpdateCallback *updateCallback, - const CUpdateOptions &options - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getDecoderPassword - #endif - ); -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/StdAfx.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/StdAfx.cpp deleted file mode 100644 index c6d3b1fa6231..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/StdAfx.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/StdAfx.h deleted file mode 100644 index a4e6173121b1..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/7z/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" -#include "../../../Common/NewHandler.h" - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Archive.def b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Archive.def deleted file mode 100644 index 839245ecdd44..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Archive.def +++ /dev/null @@ -1,6 +0,0 @@ -EXPORTS - CreateObject PRIVATE - GetHandlerProperty PRIVATE - GetNumberOfFormats PRIVATE - GetHandlerProperty2 PRIVATE - CreateObject PRIVATE diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Archive2.def b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Archive2.def deleted file mode 100644 index 190fbd8dadba..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Archive2.def +++ /dev/null @@ -1,9 +0,0 @@ -EXPORTS - CreateObject PRIVATE - GetHandlerProperty PRIVATE - GetNumberOfFormats PRIVATE - GetHandlerProperty2 PRIVATE - CreateObject PRIVATE - GetNumberOfMethods PRIVATE - GetMethodProperty PRIVATE - SetLargePageMode PRIVATE diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/ArchiveExports.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/ArchiveExports.cpp deleted file mode 100644 index ba51db312887..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/ArchiveExports.cpp +++ /dev/null @@ -1,133 +0,0 @@ -// ArchiveExports.cpp - -#include "StdAfx.h" - -#include "../../Common/ComTry.h" - -#include "../../Windows/PropVariant.h" - -#include "../Common/RegisterArc.h" - -static const unsigned int kNumArcsMax = 48; -static unsigned int g_NumArcs = 0; -static unsigned int g_DefaultArcIndex = 0; -static const CArcInfo *g_Arcs[kNumArcsMax]; -void RegisterArc(const CArcInfo *arcInfo) -{ - if (g_NumArcs < kNumArcsMax) - { - const wchar_t *p = arcInfo->Name; - if (p[0] == '7' && p[1] == 'z' && p[2] == 0) - g_DefaultArcIndex = g_NumArcs; - g_Arcs[g_NumArcs++] = arcInfo; - } -} - -DEFINE_GUID(CLSID_CArchiveHandler, -0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00); - -#define CLS_ARC_ID_ITEM(cls) ((cls).Data4[5]) - -static inline HRESULT SetPropString(const char *s, unsigned int size, PROPVARIANT *value) -{ - if ((value->bstrVal = ::SysAllocStringByteLen(s, size)) != 0) - value->vt = VT_BSTR; - return S_OK; -} - -static inline HRESULT SetPropGUID(const GUID &guid, PROPVARIANT *value) -{ - return SetPropString((const char *)&guid, sizeof(GUID), value); -} - -int FindFormatCalssId(const GUID *clsID) -{ - GUID cls = *clsID; - CLS_ARC_ID_ITEM(cls) = 0; - if (cls != CLSID_CArchiveHandler) - return -1; - Byte id = CLS_ARC_ID_ITEM(*clsID); - for (unsigned i = 0; i < g_NumArcs; i++) - if (g_Arcs[i]->ClassId == id) - return (int)i; - return -1; -} - -STDAPI CreateArchiver(const GUID *clsid, const GUID *iid, void **outObject) -{ - COM_TRY_BEGIN - { - int needIn = (*iid == IID_IInArchive); - int needOut = (*iid == IID_IOutArchive); - if (!needIn && !needOut) - return E_NOINTERFACE; - int formatIndex = FindFormatCalssId(clsid); - if (formatIndex < 0) - return CLASS_E_CLASSNOTAVAILABLE; - - const CArcInfo &arc = *g_Arcs[formatIndex]; - if (needIn) - { - *outObject = arc.CreateInArchive(); - ((IInArchive *)*outObject)->AddRef(); - } - else - { - if (!arc.CreateOutArchive) - return CLASS_E_CLASSNOTAVAILABLE; - *outObject = arc.CreateOutArchive(); - ((IOutArchive *)*outObject)->AddRef(); - } - } - COM_TRY_END - return S_OK; -} - -STDAPI GetHandlerProperty2(UInt32 formatIndex, PROPID propID, PROPVARIANT *value) -{ - if (formatIndex >= g_NumArcs) - return E_INVALIDARG; - const CArcInfo &arc = *g_Arcs[formatIndex]; - NWindows::NCOM::CPropVariant prop; - switch(propID) - { - case NArchive::kName: - prop = arc.Name; - break; - case NArchive::kClassID: - { - GUID clsId = CLSID_CArchiveHandler; - CLS_ARC_ID_ITEM(clsId) = arc.ClassId; - return SetPropGUID(clsId, value); - } - case NArchive::kExtension: - if (arc.Ext != 0) - prop = arc.Ext; - break; - case NArchive::kAddExtension: - if (arc.AddExt != 0) - prop = arc.AddExt; - break; - case NArchive::kUpdate: - prop = (bool)(arc.CreateOutArchive != 0); - break; - case NArchive::kKeepName: - prop = arc.KeepName; - break; - case NArchive::kStartSignature: - return SetPropString((const char *)arc.Signature, arc.SignatureSize, value); - } - prop.Detach(value); - return S_OK; -} - -STDAPI GetHandlerProperty(PROPID propID, PROPVARIANT *value) -{ - return GetHandlerProperty2(g_DefaultArcIndex, propID, value); -} - -STDAPI GetNumberOfFormats(UINT32 *numFormats) -{ - *numFormats = g_NumArcs; - return S_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2.cpp deleted file mode 100644 index c4333f234268..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2.cpp +++ /dev/null @@ -1,121 +0,0 @@ -// CoderMixer2.cpp - -#include "StdAfx.h" - -#include "CoderMixer2.h" - -namespace NCoderMixer { - -CBindReverseConverter::CBindReverseConverter(const CBindInfo &srcBindInfo): - _srcBindInfo(srcBindInfo) -{ - srcBindInfo.GetNumStreams(NumSrcInStreams, _numSrcOutStreams); - - UInt32 j; - for (j = 0; j < NumSrcInStreams; j++) - { - _srcInToDestOutMap.Add(0); - DestOutToSrcInMap.Add(0); - } - for (j = 0; j < _numSrcOutStreams; j++) - { - _srcOutToDestInMap.Add(0); - _destInToSrcOutMap.Add(0); - } - - UInt32 destInOffset = 0; - UInt32 destOutOffset = 0; - UInt32 srcInOffset = NumSrcInStreams; - UInt32 srcOutOffset = _numSrcOutStreams; - - for (int i = srcBindInfo.Coders.Size() - 1; i >= 0; i--) - { - const CCoderStreamsInfo &srcCoderInfo = srcBindInfo.Coders[i]; - - srcInOffset -= srcCoderInfo.NumInStreams; - srcOutOffset -= srcCoderInfo.NumOutStreams; - - UInt32 j; - for (j = 0; j < srcCoderInfo.NumInStreams; j++, destOutOffset++) - { - UInt32 index = srcInOffset + j; - _srcInToDestOutMap[index] = destOutOffset; - DestOutToSrcInMap[destOutOffset] = index; - } - for (j = 0; j < srcCoderInfo.NumOutStreams; j++, destInOffset++) - { - UInt32 index = srcOutOffset + j; - _srcOutToDestInMap[index] = destInOffset; - _destInToSrcOutMap[destInOffset] = index; - } - } -} - -void CBindReverseConverter::CreateReverseBindInfo(CBindInfo &destBindInfo) -{ - destBindInfo.Coders.Clear(); - destBindInfo.BindPairs.Clear(); - destBindInfo.InStreams.Clear(); - destBindInfo.OutStreams.Clear(); - - int i; - for (i = _srcBindInfo.Coders.Size() - 1; i >= 0; i--) - { - const CCoderStreamsInfo &srcCoderInfo = _srcBindInfo.Coders[i]; - CCoderStreamsInfo destCoderInfo; - destCoderInfo.NumInStreams = srcCoderInfo.NumOutStreams; - destCoderInfo.NumOutStreams = srcCoderInfo.NumInStreams; - destBindInfo.Coders.Add(destCoderInfo); - } - for (i = _srcBindInfo.BindPairs.Size() - 1; i >= 0; i--) - { - const CBindPair &srcBindPair = _srcBindInfo.BindPairs[i]; - CBindPair destBindPair; - destBindPair.InIndex = _srcOutToDestInMap[srcBindPair.OutIndex]; - destBindPair.OutIndex = _srcInToDestOutMap[srcBindPair.InIndex]; - destBindInfo.BindPairs.Add(destBindPair); - } - for (i = 0; i < _srcBindInfo.InStreams.Size(); i++) - destBindInfo.OutStreams.Add(_srcInToDestOutMap[_srcBindInfo.InStreams[i]]); - for (i = 0; i < _srcBindInfo.OutStreams.Size(); i++) - destBindInfo.InStreams.Add(_srcOutToDestInMap[_srcBindInfo.OutStreams[i]]); -} - -CCoderInfo2::CCoderInfo2(UInt32 numInStreams, UInt32 numOutStreams): - NumInStreams(numInStreams), - NumOutStreams(numOutStreams) -{ - InSizes.Reserve(NumInStreams); - InSizePointers.Reserve(NumInStreams); - OutSizePointers.Reserve(NumOutStreams); - OutSizePointers.Reserve(NumOutStreams); -} - -static void SetSizes(const UInt64 **srcSizes, CRecordVector &sizes, - CRecordVector &sizePointers, UInt32 numItems) -{ - sizes.Clear(); - sizePointers.Clear(); - for(UInt32 i = 0; i < numItems; i++) - { - if (srcSizes == 0 || srcSizes[i] == NULL) - { - sizes.Add(0); - sizePointers.Add(NULL); - } - else - { - sizes.Add(*srcSizes[i]); - sizePointers.Add(&sizes.Back()); - } - } -} - -void CCoderInfo2::SetCoderInfo(const UInt64 **inSizes, - const UInt64 **outSizes) -{ - SetSizes(inSizes, InSizes, InSizePointers, NumInStreams); - SetSizes(outSizes, OutSizes, OutSizePointers, NumOutStreams); -} - -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2.h deleted file mode 100644 index b1893b217e07..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2.h +++ /dev/null @@ -1,174 +0,0 @@ -// CoderMixer2.h - -#ifndef __CODER_MIXER2_H -#define __CODER_MIXER2_H - -#include "../../../Common/MyVector.h" -#include "../../../Common/Types.h" -#include "../../../Common/MyCom.h" -#include "../../ICoder.h" - -namespace NCoderMixer { - -struct CBindPair -{ - UInt32 InIndex; - UInt32 OutIndex; -}; - -struct CCoderStreamsInfo -{ - UInt32 NumInStreams; - UInt32 NumOutStreams; -}; - -struct CBindInfo -{ - CRecordVector Coders; - CRecordVector BindPairs; - CRecordVector InStreams; - CRecordVector OutStreams; - - void Clear() - { - Coders.Clear(); - BindPairs.Clear(); - InStreams.Clear(); - OutStreams.Clear(); - } - - /* - UInt32 GetCoderStartOutStream(UInt32 coderIndex) const - { - UInt32 numOutStreams = 0; - for (UInt32 i = 0; i < coderIndex; i++) - numOutStreams += Coders[i].NumOutStreams; - return numOutStreams; - } - */ - - - void GetNumStreams(UInt32 &numInStreams, UInt32 &numOutStreams) const - { - numInStreams = 0; - numOutStreams = 0; - for (int i = 0; i < Coders.Size(); i++) - { - const CCoderStreamsInfo &coderStreamsInfo = Coders[i]; - numInStreams += coderStreamsInfo.NumInStreams; - numOutStreams += coderStreamsInfo.NumOutStreams; - } - } - - int FindBinderForInStream(UInt32 inStream) const - { - for (int i = 0; i < BindPairs.Size(); i++) - if (BindPairs[i].InIndex == inStream) - return i; - return -1; - } - int FindBinderForOutStream(UInt32 outStream) const - { - for (int i = 0; i < BindPairs.Size(); i++) - if (BindPairs[i].OutIndex == outStream) - return i; - return -1; - } - - UInt32 GetCoderInStreamIndex(UInt32 coderIndex) const - { - UInt32 streamIndex = 0; - for (UInt32 i = 0; i < coderIndex; i++) - streamIndex += Coders[i].NumInStreams; - return streamIndex; - } - - UInt32 GetCoderOutStreamIndex(UInt32 coderIndex) const - { - UInt32 streamIndex = 0; - for (UInt32 i = 0; i < coderIndex; i++) - streamIndex += Coders[i].NumOutStreams; - return streamIndex; - } - - - void FindInStream(UInt32 streamIndex, UInt32 &coderIndex, - UInt32 &coderStreamIndex) const - { - for (coderIndex = 0; coderIndex < (UInt32)Coders.Size(); coderIndex++) - { - UInt32 curSize = Coders[coderIndex].NumInStreams; - if (streamIndex < curSize) - { - coderStreamIndex = streamIndex; - return; - } - streamIndex -= curSize; - } - throw 1; - } - void FindOutStream(UInt32 streamIndex, UInt32 &coderIndex, - UInt32 &coderStreamIndex) const - { - for (coderIndex = 0; coderIndex < (UInt32)Coders.Size(); coderIndex++) - { - UInt32 curSize = Coders[coderIndex].NumOutStreams; - if (streamIndex < curSize) - { - coderStreamIndex = streamIndex; - return; - } - streamIndex -= curSize; - } - throw 1; - } -}; - -class CBindReverseConverter -{ - UInt32 _numSrcOutStreams; - NCoderMixer::CBindInfo _srcBindInfo; - CRecordVector _srcInToDestOutMap; - CRecordVector _srcOutToDestInMap; - CRecordVector _destInToSrcOutMap; -public: - UInt32 NumSrcInStreams; - CRecordVector DestOutToSrcInMap; - - CBindReverseConverter(const NCoderMixer::CBindInfo &srcBindInfo); - void CreateReverseBindInfo(NCoderMixer::CBindInfo &destBindInfo); -}; - -struct CCoderInfo2 -{ - CMyComPtr Coder; - CMyComPtr Coder2; - UInt32 NumInStreams; - UInt32 NumOutStreams; - - CRecordVector InSizes; - CRecordVector OutSizes; - CRecordVector InSizePointers; - CRecordVector OutSizePointers; - - CCoderInfo2(UInt32 numInStreams, UInt32 numOutStreams); - void SetCoderInfo(const UInt64 **inSizes, const UInt64 **outSizes); - - HRESULT QueryInterface(REFGUID iid, void** pp) const - { - IUnknown *p = Coder ? (IUnknown *)Coder : (IUnknown *)Coder2; - return p->QueryInterface(iid, pp); - } -}; - -class CCoderMixer2 -{ -public: - virtual HRESULT SetBindInfo(const CBindInfo &bindInfo) = 0; - virtual void ReInit() = 0; - virtual void SetCoderInfo(UInt32 coderIndex, const UInt64 **inSizes, const UInt64 **outSizes) = 0; -}; - -} -#endif - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2MT.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2MT.cpp deleted file mode 100644 index f3bea728d543..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2MT.cpp +++ /dev/null @@ -1,230 +0,0 @@ -// CoderMixer2MT.cpp - -#include "StdAfx.h" - -#include "CoderMixer2MT.h" - -namespace NCoderMixer { - -CCoder2::CCoder2(UInt32 numInStreams, UInt32 numOutStreams): - CCoderInfo2(numInStreams, numOutStreams) -{ - InStreams.Reserve(NumInStreams); - InStreamPointers.Reserve(NumInStreams); - OutStreams.Reserve(NumOutStreams); - OutStreamPointers.Reserve(NumOutStreams); -} - -void CCoder2::Execute() { Code(NULL); } - -void CCoder2::Code(ICompressProgressInfo *progress) -{ - InStreamPointers.Clear(); - OutStreamPointers.Clear(); - UInt32 i; - for (i = 0; i < NumInStreams; i++) - { - if (InSizePointers[i] != NULL) - InSizePointers[i] = &InSizes[i]; - InStreamPointers.Add((ISequentialInStream *)InStreams[i]); - } - for (i = 0; i < NumOutStreams; i++) - { - if (OutSizePointers[i] != NULL) - OutSizePointers[i] = &OutSizes[i]; - OutStreamPointers.Add((ISequentialOutStream *)OutStreams[i]); - } - if (Coder) - Result = Coder->Code(InStreamPointers[0], OutStreamPointers[0], - InSizePointers[0], OutSizePointers[0], progress); - else - Result = Coder2->Code(&InStreamPointers.Front(), &InSizePointers.Front(), NumInStreams, - &OutStreamPointers.Front(), &OutSizePointers.Front(), NumOutStreams, progress); - { - int i; - for (i = 0; i < InStreams.Size(); i++) - InStreams[i].Release(); - for (i = 0; i < OutStreams.Size(); i++) - OutStreams[i].Release(); - } -} - -static void SetSizes(const UInt64 **srcSizes, CRecordVector &sizes, - CRecordVector &sizePointers, UInt32 numItems) -{ - sizes.Clear(); - sizePointers.Clear(); - for(UInt32 i = 0; i < numItems; i++) - { - if (srcSizes == 0 || srcSizes[i] == NULL) - { - sizes.Add(0); - sizePointers.Add(NULL); - } - else - { - sizes.Add(*srcSizes[i]); - sizePointers.Add(&sizes.Back()); - } - } -} - - -void CCoder2::SetCoderInfo(const UInt64 **inSizes, const UInt64 **outSizes) -{ - SetSizes(inSizes, InSizes, InSizePointers, NumInStreams); - SetSizes(outSizes, OutSizes, OutSizePointers, NumOutStreams); -} - -////////////////////////////////////// -// CCoderMixer2MT - -HRESULT CCoderMixer2MT::SetBindInfo(const CBindInfo &bindInfo) -{ - _bindInfo = bindInfo; - _streamBinders.Clear(); - for(int i = 0; i < _bindInfo.BindPairs.Size(); i++) - { - _streamBinders.Add(CStreamBinder()); - RINOK(_streamBinders.Back().CreateEvents()); - } - return S_OK; -} - -void CCoderMixer2MT::AddCoderCommon() -{ - const CCoderStreamsInfo &c = _bindInfo.Coders[_coders.Size()]; - CCoder2 threadCoderInfo(c.NumInStreams, c.NumOutStreams); - _coders.Add(threadCoderInfo); -} - -void CCoderMixer2MT::AddCoder(ICompressCoder *coder) -{ - AddCoderCommon(); - _coders.Back().Coder = coder; -} - -void CCoderMixer2MT::AddCoder2(ICompressCoder2 *coder) -{ - AddCoderCommon(); - _coders.Back().Coder2 = coder; -} - - -void CCoderMixer2MT::ReInit() -{ - for(int i = 0; i < _streamBinders.Size(); i++) - _streamBinders[i].ReInit(); -} - - -HRESULT CCoderMixer2MT::Init(ISequentialInStream **inStreams, ISequentialOutStream **outStreams) -{ - /* - if (_coders.Size() != _bindInfo.Coders.Size()) - throw 0; - */ - int i; - for(i = 0; i < _coders.Size(); i++) - { - CCoder2 &coderInfo = _coders[i]; - const CCoderStreamsInfo &coderStreamsInfo = _bindInfo.Coders[i]; - coderInfo.InStreams.Clear(); - UInt32 j; - for(j = 0; j < coderStreamsInfo.NumInStreams; j++) - coderInfo.InStreams.Add(NULL); - coderInfo.OutStreams.Clear(); - for(j = 0; j < coderStreamsInfo.NumOutStreams; j++) - coderInfo.OutStreams.Add(NULL); - } - - for(i = 0; i < _bindInfo.BindPairs.Size(); i++) - { - const CBindPair &bindPair = _bindInfo.BindPairs[i]; - UInt32 inCoderIndex, inCoderStreamIndex; - UInt32 outCoderIndex, outCoderStreamIndex; - _bindInfo.FindInStream(bindPair.InIndex, inCoderIndex, inCoderStreamIndex); - _bindInfo.FindOutStream(bindPair.OutIndex, outCoderIndex, outCoderStreamIndex); - - _streamBinders[i].CreateStreams( - &_coders[inCoderIndex].InStreams[inCoderStreamIndex], - &_coders[outCoderIndex].OutStreams[outCoderStreamIndex]); - } - - for(i = 0; i < _bindInfo.InStreams.Size(); i++) - { - UInt32 inCoderIndex, inCoderStreamIndex; - _bindInfo.FindInStream(_bindInfo.InStreams[i], inCoderIndex, inCoderStreamIndex); - _coders[inCoderIndex].InStreams[inCoderStreamIndex] = inStreams[i]; - } - - for(i = 0; i < _bindInfo.OutStreams.Size(); i++) - { - UInt32 outCoderIndex, outCoderStreamIndex; - _bindInfo.FindOutStream(_bindInfo.OutStreams[i], outCoderIndex, outCoderStreamIndex); - _coders[outCoderIndex].OutStreams[outCoderStreamIndex] = outStreams[i]; - } - return S_OK; -} - -HRESULT CCoderMixer2MT::ReturnIfError(HRESULT code) -{ - for (int i = 0; i < _coders.Size(); i++) - if (_coders[i].Result == code) - return code; - return S_OK; -} - -STDMETHODIMP CCoderMixer2MT::Code(ISequentialInStream **inStreams, - const UInt64 ** /* inSizes */, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 ** /* outSizes */, - UInt32 numOutStreams, - ICompressProgressInfo *progress) -{ - if (numInStreams != (UInt32)_bindInfo.InStreams.Size() || - numOutStreams != (UInt32)_bindInfo.OutStreams.Size()) - return E_INVALIDARG; - - Init(inStreams, outStreams); - - int i; - for (i = 0; i < _coders.Size(); i++) - if (i != _progressCoderIndex) - { - RINOK(_coders[i].Create()); - } - - for (i = 0; i < _coders.Size(); i++) - if (i != _progressCoderIndex) - _coders[i].Start(); - - _coders[_progressCoderIndex].Code(progress); - - for (i = 0; i < _coders.Size(); i++) - if (i != _progressCoderIndex) - _coders[i].WaitFinish(); - - RINOK(ReturnIfError(E_ABORT)); - RINOK(ReturnIfError(E_OUTOFMEMORY)); - - for (i = 0; i < _coders.Size(); i++) - { - HRESULT result = _coders[i].Result; - if (result != S_OK && result != E_FAIL && result != S_FALSE) - return result; - } - - RINOK(ReturnIfError(S_FALSE)); - - for (i = 0; i < _coders.Size(); i++) - { - HRESULT result = _coders[i].Result; - if (result != S_OK) - return result; - } - return S_OK; -} - -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2MT.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2MT.h deleted file mode 100644 index acecc390ff79..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CoderMixer2MT.h +++ /dev/null @@ -1,80 +0,0 @@ -// CoderMixer2MT.h - -#ifndef __CODER_MIXER2_MT_H -#define __CODER_MIXER2_MT_H - -#include "CoderMixer2.h" -#include "../../../Common/MyCom.h" -#include "../../Common/StreamBinder.h" -#include "../../Common/VirtThread.h" - -namespace NCoderMixer { - -struct CCoder2: public CCoderInfo2, public CVirtThread -{ - HRESULT Result; - CObjectVector< CMyComPtr > InStreams; - CObjectVector< CMyComPtr > OutStreams; - CRecordVector InStreamPointers; - CRecordVector OutStreamPointers; - - CCoder2(UInt32 numInStreams, UInt32 numOutStreams); - void SetCoderInfo(const UInt64 **inSizes, const UInt64 **outSizes); - virtual void Execute(); - void Code(ICompressProgressInfo *progress); -}; - - -/* - SetBindInfo() - for each coder - AddCoder[2]() - SetProgressIndex(UInt32 coderIndex); - - for each file - { - ReInit() - for each coder - SetCoderInfo - Code - } -*/ - -class CCoderMixer2MT: - public ICompressCoder2, - public CCoderMixer2, - public CMyUnknownImp -{ - CBindInfo _bindInfo; - CObjectVector _streamBinders; - int _progressCoderIndex; - - void AddCoderCommon(); - HRESULT Init(ISequentialInStream **inStreams, ISequentialOutStream **outStreams); - HRESULT ReturnIfError(HRESULT code); -public: - CObjectVector _coders; - MY_UNKNOWN_IMP - - STDMETHOD(Code)(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress); - - HRESULT SetBindInfo(const CBindInfo &bindInfo); - void AddCoder(ICompressCoder *coder); - void AddCoder2(ICompressCoder2 *coder); - void SetProgressCoderIndex(int coderIndex) { _progressCoderIndex = coderIndex; } - - void ReInit(); - void SetCoderInfo(UInt32 coderIndex, const UInt64 **inSizes, const UInt64 **outSizes) - { _coders[coderIndex].SetCoderInfo(inSizes, outSizes); } - UInt64 GetWriteProcessedSize(UInt32 binderIndex) const - { return _streamBinders[binderIndex].ProcessedSize; } -}; - -} -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CrossThreadProgress.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CrossThreadProgress.cpp deleted file mode 100644 index 62d05afdd7b4..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CrossThreadProgress.cpp +++ /dev/null @@ -1,15 +0,0 @@ -// CrossThreadProgress.cpp - -#include "StdAfx.h" - -#include "CrossThreadProgress.h" - -STDMETHODIMP CCrossThreadProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) -{ - InSize = inSize; - OutSize = outSize; - ProgressEvent.Set(); - WaitEvent.Lock(); - return Result; -} - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CrossThreadProgress.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CrossThreadProgress.h deleted file mode 100644 index d41495806531..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/CrossThreadProgress.h +++ /dev/null @@ -1,37 +0,0 @@ -// CrossThreadProgress.h - -#ifndef __CROSSTHREADPROGRESS_H -#define __CROSSTHREADPROGRESS_H - -#include "../../ICoder.h" -#include "../../../Windows/Synchronization.h" -#include "../../../Common/MyCom.h" - -class CCrossThreadProgress: - public ICompressProgressInfo, - public CMyUnknownImp -{ -public: - const UInt64 *InSize; - const UInt64 *OutSize; - HRESULT Result; - NWindows::NSynchronization::CAutoResetEvent ProgressEvent; - NWindows::NSynchronization::CAutoResetEvent WaitEvent; - - HRes Create() - { - RINOK(ProgressEvent.CreateIfNotCreated()); - return WaitEvent.CreateIfNotCreated(); - } - void Init() - { - ProgressEvent.Reset(); - WaitEvent.Reset(); - } - - MY_UNKNOWN_IMP - - STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/DummyOutStream.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/DummyOutStream.cpp deleted file mode 100644 index 237e01e594e7..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/DummyOutStream.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// DummyOutStream.cpp - -#include "StdAfx.h" - -#include "DummyOutStream.h" - -STDMETHODIMP CDummyOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize; - HRESULT result; - if(!_stream) - { - realProcessedSize = size; - result = S_OK; - } - else - result = _stream->Write(data, size, &realProcessedSize); - _size += realProcessedSize; - if(processedSize != NULL) - *processedSize = realProcessedSize; - return result; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/DummyOutStream.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/DummyOutStream.h deleted file mode 100644 index c993bb3dd86e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/DummyOutStream.h +++ /dev/null @@ -1,24 +0,0 @@ -// DummyOutStream.h - -#ifndef __DUMMYOUTSTREAM_H -#define __DUMMYOUTSTREAM_H - -#include "../../IStream.h" -#include "Common/MyCom.h" - -class CDummyOutStream: - public ISequentialOutStream, - public CMyUnknownImp -{ - CMyComPtr _stream; - UInt64 _size; -public: - void SetStream(ISequentialOutStream *outStream) { _stream = outStream; } - void ReleaseStream() { _stream.Release(); } - void Init() { _size = 0; } - MY_UNKNOWN_IMP - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - UInt64 GetSize() const { return _size; } -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/HandlerOut.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/HandlerOut.cpp deleted file mode 100644 index e1d6306c8395..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/HandlerOut.cpp +++ /dev/null @@ -1,623 +0,0 @@ -// HandlerOut.cpp - -#include "StdAfx.h" - -#include "../../../Common/StringToInt.h" - -#include "../../../Windows/PropVariant.h" - -#ifdef COMPRESS_MT -#include "../../../Windows/System.h" -#endif - -#include "../../ICoder.h" - -#include "../Common/ParseProperties.h" - -#include "HandlerOut.h" - -using namespace NWindows; - -namespace NArchive { - -static const wchar_t *kCopyMethod = L"Copy"; -static const wchar_t *kLZMAMethodName = L"LZMA"; -static const wchar_t *kLZMA2MethodName = L"LZMA2"; -static const wchar_t *kBZip2MethodName = L"BZip2"; -static const wchar_t *kPpmdMethodName = L"PPMd"; -static const wchar_t *kDeflateMethodName = L"Deflate"; -static const wchar_t *kDeflate64MethodName = L"Deflate64"; - -static const wchar_t *kLzmaMatchFinderX1 = L"HC4"; -static const wchar_t *kLzmaMatchFinderX5 = L"BT4"; - -static const UInt32 kLzmaAlgoX1 = 0; -static const UInt32 kLzmaAlgoX5 = 1; - -static const UInt32 kLzmaDicSizeX1 = 1 << 16; -static const UInt32 kLzmaDicSizeX3 = 1 << 20; -static const UInt32 kLzmaDicSizeX5 = 1 << 24; -static const UInt32 kLzmaDicSizeX7 = 1 << 25; -static const UInt32 kLzmaDicSizeX9 = 1 << 26; - -static const UInt32 kLzmaFastBytesX1 = 32; -static const UInt32 kLzmaFastBytesX7 = 64; - -static const UInt32 kPpmdMemSizeX1 = (1 << 22); -static const UInt32 kPpmdMemSizeX5 = (1 << 24); -static const UInt32 kPpmdMemSizeX7 = (1 << 26); -static const UInt32 kPpmdMemSizeX9 = (192 << 20); - -static const UInt32 kPpmdOrderX1 = 4; -static const UInt32 kPpmdOrderX5 = 6; -static const UInt32 kPpmdOrderX7 = 16; -static const UInt32 kPpmdOrderX9 = 32; - -static const UInt32 kDeflateAlgoX1 = 0; -static const UInt32 kDeflateAlgoX5 = 1; - -static const UInt32 kDeflateFastBytesX1 = 32; -static const UInt32 kDeflateFastBytesX7 = 64; -static const UInt32 kDeflateFastBytesX9 = 128; - -static const UInt32 kDeflatePassesX1 = 1; -static const UInt32 kDeflatePassesX7 = 3; -static const UInt32 kDeflatePassesX9 = 10; - -static const UInt32 kBZip2NumPassesX1 = 1; -static const UInt32 kBZip2NumPassesX7 = 2; -static const UInt32 kBZip2NumPassesX9 = 7; - -static const UInt32 kBZip2DicSizeX1 = 100000; -static const UInt32 kBZip2DicSizeX3 = 500000; -static const UInt32 kBZip2DicSizeX5 = 900000; - -static const wchar_t *kDefaultMethodName = kLZMAMethodName; - -static const wchar_t *kLzmaMatchFinderForHeaders = L"BT2"; -static const UInt32 kDictionaryForHeaders = 1 << 20; -static const UInt32 kNumFastBytesForHeaders = 273; -static const UInt32 kAlgorithmForHeaders = kLzmaAlgoX5; - -static bool AreEqual(const UString &methodName, const wchar_t *s) - { return (methodName.CompareNoCase(s) == 0); } - -bool COneMethodInfo::IsLzma() const -{ - return - AreEqual(MethodName, kLZMAMethodName) || - AreEqual(MethodName, kLZMA2MethodName); -} - -static inline bool IsBZip2Method(const UString &methodName) - { return AreEqual(methodName, kBZip2MethodName); } - -static inline bool IsPpmdMethod(const UString &methodName) - { return AreEqual(methodName, kPpmdMethodName); } - -static inline bool IsDeflateMethod(const UString &methodName) -{ - return - AreEqual(methodName, kDeflateMethodName) || - AreEqual(methodName, kDeflate64MethodName); -} - -struct CNameToPropID -{ - PROPID PropID; - VARTYPE VarType; - const wchar_t *Name; -}; - -static CNameToPropID g_NameToPropID[] = -{ - { NCoderPropID::kBlockSize, VT_UI4, L"C" }, - { NCoderPropID::kDictionarySize, VT_UI4, L"D" }, - { NCoderPropID::kUsedMemorySize, VT_UI4, L"MEM" }, - - { NCoderPropID::kOrder, VT_UI4, L"O" }, - { NCoderPropID::kPosStateBits, VT_UI4, L"PB" }, - { NCoderPropID::kLitContextBits, VT_UI4, L"LC" }, - { NCoderPropID::kLitPosBits, VT_UI4, L"LP" }, - { NCoderPropID::kEndMarker, VT_BOOL, L"eos" }, - - { NCoderPropID::kNumPasses, VT_UI4, L"Pass" }, - { NCoderPropID::kNumFastBytes, VT_UI4, L"fb" }, - { NCoderPropID::kMatchFinderCycles, VT_UI4, L"mc" }, - { NCoderPropID::kAlgorithm, VT_UI4, L"a" }, - { NCoderPropID::kMatchFinder, VT_BSTR, L"mf" }, - { NCoderPropID::kNumThreads, VT_UI4, L"mt" }, - { NCoderPropID::kDefaultProp, VT_UI4, L"" } -}; - -static bool ConvertProperty(PROPVARIANT srcProp, VARTYPE varType, NCOM::CPropVariant &destProp) -{ - if (varType == srcProp.vt) - { - destProp = srcProp; - return true; - } - if (varType == VT_UI1) - { - if (srcProp.vt == VT_UI4) - { - UInt32 value = srcProp.ulVal; - if (value > 0xFF) - return false; - destProp = (Byte)value; - return true; - } - } - else if (varType == VT_BOOL) - { - bool res; - if (SetBoolProperty(res, srcProp) != S_OK) - return false; - destProp = res; - return true; - } - return false; -} - -static int FindPropIdExact(const UString &name) -{ - for (int i = 0; i < sizeof(g_NameToPropID) / sizeof(g_NameToPropID[0]); i++) - if (name.CompareNoCase(g_NameToPropID[i].Name) == 0) - return i; - return -1; -} - -static int FindPropIdStart(const UString &name) -{ - for (int i = 0; i < sizeof(g_NameToPropID) / sizeof(g_NameToPropID[0]); i++) - { - UString t = g_NameToPropID[i].Name; - if (t.CompareNoCase(name.Left(t.Length())) == 0) - return i; - } - return -1; -} - -static void SetMethodProp(COneMethodInfo &m, PROPID propID, const NCOM::CPropVariant &value) -{ - for (int j = 0; j < m.Props.Size(); j++) - if (m.Props[j].Id == propID) - return; - CProp prop; - prop.Id = propID; - prop.Value = value; - m.Props.Add(prop); -} - -void COutHandler::SetCompressionMethod2(COneMethodInfo &oneMethodInfo - #ifdef COMPRESS_MT - , UInt32 numThreads - #endif - ) -{ - UInt32 level = _level; - if (oneMethodInfo.MethodName.IsEmpty()) - oneMethodInfo.MethodName = kDefaultMethodName; - - if (oneMethodInfo.IsLzma()) - { - UInt32 dicSize = - (level >= 9 ? kLzmaDicSizeX9 : - (level >= 7 ? kLzmaDicSizeX7 : - (level >= 5 ? kLzmaDicSizeX5 : - (level >= 3 ? kLzmaDicSizeX3 : - kLzmaDicSizeX1)))); - - UInt32 algo = - (level >= 5 ? kLzmaAlgoX5 : - kLzmaAlgoX1); - - UInt32 fastBytes = - (level >= 7 ? kLzmaFastBytesX7 : - kLzmaFastBytesX1); - - const wchar_t *matchFinder = - (level >= 5 ? kLzmaMatchFinderX5 : - kLzmaMatchFinderX1); - - SetMethodProp(oneMethodInfo, NCoderPropID::kDictionarySize, dicSize); - SetMethodProp(oneMethodInfo, NCoderPropID::kAlgorithm, algo); - SetMethodProp(oneMethodInfo, NCoderPropID::kNumFastBytes, fastBytes); - SetMethodProp(oneMethodInfo, NCoderPropID::kMatchFinder, matchFinder); - #ifdef COMPRESS_MT - SetMethodProp(oneMethodInfo, NCoderPropID::kNumThreads, numThreads); - #endif - } - else if (IsDeflateMethod(oneMethodInfo.MethodName)) - { - UInt32 fastBytes = - (level >= 9 ? kDeflateFastBytesX9 : - (level >= 7 ? kDeflateFastBytesX7 : - kDeflateFastBytesX1)); - - UInt32 numPasses = - (level >= 9 ? kDeflatePassesX9 : - (level >= 7 ? kDeflatePassesX7 : - kDeflatePassesX1)); - - UInt32 algo = - (level >= 5 ? kDeflateAlgoX5 : - kDeflateAlgoX1); - - SetMethodProp(oneMethodInfo, NCoderPropID::kAlgorithm, algo); - SetMethodProp(oneMethodInfo, NCoderPropID::kNumFastBytes, fastBytes); - SetMethodProp(oneMethodInfo, NCoderPropID::kNumPasses, numPasses); - } - else if (IsBZip2Method(oneMethodInfo.MethodName)) - { - UInt32 numPasses = - (level >= 9 ? kBZip2NumPassesX9 : - (level >= 7 ? kBZip2NumPassesX7 : - kBZip2NumPassesX1)); - - UInt32 dicSize = - (level >= 5 ? kBZip2DicSizeX5 : - (level >= 3 ? kBZip2DicSizeX3 : - kBZip2DicSizeX1)); - - SetMethodProp(oneMethodInfo, NCoderPropID::kNumPasses, numPasses); - SetMethodProp(oneMethodInfo, NCoderPropID::kDictionarySize, dicSize); - #ifdef COMPRESS_MT - SetMethodProp(oneMethodInfo, NCoderPropID::kNumThreads, numThreads); - #endif - } - else if (IsPpmdMethod(oneMethodInfo.MethodName)) - { - UInt32 useMemSize = - (level >= 9 ? kPpmdMemSizeX9 : - (level >= 7 ? kPpmdMemSizeX7 : - (level >= 5 ? kPpmdMemSizeX5 : - kPpmdMemSizeX1))); - - UInt32 order = - (level >= 9 ? kPpmdOrderX9 : - (level >= 7 ? kPpmdOrderX7 : - (level >= 5 ? kPpmdOrderX5 : - kPpmdOrderX1))); - - SetMethodProp(oneMethodInfo, NCoderPropID::kUsedMemorySize, useMemSize); - SetMethodProp(oneMethodInfo, NCoderPropID::kOrder, order); - } -} - -static void SplitParams(const UString &srcString, UStringVector &subStrings) -{ - subStrings.Clear(); - UString name; - int len = srcString.Length(); - if (len == 0) - return; - for (int i = 0; i < len; i++) - { - wchar_t c = srcString[i]; - if (c == L':') - { - subStrings.Add(name); - name.Empty(); - } - else - name += c; - } - subStrings.Add(name); -} - -static void SplitParam(const UString ¶m, UString &name, UString &value) -{ - int eqPos = param.Find(L'='); - if (eqPos >= 0) - { - name = param.Left(eqPos); - value = param.Mid(eqPos + 1); - return; - } - for(int i = 0; i < param.Length(); i++) - { - wchar_t c = param[i]; - if (c >= L'0' && c <= L'9') - { - name = param.Left(i); - value = param.Mid(i); - return; - } - } - name = param; -} - -HRESULT COutHandler::SetParam(COneMethodInfo &oneMethodInfo, const UString &name, const UString &value) -{ - CProp prop; - int index = FindPropIdExact(name); - if (index < 0) - return E_INVALIDARG; - const CNameToPropID &nameToPropID = g_NameToPropID[index]; - prop.Id = nameToPropID.PropID; - - if (prop.Id == NCoderPropID::kBlockSize || - prop.Id == NCoderPropID::kDictionarySize || - prop.Id == NCoderPropID::kUsedMemorySize) - { - UInt32 dicSize; - RINOK(ParsePropDictionaryValue(value, dicSize)); - prop.Value = dicSize; - } - else - { - NCOM::CPropVariant propValue; - - if (nameToPropID.VarType == VT_BSTR) - propValue = value; - else if (nameToPropID.VarType == VT_BOOL) - { - bool res; - if (!StringToBool(value, res)) - return E_INVALIDARG; - propValue = res; - } - else - { - UInt32 number; - if (ParseStringToUInt32(value, number) == value.Length()) - propValue = number; - else - propValue = value; - } - - if (!ConvertProperty(propValue, nameToPropID.VarType, prop.Value)) - return E_INVALIDARG; - } - oneMethodInfo.Props.Add(prop); - return S_OK; -} - -HRESULT COutHandler::SetParams(COneMethodInfo &oneMethodInfo, const UString &srcString) -{ - UStringVector params; - SplitParams(srcString, params); - if (params.Size() > 0) - oneMethodInfo.MethodName = params[0]; - for (int i = 1; i < params.Size(); i++) - { - const UString ¶m = params[i]; - UString name, value; - SplitParam(param, name, value); - RINOK(SetParam(oneMethodInfo, name, value)); - } - return S_OK; -} - -HRESULT COutHandler::SetSolidSettings(const UString &s) -{ - UString s2 = s; - s2.MakeUpper(); - for (int i = 0; i < s2.Length();) - { - const wchar_t *start = ((const wchar_t *)s2) + i; - const wchar_t *end; - UInt64 v = ConvertStringToUInt64(start, &end); - if (start == end) - { - if (s2[i++] != 'E') - return E_INVALIDARG; - _solidExtension = true; - continue; - } - i += (int)(end - start); - if (i == s2.Length()) - return E_INVALIDARG; - wchar_t c = s2[i++]; - switch(c) - { - case 'F': - if (v < 1) - v = 1; - _numSolidFiles = v; - break; - case 'B': - _numSolidBytes = v; - _numSolidBytesDefined = true; - break; - case 'K': - _numSolidBytes = (v << 10); - _numSolidBytesDefined = true; - break; - case 'M': - _numSolidBytes = (v << 20); - _numSolidBytesDefined = true; - break; - case 'G': - _numSolidBytes = (v << 30); - _numSolidBytesDefined = true; - break; - default: - return E_INVALIDARG; - } - } - return S_OK; -} - -HRESULT COutHandler::SetSolidSettings(const PROPVARIANT &value) -{ - bool isSolid; - switch(value.vt) - { - case VT_EMPTY: - isSolid = true; - break; - case VT_BOOL: - isSolid = (value.boolVal != VARIANT_FALSE); - break; - case VT_BSTR: - if (StringToBool(value.bstrVal, isSolid)) - break; - return SetSolidSettings(value.bstrVal); - default: - return E_INVALIDARG; - } - if (isSolid) - InitSolid(); - else - _numSolidFiles = 1; - return S_OK; -} - -void COutHandler::Init() -{ - _removeSfxBlock = false; - _compressHeaders = true; - _encryptHeadersSpecified = false; - _encryptHeaders = false; - - WriteCTime = false; - WriteATime = false; - WriteMTime = true; - - #ifdef COMPRESS_MT - _numThreads = NSystem::GetNumberOfProcessors(); - #endif - - _level = 5; - _autoFilter = true; - _volumeMode = false; - _crcSize = 4; - InitSolid(); -} - -void COutHandler::BeforeSetProperty() -{ - Init(); - #ifdef COMPRESS_MT - numProcessors = NSystem::GetNumberOfProcessors(); - #endif - - mainDicSize = 0xFFFFFFFF; - mainDicMethodIndex = 0xFFFFFFFF; - minNumber = 0; - _crcSize = 4; -} - -HRESULT COutHandler::SetProperty(const wchar_t *nameSpec, const PROPVARIANT &value) -{ - UString name = nameSpec; - name.MakeUpper(); - if (name.IsEmpty()) - return E_INVALIDARG; - - if (name[0] == 'X') - { - name.Delete(0); - _level = 9; - return ParsePropValue(name, value, _level); - } - - if (name[0] == L'S') - { - name.Delete(0); - if (name.IsEmpty()) - return SetSolidSettings(value); - if (value.vt != VT_EMPTY) - return E_INVALIDARG; - return SetSolidSettings(name); - } - - if (name == L"CRC") - { - _crcSize = 4; - name.Delete(0, 3); - return ParsePropValue(name, value, _crcSize); - } - - UInt32 number; - int index = ParseStringToUInt32(name, number); - UString realName = name.Mid(index); - if (index == 0) - { - if(name.Left(2).CompareNoCase(L"MT") == 0) - { - #ifdef COMPRESS_MT - RINOK(ParseMtProp(name.Mid(2), value, numProcessors, _numThreads)); - #endif - return S_OK; - } - if (name.CompareNoCase(L"RSFX") == 0) return SetBoolProperty(_removeSfxBlock, value); - if (name.CompareNoCase(L"F") == 0) return SetBoolProperty(_autoFilter, value); - if (name.CompareNoCase(L"HC") == 0) return SetBoolProperty(_compressHeaders, value); - if (name.CompareNoCase(L"HCF") == 0) - { - bool compressHeadersFull = true; - RINOK(SetBoolProperty(compressHeadersFull, value)); - if (!compressHeadersFull) - return E_INVALIDARG; - return S_OK; - } - if (name.CompareNoCase(L"HE") == 0) - { - RINOK(SetBoolProperty(_encryptHeaders, value)); - _encryptHeadersSpecified = true; - return S_OK; - } - if (name.CompareNoCase(L"TC") == 0) return SetBoolProperty(WriteCTime, value); - if (name.CompareNoCase(L"TA") == 0) return SetBoolProperty(WriteATime, value); - if (name.CompareNoCase(L"TM") == 0) return SetBoolProperty(WriteMTime, value); - if (name.CompareNoCase(L"V") == 0) return SetBoolProperty(_volumeMode, value); - number = 0; - } - if (number > 10000) - return E_FAIL; - if (number < minNumber) - return E_INVALIDARG; - number -= minNumber; - for(int j = _methods.Size(); j <= (int)number; j++) - { - COneMethodInfo oneMethodInfo; - _methods.Add(oneMethodInfo); - } - - COneMethodInfo &oneMethodInfo = _methods[number]; - - if (realName.Length() == 0) - { - if (value.vt != VT_BSTR) - return E_INVALIDARG; - - RINOK(SetParams(oneMethodInfo, value.bstrVal)); - } - else - { - int index = FindPropIdStart(realName); - if (index < 0) - return E_INVALIDARG; - const CNameToPropID &nameToPropID = g_NameToPropID[index]; - CProp prop; - prop.Id = nameToPropID.PropID; - - if (prop.Id == NCoderPropID::kBlockSize || - prop.Id == NCoderPropID::kDictionarySize || - prop.Id == NCoderPropID::kUsedMemorySize) - { - UInt32 dicSize; - RINOK(ParsePropDictionaryValue(realName.Mid(MyStringLen(nameToPropID.Name)), value, dicSize)); - prop.Value = dicSize; - if (number <= mainDicMethodIndex) - mainDicSize = dicSize; - } - else - { - int index = FindPropIdExact(realName); - if (index < 0) - return E_INVALIDARG; - const CNameToPropID &nameToPropID = g_NameToPropID[index]; - prop.Id = nameToPropID.PropID; - if (!ConvertProperty(value, nameToPropID.VarType, prop.Value)) - return E_INVALIDARG; - } - oneMethodInfo.Props.Add(prop); - } - return S_OK; -} - -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/HandlerOut.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/HandlerOut.h deleted file mode 100644 index 0fcb3806ebc2..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/HandlerOut.h +++ /dev/null @@ -1,87 +0,0 @@ -// HandlerOut.h - -#ifndef __HANDLER_OUT_H -#define __HANDLER_OUT_H - -#include "../../../Common/MyString.h" -#include "../../Common/MethodProps.h" - -namespace NArchive { - -struct COneMethodInfo -{ - CObjectVector Props; - UString MethodName; - - bool IsLzma() const; -}; - -class COutHandler -{ -public: - HRESULT SetProperty(const wchar_t *name, const PROPVARIANT &value); - - HRESULT SetSolidSettings(const UString &s); - HRESULT SetSolidSettings(const PROPVARIANT &value); - - #ifdef COMPRESS_MT - UInt32 _numThreads; - #endif - - UInt32 _crcSize; - - CObjectVector _methods; - bool _removeSfxBlock; - - UInt64 _numSolidFiles; - UInt64 _numSolidBytes; - bool _numSolidBytesDefined; - bool _solidExtension; - - bool _compressHeaders; - bool _encryptHeadersSpecified; - bool _encryptHeaders; - - bool WriteCTime; - bool WriteATime; - bool WriteMTime; - - bool _autoFilter; - UInt32 _level; - - bool _volumeMode; - - HRESULT SetParam(COneMethodInfo &oneMethodInfo, const UString &name, const UString &value); - HRESULT SetParams(COneMethodInfo &oneMethodInfo, const UString &srcString); - - void SetCompressionMethod2(COneMethodInfo &oneMethodInfo - #ifdef COMPRESS_MT - , UInt32 numThreads - #endif - ); - - void InitSolidFiles() { _numSolidFiles = (UInt64)(Int64)(-1); } - void InitSolidSize() { _numSolidBytes = (UInt64)(Int64)(-1); } - void InitSolid() - { - InitSolidFiles(); - InitSolidSize(); - _solidExtension = false; - _numSolidBytesDefined = false; - } - - void Init(); - - COutHandler() { Init(); } - - void BeforeSetProperty(); - - UInt32 minNumber; - UInt32 numProcessors; - UInt32 mainDicSize; - UInt32 mainDicMethodIndex; -}; - -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/InStreamWithCRC.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/InStreamWithCRC.cpp deleted file mode 100644 index 4b87a43c05f5..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// InStreamWithCRC.cpp - -#include "StdAfx.h" - -#include "InStreamWithCRC.h" - -STDMETHODIMP CSequentialInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize; - HRESULT result = _stream->Read(data, size, &realProcessedSize); - _size += realProcessedSize; - if (size > 0 && realProcessedSize == 0) - _wasFinished = true; - _crc = CrcUpdate(_crc, data, realProcessedSize); - if(processedSize != NULL) - *processedSize = realProcessedSize; - return result; -} - -STDMETHODIMP CInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize; - HRESULT result = _stream->Read(data, size, &realProcessedSize); - if (size > 0 && realProcessedSize == 0) - _wasFinished = true; - _size += realProcessedSize; - _crc = CrcUpdate(_crc, data, realProcessedSize); - if(processedSize != NULL) - *processedSize = realProcessedSize; - return result; -} - -STDMETHODIMP CInStreamWithCRC::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) -{ - if (seekOrigin != STREAM_SEEK_SET || offset != 0) - return E_FAIL; - _size = 0; - _crc = CRC_INIT_VAL; - return _stream->Seek(offset, seekOrigin, newPosition); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/InStreamWithCRC.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/InStreamWithCRC.h deleted file mode 100644 index b90d809533da..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/InStreamWithCRC.h +++ /dev/null @@ -1,67 +0,0 @@ -// InStreamWithCRC.h - -#ifndef __IN_STREAM_WITH_CRC_H -#define __IN_STREAM_WITH_CRC_H - -#include "../../../../C/7zCrc.h" - -#include "../../../Common/MyCom.h" - -#include "../../IStream.h" - -class CSequentialInStreamWithCRC: - public ISequentialInStream, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -private: - CMyComPtr _stream; - UInt64 _size; - UInt32 _crc; - bool _wasFinished; -public: - void SetStream(ISequentialInStream *stream) { _stream = stream; } - void Init() - { - _size = 0; - _wasFinished = false; - _crc = CRC_INIT_VAL; - } - void ReleaseStream() { _stream.Release(); } - UInt32 GetCRC() const { return CRC_GET_DIGEST(_crc); } - UInt64 GetSize() const { return _size; } - bool WasFinished() const { return _wasFinished; } -}; - -class CInStreamWithCRC: - public IInStream, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP1(IInStream) - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); -private: - CMyComPtr _stream; - UInt64 _size; - UInt32 _crc; - bool _wasFinished; -public: - void SetStream(IInStream *stream) { _stream = stream; } - void Init() - { - _size = 0; - _wasFinished = false; - _crc = CRC_INIT_VAL; - } - void ReleaseStream() { _stream.Release(); } - UInt32 GetCRC() const { return CRC_GET_DIGEST(_crc); } - UInt64 GetSize() const { return _size; } - bool WasFinished() const { return _wasFinished; } -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ItemNameUtils.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ItemNameUtils.cpp deleted file mode 100644 index 8b5cfd340ea0..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ItemNameUtils.cpp +++ /dev/null @@ -1,59 +0,0 @@ -// Archive/Common/ItemNameUtils.cpp - -#include "StdAfx.h" - -#include "ItemNameUtils.h" - -namespace NArchive { -namespace NItemName { - -static const wchar_t kOSDirDelimiter = WCHAR_PATH_SEPARATOR; -static const wchar_t kDirDelimiter = L'/'; - -UString MakeLegalName(const UString &name) -{ - UString zipName = name; - zipName.Replace(kOSDirDelimiter, kDirDelimiter); - return zipName; -} - -UString GetOSName(const UString &name) -{ - UString newName = name; - newName.Replace(kDirDelimiter, kOSDirDelimiter); - return newName; -} - -UString GetOSName2(const UString &name) -{ - if (name.IsEmpty()) - return UString(); - UString newName = GetOSName(name); - if (newName[newName.Length() - 1] == kOSDirDelimiter) - newName.Delete(newName.Length() - 1); - return newName; -} - -bool HasTailSlash(const AString &name, UINT codePage) -{ - if (name.IsEmpty()) - return false; - LPCSTR prev = - #if defined(_WIN32) && !defined(UNDER_CE) - CharPrevExA((WORD)codePage, name, &name[name.Length()], 0); - #else - (LPCSTR)(name) + (name.Length() - 1); - #endif - return (*prev == '/'); -} - -#ifndef _WIN32 -UString WinNameToOSName(const UString &name) -{ - UString newName = name; - newName.Replace(L'\\', kOSDirDelimiter); - return newName; -} -#endif - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ItemNameUtils.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ItemNameUtils.h deleted file mode 100644 index 8b91d1c68208..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ItemNameUtils.h +++ /dev/null @@ -1,24 +0,0 @@ -// Archive/Common/ItemNameUtils.h - -#ifndef __ARCHIVE_ITEMNAMEUTILS_H -#define __ARCHIVE_ITEMNAMEUTILS_H - -#include "../../../Common/MyString.h" - -namespace NArchive { -namespace NItemName { - - UString MakeLegalName(const UString &name); - UString GetOSName(const UString &name); - UString GetOSName2(const UString &name); - bool HasTailSlash(const AString &name, UINT codePage); - - #ifdef _WIN32 - inline UString WinNameToOSName(const UString &name) { return name; } - #else - UString WinNameToOSName(const UString &name); - #endif - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/MultiStream.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/MultiStream.cpp deleted file mode 100644 index 33bb91ed8864..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/MultiStream.cpp +++ /dev/null @@ -1,201 +0,0 @@ -// MultiStream.cpp - -#include "StdAfx.h" - -#include "MultiStream.h" - -STDMETHODIMP CMultiStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - if(processedSize != NULL) - *processedSize = 0; - while(_streamIndex < Streams.Size() && size > 0) - { - CSubStreamInfo &s = Streams[_streamIndex]; - if (_pos == s.Size) - { - _streamIndex++; - _pos = 0; - continue; - } - RINOK(s.Stream->Seek(s.Pos + _pos, STREAM_SEEK_SET, 0)); - UInt32 sizeToRead = UInt32(MyMin((UInt64)size, s.Size - _pos)); - UInt32 realProcessed; - HRESULT result = s.Stream->Read(data, sizeToRead, &realProcessed); - data = (void *)((Byte *)data + realProcessed); - size -= realProcessed; - if(processedSize != NULL) - *processedSize += realProcessed; - _pos += realProcessed; - _seekPos += realProcessed; - RINOK(result); - break; - } - return S_OK; -} - -STDMETHODIMP CMultiStream::Seek(Int64 offset, UInt32 seekOrigin, - UInt64 *newPosition) -{ - UInt64 newPos; - switch(seekOrigin) - { - case STREAM_SEEK_SET: - newPos = offset; - break; - case STREAM_SEEK_CUR: - newPos = _seekPos + offset; - break; - case STREAM_SEEK_END: - newPos = _totalLength + offset; - break; - default: - return STG_E_INVALIDFUNCTION; - } - _seekPos = 0; - for (_streamIndex = 0; _streamIndex < Streams.Size(); _streamIndex++) - { - UInt64 size = Streams[_streamIndex].Size; - if (newPos < _seekPos + size) - { - _pos = newPos - _seekPos; - _seekPos += _pos; - if (newPosition != 0) - *newPosition = newPos; - return S_OK; - } - _seekPos += size; - } - if (newPos == _seekPos) - { - if (newPosition != 0) - *newPosition = newPos; - return S_OK; - } - return E_FAIL; -} - - -/* -class COutVolumeStream: - public ISequentialOutStream, - public CMyUnknownImp -{ - int _volIndex; - UInt64 _volSize; - UInt64 _curPos; - CMyComPtr _volumeStream; - COutArchive _archive; - CCRC _crc; - -public: - MY_UNKNOWN_IMP - - CFileItem _file; - CUpdateOptions _options; - CMyComPtr VolumeCallback; - void Init(IArchiveUpdateCallback2 *volumeCallback, - const UString &name) - { - _file.Name = name; - _file.IsStartPosDefined = true; - _file.StartPos = 0; - - VolumeCallback = volumeCallback; - _volIndex = 0; - _volSize = 0; - } - - HRESULT Flush(); - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -HRESULT COutVolumeStream::Flush() -{ - if (_volumeStream) - { - _file.UnPackSize = _curPos; - _file.FileCRC = _crc.GetDigest(); - RINOK(WriteVolumeHeader(_archive, _file, _options)); - _archive.Close(); - _volumeStream.Release(); - _file.StartPos += _file.UnPackSize; - } - return S_OK; -} -*/ - -/* -STDMETHODIMP COutMultiStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - if(processedSize != NULL) - *processedSize = 0; - while(size > 0) - { - if (_streamIndex >= Streams.Size()) - { - CSubStreamInfo subStream; - RINOK(VolumeCallback->GetVolumeSize(Streams.Size(), &subStream.Size)); - RINOK(VolumeCallback->GetVolumeStream(Streams.Size(), &subStream.Stream)); - subStream.Pos = 0; - Streams.Add(subStream); - continue; - } - CSubStreamInfo &subStream = Streams[_streamIndex]; - if (_offsetPos >= subStream.Size) - { - _offsetPos -= subStream.Size; - _streamIndex++; - continue; - } - if (_offsetPos != subStream.Pos) - { - CMyComPtr outStream; - RINOK(subStream.Stream.QueryInterface(IID_IOutStream, &outStream)); - RINOK(outStream->Seek(_offsetPos, STREAM_SEEK_SET, NULL)); - subStream.Pos = _offsetPos; - } - - UInt32 curSize = (UInt32)MyMin((UInt64)size, subStream.Size - subStream.Pos); - UInt32 realProcessed; - RINOK(subStream.Stream->Write(data, curSize, &realProcessed)); - data = (void *)((Byte *)data + realProcessed); - size -= realProcessed; - subStream.Pos += realProcessed; - _offsetPos += realProcessed; - _absPos += realProcessed; - if (_absPos > _length) - _length = _absPos; - if(processedSize != NULL) - *processedSize += realProcessed; - if (subStream.Pos == subStream.Size) - { - _streamIndex++; - _offsetPos = 0; - } - if (realProcessed != curSize && realProcessed == 0) - return E_FAIL; - } - return S_OK; -} - -STDMETHODIMP COutMultiStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) -{ - if(seekOrigin >= 3) - return STG_E_INVALIDFUNCTION; - switch(seekOrigin) - { - case STREAM_SEEK_SET: - _absPos = offset; - break; - case STREAM_SEEK_CUR: - _absPos += offset; - break; - case STREAM_SEEK_END: - _absPos = _length + offset; - break; - } - _offsetPos = _absPos; - _streamIndex = 0; - return S_OK; -} -*/ diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/MultiStream.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/MultiStream.h deleted file mode 100644 index 133a06f9fd07..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/MultiStream.h +++ /dev/null @@ -1,76 +0,0 @@ -// MultiStream.h - -#ifndef __MULTISTREAM_H -#define __MULTISTREAM_H - -#include "../../../Common/MyCom.h" -#include "../../../Common/MyVector.h" -#include "../../Archive/IArchive.h" - -class CMultiStream: - public IInStream, - public CMyUnknownImp -{ - int _streamIndex; - UInt64 _pos; - UInt64 _seekPos; - UInt64 _totalLength; -public: - struct CSubStreamInfo - { - CMyComPtr Stream; - UInt64 Pos; - UInt64 Size; - }; - CObjectVector Streams; - void Init() - { - _streamIndex = 0; - _pos = 0; - _seekPos = 0; - _totalLength = 0; - for (int i = 0; i < Streams.Size(); i++) - _totalLength += Streams[i].Size; - } - - MY_UNKNOWN_IMP1(IInStream) - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); -}; - -/* -class COutMultiStream: - public IOutStream, - public CMyUnknownImp -{ - int _streamIndex; // required stream - UInt64 _offsetPos; // offset from start of _streamIndex index - UInt64 _absPos; - UInt64 _length; - - struct CSubStreamInfo - { - CMyComPtr Stream; - UInt64 Size; - UInt64 Pos; - }; - CObjectVector Streams; -public: - CMyComPtr VolumeCallback; - void Init() - { - _streamIndex = 0; - _offsetPos = 0; - _absPos = 0; - _length = 0; - } - - MY_UNKNOWN_IMP1(IOutStream) - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); -}; -*/ - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp deleted file mode 100644 index e0d3894b528d..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// OutStreamWithCRC.cpp - -#include "StdAfx.h" - -#include "OutStreamWithCRC.h" - -STDMETHODIMP COutStreamWithCRC::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - HRESULT result = S_OK; - if (_stream) - result = _stream->Write(data, size, &size); - if (_calculate) - _crc = CrcUpdate(_crc, data, size); - _size += size; - if (processedSize != NULL) - *processedSize = size; - return result; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/OutStreamWithCRC.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/OutStreamWithCRC.h deleted file mode 100644 index d9eb6469897d..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/OutStreamWithCRC.h +++ /dev/null @@ -1,36 +0,0 @@ -// OutStreamWithCRC.h - -#ifndef __OUT_STREAM_WITH_CRC_H -#define __OUT_STREAM_WITH_CRC_H - -#include "../../../../C/7zCrc.h" - -#include "../../../Common/MyCom.h" - -#include "../../IStream.h" - -class COutStreamWithCRC: - public ISequentialOutStream, - public CMyUnknownImp -{ - CMyComPtr _stream; - UInt64 _size; - UInt32 _crc; - bool _calculate; -public: - MY_UNKNOWN_IMP - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - void SetStream(ISequentialOutStream *stream) { _stream = stream; } - void ReleaseStream() { _stream.Release(); } - void Init(bool calculate = true) - { - _size = 0; - _calculate = calculate; - _crc = CRC_INIT_VAL; - } - void InitCRC() { _crc = CRC_INIT_VAL; } - UInt64 GetSize() const { return _size; } - UInt32 GetCRC() const { return CRC_GET_DIGEST(_crc); } -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ParseProperties.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ParseProperties.cpp deleted file mode 100644 index 5550a23bc257..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ParseProperties.cpp +++ /dev/null @@ -1,177 +0,0 @@ -// ParseProperties.cpp - -#include "StdAfx.h" - -#include "ParseProperties.h" - -#include "Common/StringToInt.h" -#include "Common/MyCom.h" - -HRESULT ParsePropValue(const UString &name, const PROPVARIANT &prop, UInt32 &resValue) -{ - if (prop.vt == VT_UI4) - { - if (!name.IsEmpty()) - return E_INVALIDARG; - resValue = prop.ulVal; - } - else if (prop.vt == VT_EMPTY) - { - if(!name.IsEmpty()) - { - const wchar_t *start = name; - const wchar_t *end; - UInt64 v = ConvertStringToUInt64(start, &end); - if (end - start != name.Length()) - return E_INVALIDARG; - resValue = (UInt32)v; - } - } - else - return E_INVALIDARG; - return S_OK; -} - -static const int kLogarithmicSizeLimit = 32; -static const wchar_t kByteSymbol = L'B'; -static const wchar_t kKiloByteSymbol = L'K'; -static const wchar_t kMegaByteSymbol = L'M'; - -HRESULT ParsePropDictionaryValue(const UString &srcStringSpec, UInt32 &dicSize) -{ - UString srcString = srcStringSpec; - srcString.MakeUpper(); - - const wchar_t *start = srcString; - const wchar_t *end; - UInt64 number = ConvertStringToUInt64(start, &end); - int numDigits = (int)(end - start); - if (numDigits == 0 || srcString.Length() > numDigits + 1) - return E_INVALIDARG; - if (srcString.Length() == numDigits) - { - if (number >= kLogarithmicSizeLimit) - return E_INVALIDARG; - dicSize = (UInt32)1 << (int)number; - return S_OK; - } - switch (srcString[numDigits]) - { - case kByteSymbol: - if (number >= ((UInt64)1 << kLogarithmicSizeLimit)) - return E_INVALIDARG; - dicSize = (UInt32)number; - break; - case kKiloByteSymbol: - if (number >= ((UInt64)1 << (kLogarithmicSizeLimit - 10))) - return E_INVALIDARG; - dicSize = (UInt32)(number << 10); - break; - case kMegaByteSymbol: - if (number >= ((UInt64)1 << (kLogarithmicSizeLimit - 20))) - return E_INVALIDARG; - dicSize = (UInt32)(number << 20); - break; - default: - return E_INVALIDARG; - } - return S_OK; -} - -HRESULT ParsePropDictionaryValue(const UString &name, const PROPVARIANT &prop, UInt32 &resValue) -{ - if (name.IsEmpty()) - { - if (prop.vt == VT_UI4) - { - UInt32 logDicSize = prop.ulVal; - if (logDicSize >= 32) - return E_INVALIDARG; - resValue = (UInt32)1 << logDicSize; - return S_OK; - } - if (prop.vt == VT_BSTR) - return ParsePropDictionaryValue(prop.bstrVal, resValue); - return E_INVALIDARG; - } - return ParsePropDictionaryValue(name, resValue); -} - -bool StringToBool(const UString &s, bool &res) -{ - if (s.IsEmpty() || s.CompareNoCase(L"ON") == 0 || s.Compare(L"+") == 0) - { - res = true; - return true; - } - if (s.CompareNoCase(L"OFF") == 0 || s.Compare(L"-") == 0) - { - res = false; - return true; - } - return false; -} - -HRESULT SetBoolProperty(bool &dest, const PROPVARIANT &value) -{ - switch(value.vt) - { - case VT_EMPTY: - dest = true; - return S_OK; - case VT_BOOL: - dest = (value.boolVal != VARIANT_FALSE); - return S_OK; - /* - case VT_UI4: - dest = (value.ulVal != 0); - break; - */ - case VT_BSTR: - return StringToBool(value.bstrVal, dest) ? S_OK : E_INVALIDARG; - } - return E_INVALIDARG; -} - -int ParseStringToUInt32(const UString &srcString, UInt32 &number) -{ - const wchar_t *start = srcString; - const wchar_t *end; - UInt64 number64 = ConvertStringToUInt64(start, &end); - if (number64 > 0xFFFFFFFF) - { - number = 0; - return 0; - } - number = (UInt32)number64; - return (int)(end - start); -} - -HRESULT ParseMtProp(const UString &name, const PROPVARIANT &prop, UInt32 defaultNumThreads, UInt32 &numThreads) -{ - if (name.IsEmpty()) - { - switch(prop.vt) - { - case VT_UI4: - numThreads = prop.ulVal; - break; - default: - { - bool val; - RINOK(SetBoolProperty(val, prop)); - numThreads = (val ? defaultNumThreads : 1); - break; - } - } - } - else - { - UInt32 number; - int index = ParseStringToUInt32(name, number); - if (index != name.Length()) - return E_INVALIDARG; - numThreads = number; - } - return S_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ParseProperties.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ParseProperties.h deleted file mode 100644 index c64fc1ea17b8..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/ParseProperties.h +++ /dev/null @@ -1,18 +0,0 @@ -// ParseProperties.h - -#ifndef __PARSEPROPERTIES_H -#define __PARSEPROPERTIES_H - -#include "Common/MyString.h" -#include "Common/Types.h" - -HRESULT ParsePropValue(const UString &name, const PROPVARIANT &prop, UInt32 &resValue); -HRESULT ParsePropDictionaryValue(const UString &srcStringSpec, UInt32 &dicSize); -HRESULT ParsePropDictionaryValue(const UString &name, const PROPVARIANT &prop, UInt32 &resValue); - -bool StringToBool(const UString &s, bool &res); -HRESULT SetBoolProperty(bool &dest, const PROPVARIANT &value); -int ParseStringToUInt32(const UString &srcString, UInt32 &number); -HRESULT ParseMtProp(const UString &name, const PROPVARIANT &prop, UInt32 defaultNumThreads, UInt32 &numThreads); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/StdAfx.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/StdAfx.h deleted file mode 100644 index a4e6173121b1..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Common/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" -#include "../../../Common/NewHandler.h" - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/DllExports2.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/DllExports2.cpp deleted file mode 100644 index a45b5c9d9d2b..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/DllExports2.cpp +++ /dev/null @@ -1,74 +0,0 @@ -// DLLExports.cpp - -#include "StdAfx.h" - -#include "../../Common/MyInitGuid.h" - -#if defined(_WIN32) && defined(_7ZIP_LARGE_PAGES) -#include "../../../C/Alloc.h" -#endif - -#include "../../Common/ComTry.h" - -#include "../../Windows/NtCheck.h" -#include "../../Windows/PropVariant.h" - -#include "../ICoder.h" -#include "../IPassword.h" - -#include "IArchive.h" - -HINSTANCE g_hInstance; - -#define NT_CHECK_FAIL_ACTION return FALSE; - -extern "C" -BOOL WINAPI DllMain( - #ifdef UNDER_CE - HANDLE - #else - HINSTANCE - #endif - hInstance, DWORD dwReason, LPVOID /*lpReserved*/) -{ - if (dwReason == DLL_PROCESS_ATTACH) - { - g_hInstance = (HINSTANCE)hInstance; - NT_CHECK; - } - return TRUE; -} - -DEFINE_GUID(CLSID_CArchiveHandler, -0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00); - -static const UInt16 kDecodeId = 0x2790; - -DEFINE_GUID(CLSID_CCodec, -0x23170F69, 0x40C1, kDecodeId, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); - -STDAPI CreateCoder(const GUID *clsid, const GUID *iid, void **outObject); -STDAPI CreateArchiver(const GUID *classID, const GUID *iid, void **outObject); - -STDAPI CreateObject(const GUID *clsid, const GUID *iid, void **outObject) -{ - // COM_TRY_BEGIN - *outObject = 0; - if (*iid == IID_ICompressCoder || *iid == IID_ICompressCoder2 || *iid == IID_ICompressFilter) - { - return CreateCoder(clsid, iid, outObject); - } - else - { - return CreateArchiver(clsid, iid, outObject); - } - // COM_TRY_END -} - -STDAPI SetLargePageMode() -{ - #if defined(_WIN32) && defined(_7ZIP_LARGE_PAGES) - SetLargePageSize(); - #endif - return S_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/IArchive.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/IArchive.h deleted file mode 100644 index e4101cc7167e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/IArchive.h +++ /dev/null @@ -1,234 +0,0 @@ -// IArchive.h - -#ifndef __IARCHIVE_H -#define __IARCHIVE_H - -#include "../IProgress.h" -#include "../IStream.h" -#include "../PropID.h" - -#define ARCHIVE_INTERFACE_SUB(i, base, x) DECL_INTERFACE_SUB(i, base, 6, x) -#define ARCHIVE_INTERFACE(i, x) ARCHIVE_INTERFACE_SUB(i, IUnknown, x) - -namespace NFileTimeType -{ - enum EEnum - { - kWindows, - kUnix, - kDOS - }; -} - -namespace NArchive -{ - enum - { - kName = 0, - kClassID, - kExtension, - kAddExtension, - kUpdate, - kKeepName, - kStartSignature, - kFinishSignature, - kAssociate - }; - - namespace NExtract - { - namespace NAskMode - { - enum - { - kExtract = 0, - kTest, - kSkip - }; - } - namespace NOperationResult - { - enum - { - kOK = 0, - kUnSupportedMethod, - kDataError, - kCRCError - }; - } - } - namespace NUpdate - { - namespace NOperationResult - { - enum - { - kOK = 0, - kError - }; - } - } -} - -#define INTERFACE_IArchiveOpenCallback(x) \ - STDMETHOD(SetTotal)(const UInt64 *files, const UInt64 *bytes) x; \ - STDMETHOD(SetCompleted)(const UInt64 *files, const UInt64 *bytes) x; \ - -ARCHIVE_INTERFACE(IArchiveOpenCallback, 0x10) -{ - INTERFACE_IArchiveOpenCallback(PURE); -}; - - -#define INTERFACE_IArchiveExtractCallback(x) \ - INTERFACE_IProgress(x) \ - STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode) x; \ - STDMETHOD(PrepareOperation)(Int32 askExtractMode) x; \ - STDMETHOD(SetOperationResult)(Int32 resultEOperationResult) x; \ - -ARCHIVE_INTERFACE_SUB(IArchiveExtractCallback, IProgress, 0x20) -{ - INTERFACE_IArchiveExtractCallback(PURE) -}; - - -#define INTERFACE_IArchiveOpenVolumeCallback(x) \ - STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value) x; \ - STDMETHOD(GetStream)(const wchar_t *name, IInStream **inStream) x; \ - -ARCHIVE_INTERFACE(IArchiveOpenVolumeCallback, 0x30) -{ - INTERFACE_IArchiveOpenVolumeCallback(PURE); -}; - - -ARCHIVE_INTERFACE(IInArchiveGetStream, 0x40) -{ - STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream) PURE; -}; - - -ARCHIVE_INTERFACE(IArchiveOpenSetSubArchiveName, 0x50) -{ - STDMETHOD(SetSubArchiveName)(const wchar_t *name) PURE; -}; - - -/* -IInArchive::Extract: - indices must be sorted - numItems = 0xFFFFFFFF means "all files" - testMode != 0 means "test files without writing to outStream" -*/ - -#define INTERFACE_IInArchive(x) \ - STDMETHOD(Open)(IInStream *stream, const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *openArchiveCallback) x; \ - STDMETHOD(Close)() x; \ - STDMETHOD(GetNumberOfItems)(UInt32 *numItems) x; \ - STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) x; \ - STDMETHOD(Extract)(const UInt32* indices, UInt32 numItems, Int32 testMode, IArchiveExtractCallback *extractCallback) x; \ - STDMETHOD(GetArchiveProperty)(PROPID propID, PROPVARIANT *value) x; \ - STDMETHOD(GetNumberOfProperties)(UInt32 *numProperties) x; \ - STDMETHOD(GetPropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) x; \ - STDMETHOD(GetNumberOfArchiveProperties)(UInt32 *numProperties) x; \ - STDMETHOD(GetArchivePropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) x; - -ARCHIVE_INTERFACE(IInArchive, 0x60) -{ - INTERFACE_IInArchive(PURE) -}; - -ARCHIVE_INTERFACE(IArchiveOpenSeq, 0x61) -{ - STDMETHOD(OpenSeq)(ISequentialInStream *stream) PURE; -}; - -#define INTERFACE_IArchiveUpdateCallback(x) \ - INTERFACE_IProgress(x); \ - STDMETHOD(GetUpdateItemInfo)(UInt32 index, \ - Int32 *newData, /*1 - new data, 0 - old data */ \ - Int32 *newProperties, /* 1 - new properties, 0 - old properties */ \ - UInt32 *indexInArchive /* -1 if there is no in archive, or if doesn't matter */ \ - ) x; \ - STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) x; \ - STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **inStream) x; \ - STDMETHOD(SetOperationResult)(Int32 operationResult) x; \ - -ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback, IProgress, 0x80) -{ - INTERFACE_IArchiveUpdateCallback(PURE); -}; - -#define INTERFACE_IArchiveUpdateCallback2(x) \ - INTERFACE_IArchiveUpdateCallback(x) \ - STDMETHOD(GetVolumeSize)(UInt32 index, UInt64 *size) x; \ - STDMETHOD(GetVolumeStream)(UInt32 index, ISequentialOutStream **volumeStream) x; \ - -ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback2, IArchiveUpdateCallback, 0x82) -{ - INTERFACE_IArchiveUpdateCallback2(PURE); -}; - - -#define INTERFACE_IOutArchive(x) \ - STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems, IArchiveUpdateCallback *updateCallback) x; \ - STDMETHOD(GetFileTimeType)(UInt32 *type) x; - -ARCHIVE_INTERFACE(IOutArchive, 0xA0) -{ - INTERFACE_IOutArchive(PURE) -}; - - -ARCHIVE_INTERFACE(ISetProperties, 0x03) -{ - STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) PURE; -}; - - -#define IMP_IInArchive_GetProp(k) \ - (UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) \ - { if(index >= sizeof(k) / sizeof(k[0])) return E_INVALIDARG; \ - const STATPROPSTG &srcItem = k[index]; \ - *propID = srcItem.propid; *varType = srcItem.vt; *name = 0; return S_OK; } \ - -#define IMP_IInArchive_GetProp_WITH_NAME(k) \ - (UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) \ - { if(index >= sizeof(k) / sizeof(k[0])) return E_INVALIDARG; \ - const STATPROPSTG &srcItem = k[index]; \ - *propID = srcItem.propid; *varType = srcItem.vt; \ - if (srcItem.lpwstrName == 0) *name = 0; else *name = ::SysAllocString(srcItem.lpwstrName); return S_OK; } \ - -#define IMP_IInArchive_Props \ - STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProperties) \ - { *numProperties = sizeof(kProps) / sizeof(kProps[0]); return S_OK; } \ - STDMETHODIMP CHandler::GetPropertyInfo IMP_IInArchive_GetProp(kProps) - -#define IMP_IInArchive_Props_WITH_NAME \ - STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProperties) \ - { *numProperties = sizeof(kProps) / sizeof(kProps[0]); return S_OK; } \ - STDMETHODIMP CHandler::GetPropertyInfo IMP_IInArchive_GetProp_WITH_NAME(kProps) - - -#define IMP_IInArchive_ArcProps \ - STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \ - { *numProperties = sizeof(kArcProps) / sizeof(kArcProps[0]); return S_OK; } \ - STDMETHODIMP CHandler::GetArchivePropertyInfo IMP_IInArchive_GetProp(kArcProps) - -#define IMP_IInArchive_ArcProps_WITH_NAME \ - STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \ - { *numProperties = sizeof(kArcProps) / sizeof(kArcProps[0]); return S_OK; } \ - STDMETHODIMP CHandler::GetArchivePropertyInfo IMP_IInArchive_GetProp_WITH_NAME(kArcProps) - -#define IMP_IInArchive_ArcProps_NO_Table \ - STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \ - { *numProperties = 0; return S_OK; } \ - STDMETHODIMP CHandler::GetArchivePropertyInfo(UInt32, BSTR *, PROPID *, VARTYPE *) \ - { return E_NOTIMPL; } \ - -#define IMP_IInArchive_ArcProps_NO \ - IMP_IInArchive_ArcProps_NO_Table \ - STDMETHODIMP CHandler::GetArchiveProperty(PROPID, PROPVARIANT *value) \ - { value->vt = VT_EMPTY; return S_OK; } - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/Icons/7z.ico b/modules/lib7z/LZMASDK/CPP/7zip/Archive/Icons/7z.ico deleted file mode 100644 index 319753a1772db054fd0c04de24a105769a5a0da2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4710 zcmeH~ziT5$6vv-)3K$_0yK&`0adqw%rZQ=aS<;!i#@D(V@*fyO2wS-h1PtR!MG}%C z5PW4CfgwdawcVWIz{Ld($hIOI5;>sI5-$3 zI5;>sI5;>sI2cVhI5;>sI5;>s7sI5;@Cgbf}J9!`0rWEH@|sGmTKH0*lG zaPcJfB=UfIxL6r*dL|w&9xhfEczAetczAetcvz|6;o;!n;NhU9^YHL+@NkIaO7vDj z^5hS?l~=0+D{=>-tkmQVa0(<1BnWT{2DNN`ASh;RUgMm!u6 z91)rtrEG6+%g)Y@?CtHz{{Frk zA0Nx%;h~(Kp32$TnVg@W%f-coTwPts_4Tz}{+i^A!GPa!MRoNzpaXcODXywXy8pGX zf!rhAV)tHIDbm3}Ke?-?W;&qX#XqQh8j~G5VTPz5yM?H?S)aYx-x#NG6o>^iz9E=J zK@^8hXXekbwcA3ov(BFv>yqrNA$0km#WzeWHJAoZtj|juBx3YSYu78heYDHT2x$Ec z0{i@wSp8by!ITrF^=H^lho@>Rll}~HpI@nEKfs1DYyDgM55~ZjU>1H#IfMGAWz63K z@ZWem)sM?WXWinLrg}OSxBT6xIpP;o{fkUh-?dZrKO6y8a^qG%82l!tQ) zXNiY%%8hdao9I#f{g>j~>0r0kC*E%6ABB z3s*-+if>*3I8AIqjEYvv0!q2BA{#v$rMQ?&zs8gMz0^>0xXqMEa16}bskLTiu_Q5 R(A?DK`tq{2um0t8*YEBV)$afR diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/LzmaHandler.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/LzmaHandler.cpp deleted file mode 100644 index 59cd8ac7d09a..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/LzmaHandler.cpp +++ /dev/null @@ -1,431 +0,0 @@ -// LzmaHandler.cpp - -#include "StdAfx.h" - -#include "../../../C/CpuArch.h" - -#include "Common/ComTry.h" -#include "Common/IntToString.h" - -#include "Windows/PropVariant.h" - -#include "../Common/CreateCoder.h" -#include "../Common/ProgressUtils.h" -#include "../Common/RegisterArc.h" -#include "../Common/StreamUtils.h" - -#include "../Compress/LzmaDecoder.h" - -#include "Common/DummyOutStream.h" - -using namespace NWindows; - -namespace NArchive { -namespace NLzma { - -static bool CheckDicSize(const Byte *p) -{ - UInt32 dicSize = GetUi32(p); - for (int i = 1; i <= 30; i++) - if (dicSize == ((UInt32)2 << i) || dicSize == ((UInt32)3 << i)) - return true; - return (dicSize == 0xFFFFFFFF); -} - -STATPROPSTG kProps[] = -{ - { NULL, kpidSize, VT_UI8}, - { NULL, kpidPackSize, VT_UI8}, - { NULL, kpidMethod, VT_BSTR} -}; - -struct CHeader -{ - UInt64 Size; - Byte FilterID; - Byte LzmaProps[5]; - - UInt32 GetDicSize() const { return GetUi32(LzmaProps + 1); } - bool HasSize() const { return (Size != (UInt64)(Int64)-1); } - bool Parse(const Byte *buf, bool isThereFilter); -}; - -bool CHeader::Parse(const Byte *buf, bool isThereFilter) -{ - FilterID = 0; - if (isThereFilter) - FilterID = buf[0]; - const Byte *sig = buf + (isThereFilter ? 1 : 0); - for (int i = 0; i < 5; i++) - LzmaProps[i] = sig[i]; - Size = GetUi64(sig + 5); - return - LzmaProps[0] < 5 * 5 * 9 && - FilterID < 2 && - (!HasSize() || Size < ((UInt64)1 << 56)) && - CheckDicSize(LzmaProps + 1); -} - -class CDecoder -{ - NCompress::NLzma::CDecoder *_lzmaDecoderSpec; - CMyComPtr _lzmaDecoder; - CMyComPtr _bcjStream; -public: - ~CDecoder(); - HRESULT Create(DECL_EXTERNAL_CODECS_LOC_VARS - bool filtered, ISequentialInStream *inStream); - - HRESULT Code(const CHeader &header, ISequentialOutStream *outStream, ICompressProgressInfo *progress); - - UInt64 GetInputProcessedSize() const { return _lzmaDecoderSpec->GetInputProcessedSize(); } - - void ReleaseInStream() { if (_lzmaDecoder) _lzmaDecoderSpec->ReleaseInStream(); } - - HRESULT ReadInput(Byte *data, UInt32 size, UInt32 *processedSize) - { return _lzmaDecoderSpec->ReadFromInputStream(data, size, processedSize); } -}; - -static const UInt64 k_BCJ = 0x03030103; - -HRESULT CDecoder::Create( - DECL_EXTERNAL_CODECS_LOC_VARS - bool filteredMode, ISequentialInStream *inStream) -{ - if (!_lzmaDecoder) - { - _lzmaDecoderSpec = new NCompress::NLzma::CDecoder; - _lzmaDecoder = _lzmaDecoderSpec; - } - - if (filteredMode) - { - if (!_bcjStream) - { - CMyComPtr coder; - RINOK(CreateCoder(EXTERNAL_CODECS_LOC_VARS k_BCJ, coder, false)); - if (!coder) - return E_NOTIMPL; - coder.QueryInterface(IID_ISequentialOutStream, &_bcjStream); - if (!_bcjStream) - return E_NOTIMPL; - } - } - - return _lzmaDecoderSpec->SetInStream(inStream); -} - -CDecoder::~CDecoder() -{ - ReleaseInStream(); -} - -HRESULT CDecoder::Code(const CHeader &header, ISequentialOutStream *outStream, - ICompressProgressInfo *progress) -{ - if (header.FilterID > 1) - return E_NOTIMPL; - - { - CMyComPtr setDecoderProperties; - _lzmaDecoder.QueryInterface(IID_ICompressSetDecoderProperties2, &setDecoderProperties); - if (!setDecoderProperties) - return E_NOTIMPL; - RINOK(setDecoderProperties->SetDecoderProperties2(header.LzmaProps, 5)); - } - - CMyComPtr setOutStream; - - bool filteredMode = (header.FilterID == 1); - - if (filteredMode) - { - _bcjStream.QueryInterface(IID_ICompressSetOutStream, &setOutStream); - if (!setOutStream) - return E_NOTIMPL; - RINOK(setOutStream->SetOutStream(outStream)); - outStream = _bcjStream; - } - - const UInt64 *Size = header.HasSize() ? &header.Size : NULL; - HRESULT res = _lzmaDecoderSpec->CodeResume(outStream, Size, progress); - - if (filteredMode) - { - CMyComPtr flush; - _bcjStream.QueryInterface(IID_IOutStreamFlush, &flush); - if (flush) - { - HRESULT res2 = flush->Flush(); - if (res == S_OK) - res = res2; - } - HRESULT res2 = setOutStream->ReleaseOutStream(); - if (res == S_OK) - res = res2; - } - RINOK(res); - - return S_OK; -} - - -class CHandler: - public IInArchive, - public IArchiveOpenSeq, - PUBLIC_ISetCompressCodecsInfo - public CMyUnknownImp -{ - CHeader _header; - bool _lzma86; - UInt64 _startPosition; - UInt64 _packSize; - bool _packSizeDefined; - CMyComPtr _stream; - CMyComPtr _seqStream; - - DECL_EXTERNAL_CODECS_VARS - DECL_ISetCompressCodecsInfo - -public: - MY_QUERYINTERFACE_BEGIN - MY_QUERYINTERFACE_ENTRY(IInArchive) - MY_QUERYINTERFACE_ENTRY(IArchiveOpenSeq) - QUERY_ENTRY_ISetCompressCodecsInfo - MY_QUERYINTERFACE_END - MY_ADDREF_RELEASE - - INTERFACE_IInArchive(;) - STDMETHOD(OpenSeq)(ISequentialInStream *stream); - - CHandler(bool lzma86) { _lzma86 = lzma86; } - - unsigned GetHeaderSize() const { return 5 + 8 + (_lzma86 ? 1 : 0); } - -}; - -IMP_IInArchive_Props -IMP_IInArchive_ArcProps_NO_Table - -STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value) -{ - NCOM::CPropVariant prop; - switch(propID) - { - case kpidPhySize: if (_packSizeDefined) prop = _packSize; break; - } - prop.Detach(value); - return S_OK; -} - -STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems) -{ - *numItems = 1; - return S_OK; -} - -static void DictSizeToString(UInt32 value, char *s) -{ - for (int i = 0; i <= 31; i++) - if ((UInt32(1) << i) == value) - { - ::ConvertUInt32ToString(i, s); - return; - } - char c = 'b'; - if ((value & ((1 << 20) - 1)) == 0) - { - value >>= 20; - c = 'm'; - } - else if ((value & ((1 << 10) - 1)) == 0) - { - value >>= 10; - c = 'k'; - } - ::ConvertUInt32ToString(value, s); - int p = MyStringLen(s); - s[p++] = c; - s[p++] = '\0'; -} - -static void MyStrCat(char *d, const char *s) -{ - MyStringCopy(d + MyStringLen(d), s); -} - -STDMETHODIMP CHandler::GetProperty(UInt32 /* index */, PROPID propID, PROPVARIANT *value) -{ - NCOM::CPropVariant prop; - switch(propID) - { - case kpidSize: if (_stream && _header.HasSize()) prop = _header.Size; break; - case kpidPackSize: if (_packSizeDefined) prop = _packSize; break; - case kpidMethod: - if (_stream) - { - char s[64]; - s[0] = '\0'; - if (_header.FilterID != 0) - MyStrCat(s, "BCJ "); - MyStrCat(s, "LZMA:"); - DictSizeToString(_header.GetDicSize(), s + MyStringLen(s)); - prop = s; - } - break; - } - prop.Detach(value); - return S_OK; -} - -STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCallback *) -{ - RINOK(inStream->Seek(0, STREAM_SEEK_CUR, &_startPosition)); - - const UInt32 kBufSize = 1 + 5 + 8 + 1; - Byte buf[kBufSize]; - - RINOK(ReadStream_FALSE(inStream, buf, kBufSize)); - - if (!_header.Parse(buf, _lzma86)) - return S_FALSE; - const Byte *start = buf + GetHeaderSize(); - if (start[0] != 0) - return S_FALSE; - - UInt64 endPos; - RINOK(inStream->Seek(0, STREAM_SEEK_END, &endPos)); - _packSize = endPos - _startPosition; - _packSizeDefined = true; - - _stream = inStream; - _seqStream = inStream; - return S_OK; -} - -STDMETHODIMP CHandler::OpenSeq(ISequentialInStream *stream) -{ - Close(); - _seqStream = stream; - return S_OK; -} - -STDMETHODIMP CHandler::Close() -{ - _packSizeDefined = false; - _stream.Release(); - _seqStream.Release(); - return S_OK; -} - - -STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems, - Int32 testMode, IArchiveExtractCallback *extractCallback) -{ - COM_TRY_BEGIN - if (numItems == 0) - return S_OK; - if (numItems != (UInt32)-1 && (numItems != 1 || indices[0] != 0)) - return E_INVALIDARG; - - if (_stream) - extractCallback->SetTotal(_packSize); - - - CMyComPtr realOutStream; - Int32 askMode = testMode ? - NExtract::NAskMode::kTest : - NExtract::NAskMode::kExtract; - RINOK(extractCallback->GetStream(0, &realOutStream, askMode)); - if (!testMode && !realOutStream) - return S_OK; - - extractCallback->PrepareOperation(askMode); - - CDummyOutStream *outStreamSpec = new CDummyOutStream; - CMyComPtr outStream(outStreamSpec); - outStreamSpec->SetStream(realOutStream); - outStreamSpec->Init(); - realOutStream.Release(); - - CLocalProgress *lps = new CLocalProgress; - CMyComPtr progress = lps; - lps->Init(extractCallback, true); - - if (_stream) - { - RINOK(_stream->Seek(_startPosition, STREAM_SEEK_SET, NULL)); - } - - CDecoder decoder; - HRESULT result = decoder.Create( - EXTERNAL_CODECS_VARS - _lzma86, _seqStream); - RINOK(result); - - Int32 opRes = NExtract::NOperationResult::kOK; - bool firstItem = true; - - for (;;) - { - lps->OutSize = outStreamSpec->GetSize(); - lps->InSize = _packSize = decoder.GetInputProcessedSize(); - _packSizeDefined = true; - RINOK(lps->SetCur()); - - CHeader st; - - const UInt32 kBufSize = 1 + 5 + 8; - Byte buf[kBufSize]; - const UInt32 headerSize = GetHeaderSize(); - UInt32 processed; - RINOK(decoder.ReadInput(buf, headerSize, &processed)); - if (processed != headerSize) - break; - - if (!st.Parse(buf, _lzma86)) - break; - firstItem = false; - - result = decoder.Code(st, outStream, progress); - if (result == E_NOTIMPL) - { - opRes = NExtract::NOperationResult::kUnSupportedMethod; - break; - } - if (result == S_FALSE) - { - opRes = NExtract::NOperationResult::kDataError; - break; - } - RINOK(result); - } - if (firstItem) - return E_FAIL; - outStream.Release(); - return extractCallback->SetOperationResult(opRes); - COM_TRY_END -} - -IMPL_ISetCompressCodecsInfo - -static IInArchive *CreateArc() { return new CHandler(false); } -static IInArchive *CreateArc86() { return new CHandler(true); } - -namespace NLzmaAr { - -static CArcInfo g_ArcInfo = - { L"lzma", L"lzma", 0, 0xA, { 0 }, 0, true, CreateArc, NULL }; -REGISTER_ARC(Lzma) - -} - -namespace NLzma86Ar { - -static CArcInfo g_ArcInfo = - { L"lzma86", L"lzma86", 0, 0xB, { 0 }, 0, true, CreateArc86, NULL }; -REGISTER_ARC(Lzma86) - -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/SplitHandler.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/SplitHandler.cpp deleted file mode 100644 index e5b9183ce6ff..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/SplitHandler.cpp +++ /dev/null @@ -1,367 +0,0 @@ -// SplitHandler.cpp - -#include "StdAfx.h" - -#include "Common/ComTry.h" -#include "Common/MyString.h" - -#include "Windows/PropVariant.h" - -#include "../Common/ProgressUtils.h" -#include "../Common/RegisterArc.h" - -#include "../Compress/CopyCoder.h" - -#include "Common/MultiStream.h" - -using namespace NWindows; - -namespace NArchive { -namespace NSplit { - -STATPROPSTG kProps[] = -{ - { NULL, kpidPath, VT_BSTR}, - { NULL, kpidSize, VT_UI8} -}; - -STATPROPSTG kArcProps[] = -{ - { NULL, kpidNumVolumes, VT_UI4} -}; - -class CHandler: - public IInArchive, - public IInArchiveGetStream, - public CMyUnknownImp -{ - UString _subName; - CObjectVector > _streams; - CRecordVector _sizes; - UInt64 _totalSize; -public: - MY_UNKNOWN_IMP2(IInArchive, IInArchiveGetStream) - INTERFACE_IInArchive(;) - STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream); -}; - -IMP_IInArchive_Props -IMP_IInArchive_ArcProps - -STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value) -{ - NCOM::CPropVariant prop; - switch(propID) - { - case kpidMainSubfile: prop = (UInt32)0; break; - case kpidNumVolumes: prop = (UInt32)_streams.Size(); break; - } - prop.Detach(value); - return S_OK; -} - -struct CSeqName -{ - UString _unchangedPart; - UString _changedPart; - bool _splitStyle; - - UString GetNextName() - { - UString newName; - if (_splitStyle) - { - int i; - int numLetters = _changedPart.Length(); - for (i = numLetters - 1; i >= 0; i--) - { - wchar_t c = _changedPart[i]; - if (c == 'z') - { - c = 'a'; - newName = c + newName; - continue; - } - else if (c == 'Z') - { - c = 'A'; - newName = c + newName; - continue; - } - c++; - if ((c == 'z' || c == 'Z') && i == 0) - { - _unchangedPart += c; - wchar_t newChar = (c == 'z') ? L'a' : L'A'; - newName.Empty(); - numLetters++; - for (int k = 0; k < numLetters; k++) - newName += newChar; - break; - } - newName = c + newName; - i--; - for (; i >= 0; i--) - newName = _changedPart[i] + newName; - break; - } - } - else - { - int i; - int numLetters = _changedPart.Length(); - for (i = numLetters - 1; i >= 0; i--) - { - wchar_t c = _changedPart[i]; - if (c == L'9') - { - c = L'0'; - newName = c + newName; - if (i == 0) - newName = UString(L'1') + newName; - continue; - } - c++; - newName = c + newName; - i--; - for (; i >= 0; i--) - newName = _changedPart[i] + newName; - break; - } - } - _changedPart = newName; - return _unchangedPart + _changedPart; - } -}; - -STDMETHODIMP CHandler::Open(IInStream *stream, - const UInt64 * /* maxCheckStartPosition */, - IArchiveOpenCallback *openArchiveCallback) -{ - COM_TRY_BEGIN - Close(); - if (openArchiveCallback == 0) - return S_FALSE; - // try - { - CMyComPtr openVolumeCallback; - CMyComPtr openArchiveCallbackWrap = openArchiveCallback; - if (openArchiveCallbackWrap.QueryInterface(IID_IArchiveOpenVolumeCallback, - &openVolumeCallback) != S_OK) - return S_FALSE; - - UString name; - { - NCOM::CPropVariant prop; - RINOK(openVolumeCallback->GetProperty(kpidName, &prop)); - if (prop.vt != VT_BSTR) - return S_FALSE; - name = prop.bstrVal; - } - - int dotPos = name.ReverseFind('.'); - UString prefix, ext; - if (dotPos >= 0) - { - prefix = name.Left(dotPos + 1); - ext = name.Mid(dotPos + 1); - } - else - ext = name; - UString extBig = ext; - extBig.MakeUpper(); - - CSeqName seqName; - - int numLetters = 2; - bool splitStyle = false; - if (extBig.Right(2) == L"AA") - { - splitStyle = true; - while (numLetters < extBig.Length()) - { - if (extBig[extBig.Length() - numLetters - 1] != 'A') - break; - numLetters++; - } - } - else if (ext.Right(2) == L"01") - { - while (numLetters < extBig.Length()) - { - if (extBig[extBig.Length() - numLetters - 1] != '0') - break; - numLetters++; - } - if (numLetters != ext.Length()) - return S_FALSE; - } - else - return S_FALSE; - - _streams.Add(stream); - - seqName._unchangedPart = prefix + ext.Left(extBig.Length() - numLetters); - seqName._changedPart = ext.Right(numLetters); - seqName._splitStyle = splitStyle; - - if (prefix.Length() < 1) - _subName = L"file"; - else - _subName = prefix.Left(prefix.Length() - 1); - - _totalSize = 0; - UInt64 size; - { - NCOM::CPropVariant prop; - RINOK(openVolumeCallback->GetProperty(kpidSize, &prop)); - if (prop.vt != VT_UI8) - return E_INVALIDARG; - size = prop.uhVal.QuadPart; - } - _totalSize += size; - _sizes.Add(size); - - if (openArchiveCallback != NULL) - { - UInt64 numFiles = _streams.Size(); - RINOK(openArchiveCallback->SetCompleted(&numFiles, NULL)); - } - - for (;;) - { - UString fullName = seqName.GetNextName(); - CMyComPtr nextStream; - HRESULT result = openVolumeCallback->GetStream(fullName, &nextStream); - if (result == S_FALSE) - break; - if (result != S_OK) - return result; - if (!stream) - break; - { - NCOM::CPropVariant prop; - RINOK(openVolumeCallback->GetProperty(kpidSize, &prop)); - if (prop.vt != VT_UI8) - return E_INVALIDARG; - size = prop.uhVal.QuadPart; - } - _totalSize += size; - _sizes.Add(size); - _streams.Add(nextStream); - if (openArchiveCallback != NULL) - { - UInt64 numFiles = _streams.Size(); - RINOK(openArchiveCallback->SetCompleted(&numFiles, NULL)); - } - } - } - /* - catch(...) - { - return S_FALSE; - } - */ - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CHandler::Close() -{ - _sizes.Clear(); - _streams.Clear(); - return S_OK; -} - -STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems) -{ - *numItems = _streams.IsEmpty() ? 0 : 1; - return S_OK; -} - -STDMETHODIMP CHandler::GetProperty(UInt32 /* index */, PROPID propID, PROPVARIANT *value) -{ - NWindows::NCOM::CPropVariant prop; - switch(propID) - { - case kpidPath: prop = _subName; break; - case kpidSize: - case kpidPackSize: - prop = _totalSize; - break; - } - prop.Detach(value); - return S_OK; -} - -STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems, - Int32 testMode, IArchiveExtractCallback *extractCallback) -{ - COM_TRY_BEGIN - if (numItems == 0) - return S_OK; - if (numItems != (UInt32)-1 && (numItems != 1 || indices[0] != 0)) - return E_INVALIDARG; - - UInt64 currentTotalSize = 0; - RINOK(extractCallback->SetTotal(_totalSize)); - CMyComPtr outStream; - Int32 askMode = testMode ? - NExtract::NAskMode::kTest : - NExtract::NAskMode::kExtract; - RINOK(extractCallback->GetStream(0, &outStream, askMode)); - if (!testMode && !outStream) - return S_OK; - RINOK(extractCallback->PrepareOperation(askMode)); - - NCompress::CCopyCoder *copyCoderSpec = new NCompress::CCopyCoder; - CMyComPtr copyCoder = copyCoderSpec; - - CLocalProgress *lps = new CLocalProgress; - CMyComPtr progress = lps; - lps->Init(extractCallback, false); - - for (int i = 0; i < _streams.Size(); i++) - { - lps->InSize = lps->OutSize = currentTotalSize; - RINOK(lps->SetCur()); - IInStream *inStream = _streams[i]; - RINOK(inStream->Seek(0, STREAM_SEEK_SET, NULL)); - RINOK(copyCoder->Code(inStream, outStream, NULL, NULL, progress)); - currentTotalSize += copyCoderSpec->TotalSize; - } - outStream.Release(); - return extractCallback->SetOperationResult(NExtract::NOperationResult::kOK); - COM_TRY_END -} - -STDMETHODIMP CHandler::GetStream(UInt32 index, ISequentialInStream **stream) -{ - COM_TRY_BEGIN - if (index != 0) - return E_INVALIDARG; - *stream = 0; - CMultiStream *streamSpec = new CMultiStream; - CMyComPtr streamTemp = streamSpec; - for (int i = 0; i < _streams.Size(); i++) - { - CMultiStream::CSubStreamInfo subStreamInfo; - subStreamInfo.Stream = _streams[i]; - subStreamInfo.Pos = 0; - subStreamInfo.Size = _sizes[i]; - streamSpec->Streams.Add(subStreamInfo); - } - streamSpec->Init(); - *stream = streamTemp.Detach(); - return S_OK; - COM_TRY_END -} - -static IInArchive *CreateArc() { return new CHandler; } - -static CArcInfo g_ArcInfo = -{ L"Split", L"001", 0, 0xEA, { 0 }, 0, false, CreateArc, 0 }; - -REGISTER_ARC(Split) - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/StdAfx.h b/modules/lib7z/LZMASDK/CPP/7zip/Archive/StdAfx.h deleted file mode 100644 index f56e92fd88e7..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../Common/MyWindows.h" -#include "../../Common/NewHandler.h" - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Archive/XzHandler.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Archive/XzHandler.cpp deleted file mode 100644 index 248a09df760f..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Archive/XzHandler.cpp +++ /dev/null @@ -1,708 +0,0 @@ -// XzHandler.cpp - -#include "StdAfx.h" - -#include "../../../C/Alloc.h" -#include "../../../C/XzCrc64.h" -#include "../../../C/XzEnc.h" - -#include "../../Common/ComTry.h" -#include "../../Common/IntToString.h" - -#include "../ICoder.h" - -#include "../Common/CWrappers.h" -#include "../Common/ProgressUtils.h" -#include "../Common/RegisterArc.h" -#include "../Common/StreamUtils.h" - -#include "../Compress/CopyCoder.h" - -#include "IArchive.h" - -#include "Common/HandlerOut.h" - -using namespace NWindows; - -namespace NCompress { -namespace NLzma2 { - -HRESULT SetLzma2Prop(PROPID propID, const PROPVARIANT &prop, CLzma2EncProps &lzma2Props); - -}} - -static void *SzAlloc(void *, size_t size) { return MyAlloc(size); } -static void SzFree(void *, void *address) { MyFree(address); } -static ISzAlloc g_Alloc = { SzAlloc, SzFree }; - -namespace NArchive { -namespace NXz { - -struct CCrc64Gen { CCrc64Gen() { Crc64GenerateTable(); } } g_Crc64TableInit; - -class CHandler: - public IInArchive, - public IArchiveOpenSeq, - #ifndef EXTRACT_ONLY - public IOutArchive, - public ISetProperties, - public COutHandler, - #endif - public CMyUnknownImp -{ - Int64 _startPosition; - UInt64 _packSize; - UInt64 _unpackSize; - UInt64 _numBlocks; - AString _methodsString; - bool _useSeq; - UInt64 _unpackSizeDefined; - UInt64 _packSizeDefined; - - CMyComPtr _stream; - CMyComPtr _seqStream; - - UInt32 _crcSize; - - void Init() - { - _crcSize = 4; - COutHandler::Init(); - } - - HRESULT Open2(IInStream *inStream, IArchiveOpenCallback *callback); - -public: - MY_QUERYINTERFACE_BEGIN - MY_QUERYINTERFACE_ENTRY(IInArchive) - MY_QUERYINTERFACE_ENTRY(IArchiveOpenSeq) - #ifndef EXTRACT_ONLY - MY_QUERYINTERFACE_ENTRY(IOutArchive) - MY_QUERYINTERFACE_ENTRY(ISetProperties) - #endif - MY_QUERYINTERFACE_END - MY_ADDREF_RELEASE - - INTERFACE_IInArchive(;) - STDMETHOD(OpenSeq)(ISequentialInStream *stream); - - #ifndef EXTRACT_ONLY - INTERFACE_IOutArchive(;) - STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProps); - #endif - - CHandler(); -}; - -CHandler::CHandler() -{ - Init(); -} - -STATPROPSTG kProps[] = -{ - { NULL, kpidSize, VT_UI8}, - { NULL, kpidPackSize, VT_UI8}, - { NULL, kpidMethod, VT_BSTR} -}; - -STATPROPSTG kArcProps[] = -{ - { NULL, kpidMethod, VT_BSTR}, - { NULL, kpidNumBlocks, VT_UI4} -}; - -IMP_IInArchive_Props -IMP_IInArchive_ArcProps - -static char GetHex(Byte value) -{ - return (char)((value < 10) ? ('0' + value) : ('A' + (value - 10))); -} - -static inline void AddHexToString(AString &res, Byte value) -{ - res += GetHex((Byte)(value >> 4)); - res += GetHex((Byte)(value & 0xF)); -} - -static AString ConvertUInt32ToString(UInt32 value) -{ - char temp[32]; - ::ConvertUInt32ToString(value, temp); - return temp; -} - -static AString Lzma2PropToString(int prop) -{ - if ((prop & 1) == 0) - return ConvertUInt32ToString(prop / 2 + 12); - AString res; - char c; - - UInt32 size = (2 | ((prop) & 1)) << ((prop) / 2 + 1); - - if (prop > 17) - { - res = ConvertUInt32ToString(size >> 10); - c = 'm'; - } - else - { - res = ConvertUInt32ToString(size); - c = 'k'; - } - return res + c; -} - -struct CMethodNamePair -{ - UInt32 Id; - const char *Name; -}; - -static CMethodNamePair g_NamePairs[] = -{ - { XZ_ID_Subblock, "SB" }, - { XZ_ID_Delta, "Delta" }, - { XZ_ID_X86, "x86" }, - { XZ_ID_PPC, "PPC" }, - { XZ_ID_IA64, "IA64" }, - { XZ_ID_ARM, "ARM" }, - { XZ_ID_ARMT, "ARMT" }, - { XZ_ID_SPARC, "SPARC" }, - { XZ_ID_LZMA2, "LZMA2" } -}; - -static AString GetMethodString(const CXzFilter &f) -{ - AString s; - - for (int i = 0; i < sizeof(g_NamePairs) / sizeof(g_NamePairs[i]); i++) - if (g_NamePairs[i].Id == f.id) - s = g_NamePairs[i].Name; - if (s.IsEmpty()) - { - char temp[32]; - ::ConvertUInt64ToString(f.id, temp); - s = temp; - } - - if (f.propsSize > 0) - { - s += ':'; - if (f.id == XZ_ID_LZMA2 && f.propsSize == 1) - s += Lzma2PropToString(f.props[0]); - else if (f.id == XZ_ID_Delta && f.propsSize == 1) - s += ConvertUInt32ToString((UInt32)f.props[0] + 1); - else - { - s += '['; - for (UInt32 bi = 0; bi < f.propsSize; bi++) - AddHexToString(s, f.props[bi]); - s += ']'; - } - } - return s; -} - -static void AddString(AString &dest, const AString &src) -{ - if (!dest.IsEmpty()) - dest += ' '; - dest += src; -} - -static const char *kChecks[] = -{ - "NoCheck", - "CRC32", - NULL, - NULL, - "CRC64", - NULL, - NULL, - NULL, - NULL, - NULL, - "SHA256", - NULL, - NULL, - NULL, - NULL, - NULL -}; - -static AString GetCheckString(const CXzs &xzs) -{ - size_t i; - UInt32 mask = 0; - for (i = 0; i < xzs.num; i++) - mask |= ((UInt32)1 << XzFlags_GetCheckType(xzs.streams[i].flags)); - AString s; - for (i = 0; i <= XZ_CHECK_MASK; i++) - if (((mask >> i) & 1) != 0) - { - AString s2; - if (kChecks[i]) - s2 = kChecks[i]; - else - s2 = "Check-" + ConvertUInt32ToString((UInt32)i); - AddString(s, s2); - } - return s; -} - -STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value) -{ - COM_TRY_BEGIN - NWindows::NCOM::CPropVariant prop; - switch(propID) - { - case kpidNumBlocks: if (!_useSeq) prop = _numBlocks; break; - case kpidPhySize: if (_packSizeDefined) prop = _packSize; break; - case kpidMethod: if (!_methodsString.IsEmpty()) prop = _methodsString; break; - } - prop.Detach(value); - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems) -{ - *numItems = 1; - return S_OK; -} - -STDMETHODIMP CHandler::GetProperty(UInt32, PROPID propID, PROPVARIANT *value) -{ - COM_TRY_BEGIN - NWindows::NCOM::CPropVariant prop; - switch(propID) - { - case kpidSize: if (_unpackSizeDefined) prop = _unpackSize; break; - case kpidPackSize: if (_packSizeDefined) prop = _packSize; break; - case kpidMethod: if (!_methodsString.IsEmpty()) prop = _methodsString; break; - } - prop.Detach(value); - return S_OK; - COM_TRY_END -} - - -struct COpenCallbackWrap -{ - ICompressProgress p; - IArchiveOpenCallback *OpenCallback; - HRESULT Res; - COpenCallbackWrap(IArchiveOpenCallback *progress); -}; - -static SRes OpenCallbackProgress(void *pp, UInt64 inSize, UInt64 /* outSize */) -{ - COpenCallbackWrap *p = (COpenCallbackWrap *)pp; - p->Res = p->OpenCallback->SetCompleted(NULL, &inSize); - return (SRes)p->Res; -} - -COpenCallbackWrap::COpenCallbackWrap(IArchiveOpenCallback *callback) -{ - p.Progress = OpenCallbackProgress; - OpenCallback = callback; - Res = SZ_OK; -} - -struct CXzsCPP -{ - CXzs p; - CXzsCPP() { Xzs_Construct(&p); } - ~CXzsCPP() { Xzs_Free(&p, &g_Alloc); } -}; - -HRESULT CHandler::Open2(IInStream *inStream, IArchiveOpenCallback *callback) -{ - CSeekInStreamWrap inStreamImp(inStream); - - CLookToRead lookStream; - LookToRead_CreateVTable(&lookStream, True); - lookStream.realStream = &inStreamImp.p; - LookToRead_Init(&lookStream); - - COpenCallbackWrap openWrap(callback); - RINOK(inStream->Seek(0, STREAM_SEEK_END, &_packSize)); - RINOK(callback->SetTotal(NULL, &_packSize)); - - CXzsCPP xzs; - SRes res = Xzs_ReadBackward(&xzs.p, &lookStream.s, &_startPosition, &openWrap.p, &g_Alloc); - if (res == SZ_ERROR_NO_ARCHIVE && xzs.p.num > 0) - res = SZ_OK; - if (res == SZ_OK) - { - _packSize -= _startPosition; - _unpackSize = Xzs_GetUnpackSize(&xzs.p); - _unpackSizeDefined = _packSizeDefined = true; - _numBlocks = (UInt64)Xzs_GetNumBlocks(&xzs.p); - - RINOK(inStream->Seek(0, STREAM_SEEK_SET, NULL)); - CXzStreamFlags st; - CSeqInStreamWrap inStreamWrap(inStream); - SRes res2 = Xz_ReadHeader(&st, &inStreamWrap.p); - - if (res2 == SZ_OK) - { - CXzBlock block; - Bool isIndex; - UInt32 headerSizeRes; - res2 = XzBlock_ReadHeader(&block, &inStreamWrap.p, &isIndex, &headerSizeRes); - if (res2 == SZ_OK && !isIndex) - { - int numFilters = XzBlock_GetNumFilters(&block); - for (int i = 0; i < numFilters; i++) - AddString(_methodsString, GetMethodString(block.filters[i])); - } - } - AddString(_methodsString, GetCheckString(xzs.p)); - } - - if (res != SZ_OK || _startPosition != 0) - { - RINOK(inStream->Seek(0, STREAM_SEEK_SET, NULL)); - CXzStreamFlags st; - CSeqInStreamWrap inStreamWrap(inStream); - SRes res2 = Xz_ReadHeader(&st, &inStreamWrap.p); - if (res2 == SZ_OK) - { - res = res2; - _startPosition = 0; - _useSeq = True; - _unpackSizeDefined = _packSizeDefined = false; - } - } - if (res == SZ_ERROR_NO_ARCHIVE) - return S_FALSE; - RINOK(SResToHRESULT(res)); - _stream = inStream; - _seqStream = inStream; - return S_OK; -} - -STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCallback *callback) -{ - COM_TRY_BEGIN - try - { - Close(); - return Open2(inStream, callback); - } - catch(...) { return S_FALSE; } - COM_TRY_END -} - -STDMETHODIMP CHandler::OpenSeq(ISequentialInStream *stream) -{ - Close(); - _seqStream = stream; - return S_OK; -} - -STDMETHODIMP CHandler::Close() -{ - _numBlocks = 0; - _useSeq = true; - _unpackSizeDefined = _packSizeDefined = false; - _methodsString.Empty(); - _stream.Release(); - _seqStream.Release(); - return S_OK; -} - -class CSeekToSeqStream: - public IInStream, - public CMyUnknownImp -{ -public: - CMyComPtr Stream; - MY_UNKNOWN_IMP1(IInStream) - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); -}; - -STDMETHODIMP CSeekToSeqStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - return Stream->Read(data, size, processedSize); -} - -STDMETHODIMP CSeekToSeqStream::Seek(Int64, UInt32, UInt64 *) { return E_NOTIMPL; } - -struct CXzUnpackerCPP -{ - Byte *InBuf; - Byte *OutBuf; - CXzUnpacker p; - CXzUnpackerCPP(): InBuf(0), OutBuf(0) {} - ~CXzUnpackerCPP() - { - XzUnpacker_Free(&p); - MyFree(InBuf); - MyFree(OutBuf); - } -}; - -STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems, - Int32 testMode, IArchiveExtractCallback *extractCallback) -{ - COM_TRY_BEGIN - if (numItems == 0) - return S_OK; - if (numItems != (UInt32)-1 && (numItems != 1 || indices[0] != 0)) - return E_INVALIDARG; - - extractCallback->SetTotal(_packSize); - UInt64 currentTotalPacked = 0; - RINOK(extractCallback->SetCompleted(¤tTotalPacked)); - CMyComPtr realOutStream; - Int32 askMode = testMode ? - NExtract::NAskMode::kTest : - NExtract::NAskMode::kExtract; - - RINOK(extractCallback->GetStream(0, &realOutStream, askMode)); - - if (!testMode && !realOutStream) - return S_OK; - - extractCallback->PrepareOperation(askMode); - - if (_stream) - { - RINOK(_stream->Seek(_startPosition, STREAM_SEEK_SET, NULL)); - } - - CLocalProgress *lps = new CLocalProgress; - CMyComPtr progress = lps; - lps->Init(extractCallback, true); - - CCompressProgressWrap progressWrap(progress); - - SRes res; - - const UInt32 kInBufSize = 1 << 15; - const UInt32 kOutBufSize = 1 << 21; - - UInt32 inPos = 0; - UInt32 inSize = 0; - UInt32 outPos = 0; - CXzUnpackerCPP xzu; - res = XzUnpacker_Create(&xzu.p, &g_Alloc); - if (res == SZ_OK) - { - xzu.InBuf = (Byte *)MyAlloc(kInBufSize); - xzu.OutBuf = (Byte *)MyAlloc(kOutBufSize); - if (xzu.InBuf == 0 || xzu.OutBuf == 0) - res = SZ_ERROR_MEM; - } - if (res == SZ_OK) - for (;;) - { - if (inPos == inSize) - { - inPos = inSize = 0; - RINOK(_seqStream->Read(xzu.InBuf, kInBufSize, &inSize)); - } - - SizeT inLen = inSize - inPos; - SizeT outLen = kOutBufSize - outPos; - ECoderStatus status; - res = XzUnpacker_Code(&xzu.p, - xzu.OutBuf + outPos, &outLen, - xzu.InBuf + inPos, &inLen, - (inSize == 0 ? CODER_FINISH_END : CODER_FINISH_ANY), &status); - - // printf("\n_inPos = %6d inLen = %5d, outLen = %5d", inPos, inLen, outLen); - - inPos += (UInt32)inLen; - outPos += (UInt32)outLen; - lps->InSize += inLen; - lps->OutSize += outLen; - - bool finished = (((inLen == 0) && (outLen == 0)) || res != SZ_OK); - - if (outPos == kOutBufSize || finished) - { - if (realOutStream && outPos > 0) - { - RINOK(WriteStream(realOutStream, xzu.OutBuf, outPos)); - } - outPos = 0; - } - if (finished) - { - _packSize = lps->InSize; - _unpackSize = lps->OutSize; - _packSizeDefined = _unpackSizeDefined = true; - if (res == SZ_OK) - { - if (status == CODER_STATUS_NEEDS_MORE_INPUT) - { - if (XzUnpacker_IsStreamWasFinished(&xzu.p)) - _packSize -= xzu.p.padSize; - else - res = SZ_ERROR_DATA; - } - else - res = SZ_ERROR_DATA; - } - break; - } - RINOK(lps->SetCur()); - } - - Int32 opRes; - switch(res) - { - case SZ_OK: - opRes = NExtract::NOperationResult::kOK; break; - case SZ_ERROR_UNSUPPORTED: - opRes = NExtract::NOperationResult::kUnSupportedMethod; break; - case SZ_ERROR_CRC: - opRes = NExtract::NOperationResult::kCRCError; break; - case SZ_ERROR_DATA: - case SZ_ERROR_ARCHIVE: - case SZ_ERROR_NO_ARCHIVE: - opRes = NExtract::NOperationResult::kDataError; break; - default: - return SResToHRESULT(res); - } - realOutStream.Release(); - RINOK(extractCallback->SetOperationResult(opRes)); - return S_OK; - COM_TRY_END -} - -#ifndef EXTRACT_ONLY - -STDMETHODIMP CHandler::GetFileTimeType(UInt32 *timeType) -{ - *timeType = NFileTimeType::kUnix; - return S_OK; -} - -STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numItems, - IArchiveUpdateCallback *updateCallback) -{ - CSeqOutStreamWrap seqOutStream(outStream); - - if (numItems == 0) - { - SRes res = Xz_EncodeEmpty(&seqOutStream.p); - return SResToHRESULT(res); - } - - if (numItems != 1) - return E_INVALIDARG; - - Int32 newData, newProps; - UInt32 indexInArchive; - if (!updateCallback) - return E_FAIL; - RINOK(updateCallback->GetUpdateItemInfo(0, &newData, &newProps, &indexInArchive)); - - if (IntToBool(newProps)) - { - { - NCOM::CPropVariant prop; - RINOK(updateCallback->GetProperty(0, kpidIsDir, &prop)); - if (prop.vt != VT_EMPTY) - if (prop.vt != VT_BOOL || prop.boolVal != VARIANT_FALSE) - return E_INVALIDARG; - } - } - - if (IntToBool(newData)) - { - { - UInt64 size; - NCOM::CPropVariant prop; - RINOK(updateCallback->GetProperty(0, kpidSize, &prop)); - if (prop.vt != VT_UI8) - return E_INVALIDARG; - size = prop.uhVal.QuadPart; - RINOK(updateCallback->SetTotal(size)); - } - - CLzma2EncProps lzma2Props; - Lzma2EncProps_Init(&lzma2Props); - - lzma2Props.lzmaProps.level = _level; - - CMyComPtr fileInStream; - RINOK(updateCallback->GetStream(0, &fileInStream)); - - CSeqInStreamWrap seqInStream(fileInStream); - - for (int i = 0; i < _methods.Size(); i++) - { - COneMethodInfo &m = _methods[i]; - SetCompressionMethod2(m - #ifdef COMPRESS_MT - , _numThreads - #endif - ); - if (m.IsLzma()) - { - for (int j = 0; j < m.Props.Size(); j++) - { - const CProp &prop = m.Props[j]; - RINOK(NCompress::NLzma2::SetLzma2Prop(prop.Id, prop.Value, lzma2Props)); - } - } - } - - #ifdef COMPRESS_MT - lzma2Props.numTotalThreads = _numThreads; - #endif - - CLocalProgress *lps = new CLocalProgress; - CMyComPtr progress = lps; - lps->Init(updateCallback, true); - - CCompressProgressWrap progressWrap(progress); - SRes res = Xz_Encode(&seqOutStream.p, &seqInStream.p, &lzma2Props, False, &progressWrap.p); - if (res == SZ_OK) - return updateCallback->SetOperationResult(NArchive::NUpdate::NOperationResult::kOK); - return SResToHRESULT(res); - } - if (indexInArchive != 0) - return E_INVALIDARG; - if (_stream) - RINOK(_stream->Seek(_startPosition, STREAM_SEEK_SET, NULL)); - return NCompress::CopyStream(_stream, outStream, 0); -} - -STDMETHODIMP CHandler::SetProperties(const wchar_t **names, const PROPVARIANT *values, Int32 numProps) -{ - COM_TRY_BEGIN - BeforeSetProperty(); - for (int i = 0; i < numProps; i++) - { - RINOK(SetProperty(names[i], values[i])); - } - return S_OK; - COM_TRY_END -} - -#endif - -static IInArchive *CreateArc() { return new NArchive::NXz::CHandler; } -#ifndef EXTRACT_ONLY -static IOutArchive *CreateArcOut() { return new NArchive::NXz::CHandler; } -#else -#define CreateArcOut 0 -#endif - -static CArcInfo g_ArcInfo = - { L"xz", L"xz txz", L"* .tar", 0xC, {0xFD, '7' , 'z', 'X', 'Z', '\0'}, 6, true, CreateArc, CreateArcOut }; - -REGISTER_ARC(xz) - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/Alone.dsp b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/Alone.dsp deleted file mode 100644 index a9fb123d6bf0..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/Alone.dsp +++ /dev/null @@ -1,1614 +0,0 @@ -# Microsoft Developer Studio Project File - Name="Alone" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=Alone - Win32 DebugU -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "Alone.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "Alone.mak" CFG="Alone - Win32 DebugU" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "Alone - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "Alone - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "Alone - Win32 ReleaseU" (based on "Win32 (x86) Console Application") -!MESSAGE "Alone - Win32 DebugU" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "Alone - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /Gz /MT /W3 /GX /O1 /I "..\..\..\\" /D "NDEBUG" /D "_MBCS" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "COMPRESS_MT" /D "_NO_CRYPTO" /D "BREAK_HANDLER" /D "BENCH_MT" /Yu"StdAfx.h" /FD /c -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"c:\UTIL\7zr.exe" /opt:NOWIN98 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /Gz /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\\" /D "_DEBUG" /D "_MBCS" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "COMPRESS_MT" /D "_NO_CRYPTO" /D "BREAK_HANDLER" /D "BENCH_MT" /Yu"StdAfx.h" /FD /GZ /c -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"c:\UTIL\7zr.exe" /pdbtype:sept - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "ReleaseU" -# PROP BASE Intermediate_Dir "ReleaseU" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "ReleaseU" -# PROP Intermediate_Dir "ReleaseU" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "EXCLUDE_COM" /D "NO_REGISTRY" /D "FORMAT_7Z" /D "FORMAT_BZIP2" /D "FORMAT_ZIP" /D "FORMAT_TAR" /D "FORMAT_GZIP" /D "COMPRESS_LZMA" /D "COMPRESS_BCJ_X86" /D "COMPRESS_BCJ2" /D "COMPRESS_COPY" /D "COMPRESS_MF_PAT" /D "COMPRESS_MF_BT" /D "COMPRESS_PPMD" /D "COMPRESS_DEFLATE" /D "COMPRESS_IMPLODE" /D "COMPRESS_BZIP2" /D "CRYPTO_ZIP" /Yu"StdAfx.h" /FD /c -# ADD CPP /nologo /Gz /MD /W4 /GX /O1 /I "..\..\..\\" /D "NDEBUG" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "COMPRESS_MT" /D "_NO_CRYPTO" /D "BREAK_HANDLER" /D "BENCH_MT" /Yu"StdAfx.h" /FD /c -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"c:\UTIL\7za.exe" /opt:NOWIN98 -# SUBTRACT BASE LINK32 /pdb:none -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"c:\UTIL\7zr.exe" /opt:NOWIN98 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "DebugU" -# PROP BASE Intermediate_Dir "DebugU" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "DebugU" -# PROP Intermediate_Dir "DebugU" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "EXCLUDE_COM" /D "NO_REGISTRY" /D "FORMAT_7Z" /D "FORMAT_BZIP2" /D "FORMAT_ZIP" /D "FORMAT_TAR" /D "FORMAT_GZIP" /D "COMPRESS_LZMA" /D "COMPRESS_BCJ_X86" /D "COMPRESS_BCJ2" /D "COMPRESS_COPY" /D "COMPRESS_MF_PAT" /D "COMPRESS_MF_BT" /D "COMPRESS_PPMD" /D "COMPRESS_DEFLATE" /D "COMPRESS_IMPLODE" /D "COMPRESS_BZIP2" /D "CRYPTO_ZIP" /D "_MBCS" /Yu"StdAfx.h" /FD /GZ /c -# ADD CPP /nologo /Gz /MDd /W4 /Gm /GX /ZI /Od /I "..\..\..\\" /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "COMPRESS_MT" /D "_NO_CRYPTO" /D "BREAK_HANDLER" /D "BENCH_MT" /Yu"StdAfx.h" /FD /GZ /c -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"c:\UTIL\7za.exe" /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"c:\UTIL\7zr.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "Alone - Win32 Release" -# Name "Alone - Win32 Debug" -# Name "Alone - Win32 ReleaseU" -# Name "Alone - Win32 DebugU" -# Begin Group "Console" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\UI\Console\ArError.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\CompressionMode.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\ConsoleClose.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\ConsoleClose.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\ExtractCallbackConsole.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\ExtractCallbackConsole.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\List.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\List.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\Main.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\MainAr.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\OpenCallbackConsole.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\OpenCallbackConsole.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\PercentPrinter.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\PercentPrinter.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\UpdateCallbackConsole.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\UpdateCallbackConsole.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\UserInputUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\UserInputUtils.h -# End Source File -# End Group -# Begin Group "Spec" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\resource.rc -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.cpp -# ADD CPP /Yc"StdAfx.h" -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.h -# End Source File -# End Group -# Begin Group "Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Common\AutoPtr.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Buffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\CommandLineParser.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\CommandLineParser.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\ComTry.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\CRC.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Defs.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\DynamicBuffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\IntToString.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\IntToString.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\ListFileUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\ListFileUtils.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyCom.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyException.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyGuidDef.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyInitGuid.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyString.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyString.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyUnknown.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyVector.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyVector.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StdInStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StdInStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StdOutStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StdOutStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringToInt.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringToInt.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Types.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\UTFConvert.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\UTFConvert.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Wildcard.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Wildcard.h -# End Source File -# End Group -# Begin Group "Windows" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Windows\Defs.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Device.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\DLL.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\DLL.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Error.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Error.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileDir.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileDir.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileFind.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileFind.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileIO.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileIO.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileMapping.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileName.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileName.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Handle.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\MemoryLock.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\MemoryLock.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariant.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariant.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariantConversions.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariantConversions.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Synchronization.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Synchronization.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\System.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\System.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Thread.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Time.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Time.h -# End Source File -# End Group -# Begin Group "7zip Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Common\CreateCoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\CreateCoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\CrossThreadProgress.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\CrossThreadProgress.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\CWrappers.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\CWrappers.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FilePathAutoRename.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FilePathAutoRename.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FileStreams.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FileStreams.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FilterCoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FilterCoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\InBuffer.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\InBuffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\InOutTempBuffer.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\InOutTempBuffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\LimitedStreams.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\LimitedStreams.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\LockedStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\LockedStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\MethodId.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\MethodId.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\MethodProps.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\MethodProps.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\OffsetStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\OffsetStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\OutBuffer.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\OutBuffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\ProgressUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\ProgressUtils.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\RegisterArc.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\RegisterCodec.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamBinder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamBinder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamObjects.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamObjects.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamUtils.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\VirtThread.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\VirtThread.h -# End Source File -# End Group -# Begin Group "Compress" - -# PROP Default_Filter "" -# Begin Group "LZMA_Alone" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Compress\LZMA_Alone\LzmaBench.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LZMA_Alone\LzmaBench.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LZMA_Alone\LzmaBenchCon.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LZMA_Alone\LzmaBenchCon.h -# End Source File -# End Group -# Begin Source File - -SOURCE=..\..\Compress\Bcj2Coder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Bcj2Coder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Bcj2Register.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\BcjCoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\BcjCoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\BcjRegister.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\BranchCoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\BranchCoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\BranchMisc.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\BranchMisc.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\BranchRegister.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\ByteSwap.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\ByteSwap.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\CopyCoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\CopyCoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\CopyRegister.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\DeltaFilter.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Lzma2Decoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Lzma2Decoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Lzma2Encoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Lzma2Encoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Lzma2Register.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LzmaDecoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LzmaDecoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LzmaEncoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LzmaEncoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LzmaRegister.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\RangeCoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\RangeCoderBit.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\RangeCoderBitTree.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\RangeCoderOpt.h -# End Source File -# End Group -# Begin Group "Archive" - -# PROP Default_Filter "" -# Begin Group "7z" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Archive\7z\7zCompressionMode.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zCompressionMode.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zDecode.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zDecode.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zEncode.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zEncode.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zExtract.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zFolderInStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zFolderInStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zFolderOutStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zFolderOutStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zHandler.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zHandlerOut.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zHeader.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zHeader.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zIn.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zIn.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zItem.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zOut.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zOut.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zProperties.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zProperties.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zRegister.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zSpecStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zSpecStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zUpdate.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zUpdate.h -# End Source File -# End Group -# Begin Group "Archive Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Archive\Common\CoderMixer2.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\CoderMixer2.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\CoderMixer2MT.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\CoderMixer2MT.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\DummyOutStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\DummyOutStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\HandlerOut.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\HandlerOut.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\InStreamWithCRC.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\InStreamWithCRC.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\ItemNameUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\ItemNameUtils.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\MultiStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\MultiStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\OutStreamWithCRC.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\OutStreamWithCRC.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\ParseProperties.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\ParseProperties.h -# End Source File -# End Group -# Begin Source File - -SOURCE=..\..\Archive\LzmaHandler.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\SplitHandler.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\XzHandler.cpp -# End Source File -# End Group -# Begin Group "UI Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\UI\Common\ArchiveCommandLine.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ArchiveCommandLine.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ArchiveExtractCallback.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ArchiveExtractCallback.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ArchiveOpenCallback.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ArchiveOpenCallback.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\DefaultName.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\DefaultName.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\EnumDirItems.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\EnumDirItems.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\Extract.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\Extract.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ExtractingFilePath.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ExtractingFilePath.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\LoadCodecs.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\LoadCodecs.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\OpenArchive.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\OpenArchive.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\Property.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\PropIDUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\PropIDUtils.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\SetProperties.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\SetProperties.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\SortUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\SortUtils.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\TempFiles.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\TempFiles.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\Update.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\Update.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdateAction.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdateAction.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdateCallback.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdateCallback.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdatePair.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdatePair.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdateProduce.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdateProduce.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\WorkDir.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\WorkDir.h -# End Source File -# End Group -# Begin Group "7-zip" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\ICoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\IMyUnknown.h -# End Source File -# Begin Source File - -SOURCE=..\..\IPassword.h -# End Source File -# Begin Source File - -SOURCE=..\..\IProgress.h -# End Source File -# Begin Source File - -SOURCE=..\..\IStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\PropID.h -# End Source File -# End Group -# Begin Group "C" - -# PROP Default_Filter "" -# Begin Group "Xz" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\..\C\Sha256.c - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Sha256.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Xz.c - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Xz.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\XzCrc64.c - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\XzCrc64.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\XzDec.c - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\XzEnc.c - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\XzEnc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\XzIn.c - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ENDIF - -# End Source File -# End Group -# Begin Source File - -SOURCE=..\..\..\..\C\7zCrc.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\7zCrc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\7zStream.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Alloc.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Alloc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Bra.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Bra.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Bra86.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\BraIA64.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Delta.c - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Delta.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\IStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzFind.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzFind.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzFindMt.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzFindMt.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Lz\LzHash.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzHash.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Lzma2Dec.c - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Lzma2Dec.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Lzma2Enc.c - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Lzma2Enc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzmaDec.c - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzmaDec.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzmaEnc.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzmaEnc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\MtCoder.c - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -# SUBTRACT CPP /YX /Yc /Yu - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\MtCoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Threads.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Threads.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Types.h -# End Source File -# End Group -# End Target -# End Project diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/Alone.dsw b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/Alone.dsw deleted file mode 100644 index 036aab454c51..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/Alone.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "Alone"=.\Alone.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/StdAfx.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/StdAfx.cpp deleted file mode 100644 index c6d3b1fa6231..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/StdAfx.h b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/StdAfx.h deleted file mode 100644 index a4e6173121b1..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" -#include "../../../Common/NewHandler.h" - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/makefile b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/makefile deleted file mode 100644 index c6e3773bf515..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/makefile +++ /dev/null @@ -1,220 +0,0 @@ -PROG = 7zr.exe -MY_CONSOLE = 1 -CFLAGS = $(CFLAGS) -I ../../../ \ - -DCOMPRESS_MT \ - -DCOMPRESS_MF_MT \ - -D_NO_CRYPTO \ - -DBREAK_HANDLER \ - -DBENCH_MT \ - -!IFNDEF UNDER_CE -CFLAGS = $(CFLAGS) -DWIN_LONG_PATH -!ENDIF - -CONSOLE_OBJS = \ - $O\ConsoleClose.obj \ - $O\ExtractCallbackConsole.obj \ - $O\List.obj \ - $O\Main.obj \ - $O\MainAr.obj \ - $O\OpenCallbackConsole.obj \ - $O\PercentPrinter.obj \ - $O\UpdateCallbackConsole.obj \ - $O\UserInputUtils.obj \ - -COMMON_OBJS = \ - $O\CommandLineParser.obj \ - $O\CRC.obj \ - $O\IntToString.obj \ - $O\ListFileUtils.obj \ - $O\NewHandler.obj \ - $O\StdInStream.obj \ - $O\StdOutStream.obj \ - $O\MyString.obj \ - $O\StringConvert.obj \ - $O\StringToInt.obj \ - $O\UTFConvert.obj \ - $O\MyVector.obj \ - $O\Wildcard.obj \ - -WIN_OBJS = \ - $O\DLL.obj \ - $O\Error.obj \ - $O\FileDir.obj \ - $O\FileFind.obj \ - $O\FileIO.obj \ - $O\FileName.obj \ - $O\MemoryLock.obj \ - $O\PropVariant.obj \ - $O\PropVariantConversions.obj \ - $O\Synchronization.obj \ - $O\System.obj \ - $O\Time.obj \ - -7ZIP_COMMON_OBJS = \ - $O\CreateCoder.obj \ - $O\CWrappers.obj \ - $O\FilePathAutoRename.obj \ - $O\FileStreams.obj \ - $O\InBuffer.obj \ - $O\InOutTempBuffer.obj \ - $O\FilterCoder.obj \ - $O\LimitedStreams.obj \ - $O\LockedStream.obj \ - $O\MethodId.obj \ - $O\MethodProps.obj \ - $O\OffsetStream.obj \ - $O\OutBuffer.obj \ - $O\ProgressUtils.obj \ - $O\StreamBinder.obj \ - $O\StreamObjects.obj \ - $O\StreamUtils.obj \ - $O\VirtThread.obj \ - -UI_COMMON_OBJS = \ - $O\ArchiveCommandLine.obj \ - $O\ArchiveExtractCallback.obj \ - $O\ArchiveOpenCallback.obj \ - $O\DefaultName.obj \ - $O\EnumDirItems.obj \ - $O\Extract.obj \ - $O\ExtractingFilePath.obj \ - $O\LoadCodecs.obj \ - $O\OpenArchive.obj \ - $O\PropIDUtils.obj \ - $O\SetProperties.obj \ - $O\SortUtils.obj \ - $O\TempFiles.obj \ - $O\Update.obj \ - $O\UpdateAction.obj \ - $O\UpdateCallback.obj \ - $O\UpdatePair.obj \ - $O\UpdateProduce.obj \ - $O\WorkDir.obj \ - -AR_OBJS = \ - $O\LzmaHandler.obj \ - $O\SplitHandler.obj \ - $O\XzHandler.obj \ - -AR_COMMON_OBJS = \ - $O\CoderMixer2.obj \ - $O\CoderMixer2MT.obj \ - $O\CrossThreadProgress.obj \ - $O\DummyOutStream.obj \ - $O\HandlerOut.obj \ - $O\InStreamWithCRC.obj \ - $O\ItemNameUtils.obj \ - $O\MultiStream.obj \ - $O\OutStreamWithCRC.obj \ - $O\ParseProperties.obj \ - - -7Z_OBJS = \ - $O\7zCompressionMode.obj \ - $O\7zDecode.obj \ - $O\7zEncode.obj \ - $O\7zExtract.obj \ - $O\7zFolderInStream.obj \ - $O\7zFolderOutStream.obj \ - $O\7zHandler.obj \ - $O\7zHandlerOut.obj \ - $O\7zHeader.obj \ - $O\7zIn.obj \ - $O\7zOut.obj \ - $O\7zProperties.obj \ - $O\7zRegister.obj \ - $O\7zSpecStream.obj \ - $O\7zUpdate.obj \ - -COMPRESS_OBJS = \ - $O\Bcj2Coder.obj \ - $O\Bcj2Register.obj \ - $O\BcjCoder.obj \ - $O\BcjRegister.obj \ - $O\BranchCoder.obj \ - $O\BranchMisc.obj \ - $O\BranchRegister.obj \ - $O\ByteSwap.obj \ - $O\CopyCoder.obj \ - $O\CopyRegister.obj \ - $O\DeltaFilter.obj \ - $O\Lzma2Decoder.obj \ - $O\Lzma2Encoder.obj \ - $O\Lzma2Register.obj \ - $O\LzmaDecoder.obj \ - $O\LzmaEncoder.obj \ - $O\LzmaRegister.obj \ - -LZMA_BENCH_OBJS = \ - $O\LzmaBench.obj \ - $O\LzmaBenchCon.obj \ - -C_OBJS = \ - $O\7zStream.obj \ - $O\Bra.obj \ - $O\Bra86.obj \ - $O\BraIA64.obj \ - $O\Alloc.obj \ - $O\Delta.obj \ - $O\LzFind.obj \ - $O\LzFindMt.obj \ - $O\Lzma2Dec.obj \ - $O\Lzma2Enc.obj \ - $O\LzmaDec.obj \ - $O\LzmaEnc.obj \ - $O\MtCoder.obj \ - $O\Sha256.obj \ - $O\Threads.obj \ - $O\Xz.obj \ - $O\XzCrc64.obj \ - $O\XzDec.obj \ - $O\XzEnc.obj \ - $O\XzIn.obj \ - -!include "../../Crc2.mak" - -OBJS = \ - $O\StdAfx.obj \ - $(CONSOLE_OBJS) \ - $(COMMON_OBJS) \ - $(WIN_OBJS) \ - $(7ZIP_COMMON_OBJS) \ - $(UI_COMMON_OBJS) \ - $(AR_OBJS) \ - $(AR_COMMON_OBJS) \ - $(7Z_OBJS) \ - $(COMPRESS_OBJS) \ - $(LZMA_BENCH_OBJS) \ - $(C_OBJS) \ - $(CRC_OBJS) \ - $O\resource.res - - -!include "../../../Build.mak" - -$(CONSOLE_OBJS): ../../UI/Console/$(*B).cpp - $(COMPL) - -$(COMMON_OBJS): ../../../Common/$(*B).cpp - $(COMPL) -$(WIN_OBJS): ../../../Windows/$(*B).cpp - $(COMPL) -$(7ZIP_COMMON_OBJS): ../../Common/$(*B).cpp - $(COMPL) -$(UI_COMMON_OBJS): ../../UI/Common/$(*B).cpp - $(COMPL) -$(AR_OBJS): ../../Archive/$(*B).cpp - $(COMPL) -$(AR_COMMON_OBJS): ../../Archive/Common/$(*B).cpp - $(COMPL) - -$(7Z_OBJS): ../../Archive/7z/$(*B).cpp - $(COMPL) -$(COMPRESS_OBJS): ../../Compress/$(*B).cpp - $(COMPL_O2) -$(LZMA_BENCH_OBJS): ../../Compress/LZMA_Alone/$(*B).cpp - $(COMPL) -$(C_OBJS): ../../../../C/$(*B).c - $(COMPL_O2) -!include "../../Crc.mak" diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/resource.rc b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/resource.rc deleted file mode 100644 index 9b8170701f2e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Alone7z/resource.rc +++ /dev/null @@ -1,3 +0,0 @@ -#include "../../MyVersionInfo.rc" - -MY_VERSION_INFO_APP("7-Zip Standalone Console", "7za") diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp deleted file mode 100644 index c6d3b1fa6231..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h deleted file mode 100644 index a4e6173121b1..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" -#include "../../../Common/NewHandler.h" - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/makefile b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/makefile deleted file mode 100644 index df8a11900daa..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/makefile +++ /dev/null @@ -1,128 +0,0 @@ -PROG = 7zxr.dll -DEF_FILE = ../../Archive/Archive2.def -CFLAGS = $(CFLAGS) -I ../../../ \ - -DEXTRACT_ONLY \ - -DCOMPRESS_MT \ - -D_NO_CRYPTO - -COMMON_OBJS = \ - $O\CRC.obj \ - $O\IntToString.obj \ - $O\NewHandler.obj \ - $O\MyString.obj \ - $O\StringConvert.obj \ - $O\StringToInt.obj \ - $O\MyVector.obj \ - $O\Wildcard.obj \ - -WIN_OBJS = \ - $O\PropVariant.obj \ - $O\Synchronization.obj \ - $O\System.obj \ - -7ZIP_COMMON_OBJS = \ - $O\CreateCoder.obj \ - $O\CWrappers.obj \ - $O\InBuffer.obj \ - $O\FilterCoder.obj \ - $O\LimitedStreams.obj \ - $O\LockedStream.obj \ - $O\MethodId.obj \ - $O\MethodProps.obj \ - $O\OutBuffer.obj \ - $O\ProgressUtils.obj \ - $O\StreamBinder.obj \ - $O\StreamObjects.obj \ - $O\StreamUtils.obj \ - $O\VirtThread.obj \ - -AR_OBJS = \ - $O\ArchiveExports.obj \ - $O\DllExports2.obj \ - -AR_COMMON_OBJS = \ - $O\CoderMixer2.obj \ - $O\CoderMixer2MT.obj \ - $O\CrossThreadProgress.obj \ - $O\HandlerOut.obj \ - $O\ItemNameUtils.obj \ - $O\OutStreamWithCRC.obj \ - $O\ParseProperties.obj \ - - -7Z_OBJS = \ - $O\7zCompressionMode.obj \ - $O\7zDecode.obj \ - $O\7zExtract.obj \ - $O\7zFolderOutStream.obj \ - $O\7zHandler.obj \ - $O\7zHeader.obj \ - $O\7zIn.obj \ - $O\7zProperties.obj \ - $O\7zRegister.obj \ - - -COMPRESS_OBJS = \ - $O\CodecExports.obj \ - $O\Bcj2Coder.obj \ - $O\Bcj2Register.obj \ - $O\BcjCoder.obj \ - $O\BcjRegister.obj \ - $O\BranchCoder.obj \ - $O\BranchMisc.obj \ - $O\BranchRegister.obj \ - $O\ByteSwap.obj \ - $O\CopyCoder.obj \ - $O\CopyRegister.obj \ - $O\DeltaFilter.obj \ - $O\Lzma2Decoder.obj \ - $O\Lzma2Register.obj \ - $O\LzmaDecoder.obj \ - $O\LzmaRegister.obj \ - -C_OBJS = \ - $O\7zCrc.obj \ - $O\Alloc.obj \ - $O\Bra.obj \ - $O\Bra86.obj \ - $O\BraIA64.obj \ - $O\Delta.obj \ - $O\Lzma2Dec.obj \ - $O\LzmaDec.obj \ - $O\Threads.obj \ - -OBJS = \ - $O\StdAfx.obj \ - $(CONSOLE_OBJS) \ - $(COMMON_OBJS) \ - $(WIN_OBJS) \ - $(7ZIP_COMMON_OBJS) \ - $(AR_OBJS) \ - $(AR_COMMON_OBJS) \ - $(7Z_OBJS) \ - $(COMPRESS_OBJS) \ - $(C_OBJS) \ - $O\resource.res - - -!include "../../../Build.mak" - -$(COMMON_OBJS): ../../../Common/$(*B).cpp - $(COMPL) -$(WIN_OBJS): ../../../Windows/$(*B).cpp - $(COMPL) -$(7ZIP_COMMON_OBJS): ../../Common/$(*B).cpp - $(COMPL) -$(AR_OBJS): ../../Archive/$(*B).cpp - $(COMPL) -$(AR_COMMON_OBJS): ../../Archive/Common/$(*B).cpp - $(COMPL) - -$(7Z_OBJS): ../../Archive/7z/$(*B).cpp - $(COMPL) - -$(COMPRESS_OBJS): ../../Compress/$(*B).cpp - $(COMPL_O2) - -$(C_OBJS): ../../../../C/$(*B).c - $(COMPL_O2) diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/resource.rc b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/resource.rc deleted file mode 100644 index 652c4a17aaa7..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zExtractR/resource.rc +++ /dev/null @@ -1,5 +0,0 @@ -#include "../../MyVersionInfo.rc" - -MY_VERSION_INFO_DLL("7z Standalone Extracting Plugin", "7zxr") - -101 ICON "../../Archive/Icons/7z.ico" diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/StdAfx.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/StdAfx.cpp deleted file mode 100644 index c6d3b1fa6231..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/StdAfx.h b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/StdAfx.h deleted file mode 100644 index a4e6173121b1..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" -#include "../../../Common/NewHandler.h" - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/makefile b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/makefile deleted file mode 100644 index 597334f6ae71..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/makefile +++ /dev/null @@ -1,146 +0,0 @@ -PROG = 7zra.dll -DEF_FILE = ../../Archive/Archive2.def -CFLAGS = $(CFLAGS) -I ../../../ \ - -DCOMPRESS_MT \ - -DCOMPRESS_MF_MT \ - -D_NO_CRYPTO - -COMMON_OBJS = \ - $O\CRC.obj \ - $O\IntToString.obj \ - $O\NewHandler.obj \ - $O\MyString.obj \ - $O\StringConvert.obj \ - $O\StringToInt.obj \ - $O\MyVector.obj \ - $O\Wildcard.obj \ - -WIN_OBJS = \ - $O\FileDir.obj \ - $O\FileFind.obj \ - $O\FileIO.obj \ - $O\PropVariant.obj \ - $O\Synchronization.obj \ - $O\System.obj \ - -7ZIP_COMMON_OBJS = \ - $O\CreateCoder.obj \ - $O\CWrappers.obj \ - $O\InBuffer.obj \ - $O\InOutTempBuffer.obj \ - $O\FilterCoder.obj \ - $O\LimitedStreams.obj \ - $O\LockedStream.obj \ - $O\MethodId.obj \ - $O\MethodProps.obj \ - $O\OutBuffer.obj \ - $O\ProgressUtils.obj \ - $O\StreamBinder.obj \ - $O\StreamObjects.obj \ - $O\StreamUtils.obj \ - $O\VirtThread.obj \ - -AR_OBJS = \ - $O\ArchiveExports.obj \ - $O\DllExports2.obj \ - -AR_COMMON_OBJS = \ - $O\CoderMixer2.obj \ - $O\CoderMixer2MT.obj \ - $O\CrossThreadProgress.obj \ - $O\HandlerOut.obj \ - $O\InStreamWithCRC.obj \ - $O\ItemNameUtils.obj \ - $O\OutStreamWithCRC.obj \ - $O\ParseProperties.obj \ - - -7Z_OBJS = \ - $O\7zCompressionMode.obj \ - $O\7zDecode.obj \ - $O\7zEncode.obj \ - $O\7zExtract.obj \ - $O\7zFolderInStream.obj \ - $O\7zFolderOutStream.obj \ - $O\7zHandler.obj \ - $O\7zHandlerOut.obj \ - $O\7zHeader.obj \ - $O\7zIn.obj \ - $O\7zOut.obj \ - $O\7zProperties.obj \ - $O\7zSpecStream.obj \ - $O\7zUpdate.obj \ - $O\7zRegister.obj \ - - -COMPRESS_OBJS = \ - $O\CodecExports.obj \ - $O\Bcj2Coder.obj \ - $O\Bcj2Register.obj \ - $O\BcjCoder.obj \ - $O\BcjRegister.obj \ - $O\BranchCoder.obj \ - $O\BranchMisc.obj \ - $O\BranchRegister.obj \ - $O\ByteSwap.obj \ - $O\CopyCoder.obj \ - $O\CopyRegister.obj \ - $O\DeltaFilter.obj \ - $O\Lzma2Decoder.obj \ - $O\Lzma2Encoder.obj \ - $O\Lzma2Register.obj \ - $O\LzmaDecoder.obj \ - $O\LzmaEncoder.obj \ - $O\LzmaRegister.obj \ - -C_OBJS = \ - $O\7zCrc.obj \ - $O\Alloc.obj \ - $O\Bra.obj \ - $O\Bra86.obj \ - $O\BraIA64.obj \ - $O\Delta.obj \ - $O\LzFind.obj \ - $O\LzFindMt.obj \ - $O\Lzma2Dec.obj \ - $O\Lzma2Enc.obj \ - $O\LzmaDec.obj \ - $O\LzmaEnc.obj \ - $O\MtCoder.obj \ - $O\Threads.obj \ - -OBJS = \ - $O\StdAfx.obj \ - $(CONSOLE_OBJS) \ - $(COMMON_OBJS) \ - $(WIN_OBJS) \ - $(7ZIP_COMMON_OBJS) \ - $(AR_OBJS) \ - $(AR_COMMON_OBJS) \ - $(7Z_OBJS) \ - $(COMPRESS_OBJS) \ - $(C_OBJS) \ - $O\resource.res - - -!include "../../../Build.mak" - -$(COMMON_OBJS): ../../../Common/$(*B).cpp - $(COMPL) -$(WIN_OBJS): ../../../Windows/$(*B).cpp - $(COMPL) -$(7ZIP_COMMON_OBJS): ../../Common/$(*B).cpp - $(COMPL) -$(AR_OBJS): ../../Archive/$(*B).cpp - $(COMPL) -$(AR_COMMON_OBJS): ../../Archive/Common/$(*B).cpp - $(COMPL) - -$(7Z_OBJS): ../../Archive/7z/$(*B).cpp - $(COMPL) - -$(COMPRESS_OBJS): ../../Compress/$(*B).cpp - $(COMPL_O2) - -$(C_OBJS): ../../../../C/$(*B).c - $(COMPL_O2) diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/resource.rc b/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/resource.rc deleted file mode 100644 index b67ef0c783d3..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Bundles/Format7zR/resource.rc +++ /dev/null @@ -1,5 +0,0 @@ -#include "../../MyVersionInfo.rc" - -MY_VERSION_INFO_DLL("7z Standalone Plugin", "7zr") - -101 ICON "../../Archive/Icons/7z.ico" diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/CWrappers.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/CWrappers.cpp deleted file mode 100644 index 1509bfb7b695..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/CWrappers.cpp +++ /dev/null @@ -1,127 +0,0 @@ -// CWrappers.h - -#include "StdAfx.h" - -#include "CWrappers.h" - -#include "StreamUtils.h" - -#define PROGRESS_UNKNOWN_VALUE ((UInt64)(Int64)-1) - -#define CONVERT_PR_VAL(x) (x == PROGRESS_UNKNOWN_VALUE ? NULL : &x) - -static SRes CompressProgress(void *pp, UInt64 inSize, UInt64 outSize) -{ - CCompressProgressWrap *p = (CCompressProgressWrap *)pp; - p->Res = p->Progress->SetRatioInfo(CONVERT_PR_VAL(inSize), CONVERT_PR_VAL(outSize)); - return (SRes)p->Res; -} - -CCompressProgressWrap::CCompressProgressWrap(ICompressProgressInfo *progress) -{ - p.Progress = CompressProgress; - Progress = progress; - Res = SZ_OK; -} - -static const UInt32 kStreamStepSize = (UInt32)1 << 31; - -SRes HRESULT_To_SRes(HRESULT res, SRes defaultRes) -{ - switch(res) - { - case S_OK: return SZ_OK; - case E_OUTOFMEMORY: return SZ_ERROR_MEM; - case E_INVALIDARG: return SZ_ERROR_PARAM; - case E_ABORT: return SZ_ERROR_PROGRESS; - case S_FALSE: return SZ_ERROR_DATA; - } - return defaultRes; -} - -static SRes MyRead(void *object, void *data, size_t *size) -{ - CSeqInStreamWrap *p = (CSeqInStreamWrap *)object; - UInt32 curSize = ((*size < kStreamStepSize) ? (UInt32)*size : kStreamStepSize); - p->Res = (p->Stream->Read(data, curSize, &curSize)); - *size = curSize; - if (p->Res == S_OK) - return SZ_OK; - return HRESULT_To_SRes(p->Res, SZ_ERROR_READ); -} - -static size_t MyWrite(void *object, const void *data, size_t size) -{ - CSeqOutStreamWrap *p = (CSeqOutStreamWrap *)object; - if (p->Stream) - { - p->Res = WriteStream(p->Stream, data, size); - if (p->Res != 0) - return 0; - } - else - p->Res = S_OK; - p->Processed += size; - return size; -} - -CSeqInStreamWrap::CSeqInStreamWrap(ISequentialInStream *stream) -{ - p.Read = MyRead; - Stream = stream; -} - -CSeqOutStreamWrap::CSeqOutStreamWrap(ISequentialOutStream *stream) -{ - p.Write = MyWrite; - Stream = stream; - Res = SZ_OK; - Processed = 0; -} - -HRESULT SResToHRESULT(SRes res) -{ - switch(res) - { - case SZ_OK: return S_OK; - case SZ_ERROR_MEM: return E_OUTOFMEMORY; - case SZ_ERROR_PARAM: return E_INVALIDARG; - case SZ_ERROR_PROGRESS: return E_ABORT; - case SZ_ERROR_DATA: return S_FALSE; - } - return E_FAIL; -} - -static SRes InStreamWrap_Read(void *pp, void *data, size_t *size) -{ - CSeekInStreamWrap *p = (CSeekInStreamWrap *)pp; - UInt32 curSize = ((*size < kStreamStepSize) ? (UInt32)*size : kStreamStepSize); - p->Res = p->Stream->Read(data, curSize, &curSize); - *size = curSize; - return (p->Res == S_OK) ? SZ_OK : SZ_ERROR_READ; -} - -static SRes InStreamWrap_Seek(void *pp, Int64 *offset, ESzSeek origin) -{ - CSeekInStreamWrap *p = (CSeekInStreamWrap *)pp; - UInt32 moveMethod; - switch(origin) - { - case SZ_SEEK_SET: moveMethod = STREAM_SEEK_SET; break; - case SZ_SEEK_CUR: moveMethod = STREAM_SEEK_CUR; break; - case SZ_SEEK_END: moveMethod = STREAM_SEEK_END; break; - default: return SZ_ERROR_PARAM; - } - UInt64 newPosition; - p->Res = p->Stream->Seek(*offset, moveMethod, &newPosition); - *offset = (Int64)newPosition; - return (p->Res == S_OK) ? SZ_OK : SZ_ERROR_READ; -} - -CSeekInStreamWrap::CSeekInStreamWrap(IInStream *stream) -{ - Stream = stream; - p.Read = InStreamWrap_Read; - p.Seek = InStreamWrap_Seek; - Res = S_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/CWrappers.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/CWrappers.h deleted file mode 100644 index e41bf9b0f26b..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/CWrappers.h +++ /dev/null @@ -1,46 +0,0 @@ -// CWrappers.h - -#ifndef __C_WRAPPERS_H -#define __C_WRAPPERS_H - -#include "../../../C/Types.h" - -#include "../ICoder.h" -#include "../../Common/MyCom.h" - -struct CCompressProgressWrap -{ - ICompressProgress p; - ICompressProgressInfo *Progress; - HRESULT Res; - CCompressProgressWrap(ICompressProgressInfo *progress); -}; - -struct CSeqInStreamWrap -{ - ISeqInStream p; - ISequentialInStream *Stream; - HRESULT Res; - CSeqInStreamWrap(ISequentialInStream *stream); -}; - -struct CSeekInStreamWrap -{ - ISeekInStream p; - IInStream *Stream; - HRESULT Res; - CSeekInStreamWrap(IInStream *stream); -}; - -struct CSeqOutStreamWrap -{ - ISeqOutStream p; - ISequentialOutStream *Stream; - HRESULT Res; - UInt64 Processed; - CSeqOutStreamWrap(ISequentialOutStream *stream); -}; - -HRESULT SResToHRESULT(SRes res); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/CreateCoder.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/CreateCoder.cpp deleted file mode 100644 index 10c9f960011f..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/CreateCoder.cpp +++ /dev/null @@ -1,292 +0,0 @@ -// CreateCoder.cpp - -#include "StdAfx.h" - -#include "CreateCoder.h" - -#include "../../Windows/PropVariant.h" -#include "../../Windows/Defs.h" -#include "FilterCoder.h" -#include "RegisterCodec.h" - -static const unsigned int kNumCodecsMax = 64; -unsigned int g_NumCodecs = 0; -const CCodecInfo *g_Codecs[kNumCodecsMax]; -void RegisterCodec(const CCodecInfo *codecInfo) -{ - if (g_NumCodecs < kNumCodecsMax) - g_Codecs[g_NumCodecs++] = codecInfo; -} - -#ifdef EXTERNAL_CODECS -static HRESULT ReadNumberOfStreams(ICompressCodecsInfo *codecsInfo, UInt32 index, PROPID propID, UInt32 &res) -{ - NWindows::NCOM::CPropVariant prop; - RINOK(codecsInfo->GetProperty(index, propID, &prop)); - if (prop.vt == VT_EMPTY) - res = 1; - else if (prop.vt == VT_UI4) - res = prop.ulVal; - else - return E_INVALIDARG; - return S_OK; -} - -static HRESULT ReadIsAssignedProp(ICompressCodecsInfo *codecsInfo, UInt32 index, PROPID propID, bool &res) -{ - NWindows::NCOM::CPropVariant prop; - RINOK(codecsInfo->GetProperty(index, propID, &prop)); - if (prop.vt == VT_EMPTY) - res = true; - else if (prop.vt == VT_BOOL) - res = VARIANT_BOOLToBool(prop.boolVal); - else - return E_INVALIDARG; - return S_OK; -} - -HRESULT LoadExternalCodecs(ICompressCodecsInfo *codecsInfo, CObjectVector &externalCodecs) -{ - UInt32 num; - RINOK(codecsInfo->GetNumberOfMethods(&num)); - for (UInt32 i = 0; i < num; i++) - { - CCodecInfoEx info; - NWindows::NCOM::CPropVariant prop; - RINOK(codecsInfo->GetProperty(i, NMethodPropID::kID, &prop)); - // if (prop.vt != VT_BSTR) - // info.Id.IDSize = (Byte)SysStringByteLen(prop.bstrVal); - // memmove(info.Id.ID, prop.bstrVal, info.Id.IDSize); - if (prop.vt != VT_UI8) - { - continue; // old Interface - // return E_INVALIDARG; - } - info.Id = prop.uhVal.QuadPart; - prop.Clear(); - - RINOK(codecsInfo->GetProperty(i, NMethodPropID::kName, &prop)); - if (prop.vt == VT_BSTR) - info.Name = prop.bstrVal; - else if (prop.vt != VT_EMPTY) - return E_INVALIDARG;; - - RINOK(ReadNumberOfStreams(codecsInfo, i, NMethodPropID::kInStreams, info.NumInStreams)); - RINOK(ReadNumberOfStreams(codecsInfo, i, NMethodPropID::kOutStreams, info.NumOutStreams)); - RINOK(ReadIsAssignedProp(codecsInfo, i, NMethodPropID::kEncoderIsAssigned, info.EncoderIsAssigned)); - RINOK(ReadIsAssignedProp(codecsInfo, i, NMethodPropID::kDecoderIsAssigned, info.DecoderIsAssigned)); - - externalCodecs.Add(info); - } - return S_OK; -} - -#endif - -bool FindMethod( - #ifdef EXTERNAL_CODECS - ICompressCodecsInfo * /* codecsInfo */, const CObjectVector *externalCodecs, - #endif - const UString &name, - CMethodId &methodId, UInt32 &numInStreams, UInt32 &numOutStreams) -{ - UInt32 i; - for (i = 0; i < g_NumCodecs; i++) - { - const CCodecInfo &codec = *g_Codecs[i]; - if (name.CompareNoCase(codec.Name) == 0) - { - methodId = codec.Id; - numInStreams = codec.NumInStreams; - numOutStreams = 1; - return true; - } - } - #ifdef EXTERNAL_CODECS - if (externalCodecs) - for (i = 0; i < (UInt32)externalCodecs->Size(); i++) - { - const CCodecInfoEx &codec = (*externalCodecs)[i]; - if (codec.Name.CompareNoCase(name) == 0) - { - methodId = codec.Id; - numInStreams = codec.NumInStreams; - numOutStreams = codec.NumOutStreams; - return true; - } - } - #endif - return false; -} - -bool FindMethod( - #ifdef EXTERNAL_CODECS - ICompressCodecsInfo * /* codecsInfo */, const CObjectVector *externalCodecs, - #endif - CMethodId methodId, UString &name) -{ - UInt32 i; - for (i = 0; i < g_NumCodecs; i++) - { - const CCodecInfo &codec = *g_Codecs[i]; - if (methodId == codec.Id) - { - name = codec.Name; - return true; - } - } - #ifdef EXTERNAL_CODECS - if (externalCodecs) - for (i = 0; i < (UInt32)externalCodecs->Size(); i++) - { - const CCodecInfoEx &codec = (*externalCodecs)[i]; - if (methodId == codec.Id) - { - name = codec.Name; - return true; - } - } - #endif - return false; -} - -HRESULT CreateCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &filter, - CMyComPtr &coder, - CMyComPtr &coder2, - bool encode, bool onlyCoder) -{ - bool created = false; - UInt32 i; - for (i = 0; i < g_NumCodecs; i++) - { - const CCodecInfo &codec = *g_Codecs[i]; - if (codec.Id == methodId) - { - if (encode) - { - if (codec.CreateEncoder) - { - void *p = codec.CreateEncoder(); - if (codec.IsFilter) filter = (ICompressFilter *)p; - else if (codec.NumInStreams == 1) coder = (ICompressCoder *)p; - else coder2 = (ICompressCoder2 *)p; - created = (p != 0); - break; - } - } - else - if (codec.CreateDecoder) - { - void *p = codec.CreateDecoder(); - if (codec.IsFilter) filter = (ICompressFilter *)p; - else if (codec.NumInStreams == 1) coder = (ICompressCoder *)p; - else coder2 = (ICompressCoder2 *)p; - created = (p != 0); - break; - } - } - } - - #ifdef EXTERNAL_CODECS - if (!created && externalCodecs) - for (i = 0; i < (UInt32)externalCodecs->Size(); i++) - { - const CCodecInfoEx &codec = (*externalCodecs)[i]; - if (codec.Id == methodId) - { - if (encode) - { - if (codec.EncoderIsAssigned) - { - if (codec.IsSimpleCodec()) - { - HRESULT result = codecsInfo->CreateEncoder(i, &IID_ICompressCoder, (void **)&coder); - if (result != S_OK && result != E_NOINTERFACE && result != CLASS_E_CLASSNOTAVAILABLE) - return result; - if (!coder) - { - RINOK(codecsInfo->CreateEncoder(i, &IID_ICompressFilter, (void **)&filter)); - } - } - else - { - RINOK(codecsInfo->CreateEncoder(i, &IID_ICompressCoder2, (void **)&coder2)); - } - break; - } - } - else - if (codec.DecoderIsAssigned) - { - if (codec.IsSimpleCodec()) - { - HRESULT result = codecsInfo->CreateDecoder(i, &IID_ICompressCoder, (void **)&coder); - if (result != S_OK && result != E_NOINTERFACE && result != CLASS_E_CLASSNOTAVAILABLE) - return result; - if (!coder) - { - RINOK(codecsInfo->CreateDecoder(i, &IID_ICompressFilter, (void **)&filter)); - } - } - else - { - RINOK(codecsInfo->CreateDecoder(i, &IID_ICompressCoder2, (void **)&coder2)); - } - break; - } - } - } - #endif - - if (onlyCoder && filter) - { - CFilterCoder *coderSpec = new CFilterCoder; - coder = coderSpec; - coderSpec->Filter = filter; - } - return S_OK; -} - -HRESULT CreateCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &coder, - CMyComPtr &coder2, - bool encode) -{ - CMyComPtr filter; - return CreateCoder( - EXTERNAL_CODECS_LOC_VARS - methodId, - filter, coder, coder2, encode, true); -} - -HRESULT CreateCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &coder, bool encode) -{ - CMyComPtr filter; - CMyComPtr coder2; - return CreateCoder( - EXTERNAL_CODECS_LOC_VARS - methodId, - coder, coder2, encode); -} - -HRESULT CreateFilter( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &filter, - bool encode) -{ - CMyComPtr coder; - CMyComPtr coder2; - return CreateCoder( - EXTERNAL_CODECS_LOC_VARS - methodId, - filter, coder, coder2, encode, false); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/CreateCoder.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/CreateCoder.h deleted file mode 100644 index 9697a9c57fa5..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/CreateCoder.h +++ /dev/null @@ -1,98 +0,0 @@ -// CreateCoder.h - -#ifndef __CREATECODER_H -#define __CREATECODER_H - -#include "Common/MyCom.h" -#include "Common/MyString.h" -#include "../ICoder.h" - -#include "MethodId.h" - -#ifdef EXTERNAL_CODECS - -struct CCodecInfoEx -{ - UString Name; - CMethodId Id; - UInt32 NumInStreams; - UInt32 NumOutStreams; - bool EncoderIsAssigned; - bool DecoderIsAssigned; - bool IsSimpleCodec() const { return NumOutStreams == 1 && NumInStreams == 1; } - CCodecInfoEx(): EncoderIsAssigned(false), DecoderIsAssigned(false) {} -}; - -HRESULT LoadExternalCodecs(ICompressCodecsInfo *codecsInfo, CObjectVector &externalCodecs); - -#define PUBLIC_ISetCompressCodecsInfo public ISetCompressCodecsInfo, -#define QUERY_ENTRY_ISetCompressCodecsInfo MY_QUERYINTERFACE_ENTRY(ISetCompressCodecsInfo) -#define DECL_ISetCompressCodecsInfo STDMETHOD(SetCompressCodecsInfo)(ICompressCodecsInfo *compressCodecsInfo); -#define IMPL_ISetCompressCodecsInfo2(x) \ -STDMETHODIMP x::SetCompressCodecsInfo(ICompressCodecsInfo *compressCodecsInfo) { \ - COM_TRY_BEGIN _codecsInfo = compressCodecsInfo; return LoadExternalCodecs(_codecsInfo, _externalCodecs); COM_TRY_END } -#define IMPL_ISetCompressCodecsInfo IMPL_ISetCompressCodecsInfo2(CHandler) - -#define EXTERNAL_CODECS_VARS2 _codecsInfo, &_externalCodecs - -#define DECL_EXTERNAL_CODECS_VARS CMyComPtr _codecsInfo; CObjectVector _externalCodecs; -#define EXTERNAL_CODECS_VARS EXTERNAL_CODECS_VARS2, - -#define DECL_EXTERNAL_CODECS_LOC_VARS2 ICompressCodecsInfo *codecsInfo, const CObjectVector *externalCodecs -#define EXTERNAL_CODECS_LOC_VARS2 codecsInfo, externalCodecs - -#define DECL_EXTERNAL_CODECS_LOC_VARS DECL_EXTERNAL_CODECS_LOC_VARS2, -#define EXTERNAL_CODECS_LOC_VARS EXTERNAL_CODECS_LOC_VARS2, - -#else - -#define PUBLIC_ISetCompressCodecsInfo -#define QUERY_ENTRY_ISetCompressCodecsInfo -#define DECL_ISetCompressCodecsInfo -#define IMPL_ISetCompressCodecsInfo -#define EXTERNAL_CODECS_VARS2 -#define DECL_EXTERNAL_CODECS_VARS -#define EXTERNAL_CODECS_VARS EXTERNAL_CODECS_VARS2 -#define DECL_EXTERNAL_CODECS_LOC_VARS2 -#define EXTERNAL_CODECS_LOC_VARS2 -#define DECL_EXTERNAL_CODECS_LOC_VARS -#define EXTERNAL_CODECS_LOC_VARS - -#endif - -bool FindMethod( - DECL_EXTERNAL_CODECS_LOC_VARS - const UString &name, CMethodId &methodId, UInt32 &numInStreams, UInt32 &numOutStreams); - -bool FindMethod( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, UString &name); - - -HRESULT CreateCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &filter, - CMyComPtr &coder, - CMyComPtr &coder2, - bool encode, bool onlyCoder); - -HRESULT CreateCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &coder, - CMyComPtr &coder2, - bool encode); - -HRESULT CreateCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &coder, bool encode); - -HRESULT CreateFilter( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &filter, - bool encode); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/FilePathAutoRename.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/FilePathAutoRename.cpp deleted file mode 100644 index d357c5bcfbba..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/FilePathAutoRename.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// FilePathAutoRename.cpp - -#include "StdAfx.h" - -#include "Common/Defs.h" -#include "Common/IntToString.h" - -#include "Windows/FileFind.h" - -#include "FilePathAutoRename.h" - -using namespace NWindows; - -static bool MakeAutoName(const UString &name, - const UString &extension, unsigned value, UString &path) -{ - wchar_t number[16]; - ConvertUInt32ToString(value, number); - path = name; - path += number; - path += extension; - return NFile::NFind::DoesFileOrDirExist(path); -} - -bool AutoRenamePath(UString &fullProcessedPath) -{ - UString path; - int dotPos = fullProcessedPath.ReverseFind(L'.'); - - int slashPos = fullProcessedPath.ReverseFind(L'/'); - #ifdef _WIN32 - int slash1Pos = fullProcessedPath.ReverseFind(L'\\'); - slashPos = MyMax(slashPos, slash1Pos); - #endif - - UString name, extension; - if (dotPos > slashPos && dotPos > 0) - { - name = fullProcessedPath.Left(dotPos); - extension = fullProcessedPath.Mid(dotPos); - } - else - name = fullProcessedPath; - name += L'_'; - unsigned left = 1, right = (1 << 30); - while (left != right) - { - unsigned mid = (left + right) / 2; - if (MakeAutoName(name, extension, mid, path)) - left = mid + 1; - else - right = mid; - } - return !MakeAutoName(name, extension, right, fullProcessedPath); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/FilePathAutoRename.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/FilePathAutoRename.h deleted file mode 100644 index 43039629bb75..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/FilePathAutoRename.h +++ /dev/null @@ -1,10 +0,0 @@ -// Util/FilePathAutoRename.h - -#ifndef __FILEPATHAUTORENAME_H -#define __FILEPATHAUTORENAME_H - -#include "Common/MyString.h" - -bool AutoRenamePath(UString &fullProcessedPath); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/FileStreams.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/FileStreams.cpp deleted file mode 100644 index bb58b2c34920..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/FileStreams.cpp +++ /dev/null @@ -1,421 +0,0 @@ -// FileStreams.cpp - -#include "StdAfx.h" - -#ifndef _WIN32 -#include -#include -#include -#endif - -#ifdef SUPPORT_DEVICE_FILE -#include "../../../C/Alloc.h" -#include "../../Common/Defs.h" -#endif - -#include "FileStreams.h" - -static inline HRESULT ConvertBoolToHRESULT(bool result) -{ - #ifdef _WIN32 - if (result) - return S_OK; - DWORD lastError = ::GetLastError(); - if (lastError == 0) - return E_FAIL; - return HRESULT_FROM_WIN32(lastError); - #else - return result ? S_OK: E_FAIL; - #endif -} - -bool CInFileStream::Open(LPCTSTR fileName) -{ - return File.Open(fileName); -} - -#ifdef USE_WIN_FILE -#ifndef _UNICODE -bool CInFileStream::Open(LPCWSTR fileName) -{ - return File.Open(fileName); -} -#endif -#endif - -bool CInFileStream::OpenShared(LPCTSTR fileName, bool shareForWrite) -{ - return File.OpenShared(fileName, shareForWrite); -} - -#ifdef USE_WIN_FILE -#ifndef _UNICODE -bool CInFileStream::OpenShared(LPCWSTR fileName, bool shareForWrite) -{ - return File.OpenShared(fileName, shareForWrite); -} -#endif -#endif - -#ifdef SUPPORT_DEVICE_FILE - -static const UInt32 kClusterSize = 1 << 18; -CInFileStream::CInFileStream(): - VirtPos(0), - PhyPos(0), - Buffer(0), - BufferSize(0) -{ -} - -#endif - -CInFileStream::~CInFileStream() -{ - #ifdef SUPPORT_DEVICE_FILE - MidFree(Buffer); - #endif -} - -STDMETHODIMP CInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - #ifdef USE_WIN_FILE - - #ifdef SUPPORT_DEVICE_FILE - if (processedSize != NULL) - *processedSize = 0; - if (size == 0) - return S_OK; - if (File.IsDeviceFile) - { - if (File.LengthDefined) - { - if (VirtPos >= File.Length) - return VirtPos == File.Length ? S_OK : E_FAIL; - UInt64 rem = File.Length - VirtPos; - if (size > rem) - size = (UInt32)rem; - } - for (;;) - { - const UInt32 mask = kClusterSize - 1; - UInt64 mask2 = ~(UInt64)mask; - UInt64 alignedPos = VirtPos & mask2; - if (BufferSize > 0 && BufferStartPos == alignedPos) - { - UInt32 pos = (UInt32)VirtPos & mask; - if (pos >= BufferSize) - return S_OK; - UInt32 rem = MyMin(BufferSize - pos, size); - memcpy(data, Buffer + pos, rem); - VirtPos += rem; - if (processedSize != NULL) - *processedSize += rem; - return S_OK; - } - - bool useBuffer = false; - if ((VirtPos & mask) != 0 || ((ptrdiff_t)data & mask) != 0 ) - useBuffer = true; - else - { - UInt64 end = VirtPos + size; - if ((end & mask) != 0) - { - end &= mask2; - if (end <= VirtPos) - useBuffer = true; - else - size = (UInt32)(end - VirtPos); - } - } - if (!useBuffer) - break; - if (alignedPos != PhyPos) - { - UInt64 realNewPosition; - bool result = File.Seek(alignedPos, FILE_BEGIN, realNewPosition); - if (!result) - return ConvertBoolToHRESULT(result); - PhyPos = realNewPosition; - } - - BufferStartPos = alignedPos; - UInt32 readSize = kClusterSize; - if (File.LengthDefined) - readSize = (UInt32)MyMin(File.Length - PhyPos, (UInt64)kClusterSize); - - if (Buffer == 0) - { - Buffer = (Byte *)MidAlloc(kClusterSize); - if (Buffer == 0) - return E_OUTOFMEMORY; - } - bool result = File.Read1(Buffer, readSize, BufferSize); - if (!result) - return ConvertBoolToHRESULT(result); - - if (BufferSize == 0) - return S_OK; - PhyPos += BufferSize; - } - - if (VirtPos != PhyPos) - { - UInt64 realNewPosition; - bool result = File.Seek(VirtPos, FILE_BEGIN, realNewPosition); - if (!result) - return ConvertBoolToHRESULT(result); - PhyPos = VirtPos = realNewPosition; - } - } - #endif - - UInt32 realProcessedSize; - bool result = File.ReadPart(data, size, realProcessedSize); - if (processedSize != NULL) - *processedSize = realProcessedSize; - #ifdef SUPPORT_DEVICE_FILE - VirtPos += realProcessedSize; - PhyPos += realProcessedSize; - #endif - return ConvertBoolToHRESULT(result); - - #else - - if (processedSize != NULL) - *processedSize = 0; - ssize_t res = File.Read(data, (size_t)size); - if (res == -1) - return E_FAIL; - if (processedSize != NULL) - *processedSize = (UInt32)res; - return S_OK; - - #endif -} - -#ifdef UNDER_CE -STDMETHODIMP CStdInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - size_t s2 = fread(data, 1, size, stdout); - if (processedSize != 0) - *processedSize = s2; - return (s2 = size) ? S_OK : E_FAIL; -} -#else -STDMETHODIMP CStdInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - #ifdef _WIN32 - - DWORD realProcessedSize; - UInt32 sizeTemp = (1 << 20); - if (sizeTemp > size) - sizeTemp = size; - BOOL res = ::ReadFile(GetStdHandle(STD_INPUT_HANDLE), data, sizeTemp, &realProcessedSize, NULL); - if (processedSize != NULL) - *processedSize = realProcessedSize; - if (res == FALSE && GetLastError() == ERROR_BROKEN_PIPE) - return S_OK; - return ConvertBoolToHRESULT(res != FALSE); - - #else - - if (processedSize != NULL) - *processedSize = 0; - ssize_t res; - do - { - res = read(0, data, (size_t)size); - } - while (res < 0 && (errno == EINTR)); - if (res == -1) - return E_FAIL; - if (processedSize != NULL) - *processedSize = (UInt32)res; - return S_OK; - - #endif -} - -#endif - -STDMETHODIMP CInFileStream::Seek(Int64 offset, UInt32 seekOrigin, - UInt64 *newPosition) -{ - if (seekOrigin >= 3) - return STG_E_INVALIDFUNCTION; - - #ifdef USE_WIN_FILE - - #ifdef SUPPORT_DEVICE_FILE - if (File.IsDeviceFile) - { - UInt64 newVirtPos = offset; - switch(seekOrigin) - { - case STREAM_SEEK_SET: break; - case STREAM_SEEK_CUR: newVirtPos += VirtPos; break; - case STREAM_SEEK_END: newVirtPos += File.Length; break; - default: return STG_E_INVALIDFUNCTION; - } - VirtPos = newVirtPos; - if (newPosition) - *newPosition = newVirtPos; - return S_OK; - } - #endif - - UInt64 realNewPosition; - bool result = File.Seek(offset, seekOrigin, realNewPosition); - - #ifdef SUPPORT_DEVICE_FILE - PhyPos = VirtPos = realNewPosition; - #endif - - if (newPosition != NULL) - *newPosition = realNewPosition; - return ConvertBoolToHRESULT(result); - - #else - - off_t res = File.Seek(offset, seekOrigin); - if (res == -1) - return E_FAIL; - if (newPosition != NULL) - *newPosition = (UInt64)res; - return S_OK; - - #endif -} - -STDMETHODIMP CInFileStream::GetSize(UInt64 *size) -{ - return ConvertBoolToHRESULT(File.GetLength(*size)); -} - - -////////////////////////// -// COutFileStream - -HRESULT COutFileStream::Close() -{ - return ConvertBoolToHRESULT(File.Close()); -} - -STDMETHODIMP COutFileStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - #ifdef USE_WIN_FILE - - UInt32 realProcessedSize; - bool result = File.WritePart(data, size, realProcessedSize); - ProcessedSize += realProcessedSize; - if (processedSize != NULL) - *processedSize = realProcessedSize; - return ConvertBoolToHRESULT(result); - - #else - - if (processedSize != NULL) - *processedSize = 0; - ssize_t res = File.Write(data, (size_t)size); - if (res == -1) - return E_FAIL; - if (processedSize != NULL) - *processedSize = (UInt32)res; - ProcessedSize += res; - return S_OK; - - #endif -} - -STDMETHODIMP COutFileStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) -{ - if (seekOrigin >= 3) - return STG_E_INVALIDFUNCTION; - #ifdef USE_WIN_FILE - - UInt64 realNewPosition; - bool result = File.Seek(offset, seekOrigin, realNewPosition); - if (newPosition != NULL) - *newPosition = realNewPosition; - return ConvertBoolToHRESULT(result); - - #else - - off_t res = File.Seek(offset, seekOrigin); - if (res == -1) - return E_FAIL; - if (newPosition != NULL) - *newPosition = (UInt64)res; - return S_OK; - - #endif -} - -STDMETHODIMP COutFileStream::SetSize(Int64 newSize) -{ - #ifdef USE_WIN_FILE - UInt64 currentPos; - if (!File.Seek(0, FILE_CURRENT, currentPos)) - return E_FAIL; - bool result = File.SetLength(newSize); - UInt64 currentPos2; - result = result && File.Seek(currentPos, currentPos2); - return result ? S_OK : E_FAIL; - #else - return E_FAIL; - #endif -} - -#ifdef UNDER_CE -STDMETHODIMP CStdOutFileStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - size_t s2 = fwrite(data, 1, size, stdout); - if (processedSize != 0) - *processedSize = s2; - return (s2 = size) ? S_OK : E_FAIL; -} -#else -STDMETHODIMP CStdOutFileStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - if (processedSize != NULL) - *processedSize = 0; - - #ifdef _WIN32 - UInt32 realProcessedSize; - BOOL res = TRUE; - if (size > 0) - { - // Seems that Windows doesn't like big amounts writing to stdout. - // So we limit portions by 32KB. - UInt32 sizeTemp = (1 << 15); - if (sizeTemp > size) - sizeTemp = size; - res = ::WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), - data, sizeTemp, (DWORD *)&realProcessedSize, NULL); - size -= realProcessedSize; - data = (const void *)((const Byte *)data + realProcessedSize); - if (processedSize != NULL) - *processedSize += realProcessedSize; - } - return ConvertBoolToHRESULT(res != FALSE); - - #else - - ssize_t res; - do - { - res = write(1, data, (size_t)size); - } - while (res < 0 && (errno == EINTR)); - if (res == -1) - return E_FAIL; - if (processedSize != NULL) - *processedSize = (UInt32)res; - return S_OK; - - return S_OK; - #endif -} -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/FileStreams.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/FileStreams.h deleted file mode 100644 index 00281fdc0254..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/FileStreams.h +++ /dev/null @@ -1,144 +0,0 @@ -// FileStreams.h - -#ifndef __FILESTREAMS_H -#define __FILESTREAMS_H - -#ifdef _WIN32 -#define USE_WIN_FILE -#endif - -#ifdef USE_WIN_FILE -#include "../../Windows/FileIO.h" -#else -#include "../../Common/C_FileIO.h" -#endif - -#include "../../Common/MyCom.h" - -#include "../IStream.h" - -class CInFileStream: - public IInStream, - public IStreamGetSize, - public CMyUnknownImp -{ -public: - #ifdef USE_WIN_FILE - NWindows::NFile::NIO::CInFile File; - #ifdef SUPPORT_DEVICE_FILE - UInt64 VirtPos; - UInt64 PhyPos; - UInt64 BufferStartPos; - Byte *Buffer; - UInt32 BufferSize; - #endif - #else - NC::NFile::NIO::CInFile File; - #endif - virtual ~CInFileStream(); - - #ifdef SUPPORT_DEVICE_FILE - CInFileStream(); - #endif - - bool Open(LPCTSTR fileName); - #ifdef USE_WIN_FILE - #ifndef _UNICODE - bool Open(LPCWSTR fileName); - #endif - #endif - - bool OpenShared(LPCTSTR fileName, bool shareForWrite); - #ifdef USE_WIN_FILE - #ifndef _UNICODE - bool OpenShared(LPCWSTR fileName, bool shareForWrite); - #endif - #endif - - MY_UNKNOWN_IMP2(IInStream, IStreamGetSize) - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); - - STDMETHOD(GetSize)(UInt64 *size); -}; - -class CStdInFileStream: - public ISequentialInStream, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - - virtual ~CStdInFileStream() {} - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -}; - -class COutFileStream: - public IOutStream, - public CMyUnknownImp -{ - #ifdef USE_WIN_FILE - NWindows::NFile::NIO::COutFile File; - #else - NC::NFile::NIO::COutFile File; - #endif -public: - virtual ~COutFileStream() {} - bool Create(LPCTSTR fileName, bool createAlways) - { - ProcessedSize = 0; - return File.Create(fileName, createAlways); - } - bool Open(LPCTSTR fileName, DWORD creationDisposition) - { - ProcessedSize = 0; - return File.Open(fileName, creationDisposition); - } - #ifdef USE_WIN_FILE - #ifndef _UNICODE - bool Create(LPCWSTR fileName, bool createAlways) - { - ProcessedSize = 0; - return File.Create(fileName, createAlways); - } - bool Open(LPCWSTR fileName, DWORD creationDisposition) - { - ProcessedSize = 0; - return File.Open(fileName, creationDisposition); - } - #endif - #endif - - HRESULT Close(); - - UInt64 ProcessedSize; - - #ifdef USE_WIN_FILE - bool SetTime(const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime) - { - return File.SetTime(cTime, aTime, mTime); - } - bool SetMTime(const FILETIME *mTime) { return File.SetMTime(mTime); } - #endif - - - MY_UNKNOWN_IMP1(IOutStream) - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); - STDMETHOD(SetSize)(Int64 newSize); -}; - -class CStdOutFileStream: - public ISequentialOutStream, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - - virtual ~CStdOutFileStream() {} - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/FilterCoder.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/FilterCoder.cpp deleted file mode 100644 index 348de269ca98..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/FilterCoder.cpp +++ /dev/null @@ -1,255 +0,0 @@ -// FilterCoder.cpp - -#include "StdAfx.h" - -#include "../../../C/Alloc.h" - -#include "../../Common/Defs.h" - -#include "FilterCoder.h" -#include "StreamUtils.h" - -static const UInt32 kBufferSize = 1 << 17; - -CFilterCoder::CFilterCoder() -{ - _buffer = (Byte *)::MidAlloc(kBufferSize); -} - -CFilterCoder::~CFilterCoder() -{ - ::MidFree(_buffer); -} - -HRESULT CFilterCoder::WriteWithLimit(ISequentialOutStream *outStream, UInt32 size) -{ - if (_outSizeIsDefined) - { - UInt64 remSize = _outSize - _nowPos64; - if (size > remSize) - size = (UInt32)remSize; - } - RINOK(WriteStream(outStream, _buffer, size)); - _nowPos64 += size; - return S_OK; -} - - -STDMETHODIMP CFilterCoder::Code(ISequentialInStream *inStream, - ISequentialOutStream *outStream, const UInt64 * /* inSize */, const UInt64 *outSize, - ICompressProgressInfo *progress) -{ - RINOK(Init()); - UInt32 bufferPos = 0; - _outSizeIsDefined = (outSize != 0); - if (_outSizeIsDefined) - _outSize = *outSize; - - while(NeedMore()) - { - size_t processedSize = kBufferSize - bufferPos; - - // Change it: It can be optimized using ReadPart - RINOK(ReadStream(inStream, _buffer + bufferPos, &processedSize)); - - UInt32 endPos = bufferPos + (UInt32)processedSize; - - bufferPos = Filter->Filter(_buffer, endPos); - if (bufferPos > endPos) - { - for (; endPos< bufferPos; endPos++) - _buffer[endPos] = 0; - bufferPos = Filter->Filter(_buffer, endPos); - } - - if (bufferPos == 0) - { - if (endPos > 0) - return WriteWithLimit(outStream, endPos); - return S_OK; - } - RINOK(WriteWithLimit(outStream, bufferPos)); - if (progress != NULL) - { - RINOK(progress->SetRatioInfo(&_nowPos64, &_nowPos64)); - } - UInt32 i = 0; - while(bufferPos < endPos) - _buffer[i++] = _buffer[bufferPos++]; - bufferPos = i; - } - return S_OK; -} - -// #ifdef _ST_MODE -STDMETHODIMP CFilterCoder::SetOutStream(ISequentialOutStream *outStream) -{ - _bufferPos = 0; - _outStream = outStream; - return Init(); -} - -STDMETHODIMP CFilterCoder::ReleaseOutStream() -{ - _outStream.Release(); - return S_OK; -}; - - -STDMETHODIMP CFilterCoder::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 processedSizeTotal = 0; - while(size > 0) - { - UInt32 sizeMax = kBufferSize - _bufferPos; - UInt32 sizeTemp = size; - if (sizeTemp > sizeMax) - sizeTemp = sizeMax; - memmove(_buffer + _bufferPos, data, sizeTemp); - size -= sizeTemp; - processedSizeTotal += sizeTemp; - data = (const Byte *)data + sizeTemp; - UInt32 endPos = _bufferPos + sizeTemp; - _bufferPos = Filter->Filter(_buffer, endPos); - if (_bufferPos == 0) - { - _bufferPos = endPos; - break; - } - if (_bufferPos > endPos) - { - if (size != 0) - return E_FAIL; - break; - } - RINOK(WriteWithLimit(_outStream, _bufferPos)); - UInt32 i = 0; - while(_bufferPos < endPos) - _buffer[i++] = _buffer[_bufferPos++]; - _bufferPos = i; - } - if (processedSize != NULL) - *processedSize = processedSizeTotal; - return S_OK; -} - -STDMETHODIMP CFilterCoder::Flush() -{ - if (_bufferPos != 0) - { - UInt32 endPos = Filter->Filter(_buffer, _bufferPos); - if (endPos > _bufferPos) - { - for (; _bufferPos < endPos; _bufferPos++) - _buffer[_bufferPos] = 0; - if (Filter->Filter(_buffer, endPos) != endPos) - return E_FAIL; - } - RINOK(WriteStream(_outStream, _buffer, _bufferPos)); - _bufferPos = 0; - } - CMyComPtr flush; - _outStream.QueryInterface(IID_IOutStreamFlush, &flush); - if (flush) - return flush->Flush(); - return S_OK; -} - - -STDMETHODIMP CFilterCoder::SetInStream(ISequentialInStream *inStream) -{ - _convertedPosBegin = _convertedPosEnd = _bufferPos = 0; - _inStream = inStream; - return Init(); -} - -STDMETHODIMP CFilterCoder::ReleaseInStream() -{ - _inStream.Release(); - return S_OK; -}; - -STDMETHODIMP CFilterCoder::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 processedSizeTotal = 0; - while(size > 0) - { - if (_convertedPosBegin != _convertedPosEnd) - { - UInt32 sizeTemp = MyMin(size, _convertedPosEnd - _convertedPosBegin); - memmove(data, _buffer + _convertedPosBegin, sizeTemp); - _convertedPosBegin += sizeTemp; - data = (void *)((Byte *)data + sizeTemp); - size -= sizeTemp; - processedSizeTotal += sizeTemp; - break; - } - int i; - for (i = 0; _convertedPosEnd + i < _bufferPos; i++) - _buffer[i] = _buffer[i + _convertedPosEnd]; - _bufferPos = i; - _convertedPosBegin = _convertedPosEnd = 0; - size_t processedSizeTemp = kBufferSize - _bufferPos; - RINOK(ReadStream(_inStream, _buffer + _bufferPos, &processedSizeTemp)); - _bufferPos = _bufferPos + (UInt32)processedSizeTemp; - _convertedPosEnd = Filter->Filter(_buffer, _bufferPos); - if (_convertedPosEnd == 0) - { - if (_bufferPos == 0) - break; - else - { - _convertedPosEnd = _bufferPos; // check it - continue; - } - } - if (_convertedPosEnd > _bufferPos) - { - for (; _bufferPos < _convertedPosEnd; _bufferPos++) - _buffer[_bufferPos] = 0; - _convertedPosEnd = Filter->Filter(_buffer, _bufferPos); - } - } - if (processedSize != NULL) - *processedSize = processedSizeTotal; - return S_OK; -} - -// #endif // _ST_MODE - -#ifndef _NO_CRYPTO -STDMETHODIMP CFilterCoder::CryptoSetPassword(const Byte *data, UInt32 size) -{ - return _setPassword->CryptoSetPassword(data, size); -} -#endif - -#ifndef EXTRACT_ONLY -STDMETHODIMP CFilterCoder::SetCoderProperties(const PROPID *propIDs, - const PROPVARIANT *properties, UInt32 numProperties) -{ - return _SetCoderProperties->SetCoderProperties(propIDs, properties, numProperties); -} - -STDMETHODIMP CFilterCoder::WriteCoderProperties(ISequentialOutStream *outStream) -{ - return _writeCoderProperties->WriteCoderProperties(outStream); -} - -/* -STDMETHODIMP CFilterCoder::ResetSalt() -{ - return _CryptoResetSalt->ResetSalt(); -} -*/ - -STDMETHODIMP CFilterCoder::ResetInitVector() -{ - return _CryptoResetInitVector->ResetInitVector(); -} -#endif - -STDMETHODIMP CFilterCoder::SetDecoderProperties2(const Byte *data, UInt32 size) -{ - return _setDecoderProperties->SetDecoderProperties2(data, size); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/FilterCoder.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/FilterCoder.h deleted file mode 100644 index 496eb5e04987..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/FilterCoder.h +++ /dev/null @@ -1,143 +0,0 @@ -// FilterCoder.h - -#ifndef __FILTERCODER_H -#define __FILTERCODER_H - -#include "../../Common/MyCom.h" -#include "../ICoder.h" -#include "../IPassword.h" - -#define MY_QUERYINTERFACE_ENTRY_AG(i, sub0, sub) if (iid == IID_ ## i) \ -{ if (!sub) RINOK(sub0->QueryInterface(IID_ ## i, (void **)&sub)) \ -*outObject = (void *)(i *)this; AddRef(); return S_OK; } - -class CFilterCoder: - public ICompressCoder, - // #ifdef _ST_MODE - public ICompressSetInStream, - public ISequentialInStream, - public ICompressSetOutStream, - public ISequentialOutStream, - public IOutStreamFlush, - // #endif - - #ifndef _NO_CRYPTO - public ICryptoSetPassword, - #endif - #ifndef EXTRACT_ONLY - public ICompressSetCoderProperties, - public ICompressWriteCoderProperties, - // public ICryptoResetSalt, - public ICryptoResetInitVector, - #endif - public ICompressSetDecoderProperties2, - public CMyUnknownImp -{ -protected: - Byte *_buffer; - // #ifdef _ST_MODE - CMyComPtr _inStream; - CMyComPtr _outStream; - UInt32 _bufferPos; - UInt32 _convertedPosBegin; - UInt32 _convertedPosEnd; - // #endif - bool _outSizeIsDefined; - UInt64 _outSize; - UInt64 _nowPos64; - - HRESULT Init() - { - _nowPos64 = 0; - _outSizeIsDefined = false; - return Filter->Init(); - } - - CMyComPtr _setPassword; - #ifndef EXTRACT_ONLY - CMyComPtr _SetCoderProperties; - CMyComPtr _writeCoderProperties; - // CMyComPtr _CryptoResetSalt; - CMyComPtr _CryptoResetInitVector; - #endif - CMyComPtr _setDecoderProperties; -public: - CMyComPtr Filter; - - CFilterCoder(); - ~CFilterCoder(); - HRESULT WriteWithLimit(ISequentialOutStream *outStream, UInt32 size); - bool NeedMore() const - { return (!_outSizeIsDefined || (_nowPos64 < _outSize)); } - -public: - MY_QUERYINTERFACE_BEGIN - MY_QUERYINTERFACE_ENTRY(ICompressCoder) - // #ifdef _ST_MODE - MY_QUERYINTERFACE_ENTRY(ICompressSetInStream) - MY_QUERYINTERFACE_ENTRY(ISequentialInStream) - - MY_QUERYINTERFACE_ENTRY(ICompressSetOutStream) - MY_QUERYINTERFACE_ENTRY(ISequentialOutStream) - MY_QUERYINTERFACE_ENTRY(IOutStreamFlush) - // #endif - - #ifndef _NO_CRYPTO - MY_QUERYINTERFACE_ENTRY_AG(ICryptoSetPassword, Filter, _setPassword) - #endif - - #ifndef EXTRACT_ONLY - MY_QUERYINTERFACE_ENTRY_AG(ICompressSetCoderProperties, Filter, _SetCoderProperties) - MY_QUERYINTERFACE_ENTRY_AG(ICompressWriteCoderProperties, Filter, _writeCoderProperties) - // MY_QUERYINTERFACE_ENTRY_AG(ICryptoResetSalt, Filter, _CryptoResetSalt) - MY_QUERYINTERFACE_ENTRY_AG(ICryptoResetInitVector, Filter, _CryptoResetInitVector) - #endif - - MY_QUERYINTERFACE_ENTRY_AG(ICompressSetDecoderProperties2, Filter, _setDecoderProperties) - MY_QUERYINTERFACE_END - MY_ADDREF_RELEASE - STDMETHOD(Code)(ISequentialInStream *inStream, - ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, - ICompressProgressInfo *progress); - // #ifdef _ST_MODE - STDMETHOD(ReleaseInStream)(); - STDMETHOD(SetInStream)(ISequentialInStream *inStream); - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); \ - STDMETHOD(SetOutStream)(ISequentialOutStream *outStream); - STDMETHOD(ReleaseOutStream)(); - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Flush)(); - // #endif - - #ifndef _NO_CRYPTO - STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size); - #endif - #ifndef EXTRACT_ONLY - STDMETHOD(SetCoderProperties)(const PROPID *propIDs, - const PROPVARIANT *properties, UInt32 numProperties); - STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream); - // STDMETHOD(ResetSalt)(); - STDMETHOD(ResetInitVector)(); - #endif - STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size); -}; - -// #ifdef _ST_MODE -class CInStreamReleaser -{ -public: - CFilterCoder *FilterCoder; - CInStreamReleaser(): FilterCoder(0) {} - ~CInStreamReleaser() { if (FilterCoder) FilterCoder->ReleaseInStream(); } -}; - -class COutStreamReleaser -{ -public: - CFilterCoder *FilterCoder; - COutStreamReleaser(): FilterCoder(0) {} - ~COutStreamReleaser() { if (FilterCoder) FilterCoder->ReleaseOutStream(); } -}; -// #endif - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/InBuffer.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/InBuffer.cpp deleted file mode 100644 index 3f84f48309da..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/InBuffer.cpp +++ /dev/null @@ -1,83 +0,0 @@ -// InBuffer.cpp - -#include "StdAfx.h" - -#include "../../../C/Alloc.h" - -#include "InBuffer.h" - -CInBuffer::CInBuffer(): - _buffer(0), - _bufferLimit(0), - _bufferBase(0), - _stream(0), - _bufferSize(0) -{} - -bool CInBuffer::Create(UInt32 bufferSize) -{ - const UInt32 kMinBlockSize = 1; - if (bufferSize < kMinBlockSize) - bufferSize = kMinBlockSize; - if (_bufferBase != 0 && _bufferSize == bufferSize) - return true; - Free(); - _bufferSize = bufferSize; - _bufferBase = (Byte *)::MidAlloc(bufferSize); - return (_bufferBase != 0); -} - -void CInBuffer::Free() -{ - ::MidFree(_bufferBase); - _bufferBase = 0; -} - -void CInBuffer::SetStream(ISequentialInStream *stream) -{ - _stream = stream; -} - -void CInBuffer::Init() -{ - _processedSize = 0; - _buffer = _bufferBase; - _bufferLimit = _buffer; - _wasFinished = false; - #ifdef _NO_EXCEPTIONS - ErrorCode = S_OK; - #endif -} - -bool CInBuffer::ReadBlock() -{ - #ifdef _NO_EXCEPTIONS - if (ErrorCode != S_OK) - return false; - #endif - if (_wasFinished) - return false; - _processedSize += (_buffer - _bufferBase); - UInt32 numProcessedBytes; - HRESULT result = _stream->Read(_bufferBase, _bufferSize, &numProcessedBytes); - #ifdef _NO_EXCEPTIONS - ErrorCode = result; - #else - if (result != S_OK) - throw CInBufferException(result); - #endif - _buffer = _bufferBase; - _bufferLimit = _buffer + numProcessedBytes; - _wasFinished = (numProcessedBytes == 0); - return (!_wasFinished); -} - -Byte CInBuffer::ReadBlock2() -{ - if (!ReadBlock()) - { - _processedSize++; - return 0xFF; - } - return *_buffer++; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/InBuffer.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/InBuffer.h deleted file mode 100644 index cdd50f1b2bfc..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/InBuffer.h +++ /dev/null @@ -1,81 +0,0 @@ -// InBuffer.h - -#ifndef __INBUFFER_H -#define __INBUFFER_H - -#include "../IStream.h" -#include "../../Common/MyCom.h" -#include "../../Common/MyException.h" - -#ifndef _NO_EXCEPTIONS -struct CInBufferException: public CSystemException -{ - CInBufferException(HRESULT errorCode): CSystemException(errorCode) {} -}; -#endif - -class CInBuffer -{ - Byte *_buffer; - Byte *_bufferLimit; - Byte *_bufferBase; - CMyComPtr _stream; - UInt64 _processedSize; - UInt32 _bufferSize; - bool _wasFinished; - - bool ReadBlock(); - Byte ReadBlock2(); - -public: - #ifdef _NO_EXCEPTIONS - HRESULT ErrorCode; - #endif - - CInBuffer(); - ~CInBuffer() { Free(); } - - bool Create(UInt32 bufferSize); - void Free(); - - void SetStream(ISequentialInStream *stream); - void Init(); - void ReleaseStream() { _stream.Release(); } - - bool ReadByte(Byte &b) - { - if (_buffer >= _bufferLimit) - if (!ReadBlock()) - return false; - b = *_buffer++; - return true; - } - Byte ReadByte() - { - if (_buffer >= _bufferLimit) - return ReadBlock2(); - return *_buffer++; - } - UInt32 ReadBytes(Byte *buf, UInt32 size) - { - if ((UInt32)(_bufferLimit - _buffer) >= size) - { - for (UInt32 i = 0; i < size; i++) - buf[i] = _buffer[i]; - _buffer += size; - return size; - } - for (UInt32 i = 0; i < size; i++) - { - if (_buffer >= _bufferLimit) - if (!ReadBlock()) - return i; - buf[i] = *_buffer++; - } - return size; - } - UInt64 GetProcessedSize() const { return _processedSize + (_buffer - _bufferBase); } - bool WasFinished() const { return _wasFinished; } -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/InOutTempBuffer.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/InOutTempBuffer.cpp deleted file mode 100644 index 13a76969ebcf..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/InOutTempBuffer.cpp +++ /dev/null @@ -1,122 +0,0 @@ -// InOutTempBuffer.cpp - -#include "StdAfx.h" - -#include "../../../C/7zCrc.h" - -#include "InOutTempBuffer.h" -#include "StreamUtils.h" - -using namespace NWindows; -using namespace NFile; -using namespace NDirectory; - -static const UInt32 kTempBufSize = (1 << 20); - -static LPCTSTR kTempFilePrefixString = TEXT("7zt"); - -CInOutTempBuffer::CInOutTempBuffer(): _buf(NULL) { } - -void CInOutTempBuffer::Create() -{ - if (!_buf) - _buf = new Byte[kTempBufSize]; -} - -CInOutTempBuffer::~CInOutTempBuffer() -{ - delete []_buf; -} - -void CInOutTempBuffer::InitWriting() -{ - _bufPos = 0; - _tempFileCreated = false; - _size = 0; - _crc = CRC_INIT_VAL; -} - -bool CInOutTempBuffer::WriteToFile(const void *data, UInt32 size) -{ - if (size == 0) - return true; - if (!_tempFileCreated) - { - CSysString tempDirPath; - if (!MyGetTempPath(tempDirPath)) - return false; - if (_tempFile.Create(tempDirPath, kTempFilePrefixString, _tempFileName) == 0) - return false; - if (!_outFile.Create(_tempFileName, true)) - return false; - _tempFileCreated = true; - } - UInt32 processed; - if (!_outFile.Write(data, size, processed)) - return false; - _crc = CrcUpdate(_crc, data, processed); - _size += processed; - return (processed == size); -} - -bool CInOutTempBuffer::Write(const void *data, UInt32 size) -{ - if (_bufPos < kTempBufSize) - { - UInt32 cur = MyMin(kTempBufSize - _bufPos, size); - memcpy(_buf + _bufPos, data, cur); - _crc = CrcUpdate(_crc, data, cur); - _bufPos += cur; - size -= cur; - data = ((const Byte *)data) + cur; - _size += cur; - } - return WriteToFile(data, size); -} - -HRESULT CInOutTempBuffer::WriteToStream(ISequentialOutStream *stream) -{ - if (!_outFile.Close()) - return E_FAIL; - - UInt64 size = 0; - UInt32 crc = CRC_INIT_VAL; - - if (_bufPos > 0) - { - RINOK(WriteStream(stream, _buf, _bufPos)); - crc = CrcUpdate(crc, _buf, _bufPos); - size += _bufPos; - } - if (_tempFileCreated) - { - NIO::CInFile inFile; - if (!inFile.Open(_tempFileName)) - return E_FAIL; - while (size < _size) - { - UInt32 processed; - if (!inFile.ReadPart(_buf, kTempBufSize, processed)) - return E_FAIL; - if (processed == 0) - break; - RINOK(WriteStream(stream, _buf, processed)); - crc = CrcUpdate(crc, _buf, processed); - size += processed; - } - } - return (_crc == crc && size == _size) ? S_OK : E_FAIL; -} - -STDMETHODIMP CSequentialOutTempBufferImp::Write(const void *data, UInt32 size, UInt32 *processed) -{ - if (!_buf->Write(data, size)) - { - if (processed != NULL) - *processed = 0; - return E_FAIL; - } - if (processed != NULL) - *processed = size; - return S_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/InOutTempBuffer.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/InOutTempBuffer.h deleted file mode 100644 index a69bc8503075..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/InOutTempBuffer.h +++ /dev/null @@ -1,48 +0,0 @@ -// InOutTempBuffer.h - -#ifndef __IN_OUT_TEMP_BUFFER_H -#define __IN_OUT_TEMP_BUFFER_H - -#include "../../Common/MyCom.h" -#include "../../Windows/FileDir.h" -#include "../../Windows/FileIO.h" - -#include "../IStream.h" - -class CInOutTempBuffer -{ - NWindows::NFile::NDirectory::CTempFile _tempFile; - NWindows::NFile::NIO::COutFile _outFile; - Byte *_buf; - UInt32 _bufPos; - CSysString _tempFileName; - bool _tempFileCreated; - UInt64 _size; - UInt32 _crc; - - bool WriteToFile(const void *data, UInt32 size); -public: - CInOutTempBuffer(); - ~CInOutTempBuffer(); - void Create(); - - void InitWriting(); - bool Write(const void *data, UInt32 size); - - HRESULT WriteToStream(ISequentialOutStream *stream); - UInt64 GetDataSize() const { return _size; } -}; - -class CSequentialOutTempBufferImp: - public ISequentialOutStream, - public CMyUnknownImp -{ - CInOutTempBuffer *_buf; -public: - void Init(CInOutTempBuffer *buffer) { _buf = buffer; } - MY_UNKNOWN_IMP - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/LimitedStreams.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/LimitedStreams.cpp deleted file mode 100644 index dd2d2d516db5..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/LimitedStreams.cpp +++ /dev/null @@ -1,154 +0,0 @@ -// LimitedStreams.cpp - -#include "StdAfx.h" - -#include "LimitedStreams.h" -#include "../../Common/Defs.h" - -STDMETHODIMP CLimitedSequentialInStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize = 0; - UInt32 sizeToRead = (UInt32)MyMin((_size - _pos), (UInt64)size); - HRESULT result = S_OK; - if (sizeToRead > 0) - { - result = _stream->Read(data, sizeToRead, &realProcessedSize); - _pos += realProcessedSize; - if (realProcessedSize == 0) - _wasFinished = true; - } - if (processedSize != NULL) - *processedSize = realProcessedSize; - return result; -} - -STDMETHODIMP CLimitedInStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - if (processedSize != NULL) - *processedSize = 0; - if (_virtPos >= _size) - return (_virtPos == _size) ? S_OK: E_FAIL; - UInt64 rem = _size - _virtPos; - if (rem < size) - size = (UInt32)rem; - UInt64 newPos = _startOffset + _virtPos; - if (newPos != _physPos) - { - _physPos = newPos; - RINOK(SeekToPhys()); - } - HRESULT res = _stream->Read(data, size, &size); - if (processedSize != NULL) - *processedSize = size; - _physPos += size; - _virtPos += size; - return res; -} - -STDMETHODIMP CLimitedInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) -{ - switch(seekOrigin) - { - case STREAM_SEEK_SET: _virtPos = offset; break; - case STREAM_SEEK_CUR: _virtPos += offset; break; - case STREAM_SEEK_END: _virtPos = _size + offset; break; - default: return STG_E_INVALIDFUNCTION; - } - if (newPosition) - *newPosition = _virtPos; - return S_OK; -} - -STDMETHODIMP CClusterInStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - if (processedSize != NULL) - *processedSize = 0; - if (_virtPos >= Size) - return (_virtPos == Size) ? S_OK: E_FAIL; - - if (_curRem == 0) - { - UInt32 blockSize = (UInt32)1 << BlockSizeLog; - UInt32 virtBlock = (UInt32)(_virtPos >> BlockSizeLog); - UInt32 offsetInBlock = (UInt32)_virtPos & (blockSize - 1); - UInt32 phyBlock = Vector[virtBlock]; - UInt64 newPos = StartOffset + ((UInt64)phyBlock << BlockSizeLog) + offsetInBlock; - if (newPos != _physPos) - { - _physPos = newPos; - RINOK(SeekToPhys()); - } - _curRem = blockSize - offsetInBlock; - for (int i = 1; i < 64 && (virtBlock + i) < (UInt32)Vector.Size() && phyBlock + i == Vector[virtBlock + i]; i++) - _curRem += (UInt32)1 << BlockSizeLog; - UInt64 rem = Size - _virtPos; - if (_curRem > rem) - _curRem = (UInt32)rem; - } - if (size > _curRem) - size = _curRem; - HRESULT res = Stream->Read(data, size, &size); - if (processedSize != NULL) - *processedSize = size; - _physPos += size; - _virtPos += size; - _curRem -= size; - return res; -} - -STDMETHODIMP CClusterInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) -{ - UInt64 newVirtPos = offset; - switch(seekOrigin) - { - case STREAM_SEEK_SET: break; - case STREAM_SEEK_CUR: newVirtPos += _virtPos; break; - case STREAM_SEEK_END: newVirtPos += Size; break; - default: return STG_E_INVALIDFUNCTION; - } - if (_virtPos != newVirtPos) - _curRem = 0; - _virtPos = newVirtPos; - if (newPosition) - *newPosition = newVirtPos; - return S_OK; -} - - -HRESULT CreateLimitedInStream(IInStream *inStream, UInt64 pos, UInt64 size, ISequentialInStream **resStream) -{ - *resStream = 0; - CLimitedInStream *streamSpec = new CLimitedInStream; - CMyComPtr streamTemp = streamSpec; - streamSpec->SetStream(inStream); - RINOK(streamSpec->InitAndSeek(pos, size)); - streamSpec->SeekToStart(); - *resStream = streamTemp.Detach(); - return S_OK; -} - -STDMETHODIMP CLimitedSequentialOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - HRESULT result = S_OK; - if (processedSize != NULL) - *processedSize = 0; - if (size > _size) - { - if (_size == 0) - { - _overflow = true; - if (!_overflowIsAllowed) - return E_FAIL; - if (processedSize != NULL) - *processedSize = size; - return S_OK; - } - size = (UInt32)_size; - } - if (_stream) - result = _stream->Write(data, size, &size); - _size -= size; - if (processedSize != NULL) - *processedSize = size; - return result; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/LimitedStreams.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/LimitedStreams.h deleted file mode 100644 index 4d1fc9e01897..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/LimitedStreams.h +++ /dev/null @@ -1,124 +0,0 @@ -// LimitedStreams.h - -#ifndef __LIMITED_STREAMS_H -#define __LIMITED_STREAMS_H - -#include "../../Common/MyCom.h" -#include "../../Common/MyVector.h" -#include "../IStream.h" - -class CLimitedSequentialInStream: - public ISequentialInStream, - public CMyUnknownImp -{ - CMyComPtr _stream; - UInt64 _size; - UInt64 _pos; - bool _wasFinished; -public: - void SetStream(ISequentialInStream *stream) { _stream = stream; } - void Init(UInt64 streamSize) - { - _size = streamSize; - _pos = 0; - _wasFinished = false; - } - - MY_UNKNOWN_IMP - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - UInt64 GetSize() const { return _pos; } - bool WasFinished() const { return _wasFinished; } -}; - -class CLimitedInStream: - public IInStream, - public CMyUnknownImp -{ - CMyComPtr _stream; - UInt64 _virtPos; - UInt64 _physPos; - UInt64 _size; - UInt64 _startOffset; - - HRESULT SeekToPhys() { return _stream->Seek(_physPos, STREAM_SEEK_SET, NULL); } -public: - void SetStream(IInStream *stream) { _stream = stream; } - HRESULT InitAndSeek(UInt64 startOffset, UInt64 size) - { - _startOffset = startOffset; - _physPos = startOffset; - _virtPos = 0; - _size = size; - return SeekToPhys(); - } - - MY_UNKNOWN_IMP1(IInStream) - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); - - HRESULT SeekToStart() { return Seek(0, STREAM_SEEK_SET, NULL); } -}; - -class CClusterInStream: - public IInStream, - public CMyUnknownImp -{ - UInt64 _virtPos; - UInt64 _physPos; - UInt32 _curRem; -public: - CMyComPtr Stream; - UInt64 StartOffset; - UInt64 Size; - int BlockSizeLog; - CRecordVector Vector; - - HRESULT SeekToPhys() { return Stream->Seek(_physPos, STREAM_SEEK_SET, NULL); } - - HRESULT InitAndSeek() - { - _curRem = 0; - _virtPos = 0; - _physPos = StartOffset; - if (Vector.Size() > 0) - { - _physPos = StartOffset + (Vector[0] << BlockSizeLog); - return SeekToPhys(); - } - return S_OK; - } - - MY_UNKNOWN_IMP1(IInStream) - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); -}; - -HRESULT CreateLimitedInStream(IInStream *inStream, UInt64 pos, UInt64 size, ISequentialInStream **resStream); - -class CLimitedSequentialOutStream: - public ISequentialOutStream, - public CMyUnknownImp -{ - CMyComPtr _stream; - UInt64 _size; - bool _overflow; - bool _overflowIsAllowed; -public: - MY_UNKNOWN_IMP - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - void SetStream(ISequentialOutStream *stream) { _stream = stream; } - void ReleaseStream() { _stream.Release(); } - void Init(UInt64 size, bool overflowIsAllowed = false) - { - _size = size; - _overflow = false; - _overflowIsAllowed = overflowIsAllowed; - } - bool IsFinishedOK() const { return (_size == 0 && !_overflow); } - UInt64 GetRem() const { return _size; } -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/LockedStream.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/LockedStream.cpp deleted file mode 100644 index d1bbf6dba8c9..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/LockedStream.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// LockedStream.cpp - -#include "StdAfx.h" - -#include "LockedStream.h" - -HRESULT CLockedInStream::Read(UInt64 startPos, void *data, UInt32 size, - UInt32 *processedSize) -{ - NWindows::NSynchronization::CCriticalSectionLock lock(_criticalSection); - RINOK(_stream->Seek(startPos, STREAM_SEEK_SET, NULL)); - return _stream->Read(data, size, processedSize); -} - -STDMETHODIMP CLockedSequentialInStreamImp::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize = 0; - HRESULT result = _lockedInStream->Read(_pos, data, size, &realProcessedSize); - _pos += realProcessedSize; - if (processedSize != NULL) - *processedSize = realProcessedSize; - return result; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/LockedStream.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/LockedStream.h deleted file mode 100644 index e12e22a4a4d6..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/LockedStream.h +++ /dev/null @@ -1,38 +0,0 @@ -// LockedStream.h - -#ifndef __LOCKEDSTREAM_H -#define __LOCKEDSTREAM_H - -#include "../../Windows/Synchronization.h" -#include "../../Common/MyCom.h" -#include "../IStream.h" - -class CLockedInStream -{ - CMyComPtr _stream; - NWindows::NSynchronization::CCriticalSection _criticalSection; -public: - void Init(IInStream *stream) - { _stream = stream; } - HRESULT Read(UInt64 startPos, void *data, UInt32 size, UInt32 *processedSize); -}; - -class CLockedSequentialInStreamImp: - public ISequentialInStream, - public CMyUnknownImp -{ - CLockedInStream *_lockedInStream; - UInt64 _pos; -public: - void Init(CLockedInStream *lockedInStream, UInt64 startPos) - { - _lockedInStream = lockedInStream; - _pos = startPos; - } - - MY_UNKNOWN_IMP - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/MethodId.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/MethodId.cpp deleted file mode 100644 index 705cc4d9bd37..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/MethodId.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// MethodId.cpp - -#include "StdAfx.h" - -#include "MethodId.h" -#include "../../Common/MyString.h" - -static inline wchar_t GetHex(Byte value) -{ - return (wchar_t)((value < 10) ? ('0' + value) : ('A' + (value - 10))); -} - -UString ConvertMethodIdToString(UInt64 id) -{ - wchar_t s[32]; - int len = 32; - s[--len] = 0; - do - { - s[--len] = GetHex((Byte)id & 0xF); - id >>= 4; - s[--len] = GetHex((Byte)id & 0xF); - id >>= 4; - } - while (id != 0); - return s + len; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/MethodId.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/MethodId.h deleted file mode 100644 index 955172354da4..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/MethodId.h +++ /dev/null @@ -1,10 +0,0 @@ -// MethodId.h - -#ifndef __7Z_METHOD_ID_H -#define __7Z_METHOD_ID_H - -#include "../../Common/Types.h" - -typedef UInt64 CMethodId; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/MethodProps.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/MethodProps.cpp deleted file mode 100644 index 937708ed33f5..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/MethodProps.cpp +++ /dev/null @@ -1,99 +0,0 @@ -// MethodProps.cpp - -#include "StdAfx.h" - -#include "../../Common/MyCom.h" - -#include "../ICoder.h" - -#include "MethodProps.h" - -static const UInt64 k_LZMA = 0x030101; -static const UInt64 k_LZMA2 = 0x21; - -HRESULT SetMethodProperties(const CMethod &method, const UInt64 *inSizeForReduce, IUnknown *coder) -{ - bool tryReduce = false; - UInt32 reducedDictionarySize = 1 << 10; - if (inSizeForReduce != 0 && (method.Id == k_LZMA || method.Id == k_LZMA2)) - { - for (;;) - { - const UInt32 step = (reducedDictionarySize >> 1); - if (reducedDictionarySize >= *inSizeForReduce) - { - tryReduce = true; - break; - } - reducedDictionarySize += step; - if (reducedDictionarySize >= *inSizeForReduce) - { - tryReduce = true; - break; - } - if (reducedDictionarySize >= ((UInt32)3 << 30)) - break; - reducedDictionarySize += step; - } - } - - { - int numProps = method.Props.Size(); - CMyComPtr setCoderProperties; - coder->QueryInterface(IID_ICompressSetCoderProperties, (void **)&setCoderProperties); - if (setCoderProperties == NULL) - { - if (numProps != 0) - return E_INVALIDARG; - } - else - { - CRecordVector propIDs; - NWindows::NCOM::CPropVariant *values = new NWindows::NCOM::CPropVariant[numProps]; - HRESULT res = S_OK; - try - { - for (int i = 0; i < numProps; i++) - { - const CProp &prop = method.Props[i]; - propIDs.Add(prop.Id); - NWindows::NCOM::CPropVariant &value = values[i]; - value = prop.Value; - // if (tryReduce && prop.Id == NCoderPropID::kDictionarySize && value.vt == VT_UI4 && reducedDictionarySize < value.ulVal) - if (tryReduce) - if (prop.Id == NCoderPropID::kDictionarySize) - if (value.vt == VT_UI4) - if (reducedDictionarySize < value.ulVal) - value.ulVal = reducedDictionarySize; - } - CMyComPtr setCoderProperties; - coder->QueryInterface(IID_ICompressSetCoderProperties, (void **)&setCoderProperties); - res = setCoderProperties->SetCoderProperties(&propIDs.Front(), values, numProps); - } - catch(...) - { - delete []values; - throw; - } - delete []values; - RINOK(res); - } - } - - /* - CMyComPtr writeCoderProperties; - coder->QueryInterface(IID_ICompressWriteCoderProperties, (void **)&writeCoderProperties); - if (writeCoderProperties != NULL) - { - CSequentialOutStreamImp *outStreamSpec = new CSequentialOutStreamImp; - CMyComPtr outStream(outStreamSpec); - outStreamSpec->Init(); - RINOK(writeCoderProperties->WriteCoderProperties(outStream)); - size_t size = outStreamSpec->GetSize(); - filterProps.SetCapacity(size); - memmove(filterProps, outStreamSpec->GetBuffer(), size); - } - */ - return S_OK; -} - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/MethodProps.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/MethodProps.h deleted file mode 100644 index e27f09574ccf..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/MethodProps.h +++ /dev/null @@ -1,41 +0,0 @@ -// MethodProps.h - -#ifndef __7Z_METHOD_PROPS_H -#define __7Z_METHOD_PROPS_H - -#include "../../Common/MyVector.h" - -#include "../../Windows/PropVariant.h" - -#include "MethodId.h" - -struct CProp -{ - PROPID Id; - NWindows::NCOM::CPropVariant Value; -}; - -struct CMethod -{ - CMethodId Id; - CObjectVector Props; -}; - -struct CMethodsMode -{ - CObjectVector Methods; - #ifdef COMPRESS_MT - UInt32 NumThreads; - #endif - - CMethodsMode() - #ifdef COMPRESS_MT - : NumThreads(1) - #endif - {} - bool IsEmpty() const { return Methods.IsEmpty() ; } -}; - -HRESULT SetMethodProperties(const CMethod &method, const UInt64 *inSizeForReduce, IUnknown *coder); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/OffsetStream.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/OffsetStream.cpp deleted file mode 100644 index d37657949f5f..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/OffsetStream.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// OffsetStream.cpp - -#include "StdAfx.h" - -#include "Common/Defs.h" -#include "OffsetStream.h" - -HRESULT COffsetOutStream::Init(IOutStream *stream, UInt64 offset) -{ - _offset = offset; - _stream = stream; - return _stream->Seek(offset, STREAM_SEEK_SET, NULL); -} - -STDMETHODIMP COffsetOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - return _stream->Write(data, size, processedSize); -} - -STDMETHODIMP COffsetOutStream::Seek(Int64 offset, UInt32 seekOrigin, - UInt64 *newPosition) -{ - UInt64 absoluteNewPosition; - if (seekOrigin == STREAM_SEEK_SET) - offset += _offset; - HRESULT result = _stream->Seek(offset, seekOrigin, &absoluteNewPosition); - if (newPosition != NULL) - *newPosition = absoluteNewPosition - _offset; - return result; -} - -STDMETHODIMP COffsetOutStream::SetSize(Int64 newSize) -{ - return _stream->SetSize(_offset + newSize); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/OffsetStream.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/OffsetStream.h deleted file mode 100644 index 15846b24a949..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/OffsetStream.h +++ /dev/null @@ -1,25 +0,0 @@ -// OffsetStream.h - -#ifndef __OFFSETSTREAM_H -#define __OFFSETSTREAM_H - -#include "Common/MyCom.h" -#include "../IStream.h" - -class COffsetOutStream: - public IOutStream, - public CMyUnknownImp -{ - UInt64 _offset; - CMyComPtr _stream; -public: - HRESULT Init(IOutStream *stream, UInt64 offset); - - MY_UNKNOWN_IMP - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); - STDMETHOD(SetSize)(Int64 newSize); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/OutBuffer.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/OutBuffer.cpp deleted file mode 100644 index 4e55f55465dd..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/OutBuffer.cpp +++ /dev/null @@ -1,116 +0,0 @@ -// OutBuffer.cpp - -#include "StdAfx.h" - -#include "../../../C/Alloc.h" - -#include "OutBuffer.h" - -bool COutBuffer::Create(UInt32 bufferSize) -{ - const UInt32 kMinBlockSize = 1; - if (bufferSize < kMinBlockSize) - bufferSize = kMinBlockSize; - if (_buffer != 0 && _bufferSize == bufferSize) - return true; - Free(); - _bufferSize = bufferSize; - _buffer = (Byte *)::MidAlloc(bufferSize); - return (_buffer != 0); -} - -void COutBuffer::Free() -{ - ::MidFree(_buffer); - _buffer = 0; -} - -void COutBuffer::SetStream(ISequentialOutStream *stream) -{ - _stream = stream; -} - -void COutBuffer::Init() -{ - _streamPos = 0; - _limitPos = _bufferSize; - _pos = 0; - _processedSize = 0; - _overDict = false; - #ifdef _NO_EXCEPTIONS - ErrorCode = S_OK; - #endif -} - -UInt64 COutBuffer::GetProcessedSize() const -{ - UInt64 res = _processedSize + _pos - _streamPos; - if (_streamPos > _pos) - res += _bufferSize; - return res; -} - - -HRESULT COutBuffer::FlushPart() -{ - // _streamPos < _bufferSize - UInt32 size = (_streamPos >= _pos) ? (_bufferSize - _streamPos) : (_pos - _streamPos); - HRESULT result = S_OK; - #ifdef _NO_EXCEPTIONS - result = ErrorCode; - #endif - if (_buffer2 != 0) - { - memmove(_buffer2, _buffer + _streamPos, size); - _buffer2 += size; - } - - if (_stream != 0 - #ifdef _NO_EXCEPTIONS - && (ErrorCode == S_OK) - #endif - ) - { - UInt32 processedSize = 0; - result = _stream->Write(_buffer + _streamPos, size, &processedSize); - size = processedSize; - } - _streamPos += size; - if (_streamPos == _bufferSize) - _streamPos = 0; - if (_pos == _bufferSize) - { - _overDict = true; - _pos = 0; - } - _limitPos = (_streamPos > _pos) ? _streamPos : _bufferSize; - _processedSize += size; - return result; -} - -HRESULT COutBuffer::Flush() -{ - #ifdef _NO_EXCEPTIONS - if (ErrorCode != S_OK) - return ErrorCode; - #endif - - while(_streamPos != _pos) - { - HRESULT result = FlushPart(); - if (result != S_OK) - return result; - } - return S_OK; -} - -void COutBuffer::FlushWithCheck() -{ - HRESULT result = Flush(); - #ifdef _NO_EXCEPTIONS - ErrorCode = result; - #else - if (result != S_OK) - throw COutBufferException(result); - #endif -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/OutBuffer.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/OutBuffer.h deleted file mode 100644 index e2e76ad58fea..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/OutBuffer.h +++ /dev/null @@ -1,64 +0,0 @@ -// OutBuffer.h - -#ifndef __OUTBUFFER_H -#define __OUTBUFFER_H - -#include "../IStream.h" -#include "../../Common/MyCom.h" -#include "../../Common/MyException.h" - -#ifndef _NO_EXCEPTIONS -struct COutBufferException: public CSystemException -{ - COutBufferException(HRESULT errorCode): CSystemException(errorCode) {} -}; -#endif - -class COutBuffer -{ -protected: - Byte *_buffer; - UInt32 _pos; - UInt32 _limitPos; - UInt32 _streamPos; - UInt32 _bufferSize; - CMyComPtr _stream; - UInt64 _processedSize; - Byte *_buffer2; - bool _overDict; - - HRESULT FlushPart(); -public: - #ifdef _NO_EXCEPTIONS - HRESULT ErrorCode; - #endif - - COutBuffer(): _buffer(0), _pos(0), _stream(0), _buffer2(0) {} - ~COutBuffer() { Free(); } - - bool Create(UInt32 bufferSize); - void Free(); - - void SetMemStream(Byte *buffer) { _buffer2 = buffer; } - void SetStream(ISequentialOutStream *stream); - void Init(); - HRESULT Flush(); - void FlushWithCheck(); - void ReleaseStream() { _stream.Release(); } - - void WriteByte(Byte b) - { - _buffer[_pos++] = b; - if(_pos == _limitPos) - FlushWithCheck(); - } - void WriteBytes(const void *data, size_t size) - { - for (size_t i = 0; i < size; i++) - WriteByte(((const Byte *)data)[i]); - } - - UInt64 GetProcessedSize() const; -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/ProgressUtils.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/ProgressUtils.cpp deleted file mode 100644 index 84a3eaf65ebf..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/ProgressUtils.cpp +++ /dev/null @@ -1,42 +0,0 @@ -// ProgressUtils.h - -#include "StdAfx.h" - -#include "ProgressUtils.h" - -CLocalProgress::CLocalProgress() -{ - ProgressOffset = InSize = OutSize = 0; - SendRatio = SendProgress = true; -} - -void CLocalProgress::Init(IProgress *progress, bool inSizeIsMain) -{ - _ratioProgress.Release(); - _progress = progress; - _progress.QueryInterface(IID_ICompressProgressInfo, &_ratioProgress); - _inSizeIsMain = inSizeIsMain; -} - -STDMETHODIMP CLocalProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) -{ - UInt64 inSizeNew = InSize, outSizeNew = OutSize; - if (inSize) - inSizeNew += (*inSize); - if (outSize) - outSizeNew += (*outSize); - if (SendRatio && _ratioProgress) - { - RINOK(_ratioProgress->SetRatioInfo(&inSizeNew, &outSizeNew)); - } - inSizeNew += ProgressOffset; - outSizeNew += ProgressOffset; - if (SendProgress) - return _progress->SetCompleted(_inSizeIsMain ? &inSizeNew : &outSizeNew); - return S_OK; -} - -HRESULT CLocalProgress::SetCur() -{ - return SetRatioInfo(NULL, NULL); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/ProgressUtils.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/ProgressUtils.h deleted file mode 100644 index c6204844ad08..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/ProgressUtils.h +++ /dev/null @@ -1,34 +0,0 @@ -// ProgressUtils.h - -#ifndef __PROGRESSUTILS_H -#define __PROGRESSUTILS_H - -#include "../../Common/MyCom.h" - -#include "../ICoder.h" -#include "../IProgress.h" - -class CLocalProgress: - public ICompressProgressInfo, - public CMyUnknownImp -{ - CMyComPtr _progress; - CMyComPtr _ratioProgress; - bool _inSizeIsMain; -public: - UInt64 ProgressOffset; - UInt64 InSize; - UInt64 OutSize; - bool SendRatio; - bool SendProgress; - - CLocalProgress(); - void Init(IProgress *progress, bool inSizeIsMain); - HRESULT SetCur(); - - MY_UNKNOWN_IMP - - STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/RegisterArc.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/RegisterArc.h deleted file mode 100644 index a2bc2ae670d6..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/RegisterArc.h +++ /dev/null @@ -1,36 +0,0 @@ -// RegisterArc.h - -#ifndef __REGISTERARC_H -#define __REGISTERARC_H - -#include "../Archive/IArchive.h" - -typedef IInArchive * (*CreateInArchiveP)(); -typedef IOutArchive * (*CreateOutArchiveP)(); - -struct CArcInfo -{ - const wchar_t *Name; - const wchar_t *Ext; - const wchar_t *AddExt; - Byte ClassId; - Byte Signature[16]; - int SignatureSize; - bool KeepName; - CreateInArchiveP CreateInArchive; - CreateOutArchiveP CreateOutArchive; -}; - -void RegisterArc(const CArcInfo *arcInfo); - -#define REGISTER_ARC_NAME(x) CRegister ## x - -#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)() { RegisterArc(&g_ArcInfo); }}; \ - static REGISTER_ARC_NAME(x) g_RegisterArc; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/RegisterCodec.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/RegisterCodec.h deleted file mode 100644 index c59ab66c8297..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/RegisterCodec.h +++ /dev/null @@ -1,33 +0,0 @@ -// RegisterCodec.h - -#ifndef __REGISTERCODEC_H -#define __REGISTERCODEC_H - -#include "../Common/MethodId.h" - -typedef void * (*CreateCodecP)(); -struct CCodecInfo -{ - CreateCodecP CreateDecoder; - CreateCodecP CreateEncoder; - CMethodId Id; - const wchar_t *Name; - UInt32 NumInStreams; - bool IsFilter; -}; - -void RegisterCodec(const CCodecInfo *codecInfo); - -#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_CODECS_NAME(x) CRegisterCodecs ## x -#define REGISTER_CODECS(x) struct REGISTER_CODECS_NAME(x) { \ - REGISTER_CODECS_NAME(x)() { for (int i = 0; i < sizeof(g_CodecsInfo) / sizeof(g_CodecsInfo[0]); i++) \ - RegisterCodec(&g_CodecsInfo[i]); }}; \ - static REGISTER_CODECS_NAME(x) g_RegisterCodecs; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/StdAfx.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/StdAfx.h deleted file mode 100644 index f56e92fd88e7..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../Common/MyWindows.h" -#include "../../Common/NewHandler.h" - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamBinder.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamBinder.cpp deleted file mode 100644 index cb3bf9935a3c..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamBinder.cpp +++ /dev/null @@ -1,150 +0,0 @@ -// StreamBinder.cpp - -#include "StdAfx.h" - -#include "StreamBinder.h" -#include "../../Common/Defs.h" -#include "../../Common/MyCom.h" - -using namespace NWindows; -using namespace NSynchronization; - -class CSequentialInStreamForBinder: - public ISequentialInStream, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -private: - CStreamBinder *m_StreamBinder; -public: - ~CSequentialInStreamForBinder() { m_StreamBinder->CloseRead(); } - void SetBinder(CStreamBinder *streamBinder) { m_StreamBinder = streamBinder; } -}; - -STDMETHODIMP CSequentialInStreamForBinder::Read(void *data, UInt32 size, UInt32 *processedSize) - { return m_StreamBinder->Read(data, size, processedSize); } - -class CSequentialOutStreamForBinder: - public ISequentialOutStream, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - -private: - CStreamBinder *m_StreamBinder; -public: - ~CSequentialOutStreamForBinder() { m_StreamBinder->CloseWrite(); } - void SetBinder(CStreamBinder *streamBinder) { m_StreamBinder = streamBinder; } -}; - -STDMETHODIMP CSequentialOutStreamForBinder::Write(const void *data, UInt32 size, UInt32 *processedSize) - { return m_StreamBinder->Write(data, size, processedSize); } - - -////////////////////////// -// CStreamBinder -// (_thereAreBytesToReadEvent && _bufferSize == 0) means that stream is finished. - -HRes CStreamBinder::CreateEvents() -{ - RINOK(_allBytesAreWritenEvent.Create(true)); - RINOK(_thereAreBytesToReadEvent.Create()); - return _readStreamIsClosedEvent.Create(); -} - -void CStreamBinder::ReInit() -{ - _thereAreBytesToReadEvent.Reset(); - _readStreamIsClosedEvent.Reset(); - ProcessedSize = 0; -} - - - -void CStreamBinder::CreateStreams(ISequentialInStream **inStream, - ISequentialOutStream **outStream) -{ - CSequentialInStreamForBinder *inStreamSpec = new - CSequentialInStreamForBinder; - CMyComPtr inStreamLoc(inStreamSpec); - inStreamSpec->SetBinder(this); - *inStream = inStreamLoc.Detach(); - - CSequentialOutStreamForBinder *outStreamSpec = new - CSequentialOutStreamForBinder; - CMyComPtr outStreamLoc(outStreamSpec); - outStreamSpec->SetBinder(this); - *outStream = outStreamLoc.Detach(); - - _buffer = NULL; - _bufferSize= 0; - ProcessedSize = 0; -} - -HRESULT CStreamBinder::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 sizeToRead = size; - if (size > 0) - { - RINOK(_thereAreBytesToReadEvent.Lock()); - sizeToRead = MyMin(_bufferSize, size); - if (_bufferSize > 0) - { - memcpy(data, _buffer, sizeToRead); - _buffer = ((const Byte *)_buffer) + sizeToRead; - _bufferSize -= sizeToRead; - if (_bufferSize == 0) - { - _thereAreBytesToReadEvent.Reset(); - _allBytesAreWritenEvent.Set(); - } - } - } - if (processedSize != NULL) - *processedSize = sizeToRead; - ProcessedSize += sizeToRead; - return S_OK; -} - -void CStreamBinder::CloseRead() -{ - _readStreamIsClosedEvent.Set(); -} - -HRESULT CStreamBinder::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - if (size > 0) - { - _buffer = data; - _bufferSize = size; - _allBytesAreWritenEvent.Reset(); - _thereAreBytesToReadEvent.Set(); - - HANDLE events[2]; - events[0] = _allBytesAreWritenEvent; - events[1] = _readStreamIsClosedEvent; - DWORD waitResult = ::WaitForMultipleObjects(2, events, FALSE, INFINITE); - if (waitResult != WAIT_OBJECT_0 + 0) - { - // ReadingWasClosed = true; - return S_FALSE; - } - // if(!_allBytesAreWritenEvent.Lock()) - // return E_FAIL; - } - if (processedSize != NULL) - *processedSize = size; - return S_OK; -} - -void CStreamBinder::CloseWrite() -{ - // _bufferSize must be = 0 - _thereAreBytesToReadEvent.Set(); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamBinder.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamBinder.h deleted file mode 100644 index b5d6c0d1c886..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamBinder.h +++ /dev/null @@ -1,32 +0,0 @@ -// StreamBinder.h - -#ifndef __STREAMBINDER_H -#define __STREAMBINDER_H - -#include "../IStream.h" -#include "../../Windows/Synchronization.h" - -class CStreamBinder -{ - NWindows::NSynchronization::CManualResetEvent _allBytesAreWritenEvent; - NWindows::NSynchronization::CManualResetEvent _thereAreBytesToReadEvent; - NWindows::NSynchronization::CManualResetEvent _readStreamIsClosedEvent; - UInt32 _bufferSize; - const void *_buffer; -public: - // bool ReadingWasClosed; - UInt64 ProcessedSize; - CStreamBinder() {} - HRes CreateEvents(); - - void CreateStreams(ISequentialInStream **inStream, - ISequentialOutStream **outStream); - HRESULT Read(void *data, UInt32 size, UInt32 *processedSize); - void CloseRead(); - - HRESULT Write(const void *data, UInt32 size, UInt32 *processedSize); - void CloseWrite(); - void ReInit(); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamObjects.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamObjects.cpp deleted file mode 100644 index 69655db31639..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamObjects.cpp +++ /dev/null @@ -1,84 +0,0 @@ -// StreamObjects.cpp - -#include "StdAfx.h" - -#include "StreamObjects.h" - -STDMETHODIMP CBufInStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - if (processedSize != NULL) - *processedSize = 0; - if (_pos > _size) - return E_FAIL; - size_t rem = _size - (size_t)_pos; - if (size < rem) - rem = (size_t)size; - memcpy(data, _data + (size_t)_pos, rem); - _pos += rem; - if (processedSize != NULL) - *processedSize = (UInt32)rem; - return S_OK; -} - -STDMETHODIMP CBufInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) -{ - switch(seekOrigin) - { - case STREAM_SEEK_SET: _pos = offset; break; - case STREAM_SEEK_CUR: _pos += offset; break; - case STREAM_SEEK_END: _pos = _size + offset; break; - default: return STG_E_INVALIDFUNCTION; - } - if (newPosition) - *newPosition = _pos; - return S_OK; -} - - -void CWriteBuffer::Write(const void *data, size_t size) -{ - size_t newCapacity = _size + size; - _buffer.EnsureCapacity(newCapacity); - memcpy(_buffer + _size, data, size); - _size += size; -} - -STDMETHODIMP CSequentialOutStreamImp::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - _writeBuffer.Write(data, (size_t)size); - if(processedSize != NULL) - *processedSize = size; - return S_OK; -} - -STDMETHODIMP CSequentialOutStreamImp2::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - size_t rem = _size - _pos; - if (size < rem) - rem = (size_t)size; - memcpy(_buffer + _pos, data, rem); - _pos += rem; - if (processedSize != NULL) - *processedSize = (UInt32)rem; - return (rem == size ? S_OK : E_FAIL); -} - -STDMETHODIMP CSequentialInStreamSizeCount::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize; - HRESULT result = _stream->Read(data, size, &realProcessedSize); - _size += realProcessedSize; - if (processedSize != 0) - *processedSize = realProcessedSize; - return result; -} - -STDMETHODIMP CSequentialOutStreamSizeCount::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize; - HRESULT result = _stream->Write(data, size, &realProcessedSize); - _size += realProcessedSize; - if (processedSize != 0) - *processedSize = realProcessedSize; - return result; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamObjects.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamObjects.h deleted file mode 100644 index c6fc7f795170..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamObjects.h +++ /dev/null @@ -1,127 +0,0 @@ -// StreamObjects.h - -#ifndef __STREAM_OBJECTS_H -#define __STREAM_OBJECTS_H - -#include "../../Common/DynamicBuffer.h" -#include "../../Common/MyCom.h" -#include "../IStream.h" - -struct CReferenceBuf: - public IUnknown, - public CMyUnknownImp -{ - CByteBuffer Buf; - MY_UNKNOWN_IMP -}; - -class CBufInStream: - public IInStream, - public CMyUnknownImp -{ - const Byte *_data; - UInt64 _pos; - size_t _size; - CMyComPtr _ref; -public: - void Init(const Byte *data, size_t size, IUnknown *ref = 0) - { - _data = data; - _size = size; - _pos = 0; - _ref = ref; - } - void Init(CReferenceBuf *ref) { Init(ref->Buf, ref->Buf.GetCapacity(), ref); } - - MY_UNKNOWN_IMP1(IInStream) - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); -}; - -class CWriteBuffer -{ - CByteDynamicBuffer _buffer; - size_t _size; -public: - CWriteBuffer(): _size(0) {} - void Init() { _size = 0; } - void Write(const void *data, size_t size); - size_t GetSize() const { return _size; } - const CByteDynamicBuffer& GetBuffer() const { return _buffer; } -}; - -class CSequentialOutStreamImp: - public ISequentialOutStream, - public CMyUnknownImp -{ - CWriteBuffer _writeBuffer; -public: - void Init() { _writeBuffer.Init(); } - size_t GetSize() const { return _writeBuffer.GetSize(); } - const CByteDynamicBuffer& GetBuffer() const { return _writeBuffer.GetBuffer(); } - - MY_UNKNOWN_IMP - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -class CSequentialOutStreamImp2: - public ISequentialOutStream, - public CMyUnknownImp -{ - Byte *_buffer; - size_t _size; - size_t _pos; -public: - - void Init(Byte *buffer, size_t size) - { - _buffer = buffer; - _pos = 0; - _size = size; - } - - size_t GetPos() const { return _pos; } - - MY_UNKNOWN_IMP - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -class CSequentialInStreamSizeCount: - public ISequentialInStream, - public CMyUnknownImp -{ - CMyComPtr _stream; - UInt64 _size; -public: - void Init(ISequentialInStream *stream) - { - _stream = stream; - _size = 0; - } - UInt64 GetSize() const { return _size; } - - MY_UNKNOWN_IMP - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -}; - -class CSequentialOutStreamSizeCount: - public ISequentialOutStream, - public CMyUnknownImp -{ - CMyComPtr _stream; - UInt64 _size; -public: - void SetStream(ISequentialOutStream *stream) { _stream = stream; } - void Init() { _size = 0; } - UInt64 GetSize() const { return _size; } - - MY_UNKNOWN_IMP - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamUtils.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamUtils.cpp deleted file mode 100644 index 57ff4ee38e38..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamUtils.cpp +++ /dev/null @@ -1,56 +0,0 @@ -// StreamUtils.cpp - -#include "StdAfx.h" - -#include "StreamUtils.h" - -static const UInt32 kBlockSize = ((UInt32)1 << 31); - -HRESULT ReadStream(ISequentialInStream *stream, void *data, size_t *processedSize) -{ - size_t size = *processedSize; - *processedSize = 0; - while (size != 0) - { - UInt32 curSize = (size < kBlockSize) ? (UInt32)size : kBlockSize; - UInt32 processedSizeLoc; - HRESULT res = stream->Read(data, curSize, &processedSizeLoc); - *processedSize += processedSizeLoc; - data = (void *)((Byte *)data + processedSizeLoc); - size -= processedSizeLoc; - RINOK(res); - if (processedSizeLoc == 0) - return S_OK; - } - return S_OK; -} - -HRESULT ReadStream_FALSE(ISequentialInStream *stream, void *data, size_t size) -{ - size_t processedSize = size; - RINOK(ReadStream(stream, data, &processedSize)); - return (size == processedSize) ? S_OK : S_FALSE; -} - -HRESULT ReadStream_FAIL(ISequentialInStream *stream, void *data, size_t size) -{ - size_t processedSize = size; - RINOK(ReadStream(stream, data, &processedSize)); - return (size == processedSize) ? S_OK : E_FAIL; -} - -HRESULT WriteStream(ISequentialOutStream *stream, const void *data, size_t size) -{ - while (size != 0) - { - UInt32 curSize = (size < kBlockSize) ? (UInt32)size : kBlockSize; - UInt32 processedSizeLoc; - HRESULT res = stream->Write(data, curSize, &processedSizeLoc); - data = (const void *)((const Byte *)data + processedSizeLoc); - size -= processedSizeLoc; - RINOK(res); - if (processedSizeLoc == 0) - return E_FAIL; - } - return S_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamUtils.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamUtils.h deleted file mode 100644 index 30535ab1b316..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/StreamUtils.h +++ /dev/null @@ -1,13 +0,0 @@ -// StreamUtils.h - -#ifndef __STREAMUTILS_H -#define __STREAMUTILS_H - -#include "../IStream.h" - -HRESULT ReadStream(ISequentialInStream *stream, void *data, size_t *size); -HRESULT ReadStream_FALSE(ISequentialInStream *stream, void *data, size_t size); -HRESULT ReadStream_FAIL(ISequentialInStream *stream, void *data, size_t size); -HRESULT WriteStream(ISequentialOutStream *stream, const void *data, size_t size); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/VirtThread.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Common/VirtThread.cpp deleted file mode 100644 index c07cabac8783..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/VirtThread.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// VirtThread.cpp - -#include "StdAfx.h" - -#include "VirtThread.h" - -static THREAD_FUNC_DECL CoderThread(void *p) -{ - for (;;) - { - CVirtThread *t = (CVirtThread *)p; - t->StartEvent.Lock(); - if (t->ExitEvent) - return 0; - t->Execute(); - t->FinishedEvent.Set(); - } -} - -WRes CVirtThread::Create() -{ - RINOK(StartEvent.CreateIfNotCreated()); - RINOK(FinishedEvent.CreateIfNotCreated()); - StartEvent.Reset(); - FinishedEvent.Reset(); - ExitEvent = false; - if (Thread.IsCreated()) - return S_OK; - return Thread.Create(CoderThread, this); -} - -void CVirtThread::Start() -{ - ExitEvent = false; - StartEvent.Set(); -} - -CVirtThread::~CVirtThread() -{ - ExitEvent = true; - if (StartEvent.IsCreated()) - StartEvent.Set(); - if (Thread.IsCreated()) - Thread.Wait(); -} - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Common/VirtThread.h b/modules/lib7z/LZMASDK/CPP/7zip/Common/VirtThread.h deleted file mode 100644 index bfc10dc4a7d4..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Common/VirtThread.h +++ /dev/null @@ -1,23 +0,0 @@ -// VirtThread.h - -#ifndef __VIRTTHREAD_H -#define __VIRTTHREAD_H - -#include "../../Windows/Synchronization.h" -#include "../../Windows/Thread.h" - -struct CVirtThread -{ - NWindows::NSynchronization::CAutoResetEvent StartEvent; - NWindows::NSynchronization::CAutoResetEvent FinishedEvent; - NWindows::CThread Thread; - bool ExitEvent; - - ~CVirtThread(); - WRes Create(); - void Start(); - void WaitFinish() { FinishedEvent.Lock(); } - virtual void Execute() = 0; -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Bcj2Coder.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/Bcj2Coder.cpp deleted file mode 100644 index 074f1f322b35..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Bcj2Coder.cpp +++ /dev/null @@ -1,390 +0,0 @@ -// Bcj2Coder.cpp - -#include "StdAfx.h" - -#include "../../../C/Alloc.h" - -#include "Bcj2Coder.h" - -namespace NCompress { -namespace NBcj2 { - -inline bool IsJcc(Byte b0, Byte b1) { return (b0 == 0x0F && (b1 & 0xF0) == 0x80); } -inline bool IsJ(Byte b0, Byte b1) { return ((b1 & 0xFE) == 0xE8 || IsJcc(b0, b1)); } -inline unsigned GetIndex(Byte b0, Byte b1) { return ((b1 == 0xE8) ? b0 : ((b1 == 0xE9) ? 256 : 257)); } - -#ifndef EXTRACT_ONLY - -static const int kBufferSize = 1 << 17; - -static bool inline Test86MSByte(Byte b) -{ - return (b == 0 || b == 0xFF); -} - -bool CEncoder::Create() -{ - if (!_mainStream.Create(1 << 18)) - return false; - if (!_callStream.Create(1 << 18)) - return false; - if (!_jumpStream.Create(1 << 18)) - return false; - if (!_rangeEncoder.Create(1 << 20)) - return false; - if (_buffer == 0) - { - _buffer = (Byte *)MidAlloc(kBufferSize); - if (_buffer == 0) - return false; - } - return true; -} - -CEncoder::~CEncoder() -{ - ::MidFree(_buffer); -} - -HRESULT CEncoder::Flush() -{ - RINOK(_mainStream.Flush()); - RINOK(_callStream.Flush()); - RINOK(_jumpStream.Flush()); - _rangeEncoder.FlushData(); - return _rangeEncoder.FlushStream(); -} - -const UInt32 kDefaultLimit = (1 << 24); - -HRESULT CEncoder::CodeReal(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 ** /* outSizes */, - UInt32 numOutStreams, - ICompressProgressInfo *progress) -{ - if (numInStreams != 1 || numOutStreams != 4) - return E_INVALIDARG; - - if (!Create()) - return E_OUTOFMEMORY; - - bool sizeIsDefined = false; - UInt64 inSize = 0; - if (inSizes != NULL) - if (inSizes[0] != NULL) - { - inSize = *inSizes[0]; - if (inSize <= kDefaultLimit) - sizeIsDefined = true; - } - - ISequentialInStream *inStream = inStreams[0]; - - _mainStream.SetStream(outStreams[0]); - _mainStream.Init(); - _callStream.SetStream(outStreams[1]); - _callStream.Init(); - _jumpStream.SetStream(outStreams[2]); - _jumpStream.Init(); - _rangeEncoder.SetStream(outStreams[3]); - _rangeEncoder.Init(); - for (int i = 0; i < 256 + 2; i++) - _statusEncoder[i].Init(); - CCoderReleaser releaser(this); - - CMyComPtr getSubStreamSize; - { - inStream->QueryInterface(IID_ICompressGetSubStreamSize, (void **)&getSubStreamSize); - } - - UInt32 nowPos = 0; - UInt64 nowPos64 = 0; - UInt32 bufferPos = 0; - - Byte prevByte = 0; - - UInt64 subStreamIndex = 0; - UInt64 subStreamStartPos = 0; - UInt64 subStreamEndPos = 0; - - for (;;) - { - UInt32 processedSize = 0; - for (;;) - { - UInt32 size = kBufferSize - (bufferPos + processedSize); - UInt32 processedSizeLoc; - if (size == 0) - break; - RINOK(inStream->Read(_buffer + bufferPos + processedSize, size, &processedSizeLoc)); - if (processedSizeLoc == 0) - break; - processedSize += processedSizeLoc; - } - UInt32 endPos = bufferPos + processedSize; - - if (endPos < 5) - { - // change it - for (bufferPos = 0; bufferPos < endPos; bufferPos++) - { - Byte b = _buffer[bufferPos]; - _mainStream.WriteByte(b); - UInt32 index; - if (b == 0xE8) - index = prevByte; - else if (b == 0xE9) - index = 256; - else if (IsJcc(prevByte, b)) - index = 257; - else - { - prevByte = b; - continue; - } - _statusEncoder[index].Encode(&_rangeEncoder, 0); - prevByte = b; - } - return Flush(); - } - - bufferPos = 0; - - UInt32 limit = endPos - 5; - while(bufferPos <= limit) - { - Byte b = _buffer[bufferPos]; - _mainStream.WriteByte(b); - if (!IsJ(prevByte, b)) - { - bufferPos++; - prevByte = b; - continue; - } - Byte nextByte = _buffer[bufferPos + 4]; - UInt32 src = - (UInt32(nextByte) << 24) | - (UInt32(_buffer[bufferPos + 3]) << 16) | - (UInt32(_buffer[bufferPos + 2]) << 8) | - (_buffer[bufferPos + 1]); - UInt32 dest = (nowPos + bufferPos + 5) + src; - // if (Test86MSByte(nextByte)) - bool convert; - if (getSubStreamSize != NULL) - { - UInt64 currentPos = (nowPos64 + bufferPos); - while (subStreamEndPos < currentPos) - { - UInt64 subStreamSize; - HRESULT result = getSubStreamSize->GetSubStreamSize(subStreamIndex, &subStreamSize); - if (result == S_OK) - { - subStreamStartPos = subStreamEndPos; - subStreamEndPos += subStreamSize; - subStreamIndex++; - } - else if (result == S_FALSE || result == E_NOTIMPL) - { - getSubStreamSize.Release(); - subStreamStartPos = 0; - subStreamEndPos = subStreamStartPos - 1; - } - else - return result; - } - if (getSubStreamSize == NULL) - { - if (sizeIsDefined) - convert = (dest < inSize); - else - convert = Test86MSByte(nextByte); - } - else if (subStreamEndPos - subStreamStartPos > kDefaultLimit) - convert = Test86MSByte(nextByte); - else - { - UInt64 dest64 = (currentPos + 5) + Int64(Int32(src)); - convert = (dest64 >= subStreamStartPos && dest64 < subStreamEndPos); - } - } - else if (sizeIsDefined) - convert = (dest < inSize); - else - convert = Test86MSByte(nextByte); - unsigned index = GetIndex(prevByte, b); - if (convert) - { - _statusEncoder[index].Encode(&_rangeEncoder, 1); - bufferPos += 5; - COutBuffer &s = (b == 0xE8) ? _callStream : _jumpStream; - for (int i = 24; i >= 0; i -= 8) - s.WriteByte((Byte)(dest >> i)); - prevByte = nextByte; - } - else - { - _statusEncoder[index].Encode(&_rangeEncoder, 0); - bufferPos++; - prevByte = b; - } - } - nowPos += bufferPos; - nowPos64 += bufferPos; - - if (progress != NULL) - { - /* - const UInt64 compressedSize = - _mainStream.GetProcessedSize() + - _callStream.GetProcessedSize() + - _jumpStream.GetProcessedSize() + - _rangeEncoder.GetProcessedSize(); - */ - RINOK(progress->SetRatioInfo(&nowPos64, NULL)); - } - - UInt32 i = 0; - while(bufferPos < endPos) - _buffer[i++] = _buffer[bufferPos++]; - bufferPos = i; - } -} - -STDMETHODIMP CEncoder::Code(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress) -{ - try - { - return CodeReal(inStreams, inSizes, numInStreams, - outStreams, outSizes,numOutStreams, progress); - } - catch(const COutBufferException &e) { return e.ErrorCode; } - catch(...) { return S_FALSE; } -} - -#endif - -HRESULT CDecoder::CodeReal(ISequentialInStream **inStreams, - const UInt64 ** /* inSizes */, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 ** /* outSizes */, - UInt32 numOutStreams, - ICompressProgressInfo *progress) -{ - if (numInStreams != 4 || numOutStreams != 1) - return E_INVALIDARG; - - if (!_mainInStream.Create(1 << 16)) - return E_OUTOFMEMORY; - if (!_callStream.Create(1 << 20)) - return E_OUTOFMEMORY; - if (!_jumpStream.Create(1 << 16)) - return E_OUTOFMEMORY; - if (!_rangeDecoder.Create(1 << 20)) - return E_OUTOFMEMORY; - if (!_outStream.Create(1 << 16)) - return E_OUTOFMEMORY; - - _mainInStream.SetStream(inStreams[0]); - _callStream.SetStream(inStreams[1]); - _jumpStream.SetStream(inStreams[2]); - _rangeDecoder.SetStream(inStreams[3]); - _outStream.SetStream(outStreams[0]); - - _mainInStream.Init(); - _callStream.Init(); - _jumpStream.Init(); - _rangeDecoder.Init(); - _outStream.Init(); - - for (int i = 0; i < 256 + 2; i++) - _statusDecoder[i].Init(); - - CCoderReleaser releaser(this); - - Byte prevByte = 0; - UInt32 processedBytes = 0; - for (;;) - { - if (processedBytes >= (1 << 20) && progress != NULL) - { - /* - const UInt64 compressedSize = - _mainInStream.GetProcessedSize() + - _callStream.GetProcessedSize() + - _jumpStream.GetProcessedSize() + - _rangeDecoder.GetProcessedSize(); - */ - const UInt64 nowPos64 = _outStream.GetProcessedSize(); - RINOK(progress->SetRatioInfo(NULL, &nowPos64)); - processedBytes = 0; - } - UInt32 i; - Byte b = 0; - const UInt32 kBurstSize = (1 << 18); - for (i = 0; i < kBurstSize; i++) - { - if (!_mainInStream.ReadByte(b)) - return Flush(); - _outStream.WriteByte(b); - if (IsJ(prevByte, b)) - break; - prevByte = b; - } - processedBytes += i; - if (i == kBurstSize) - continue; - unsigned index = GetIndex(prevByte, b); - if (_statusDecoder[index].Decode(&_rangeDecoder) == 1) - { - UInt32 src = 0; - CInBuffer &s = (b == 0xE8) ? _callStream : _jumpStream; - for (int i = 0; i < 4; i++) - { - Byte b0; - if(!s.ReadByte(b0)) - return S_FALSE; - src <<= 8; - src |= ((UInt32)b0); - } - UInt32 dest = src - (UInt32(_outStream.GetProcessedSize()) + 4) ; - _outStream.WriteByte((Byte)(dest)); - _outStream.WriteByte((Byte)(dest >> 8)); - _outStream.WriteByte((Byte)(dest >> 16)); - _outStream.WriteByte((Byte)(dest >> 24)); - prevByte = (Byte)(dest >> 24); - processedBytes += 4; - } - else - prevByte = b; - } -} - -STDMETHODIMP CDecoder::Code(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress) -{ - try - { - return CodeReal(inStreams, inSizes, numInStreams, - outStreams, outSizes,numOutStreams, progress); - } - catch(const CInBufferException &e) { return e.ErrorCode; } - catch(const COutBufferException &e) { return e.ErrorCode; } - catch(...) { return S_FALSE; } -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Bcj2Coder.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/Bcj2Coder.h deleted file mode 100644 index fcbc2a41147e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Bcj2Coder.h +++ /dev/null @@ -1,125 +0,0 @@ -// Bcj2Coder.h - -#ifndef __COMPRESS_BCJ2_CODER_H -#define __COMPRESS_BCJ2_CODER_H - -#include "../../Common/MyCom.h" - -#include "../ICoder.h" - -#include "RangeCoderBit.h" - -namespace NCompress { -namespace NBcj2 { - -const int kNumMoveBits = 5; - -#ifndef EXTRACT_ONLY - -class CEncoder: - public ICompressCoder2, - public CMyUnknownImp -{ - Byte *_buffer; -public: - CEncoder(): _buffer(0) {}; - ~CEncoder(); - bool Create(); - - COutBuffer _mainStream; - COutBuffer _callStream; - COutBuffer _jumpStream; - NCompress::NRangeCoder::CEncoder _rangeEncoder; - NCompress::NRangeCoder::CBitEncoder _statusEncoder[256 + 2]; - - HRESULT Flush(); - void ReleaseStreams() - { - _mainStream.ReleaseStream(); - _callStream.ReleaseStream(); - _jumpStream.ReleaseStream(); - _rangeEncoder.ReleaseStream(); - } - - class CCoderReleaser - { - CEncoder *_coder; - public: - CCoderReleaser(CEncoder *coder): _coder(coder) {} - ~CCoderReleaser() { _coder->ReleaseStreams(); } - }; - -public: - - MY_UNKNOWN_IMP - - HRESULT CodeReal(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress); - STDMETHOD(Code)(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress); -}; - -#endif - -class CDecoder: - public ICompressCoder2, - public CMyUnknownImp -{ -public: - CInBuffer _mainInStream; - CInBuffer _callStream; - CInBuffer _jumpStream; - NCompress::NRangeCoder::CDecoder _rangeDecoder; - NCompress::NRangeCoder::CBitDecoder _statusDecoder[256 + 2]; - - COutBuffer _outStream; - - void ReleaseStreams() - { - _mainInStream.ReleaseStream(); - _callStream.ReleaseStream(); - _jumpStream.ReleaseStream(); - _rangeDecoder.ReleaseStream(); - _outStream.ReleaseStream(); - } - - HRESULT Flush() { return _outStream.Flush(); } - class CCoderReleaser - { - CDecoder *_coder; - public: - CCoderReleaser(CDecoder *coder): _coder(coder) {} - ~CCoderReleaser() { _coder->ReleaseStreams(); } - }; - -public: - MY_UNKNOWN_IMP - HRESULT CodeReal(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress); - STDMETHOD(Code)(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress); -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Bcj2Register.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/Bcj2Register.cpp deleted file mode 100644 index b063f3f69821..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Bcj2Register.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// Bcj2Register.cpp - -#include "StdAfx.h" - -#include "../Common/RegisterCodec.h" - -#include "Bcj2Coder.h" - -static void *CreateCodec() { return (void *)(ICompressCoder2 *)(new NCompress::NBcj2::CDecoder()); } -#ifndef EXTRACT_ONLY -static void *CreateCodecOut() { return (void *)(ICompressCoder2 *)(new NCompress::NBcj2::CEncoder()); } -#else -#define CreateCodecOut 0 -#endif - -static CCodecInfo g_CodecInfo = - { CreateCodec, CreateCodecOut, 0x0303011B, L"BCJ2", 4, false }; - -REGISTER_CODEC(BCJ2) diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BcjCoder.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/BcjCoder.cpp deleted file mode 100644 index 108c573d5c0d..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BcjCoder.cpp +++ /dev/null @@ -1,15 +0,0 @@ -// BcjCoder.cpp - -#include "StdAfx.h" - -#include "BcjCoder.h" - -UInt32 CBCJ_x86_Encoder::SubFilter(Byte *data, UInt32 size) -{ - return (UInt32)::x86_Convert(data, size, _bufferPos, &_prevMask, 1); -} - -UInt32 CBCJ_x86_Decoder::SubFilter(Byte *data, UInt32 size) -{ - return (UInt32)::x86_Convert(data, size, _bufferPos, &_prevMask, 0); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BcjCoder.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/BcjCoder.h deleted file mode 100644 index c86d5fc0a982..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BcjCoder.h +++ /dev/null @@ -1,19 +0,0 @@ -// BcjCoder.h - -#ifndef __COMPRESS_BCJ_CODER_H -#define __COMPRESS_BCJ_CODER_H - -#include "../../../C/Bra.h" - -#include "BranchCoder.h" - -struct CBranch86 -{ - UInt32 _prevMask; - void x86Init() { x86_Convert_Init(_prevMask); } -}; - -MyClassB(BCJ_x86, 0x01, 3, CBranch86 , - virtual void SubInit() { x86Init(); }) - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BcjRegister.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/BcjRegister.cpp deleted file mode 100644 index 09e53c65536d..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BcjRegister.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// BcjRegister.cpp - -#include "StdAfx.h" - -#include "../Common/RegisterCodec.h" - -#include "BcjCoder.h" - -static void *CreateCodec() { return (void *)(ICompressFilter *)(new CBCJ_x86_Decoder()); } -#ifndef EXTRACT_ONLY -static void *CreateCodecOut() { return (void *)(ICompressFilter *)(new CBCJ_x86_Encoder()); } -#else -#define CreateCodecOut 0 -#endif - -static CCodecInfo g_CodecInfo = - { CreateCodec, CreateCodecOut, 0x03030103, L"BCJ", 1, true }; - -REGISTER_CODEC(BCJ) diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchCoder.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchCoder.cpp deleted file mode 100644 index 6cacc66ac75a..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchCoder.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// BranchCoder.cpp - -#include "StdAfx.h" - -#include "BranchCoder.h" - -STDMETHODIMP CBranchConverter::Init() -{ - _bufferPos = 0; - SubInit(); - return S_OK; -} - -STDMETHODIMP_(UInt32) CBranchConverter::Filter(Byte *data, UInt32 size) -{ - UInt32 processedSize = SubFilter(data, size); - _bufferPos += processedSize; - return processedSize; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchCoder.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchCoder.h deleted file mode 100644 index 473286af386e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchCoder.h +++ /dev/null @@ -1,44 +0,0 @@ -// BranchCoder.h - -#ifndef __COMPRESS_BRANCH_CODER_H -#define __COMPRESS_BRANCH_CODER_H - -#include "../../Common/MyCom.h" - -#include "../ICoder.h" - -class CBranchConverter: - public ICompressFilter, - public CMyUnknownImp -{ -protected: - UInt32 _bufferPos; - virtual void SubInit() {} - virtual UInt32 SubFilter(Byte *data, UInt32 size) = 0; -public: - MY_UNKNOWN_IMP; - STDMETHOD(Init)(); - STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); -}; - -#define MyClassEncoderA(Name) class C ## Name: public CBranchConverter \ - { public: UInt32 SubFilter(Byte *data, UInt32 size); }; - -#define MyClassDecoderA(Name) class C ## Name: public CBranchConverter \ - { public: UInt32 SubFilter(Byte *data, UInt32 size); }; - -#define MyClassEncoderB(Name, ADD_ITEMS, ADD_INIT) class C ## Name: public CBranchConverter, public ADD_ITEMS \ - { public: UInt32 SubFilter(Byte *data, UInt32 size); ADD_INIT}; - -#define MyClassDecoderB(Name, ADD_ITEMS, ADD_INIT) class C ## Name: public CBranchConverter, public ADD_ITEMS \ - { public: UInt32 SubFilter(Byte *data, UInt32 size); ADD_INIT}; - -#define MyClassA(Name, id, subId) \ -MyClassEncoderA(Name ## _Encoder) \ -MyClassDecoderA(Name ## _Decoder) - -#define MyClassB(Name, id, subId, ADD_ITEMS, ADD_INIT) \ -MyClassEncoderB(Name ## _Encoder, ADD_ITEMS, ADD_INIT) \ -MyClassDecoderB(Name ## _Decoder, ADD_ITEMS, ADD_INIT) - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchMisc.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchMisc.cpp deleted file mode 100644 index 1a46bb1f6181..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchMisc.cpp +++ /dev/null @@ -1,37 +0,0 @@ -// BranchMisc.cpp - -#include "StdAfx.h" - -#include "../../../C/Bra.h" - -#include "BranchMisc.h" - -UInt32 CBC_ARM_Encoder::SubFilter(Byte *data, UInt32 size) - { return (UInt32)::ARM_Convert(data, size, _bufferPos, 1); } - -UInt32 CBC_ARM_Decoder::SubFilter(Byte *data, UInt32 size) - { return (UInt32)::ARM_Convert(data, size, _bufferPos, 0); } - -UInt32 CBC_ARMT_Encoder::SubFilter(Byte *data, UInt32 size) - { return (UInt32)::ARMT_Convert(data, size, _bufferPos, 1); } - -UInt32 CBC_ARMT_Decoder::SubFilter(Byte *data, UInt32 size) - { return (UInt32)::ARMT_Convert(data, size, _bufferPos, 0); } - -UInt32 CBC_PPC_Encoder::SubFilter(Byte *data, UInt32 size) - { return (UInt32)::PPC_Convert(data, size, _bufferPos, 1); } - -UInt32 CBC_PPC_Decoder::SubFilter(Byte *data, UInt32 size) - { return (UInt32)::PPC_Convert(data, size, _bufferPos, 0); } - -UInt32 CBC_SPARC_Encoder::SubFilter(Byte *data, UInt32 size) - { return (UInt32)::SPARC_Convert(data, size, _bufferPos, 1); } - -UInt32 CBC_SPARC_Decoder::SubFilter(Byte *data, UInt32 size) - { return (UInt32)::SPARC_Convert(data, size, _bufferPos, 0); } - -UInt32 CBC_IA64_Encoder::SubFilter(Byte *data, UInt32 size) - { return (UInt32)::IA64_Convert(data, size, _bufferPos, 1); } - -UInt32 CBC_IA64_Decoder::SubFilter(Byte *data, UInt32 size) - { return (UInt32)::IA64_Convert(data, size, _bufferPos, 0); } diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchMisc.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchMisc.h deleted file mode 100644 index 053e923a926d..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchMisc.h +++ /dev/null @@ -1,14 +0,0 @@ -// BranchMisc.h - -#ifndef __COMPRESS_BRANCH_MISC_H -#define __COMPRESS_BRANCH_MISC_H - -#include "BranchCoder.h" - -MyClassA(BC_ARM, 0x05, 1) -MyClassA(BC_ARMT, 0x07, 1) -MyClassA(BC_PPC, 0x02, 5) -MyClassA(BC_SPARC, 0x08, 5) -MyClassA(BC_IA64, 0x04, 1) - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchRegister.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchRegister.cpp deleted file mode 100644 index bc55dd668d00..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/BranchRegister.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// BranchRegister.cpp - -#include "StdAfx.h" - -#include "../Common/RegisterCodec.h" - -#include "BranchMisc.h" - -#define CREATE_CODEC(x) \ - static void *CreateCodec ## x() { return (void *)(ICompressFilter *)(new C ## x ## _Decoder); } \ - static void *CreateCodec ## x ## Out() { return (void *)(ICompressFilter *)(new C ## x ## _Encoder); } - -CREATE_CODEC(BC_PPC) -CREATE_CODEC(BC_IA64) -CREATE_CODEC(BC_ARM) -CREATE_CODEC(BC_ARMT) -CREATE_CODEC(BC_SPARC) - -#define METHOD_ITEM(x, id1, id2, name) { CreateCodec ## x, CreateCodec ## x ## Out, 0x03030000 + (id1 * 256) + id2, name, 1, true } - -static CCodecInfo g_CodecsInfo[] = -{ - METHOD_ITEM(BC_PPC, 0x02, 0x05, L"PPC"), - METHOD_ITEM(BC_IA64, 0x04, 1, L"IA64"), - METHOD_ITEM(BC_ARM, 0x05, 1, L"ARM"), - METHOD_ITEM(BC_ARMT, 0x07, 1, L"ARMT"), - METHOD_ITEM(BC_SPARC, 0x08, 0x05, L"SPARC") -}; - -REGISTER_CODECS(Branch) diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/ByteSwap.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/ByteSwap.cpp deleted file mode 100644 index 7f028fb62d6c..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/ByteSwap.cpp +++ /dev/null @@ -1,73 +0,0 @@ -// ByteSwap.cpp - -#include "StdAfx.h" - -#include "../../Common/MyCom.h" - -#include "../ICoder.h" - -#include "../Common/RegisterCodec.h" - -class CByteSwap2: - public ICompressFilter, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - STDMETHOD(Init)(); - STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); -}; - -class CByteSwap4: - public ICompressFilter, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - STDMETHOD(Init)(); - STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); -}; - -STDMETHODIMP CByteSwap2::Init() { return S_OK; } - -STDMETHODIMP_(UInt32) CByteSwap2::Filter(Byte *data, UInt32 size) -{ - const UInt32 kStep = 2; - UInt32 i; - for (i = 0; i + kStep <= size; i += kStep) - { - Byte b = data[i]; - data[i] = data[i + 1]; - data[i + 1] = b; - } - return i; -} - -STDMETHODIMP CByteSwap4::Init() { return S_OK; } - -STDMETHODIMP_(UInt32) CByteSwap4::Filter(Byte *data, UInt32 size) -{ - const UInt32 kStep = 4; - UInt32 i; - for (i = 0; i + kStep <= size; i += kStep) - { - Byte b0 = data[i]; - Byte b1 = data[i + 1]; - data[i] = data[i + 3]; - data[i + 1] = data[i + 2]; - data[i + 2] = b1; - data[i + 3] = b0; - } - return i; -} - -static void *CreateCodec2() { return (void *)(ICompressFilter *)(new CByteSwap2); } -static void *CreateCodec4() { return (void *)(ICompressFilter *)(new CByteSwap4); } - -static CCodecInfo g_CodecsInfo[] = -{ - { CreateCodec2, CreateCodec2, 0x020302, L"Swap2", 1, true }, - { CreateCodec4, CreateCodec4, 0x020304, L"Swap4", 1, true } -}; - -REGISTER_CODECS(ByteSwap) diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/CodecExports.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/CodecExports.cpp deleted file mode 100644 index 84a27cfa897e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/CodecExports.cpp +++ /dev/null @@ -1,160 +0,0 @@ -// CodecExports.cpp - -#include "StdAfx.h" - -#include "../../Common/ComTry.h" - -#include "../../Windows/PropVariant.h" - -#include "../ICoder.h" - -#include "../Common/RegisterCodec.h" - -extern unsigned int g_NumCodecs; -extern const CCodecInfo *g_Codecs[]; - -static const UInt16 kDecodeId = 0x2790; - -DEFINE_GUID(CLSID_CCodec, -0x23170F69, 0x40C1, kDecodeId, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); - -static inline HRESULT SetPropString(const char *s, unsigned int size, PROPVARIANT *value) -{ - if ((value->bstrVal = ::SysAllocStringByteLen(s, size)) != 0) - value->vt = VT_BSTR; - return S_OK; -} - -static inline HRESULT SetPropGUID(const GUID &guid, PROPVARIANT *value) -{ - return SetPropString((const char *)&guid, sizeof(GUID), value); -} - -static HRESULT SetClassID(CMethodId id, bool encode, PROPVARIANT *value) -{ - GUID clsId = CLSID_CCodec; - for (int i = 0; i < sizeof(id); i++, id >>= 8) - clsId.Data4[i] = (Byte)(id & 0xFF); - if (encode) - clsId.Data3++; - return SetPropGUID(clsId, value); -} - -static HRESULT FindCodecClassId(const GUID *clsID, UInt32 isCoder2, bool isFilter, bool &encode, int &index) -{ - index = -1; - if (clsID->Data1 != CLSID_CCodec.Data1 || - clsID->Data2 != CLSID_CCodec.Data2 || - (clsID->Data3 & ~1) != kDecodeId) - return S_OK; - encode = (clsID->Data3 != kDecodeId); - UInt64 id = 0; - for (int j = 0; j < 8; j++) - id |= ((UInt64)clsID->Data4[j]) << (8 * j); - for (unsigned i = 0; i < g_NumCodecs; i++) - { - const CCodecInfo &codec = *g_Codecs[i]; - if (id != codec.Id || encode && !codec.CreateEncoder || !encode && !codec.CreateDecoder) - continue; - if (!isFilter && codec.IsFilter || isFilter && !codec.IsFilter || - codec.NumInStreams != 1 && !isCoder2 || codec.NumInStreams == 1 && isCoder2) - return E_NOINTERFACE; - index = i; - return S_OK; - } - return S_OK; -} - -STDAPI CreateCoder2(bool encode, UInt32 index, const GUID *iid, void **outObject) -{ - COM_TRY_BEGIN - *outObject = 0; - bool isCoder = (*iid == IID_ICompressCoder) != 0; - bool isCoder2 = (*iid == IID_ICompressCoder2) != 0; - bool isFilter = (*iid == IID_ICompressFilter) != 0; - const CCodecInfo &codec = *g_Codecs[index]; - if (!isFilter && codec.IsFilter || isFilter && !codec.IsFilter || - codec.NumInStreams != 1 && !isCoder2 || codec.NumInStreams == 1 && isCoder2) - return E_NOINTERFACE; - if (encode) - { - if (!codec.CreateEncoder) - return CLASS_E_CLASSNOTAVAILABLE; - *outObject = codec.CreateEncoder(); - } - else - { - if (!codec.CreateDecoder) - return CLASS_E_CLASSNOTAVAILABLE; - *outObject = codec.CreateDecoder(); - } - if (isCoder) - ((ICompressCoder *)*outObject)->AddRef(); - else if (isCoder2) - ((ICompressCoder2 *)*outObject)->AddRef(); - else - ((ICompressFilter *)*outObject)->AddRef(); - return S_OK; - COM_TRY_END -} - -STDAPI CreateCoder(const GUID *clsid, const GUID *iid, void **outObject) -{ - *outObject = 0; - bool isCoder = (*iid == IID_ICompressCoder) != 0; - bool isCoder2 = (*iid == IID_ICompressCoder2) != 0; - bool isFilter = (*iid == IID_ICompressFilter) != 0; - if (!isCoder && !isCoder2 && !isFilter) - return E_NOINTERFACE; - bool encode; - int codecIndex; - HRESULT res = FindCodecClassId(clsid, isCoder2, isFilter, encode, codecIndex); - if (res != S_OK) - return res; - if (codecIndex < 0) - return CLASS_E_CLASSNOTAVAILABLE; - return CreateCoder2(encode, codecIndex, iid, outObject); -} - -STDAPI GetMethodProperty(UInt32 codecIndex, PROPID propID, PROPVARIANT *value) -{ - ::VariantClear((VARIANTARG *)value); - const CCodecInfo &codec = *g_Codecs[codecIndex]; - switch(propID) - { - case NMethodPropID::kID: - { - value->uhVal.QuadPart = (UInt64)codec.Id; - value->vt = VT_UI8; - break; - } - case NMethodPropID::kName: - if ((value->bstrVal = ::SysAllocString(codec.Name)) != 0) - value->vt = VT_BSTR; - break; - case NMethodPropID::kDecoder: - if (codec.CreateDecoder) - return SetClassID(codec.Id, false, value); - break; - case NMethodPropID::kEncoder: - if (codec.CreateEncoder) - return SetClassID(codec.Id, true, value); - break; - case NMethodPropID::kInStreams: - { - if (codec.NumInStreams != 1) - { - value->vt = VT_UI4; - value->ulVal = (ULONG)codec.NumInStreams; - } - break; - } - } - return S_OK; -} - -STDAPI GetNumberOfMethods(UINT32 *numCodecs) -{ - *numCodecs = g_NumCodecs; - return S_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/CopyCoder.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/CopyCoder.cpp deleted file mode 100644 index da15d0403eaa..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/CopyCoder.cpp +++ /dev/null @@ -1,67 +0,0 @@ -// Compress/CopyCoder.cpp - -#include "StdAfx.h" - -#include "../../../C/Alloc.h" - -#include "../Common/StreamUtils.h" - -#include "CopyCoder.h" - -namespace NCompress { - -static const UInt32 kBufferSize = 1 << 17; - -CCopyCoder::~CCopyCoder() -{ - ::MidFree(_buffer); -} - -STDMETHODIMP CCopyCoder::Code(ISequentialInStream *inStream, - ISequentialOutStream *outStream, - const UInt64 * /* inSize */, const UInt64 *outSize, - ICompressProgressInfo *progress) -{ - if (_buffer == 0) - { - _buffer = (Byte *)::MidAlloc(kBufferSize); - if (_buffer == 0) - return E_OUTOFMEMORY; - } - - TotalSize = 0; - for (;;) - { - UInt32 size = kBufferSize; - if (outSize != 0) - if (size > *outSize - TotalSize) - size = (UInt32)(*outSize - TotalSize); - RINOK(inStream->Read(_buffer, size, &size)); - if (size == 0) - break; - if (outStream) - { - RINOK(WriteStream(outStream, _buffer, size)); - } - TotalSize += size; - if (progress != NULL) - { - RINOK(progress->SetRatioInfo(&TotalSize, &TotalSize)); - } - } - return S_OK; -} - -STDMETHODIMP CCopyCoder::GetInStreamProcessedSize(UInt64 *value) -{ - *value = TotalSize; - return S_OK; -} - -HRESULT CopyStream(ISequentialInStream *inStream, ISequentialOutStream *outStream, ICompressProgressInfo *progress) -{ - CMyComPtr copyCoder = new NCompress::CCopyCoder; - return copyCoder->Code(inStream, outStream, NULL, NULL, progress); -} - -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/CopyCoder.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/CopyCoder.h deleted file mode 100644 index 16c42ee1a90f..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/CopyCoder.h +++ /dev/null @@ -1,34 +0,0 @@ -// Compress/CopyCoder.h - -#ifndef __COMPRESS_COPY_CODER_H -#define __COMPRESS_COPY_CODER_H - -#include "../../Common/MyCom.h" - -#include "../ICoder.h" - -namespace NCompress { - -class CCopyCoder: - public ICompressCoder, - public ICompressGetInStreamProcessedSize, - public CMyUnknownImp -{ - Byte *_buffer; -public: - UInt64 TotalSize; - CCopyCoder(): TotalSize(0), _buffer(0) {}; - ~CCopyCoder(); - - MY_UNKNOWN_IMP1(ICompressGetInStreamProcessedSize) - - STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, - const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress); - STDMETHOD(GetInStreamProcessedSize)(UInt64 *value); -}; - -HRESULT CopyStream(ISequentialInStream *inStream, ISequentialOutStream *outStream, ICompressProgressInfo *progress); - -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/CopyRegister.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/CopyRegister.cpp deleted file mode 100644 index 3ef245978e8f..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/CopyRegister.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// CopyRegister.cpp - -#include "StdAfx.h" - -#include "../Common/RegisterCodec.h" - -#include "CopyCoder.h" - -static void *CreateCodec() { return (void *)(ICompressCoder *)(new NCompress::CCopyCoder); } - -static CCodecInfo g_CodecInfo = -{ CreateCodec, CreateCodec, 0x00, L"Copy", 1, false }; - -REGISTER_CODEC(Copy) diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/DeltaFilter.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/DeltaFilter.cpp deleted file mode 100644 index e7e38229fba1..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/DeltaFilter.cpp +++ /dev/null @@ -1,112 +0,0 @@ -// DeltaFilter.cpp - -#include "StdAfx.h" - -#include "../../../C/Delta.h" - -#include "../Common/RegisterCodec.h" - -#include "BranchCoder.h" - -struct CDelta -{ - unsigned _delta; - Byte _state[DELTA_STATE_SIZE]; - CDelta(): _delta(1) {} - void DeltaInit() { Delta_Init(_state); } -}; - -class CDeltaEncoder: - public ICompressFilter, - public ICompressSetCoderProperties, - public ICompressWriteCoderProperties, - CDelta, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP2(ICompressSetCoderProperties, ICompressWriteCoderProperties) - STDMETHOD(Init)(); - STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); - STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps); - STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream); -}; - -class CDeltaDecoder: - public ICompressFilter, - public ICompressSetDecoderProperties2, - CDelta, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP1(ICompressSetDecoderProperties2) - STDMETHOD(Init)(); - STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); - STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size); -}; - -STDMETHODIMP CDeltaEncoder::Init() -{ - DeltaInit(); - return S_OK; -} - -STDMETHODIMP_(UInt32) CDeltaEncoder::Filter(Byte *data, UInt32 size) -{ - Delta_Encode(_state, _delta, data, size); - return size; -} - -STDMETHODIMP CDeltaEncoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps) -{ - UInt32 delta = _delta; - for (UInt32 i = 0; i < numProps; i++) - { - const PROPVARIANT &prop = props[i]; - if (propIDs[i] != NCoderPropID::kDefaultProp || prop.vt != VT_UI4 || prop.ulVal < 1 || prop.ulVal > 256) - return E_INVALIDARG; - delta = prop.ulVal; - } - _delta = delta; - return S_OK; -} - -STDMETHODIMP CDeltaEncoder::WriteCoderProperties(ISequentialOutStream *outStream) -{ - Byte prop = (Byte)(_delta - 1); - return outStream->Write(&prop, 1, NULL); -} - -STDMETHODIMP CDeltaDecoder::Init() -{ - DeltaInit(); - return S_OK; -} - -STDMETHODIMP_(UInt32) CDeltaDecoder::Filter(Byte *data, UInt32 size) -{ - Delta_Decode(_state, _delta, data, size); - return size; -} - -STDMETHODIMP CDeltaDecoder::SetDecoderProperties2(const Byte *props, UInt32 size) -{ - if (size != 1) - return E_INVALIDARG; - _delta = (unsigned)props[0] + 1; - return S_OK; -} - -#define CREATE_CODEC(x) \ - static void *CreateCodec ## x() { return (void *)(ICompressFilter *)(new C ## x ## Decoder); } \ - static void *CreateCodec ## x ## Out() { return (void *)(ICompressFilter *)(new C ## x ## Encoder); } - -CREATE_CODEC(Delta) - -#define METHOD_ITEM(x, id, name) { CreateCodec ## x, CreateCodec ## x ## Out, id, name, 1, true } - -static CCodecInfo g_CodecsInfo[] = -{ - METHOD_ITEM(Delta, 3, L"Delta") -}; - -REGISTER_CODECS(Delta) diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsp deleted file mode 100644 index a4f1d4440694..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsp +++ /dev/null @@ -1,466 +0,0 @@ -# Microsoft Developer Studio Project File - Name="AloneLZMA" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=AloneLZMA - Win32 DebugU -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "AloneLZMA.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "AloneLZMA.mak" CFG="AloneLZMA - Win32 DebugU" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "AloneLZMA - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "AloneLZMA - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "AloneLZMA - Win32 ReleaseU" (based on "Win32 (x86) Console Application") -!MESSAGE "AloneLZMA - Win32 DebugU" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "AloneLZMA - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "_MBCS" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "BENCH_MT" /FAcs /Yu"StdAfx.h" /FD /c -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"c:\UTIL\lzma.exe" /opt:NOWIN98 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "AloneLZMA - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "_MBCS" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "BENCH_MT" /Yu"StdAfx.h" /FD /GZ /c -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"c:\UTIL\lzma.exe" /pdbtype:sept - -!ELSEIF "$(CFG)" == "AloneLZMA - Win32 ReleaseU" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "ReleaseU" -# PROP BASE Intermediate_Dir "ReleaseU" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "ReleaseU" -# PROP Intermediate_Dir "ReleaseU" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "EXCLUDE_COM" /D "NO_REGISTRY" /D "FORMAT_7Z" /D "FORMAT_BZIP2" /D "FORMAT_ZIP" /D "FORMAT_TAR" /D "FORMAT_GZIP" /D "COMPRESS_LZMA" /D "COMPRESS_BCJ_X86" /D "COMPRESS_BCJ2" /D "COMPRESS_COPY" /D "COMPRESS_MF_PAT" /D "COMPRESS_MF_BT" /D "COMPRESS_PPMD" /D "COMPRESS_DEFLATE" /D "COMPRESS_IMPLODE" /D "COMPRESS_BZIP2" /D "CRYPTO_ZIP" /Yu"StdAfx.h" /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /D "NDEBUG" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "BENCH_MT" /Yu"StdAfx.h" /FD /c -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"c:\UTIL\7za2.exe" /opt:NOWIN98 -# SUBTRACT BASE LINK32 /pdb:none -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"c:\UTIL\lzma.exe" /opt:NOWIN98 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "AloneLZMA - Win32 DebugU" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "DebugU" -# PROP BASE Intermediate_Dir "DebugU" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "DebugU" -# PROP Intermediate_Dir "DebugU" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "EXCLUDE_COM" /D "NO_REGISTRY" /D "FORMAT_7Z" /D "FORMAT_BZIP2" /D "FORMAT_ZIP" /D "FORMAT_TAR" /D "FORMAT_GZIP" /D "COMPRESS_LZMA" /D "COMPRESS_BCJ_X86" /D "COMPRESS_BCJ2" /D "COMPRESS_COPY" /D "COMPRESS_MF_PAT" /D "COMPRESS_MF_BT" /D "COMPRESS_PPMD" /D "COMPRESS_DEFLATE" /D "COMPRESS_IMPLODE" /D "COMPRESS_BZIP2" /D "CRYPTO_ZIP" /D "_MBCS" /Yu"StdAfx.h" /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "BENCH_MT" /Yu"StdAfx.h" /FD /GZ /c -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"c:\UTIL\7za2.exe" /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"c:\UTIL\lzma.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "AloneLZMA - Win32 Release" -# Name "AloneLZMA - Win32 Debug" -# Name "AloneLZMA - Win32 ReleaseU" -# Name "AloneLZMA - Win32 DebugU" -# Begin Group "Spec" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\StdAfx.cpp -# ADD CPP /Yc"StdAfx.h" -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.h -# End Source File -# End Group -# Begin Group "Compress" - -# PROP Default_Filter "" -# Begin Group "LZMA" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\LzmaDecoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\LzmaDecoder.h -# End Source File -# Begin Source File - -SOURCE=..\LzmaEncoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\LzmaEncoder.h -# End Source File -# End Group -# End Group -# Begin Group "Windows" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Windows\FileIO.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileIO.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Synchronization.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Synchronization.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\System.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\System.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Thread.h -# End Source File -# End Group -# Begin Group "Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Common\CommandLineParser.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\CommandLineParser.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\CRC.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Defs.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Defs.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\IntToString.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\IntToString.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyCom.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyString.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyString.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyVector.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyVector.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyWindows.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringToInt.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringToInt.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Types.h -# End Source File -# End Group -# Begin Group "7zip Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Common\CWrappers.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\CWrappers.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FileStreams.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FileStreams.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\InBuffer.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\InBuffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\OutBuffer.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\OutBuffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamUtils.h -# End Source File -# End Group -# Begin Group "C" - -# PROP Default_Filter "" -# Begin Group "LzmaUtil" - -# PROP Default_Filter "" -# End Group -# Begin Source File - -SOURCE=..\..\..\..\C\7zCrc.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\7zCrc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Alloc.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Alloc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Bra.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Bra86.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzFind.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzFind.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzFindMt.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzFindMt.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzHash.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Lzma86.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Lzma86Dec.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Lzma86Enc.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzmaDec.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzmaDec.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzmaEnc.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\LzmaEnc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Threads.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Threads.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Types.h -# End Source File -# End Group -# Begin Source File - -SOURCE=..\..\ICoder.h -# End Source File -# Begin Source File - -SOURCE=.\LzmaAlone.cpp -# End Source File -# Begin Source File - -SOURCE=.\LzmaBench.cpp -# End Source File -# Begin Source File - -SOURCE=.\LzmaBench.h -# End Source File -# Begin Source File - -SOURCE=.\LzmaBenchCon.cpp -# End Source File -# Begin Source File - -SOURCE=.\LzmaBenchCon.h -# End Source File -# End Target -# End Project diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsw b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsw deleted file mode 100644 index 7402f2970851..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "AloneLZMA"=.\AloneLZMA.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp deleted file mode 100644 index f8a4b89c8164..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp +++ /dev/null @@ -1,524 +0,0 @@ -// LzmaAlone.cpp - -#include "StdAfx.h" - -#include "../../../Common/MyWindows.h" -#include "../../../Common/MyInitGuid.h" - -#include - -#if (defined(_WIN32) || defined(OS2) || defined(MSDOS)) && !defined(UNDER_CE) -#include -#include -#define MY_SET_BINARY_MODE(file) _setmode(_fileno(file), O_BINARY) -#else -#define MY_SET_BINARY_MODE(file) -#endif - -#include "../../../Common/CommandLineParser.h" -#include "../../../Common/StringConvert.h" -#include "../../../Common/StringToInt.h" - -#include "../../../Windows/NtCheck.h" - -#include "../../Common/FileStreams.h" -#include "../../Common/StreamUtils.h" - -#include "../LzmaDecoder.h" -#include "../LzmaEncoder.h" - -#include "LzmaBenchCon.h" - -#ifdef COMPRESS_MF_MT -#include "../../../Windows/System.h" -#endif - -#include "../../../../C/7zVersion.h" -#include "../../../../C/Alloc.h" -#include "../../../../C/Lzma86.h" - -using namespace NCommandLineParser; - -static const char *kCantAllocate = "Can not allocate memory"; -static const char *kReadError = "Read error"; -static const char *kWriteError = "Write error"; - -namespace NKey { -enum Enum -{ - kHelp1 = 0, - kHelp2, - kAlgo, - kDict, - kFb, - kMc, - kLc, - kLp, - kPb, - kMatchFinder, - kMultiThread, - kEOS, - kStdIn, - kStdOut, - kFilter86 -}; -} - -static const CSwitchForm kSwitchForms[] = -{ - { L"?", NSwitchType::kSimple, false }, - { L"H", NSwitchType::kSimple, false }, - { L"A", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"D", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"FB", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"MC", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"LC", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"LP", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"PB", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"MF", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"MT", NSwitchType::kUnLimitedPostString, false, 0 }, - { L"EOS", NSwitchType::kSimple, false }, - { L"SI", NSwitchType::kSimple, false }, - { L"SO", NSwitchType::kSimple, false }, - { L"F86", NSwitchType::kPostChar, false, 0, 0, L"+" } -}; - -static const int kNumSwitches = sizeof(kSwitchForms) / sizeof(kSwitchForms[0]); - -static void PrintMessage(const char *s) -{ - fprintf(stderr, s); -} - -static void PrintHelp() -{ - PrintMessage("\nUsage: LZMA inputFile outputFile [...]\n" - " e: encode file\n" - " d: decode file\n" - " b: Benchmark\n" - "\n" - " -a{N}: set compression mode - [0, 1], default: 1 (max)\n" - " -d{N}: set dictionary size - [12, 30], default: 23 (8MB)\n" - " -fb{N}: set number of fast bytes - [5, 273], default: 128\n" - " -mc{N}: set number of cycles for match finder\n" - " -lc{N}: set number of literal context bits - [0, 8], default: 3\n" - " -lp{N}: set number of literal pos bits - [0, 4], default: 0\n" - " -pb{N}: set number of pos bits - [0, 4], default: 2\n" - " -mf{MF_ID}: set Match Finder: [bt2, bt3, bt4, hc4], default: bt4\n" - " -mt{N}: set number of CPU threads\n" - " -eos: write End Of Stream marker\n" - " -si: read data from stdin\n" - " -so: write data to stdout\n" - ); -} - -static void PrintHelpAndExit(const char *s) -{ - fprintf(stderr, "\nError: %s\n\n", s); - PrintHelp(); - throw -1; -} - -static void IncorrectCommand() -{ - PrintHelpAndExit("Incorrect command"); -} - -static void WriteArgumentsToStringList(int numArgs, const char *args[], UStringVector &strings) -{ - for (int i = 1; i < numArgs; i++) - strings.Add(MultiByteToUnicodeString(args[i])); -} - -static bool GetNumber(const wchar_t *s, UInt32 &value) -{ - value = 0; - if (MyStringLen(s) == 0) - return false; - const wchar_t *end; - UInt64 res = ConvertStringToUInt64(s, &end); - if (*end != L'\0') - return false; - if (res > 0xFFFFFFFF) - return false; - value = UInt32(res); - return true; -} - -static void ParseUInt32(const CParser &parser, int index, UInt32 &res) -{ - if (parser[index].ThereIs) - if (!GetNumber(parser[index].PostStrings[0], res)) - IncorrectCommand(); -} - -#define NT_CHECK_FAIL_ACTION PrintMessage("Unsupported Windows version"); return 1; - -int main2(int numArgs, const char *args[]) -{ - NT_CHECK - - PrintMessage("\nLZMA " MY_VERSION_COPYRIGHT_DATE "\n"); - - if (numArgs == 1) - { - PrintHelp(); - return 0; - } - - bool unsupportedTypes = (sizeof(Byte) != 1 || sizeof(UInt32) < 4 || sizeof(UInt64) < 4); - if (unsupportedTypes) - { - PrintMessage("Unsupported base types. Edit Common/Types.h and recompile"); - return 1; - } - - UStringVector commandStrings; - WriteArgumentsToStringList(numArgs, args, commandStrings); - CParser parser(kNumSwitches); - try - { - parser.ParseStrings(kSwitchForms, commandStrings); - } - catch(...) - { - IncorrectCommand(); - } - - if(parser[NKey::kHelp1].ThereIs || parser[NKey::kHelp2].ThereIs) - { - PrintHelp(); - return 0; - } - const UStringVector &nonSwitchStrings = parser.NonSwitchStrings; - - int paramIndex = 0; - if (paramIndex >= nonSwitchStrings.Size()) - IncorrectCommand(); - const UString &command = nonSwitchStrings[paramIndex++]; - - bool dictDefined = false; - UInt32 dict = (UInt32)-1; - if(parser[NKey::kDict].ThereIs) - { - UInt32 dicLog; - if (!GetNumber(parser[NKey::kDict].PostStrings[0], dicLog)) - IncorrectCommand(); - dict = 1 << dicLog; - dictDefined = true; - } - UString mf = L"BT4"; - if (parser[NKey::kMatchFinder].ThereIs) - mf = parser[NKey::kMatchFinder].PostStrings[0]; - - UInt32 numThreads = (UInt32)-1; - - #ifdef COMPRESS_MF_MT - if (parser[NKey::kMultiThread].ThereIs) - { - UInt32 numCPUs = NWindows::NSystem::GetNumberOfProcessors(); - const UString &s = parser[NKey::kMultiThread].PostStrings[0]; - if (s.IsEmpty()) - numThreads = numCPUs; - else - if (!GetNumber(s, numThreads)) - IncorrectCommand(); - } - #endif - - if (command.CompareNoCase(L"b") == 0) - { - const UInt32 kNumDefaultItereations = 1; - UInt32 numIterations = kNumDefaultItereations; - { - if (paramIndex < nonSwitchStrings.Size()) - if (!GetNumber(nonSwitchStrings[paramIndex++], numIterations)) - numIterations = kNumDefaultItereations; - } - return LzmaBenchCon(stderr, numIterations, numThreads, dict); - } - - if (numThreads == (UInt32)-1) - numThreads = 1; - - bool encodeMode = false; - if (command.CompareNoCase(L"e") == 0) - encodeMode = true; - else if (command.CompareNoCase(L"d") == 0) - encodeMode = false; - else - IncorrectCommand(); - - bool stdInMode = parser[NKey::kStdIn].ThereIs; - bool stdOutMode = parser[NKey::kStdOut].ThereIs; - - CMyComPtr inStream; - CInFileStream *inStreamSpec = 0; - if (stdInMode) - { - inStream = new CStdInFileStream; - MY_SET_BINARY_MODE(stdin); - } - else - { - if (paramIndex >= nonSwitchStrings.Size()) - IncorrectCommand(); - const UString &inputName = nonSwitchStrings[paramIndex++]; - inStreamSpec = new CInFileStream; - inStream = inStreamSpec; - if (!inStreamSpec->Open(GetSystemString(inputName))) - { - fprintf(stderr, "\nError: can not open input file %s\n", - (const char *)GetOemString(inputName)); - return 1; - } - } - - CMyComPtr outStream; - COutFileStream *outStreamSpec = NULL; - if (stdOutMode) - { - outStream = new CStdOutFileStream; - MY_SET_BINARY_MODE(stdout); - } - else - { - if (paramIndex >= nonSwitchStrings.Size()) - IncorrectCommand(); - const UString &outputName = nonSwitchStrings[paramIndex++]; - outStreamSpec = new COutFileStream; - outStream = outStreamSpec; - if (!outStreamSpec->Create(GetSystemString(outputName), true)) - { - fprintf(stderr, "\nError: can not open output file %s\n", - (const char *)GetOemString(outputName)); - return 1; - } - } - - if (parser[NKey::kFilter86].ThereIs) - { - // -f86 switch is for x86 filtered mode: BCJ + LZMA. - if (parser[NKey::kEOS].ThereIs || stdInMode) - throw "Can not use stdin in this mode"; - UInt64 fileSize; - inStreamSpec->File.GetLength(fileSize); - if (fileSize > 0xF0000000) - throw "File is too big"; - size_t inSize = (size_t)fileSize; - Byte *inBuffer = 0; - if (inSize != 0) - { - inBuffer = (Byte *)MyAlloc((size_t)inSize); - if (inBuffer == 0) - throw kCantAllocate; - } - - if (ReadStream_FAIL(inStream, inBuffer, inSize) != S_OK) - throw "Can not read"; - - Byte *outBuffer = 0; - size_t outSize; - if (encodeMode) - { - // we allocate 105% of original size for output buffer - outSize = (size_t)fileSize / 20 * 21 + (1 << 16); - if (outSize != 0) - { - outBuffer = (Byte *)MyAlloc((size_t)outSize); - if (outBuffer == 0) - throw kCantAllocate; - } - if (!dictDefined) - dict = 1 << 23; - int res = Lzma86_Encode(outBuffer, &outSize, inBuffer, inSize, - 5, dict, parser[NKey::kFilter86].PostCharIndex == 0 ? SZ_FILTER_YES : SZ_FILTER_AUTO); - if (res != 0) - { - fprintf(stderr, "\nEncoder error = %d\n", (int)res); - return 1; - } - } - else - { - UInt64 outSize64; - if (Lzma86_GetUnpackSize(inBuffer, inSize, &outSize64) != 0) - throw "data error"; - outSize = (size_t)outSize64; - if (outSize != outSize64) - throw "too big"; - if (outSize != 0) - { - outBuffer = (Byte *)MyAlloc(outSize); - if (outBuffer == 0) - throw kCantAllocate; - } - int res = Lzma86_Decode(outBuffer, &outSize, inBuffer, &inSize); - if (inSize != (size_t)fileSize) - throw "incorrect processed size"; - if (res != 0) - throw "LzmaDecoder error"; - } - if (WriteStream(outStream, outBuffer, outSize) != S_OK) - throw kWriteError; - MyFree(outBuffer); - MyFree(inBuffer); - return 0; - } - - - UInt64 fileSize; - if (encodeMode) - { - NCompress::NLzma::CEncoder *encoderSpec = new NCompress::NLzma::CEncoder; - CMyComPtr encoder = encoderSpec; - - if (!dictDefined) - dict = 1 << 23; - - UInt32 pb = 2; - UInt32 lc = 3; // = 0; for 32-bit data - UInt32 lp = 0; // = 2; for 32-bit data - UInt32 algo = 1; - UInt32 fb = 128; - UInt32 mc = 16 + fb / 2; - bool mcDefined = false; - - bool eos = parser[NKey::kEOS].ThereIs || stdInMode; - - ParseUInt32(parser, NKey::kAlgo, algo); - ParseUInt32(parser, NKey::kFb, fb); - ParseUInt32(parser, NKey::kLc, lc); - ParseUInt32(parser, NKey::kLp, lp); - ParseUInt32(parser, NKey::kPb, pb); - - mcDefined = parser[NKey::kMc].ThereIs; - if (mcDefined) - if (!GetNumber(parser[NKey::kMc].PostStrings[0], mc)) - IncorrectCommand(); - - PROPID propIDs[] = - { - NCoderPropID::kDictionarySize, - NCoderPropID::kPosStateBits, - NCoderPropID::kLitContextBits, - NCoderPropID::kLitPosBits, - NCoderPropID::kAlgorithm, - NCoderPropID::kNumFastBytes, - NCoderPropID::kMatchFinder, - NCoderPropID::kEndMarker, - NCoderPropID::kNumThreads, - NCoderPropID::kMatchFinderCycles, - }; - const int kNumPropsMax = sizeof(propIDs) / sizeof(propIDs[0]); - - PROPVARIANT props[kNumPropsMax]; - for (int p = 0; p < 6; p++) - props[p].vt = VT_UI4; - - props[0].ulVal = (UInt32)dict; - props[1].ulVal = (UInt32)pb; - props[2].ulVal = (UInt32)lc; - props[3].ulVal = (UInt32)lp; - props[4].ulVal = (UInt32)algo; - props[5].ulVal = (UInt32)fb; - - props[6].vt = VT_BSTR; - props[6].bstrVal = (BSTR)(const wchar_t *)mf; - - props[7].vt = VT_BOOL; - props[7].boolVal = eos ? VARIANT_TRUE : VARIANT_FALSE; - - props[8].vt = VT_UI4; - props[8].ulVal = (UInt32)numThreads; - - // it must be last in property list - props[9].vt = VT_UI4; - props[9].ulVal = (UInt32)mc; - - int numProps = kNumPropsMax; - if (!mcDefined) - numProps--; - - if (encoderSpec->SetCoderProperties(propIDs, props, numProps) != S_OK) - IncorrectCommand(); - encoderSpec->WriteCoderProperties(outStream); - - if (eos || stdInMode) - fileSize = (UInt64)(Int64)-1; - else - inStreamSpec->File.GetLength(fileSize); - - for (int i = 0; i < 8; i++) - { - Byte b = Byte(fileSize >> (8 * i)); - if (outStream->Write(&b, 1, 0) != S_OK) - { - PrintMessage(kWriteError); - return 1; - } - } - HRESULT result = encoder->Code(inStream, outStream, 0, 0, 0); - if (result == E_OUTOFMEMORY) - { - PrintMessage("\nError: Can not allocate memory\n"); - return 1; - } - else if (result != S_OK) - { - fprintf(stderr, "\nEncoder error = %X\n", (unsigned int)result); - return 1; - } - } - else - { - NCompress::NLzma::CDecoder *decoderSpec = new NCompress::NLzma::CDecoder; - CMyComPtr decoder = decoderSpec; - decoderSpec->FinishStream = true; - const UInt32 kPropertiesSize = 5; - Byte header[kPropertiesSize + 8]; - if (ReadStream_FALSE(inStream, header, kPropertiesSize + 8) != S_OK) - { - PrintMessage(kReadError); - return 1; - } - if (decoderSpec->SetDecoderProperties2(header, kPropertiesSize) != S_OK) - { - PrintMessage("SetDecoderProperties error"); - return 1; - } - fileSize = 0; - for (int i = 0; i < 8; i++) - fileSize |= ((UInt64)header[kPropertiesSize + i]) << (8 * i); - - if (decoder->Code(inStream, outStream, 0, (fileSize == (UInt64)(Int64)-1) ? 0 : &fileSize, 0) != S_OK) - { - PrintMessage("Decoder error"); - return 1; - } - } - if (outStreamSpec != NULL) - { - if (outStreamSpec->Close() != S_OK) - { - PrintMessage("File closing error"); - return 1; - } - } - return 0; -} - -int MY_CDECL main(int numArgs, const char *args[]) -{ - try { return main2(numArgs, args); } - catch(const char *s) - { - fprintf(stderr, "\nError: %s\n", s); - return 1; - } - catch(...) - { - PrintMessage("\nError\n"); - return 1; - } -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp deleted file mode 100644 index fa35396ecff3..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp +++ /dev/null @@ -1,1050 +0,0 @@ -// LzmaBench.cpp - -#include "StdAfx.h" - -#include "LzmaBench.h" - -#ifndef _WIN32 -#define USE_POSIX_TIME -#define USE_POSIX_TIME2 -#endif - -#ifdef USE_POSIX_TIME -#include -#ifdef USE_POSIX_TIME2 -#include -#endif -#endif - -#ifdef _WIN32 -#define USE_ALLOCA -#endif - -#ifdef USE_ALLOCA -#ifdef _WIN32 -#include -#else -#include -#endif -#endif - -#include "../../../../C/7zCrc.h" -#include "../../../../C/Alloc.h" - -#include "../../../Common/MyCom.h" - -#ifdef BENCH_MT -#include "../../../Windows/Synchronization.h" -#include "../../../Windows/Thread.h" -#endif - -#ifdef EXTERNAL_LZMA -#include "../../../Windows/PropVariant.h" -#include "../../ICoder.h" -#else -#include "../LzmaDecoder.h" -#include "../LzmaEncoder.h" -#endif - -static const UInt32 kUncompressMinBlockSize = -#ifdef UNDER_CE -1 << 24; -#else -1 << 26; -#endif - -static const UInt32 kCrcBlockSize = -#ifdef UNDER_CE -1 << 25; -#else -1 << 30; -#endif - -static const UInt32 kAdditionalSize = (1 << 16); -static const UInt32 kCompressedAdditionalSize = (1 << 10); -static const UInt32 kMaxLzmaPropSize = 5; - -class CBaseRandomGenerator -{ - UInt32 A1; - UInt32 A2; -public: - CBaseRandomGenerator() { Init(); } - void Init() { A1 = 362436069; A2 = 521288629;} - UInt32 GetRnd() - { - return - ((A1 = 36969 * (A1 & 0xffff) + (A1 >> 16)) << 16) + - ((A2 = 18000 * (A2 & 0xffff) + (A2 >> 16)) ); - } -}; - -class CBenchBuffer -{ -public: - size_t BufferSize; - Byte *Buffer; - CBenchBuffer(): Buffer(0) {} - virtual ~CBenchBuffer() { Free(); } - void Free() - { - ::MidFree(Buffer); - Buffer = 0; - } - bool Alloc(size_t bufferSize) - { - if (Buffer != 0 && BufferSize == bufferSize) - return true; - Free(); - Buffer = (Byte *)::MidAlloc(bufferSize); - BufferSize = bufferSize; - return (Buffer != 0); - } -}; - -class CBenchRandomGenerator: public CBenchBuffer -{ - CBaseRandomGenerator *RG; -public: - void Set(CBaseRandomGenerator *rg) { RG = rg; } - UInt32 GetVal(UInt32 &res, int numBits) - { - UInt32 val = res & (((UInt32)1 << numBits) - 1); - res >>= numBits; - return val; - } - UInt32 GetLen(UInt32 &res) - { - UInt32 len = GetVal(res, 2); - return GetVal(res, 1 + len); - } - void Generate() - { - UInt32 pos = 0; - UInt32 rep0 = 1; - while (pos < BufferSize) - { - UInt32 res = RG->GetRnd(); - res >>= 1; - if (GetVal(res, 1) == 0 || pos < 1024) - Buffer[pos++] = (Byte)(res & 0xFF); - else - { - UInt32 len; - len = 1 + GetLen(res); - if (GetVal(res, 3) != 0) - { - len += GetLen(res); - do - { - UInt32 ppp = GetVal(res, 5) + 6; - res = RG->GetRnd(); - if (ppp > 30) - continue; - rep0 = /* (1 << ppp) +*/ GetVal(res, ppp); - res = RG->GetRnd(); - } - while (rep0 >= pos); - rep0++; - } - - for (UInt32 i = 0; i < len && pos < BufferSize; i++, pos++) - Buffer[pos] = Buffer[pos - rep0]; - } - } - } -}; - - -class CBenchmarkInStream: - public ISequentialInStream, - public CMyUnknownImp -{ - const Byte *Data; - size_t Pos; - size_t Size; -public: - MY_UNKNOWN_IMP - void Init(const Byte *data, size_t size) - { - Data = data; - Size = size; - Pos = 0; - } - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -}; - -STDMETHODIMP CBenchmarkInStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - size_t remain = Size - Pos; - UInt32 kMaxBlockSize = (1 << 20); - if (size > kMaxBlockSize) - size = kMaxBlockSize; - if (size > remain) - size = (UInt32)remain; - for (UInt32 i = 0; i < size; i++) - ((Byte *)data)[i] = Data[Pos + i]; - Pos += size; - if(processedSize != NULL) - *processedSize = size; - return S_OK; -} - -class CBenchmarkOutStream: - public ISequentialOutStream, - public CBenchBuffer, - public CMyUnknownImp -{ - // bool _overflow; -public: - UInt32 Pos; - // CBenchmarkOutStream(): _overflow(false) {} - void Init() - { - // _overflow = false; - Pos = 0; - } - MY_UNKNOWN_IMP - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -STDMETHODIMP CBenchmarkOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - size_t curSize = BufferSize - Pos; - if (curSize > size) - curSize = size; - memcpy(Buffer + Pos, data, curSize); - Pos += (UInt32)curSize; - if(processedSize != NULL) - *processedSize = (UInt32)curSize; - if (curSize != size) - { - // _overflow = true; - return E_FAIL; - } - return S_OK; -} - -class CCrcOutStream: - public ISequentialOutStream, - public CMyUnknownImp -{ -public: - UInt32 Crc; - MY_UNKNOWN_IMP - void Init() { Crc = CRC_INIT_VAL; } - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -STDMETHODIMP CCrcOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - Crc = CrcUpdate(Crc, data, size); - if (processedSize != NULL) - *processedSize = size; - return S_OK; -} - -static UInt64 GetTimeCount() -{ - #ifdef USE_POSIX_TIME - #ifdef USE_POSIX_TIME2 - timeval v; - if (gettimeofday(&v, 0) == 0) - return (UInt64)(v.tv_sec) * 1000000 + v.tv_usec; - return (UInt64)time(NULL) * 1000000; - #else - return time(NULL); - #endif - #else - /* - LARGE_INTEGER value; - if (::QueryPerformanceCounter(&value)) - return value.QuadPart; - */ - return GetTickCount(); - #endif -} - -static UInt64 GetFreq() -{ - #ifdef USE_POSIX_TIME - #ifdef USE_POSIX_TIME2 - return 1000000; - #else - return 1; - #endif - #else - /* - LARGE_INTEGER value; - if (::QueryPerformanceFrequency(&value)) - return value.QuadPart; - */ - return 1000; - #endif -} - -#ifndef USE_POSIX_TIME -static inline UInt64 GetTime64(const FILETIME &t) { return ((UInt64)t.dwHighDateTime << 32) | t.dwLowDateTime; } -#endif - -static UInt64 GetUserTime() -{ - #ifdef USE_POSIX_TIME - return clock(); - #else - FILETIME creationTime, exitTime, kernelTime, userTime; - if ( - #ifdef UNDER_CE - ::GetThreadTimes(::GetCurrentThread() - #else - ::GetProcessTimes(::GetCurrentProcess() - #endif - , &creationTime, &exitTime, &kernelTime, &userTime) != 0) - return GetTime64(userTime) + GetTime64(kernelTime); - return (UInt64)GetTickCount() * 10000; - #endif -} - -static UInt64 GetUserFreq() -{ - #ifdef USE_POSIX_TIME - return CLOCKS_PER_SEC; - #else - return 10000000; - #endif -} - -class CBenchProgressStatus -{ - #ifdef BENCH_MT - NWindows::NSynchronization::CCriticalSection CS; - #endif -public: - HRESULT Res; - bool EncodeMode; - void SetResult(HRESULT res) - { - #ifdef BENCH_MT - NWindows::NSynchronization::CCriticalSectionLock lock(CS); - #endif - Res = res; - } - HRESULT GetResult() - { - #ifdef BENCH_MT - NWindows::NSynchronization::CCriticalSectionLock lock(CS); - #endif - return Res; - } -}; - -class CBenchProgressInfo: - public ICompressProgressInfo, - public CMyUnknownImp -{ -public: - CBenchProgressStatus *Status; - CBenchInfo BenchInfo; - HRESULT Res; - IBenchCallback *callback; - CBenchProgressInfo(): callback(0) {} - MY_UNKNOWN_IMP - STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); -}; - -static void SetStartTime(CBenchInfo &bi) -{ - bi.GlobalFreq = GetFreq(); - bi.UserFreq = GetUserFreq(); - bi.GlobalTime = ::GetTimeCount(); - bi.UserTime = ::GetUserTime(); -} - -static void SetFinishTime(const CBenchInfo &biStart, CBenchInfo &dest) -{ - dest.GlobalFreq = GetFreq(); - dest.UserFreq = GetUserFreq(); - dest.GlobalTime = ::GetTimeCount() - biStart.GlobalTime; - dest.UserTime = ::GetUserTime() - biStart.UserTime; -} - -STDMETHODIMP CBenchProgressInfo::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) -{ - HRESULT res = Status->GetResult(); - if (res != S_OK) - return res; - if (!callback) - return res; - CBenchInfo info = BenchInfo; - SetFinishTime(BenchInfo, info); - if (Status->EncodeMode) - { - info.UnpackSize = *inSize; - info.PackSize = *outSize; - res = callback->SetEncodeResult(info, false); - } - else - { - info.PackSize = BenchInfo.PackSize + *inSize; - info.UnpackSize = BenchInfo.UnpackSize + *outSize; - res = callback->SetDecodeResult(info, false); - } - if (res != S_OK) - Status->SetResult(res); - return res; -} - -static const int kSubBits = 8; - -static UInt32 GetLogSize(UInt32 size) -{ - for (int i = kSubBits; i < 32; i++) - for (UInt32 j = 0; j < (1 << kSubBits); j++) - if (size <= (((UInt32)1) << i) + (j << (i - kSubBits))) - return (i << kSubBits) + j; - return (32 << kSubBits); -} - -static void NormalizeVals(UInt64 &v1, UInt64 &v2) -{ - while (v1 > 1000000) - { - v1 >>= 1; - v2 >>= 1; - } -} - -UInt64 GetUsage(const CBenchInfo &info) -{ - UInt64 userTime = info.UserTime; - UInt64 userFreq = info.UserFreq; - UInt64 globalTime = info.GlobalTime; - UInt64 globalFreq = info.GlobalFreq; - NormalizeVals(userTime, userFreq); - NormalizeVals(globalFreq, globalTime); - if (userFreq == 0) - userFreq = 1; - if (globalTime == 0) - globalTime = 1; - return userTime * globalFreq * 1000000 / userFreq / globalTime; -} - -UInt64 GetRatingPerUsage(const CBenchInfo &info, UInt64 rating) -{ - UInt64 userTime = info.UserTime; - UInt64 userFreq = info.UserFreq; - UInt64 globalTime = info.GlobalTime; - UInt64 globalFreq = info.GlobalFreq; - NormalizeVals(userFreq, userTime); - NormalizeVals(globalTime, globalFreq); - if (globalFreq == 0) - globalFreq = 1; - if (userTime == 0) - userTime = 1; - return userFreq * globalTime / globalFreq * rating / userTime; -} - -static UInt64 MyMultDiv64(UInt64 value, UInt64 elapsedTime, UInt64 freq) -{ - UInt64 elTime = elapsedTime; - NormalizeVals(freq, elTime); - if (elTime == 0) - elTime = 1; - return value * freq / elTime; -} - -UInt64 GetCompressRating(UInt32 dictionarySize, UInt64 elapsedTime, UInt64 freq, UInt64 size) -{ - UInt64 t = GetLogSize(dictionarySize) - (kBenchMinDicLogSize << kSubBits); - UInt64 numCommandsForOne = 870 + ((t * t * 5) >> (2 * kSubBits)); - UInt64 numCommands = (UInt64)(size) * numCommandsForOne; - return MyMultDiv64(numCommands, elapsedTime, freq); -} - -UInt64 GetDecompressRating(UInt64 elapsedTime, UInt64 freq, UInt64 outSize, UInt64 inSize, UInt32 numIterations) -{ - UInt64 numCommands = (inSize * 200 + outSize * 4) * numIterations; - return MyMultDiv64(numCommands, elapsedTime, freq); -} - -#ifdef EXTERNAL_LZMA -typedef UInt32 (WINAPI * CreateObjectPointer)(const GUID *clsID, - const GUID *interfaceID, void **outObject); -#endif - -struct CEncoderInfo; - -struct CEncoderInfo -{ - #ifdef BENCH_MT - NWindows::CThread thread[2]; - #endif - CMyComPtr encoder; - CBenchProgressInfo *progressInfoSpec[2]; - CMyComPtr progressInfo[2]; - UInt32 NumIterations; - #ifdef USE_ALLOCA - size_t AllocaSize; - #endif - - struct CDecoderInfo - { - CEncoderInfo *Encoder; - UInt32 DecoderIndex; - #ifdef USE_ALLOCA - size_t AllocaSize; - #endif - bool CallbackMode; - }; - CDecoderInfo decodersInfo[2]; - - CMyComPtr decoders[2]; - HRESULT Results[2]; - CBenchmarkOutStream *outStreamSpec; - CMyComPtr outStream; - IBenchCallback *callback; - UInt32 crc; - UInt32 kBufferSize; - UInt32 compressedSize; - CBenchRandomGenerator rg; - CBenchmarkOutStream *propStreamSpec; - CMyComPtr propStream; - HRESULT Init(UInt32 dictionarySize, UInt32 numThreads, CBaseRandomGenerator *rg); - HRESULT Encode(); - HRESULT Decode(UInt32 decoderIndex); - - CEncoderInfo(): outStreamSpec(0), callback(0), propStreamSpec(0) {} - - #ifdef BENCH_MT - static THREAD_FUNC_DECL EncodeThreadFunction(void *param) - { - CEncoderInfo *encoder = (CEncoderInfo *)param; - #ifdef USE_ALLOCA - alloca(encoder->AllocaSize); - #endif - HRESULT res = encoder->Encode(); - encoder->Results[0] = res; - if (res != S_OK) - encoder->progressInfoSpec[0]->Status->SetResult(res); - - return 0; - } - static THREAD_FUNC_DECL DecodeThreadFunction(void *param) - { - CDecoderInfo *decoder = (CDecoderInfo *)param; - #ifdef USE_ALLOCA - alloca(decoder->AllocaSize); - #endif - CEncoderInfo *encoder = decoder->Encoder; - encoder->Results[decoder->DecoderIndex] = encoder->Decode(decoder->DecoderIndex); - return 0; - } - - HRESULT CreateEncoderThread() - { - return thread[0].Create(EncodeThreadFunction, this); - } - - HRESULT CreateDecoderThread(int index, bool callbackMode - #ifdef USE_ALLOCA - , size_t allocaSize - #endif - ) - { - CDecoderInfo &decoder = decodersInfo[index]; - decoder.DecoderIndex = index; - decoder.Encoder = this; - #ifdef USE_ALLOCA - decoder.AllocaSize = allocaSize; - #endif - decoder.CallbackMode = callbackMode; - return thread[index].Create(DecodeThreadFunction, &decoder); - } - #endif -}; - -HRESULT CEncoderInfo::Init(UInt32 dictionarySize, UInt32 numThreads, CBaseRandomGenerator *rgLoc) -{ - rg.Set(rgLoc); - kBufferSize = dictionarySize + kAdditionalSize; - UInt32 kCompressedBufferSize = (kBufferSize / 2) + kCompressedAdditionalSize; - if (!rg.Alloc(kBufferSize)) - return E_OUTOFMEMORY; - rg.Generate(); - crc = CrcCalc(rg.Buffer, rg.BufferSize); - - outStreamSpec = new CBenchmarkOutStream; - if (!outStreamSpec->Alloc(kCompressedBufferSize)) - return E_OUTOFMEMORY; - - outStream = outStreamSpec; - - propStreamSpec = 0; - if (!propStream) - { - propStreamSpec = new CBenchmarkOutStream; - propStream = propStreamSpec; - } - if (!propStreamSpec->Alloc(kMaxLzmaPropSize)) - return E_OUTOFMEMORY; - propStreamSpec->Init(); - - PROPID propIDs[] = - { - NCoderPropID::kDictionarySize, - NCoderPropID::kNumThreads - }; - const int kNumProps = sizeof(propIDs) / sizeof(propIDs[0]); - PROPVARIANT props[kNumProps]; - props[0].vt = VT_UI4; - props[0].ulVal = dictionarySize; - - props[1].vt = VT_UI4; - props[1].ulVal = numThreads; - - { - CMyComPtr setCoderProperties; - RINOK(encoder.QueryInterface(IID_ICompressSetCoderProperties, &setCoderProperties)); - if (!setCoderProperties) - return E_FAIL; - RINOK(setCoderProperties->SetCoderProperties(propIDs, props, kNumProps)); - - CMyComPtr writeCoderProperties; - encoder.QueryInterface(IID_ICompressWriteCoderProperties, &writeCoderProperties); - if (writeCoderProperties) - { - RINOK(writeCoderProperties->WriteCoderProperties(propStream)); - } - } - return S_OK; -} - -HRESULT CEncoderInfo::Encode() -{ - CBenchmarkInStream *inStreamSpec = new CBenchmarkInStream; - CMyComPtr inStream = inStreamSpec; - inStreamSpec->Init(rg.Buffer, rg.BufferSize); - outStreamSpec->Init(); - - RINOK(encoder->Code(inStream, outStream, 0, 0, progressInfo[0])); - compressedSize = outStreamSpec->Pos; - encoder.Release(); - return S_OK; -} - -HRESULT CEncoderInfo::Decode(UInt32 decoderIndex) -{ - CBenchmarkInStream *inStreamSpec = new CBenchmarkInStream; - CMyComPtr inStream = inStreamSpec; - CMyComPtr &decoder = decoders[decoderIndex]; - - CMyComPtr compressSetDecoderProperties; - decoder.QueryInterface(IID_ICompressSetDecoderProperties2, &compressSetDecoderProperties); - if (!compressSetDecoderProperties) - return E_FAIL; - - CCrcOutStream *crcOutStreamSpec = new CCrcOutStream; - CMyComPtr crcOutStream = crcOutStreamSpec; - - CBenchProgressInfo *pi = progressInfoSpec[decoderIndex]; - pi->BenchInfo.UnpackSize = 0; - pi->BenchInfo.PackSize = 0; - - for (UInt32 j = 0; j < NumIterations; j++) - { - inStreamSpec->Init(outStreamSpec->Buffer, compressedSize); - crcOutStreamSpec->Init(); - - RINOK(compressSetDecoderProperties->SetDecoderProperties2(propStreamSpec->Buffer, propStreamSpec->Pos)); - UInt64 outSize = kBufferSize; - RINOK(decoder->Code(inStream, crcOutStream, 0, &outSize, progressInfo[decoderIndex])); - if (CRC_GET_DIGEST(crcOutStreamSpec->Crc) != crc) - return S_FALSE; - pi->BenchInfo.UnpackSize += kBufferSize; - pi->BenchInfo.PackSize += compressedSize; - } - decoder.Release(); - return S_OK; -} - -static const UInt32 kNumThreadsMax = (1 << 16); - -struct CBenchEncoders -{ - CEncoderInfo *encoders; - CBenchEncoders(UInt32 num): encoders(0) { encoders = new CEncoderInfo[num]; } - ~CBenchEncoders() { delete []encoders; } -}; - -HRESULT LzmaBench( - #ifdef EXTERNAL_LZMA - CCodecs *codecs, - #endif - UInt32 numThreads, UInt32 dictionarySize, IBenchCallback *callback) -{ - UInt32 numEncoderThreads = - #ifdef BENCH_MT - (numThreads > 1 ? numThreads / 2 : 1); - #else - 1; - #endif - UInt32 numSubDecoderThreads = - #ifdef BENCH_MT - (numThreads > 1 ? 2 : 1); - #else - 1; - #endif - if (dictionarySize < (1 << kBenchMinDicLogSize) || numThreads < 1 || numEncoderThreads > kNumThreadsMax) - { - return E_INVALIDARG; - } - - CBenchEncoders encodersSpec(numEncoderThreads); - CEncoderInfo *encoders = encodersSpec.encoders; - - #ifdef EXTERNAL_LZMA - UString name = L"LZMA"; - #endif - - UInt32 i; - for (i = 0; i < numEncoderThreads; i++) - { - CEncoderInfo &encoder = encoders[i]; - encoder.callback = (i == 0) ? callback : 0; - - #ifdef EXTERNAL_LZMA - RINOK(codecs->CreateCoder(name, true, encoder.encoder)); - #else - encoder.encoder = new NCompress::NLzma::CEncoder; - #endif - for (UInt32 j = 0; j < numSubDecoderThreads; j++) - { - #ifdef EXTERNAL_LZMA - RINOK(codecs->CreateCoder(name, false, encoder.decoders[j])); - #else - encoder.decoders[j] = new NCompress::NLzma::CDecoder; - #endif - } - } - - CBaseRandomGenerator rg; - rg.Init(); - for (i = 0; i < numEncoderThreads; i++) - { - RINOK(encoders[i].Init(dictionarySize, numThreads, &rg)); - } - - CBenchProgressStatus status; - status.Res = S_OK; - status.EncodeMode = true; - - for (i = 0; i < numEncoderThreads; i++) - { - CEncoderInfo &encoder = encoders[i]; - for (int j = 0; j < 2; j++) - { - encoder.progressInfo[j] = encoder.progressInfoSpec[j] = new CBenchProgressInfo; - encoder.progressInfoSpec[j]->Status = &status; - } - if (i == 0) - { - encoder.progressInfoSpec[0]->callback = callback; - encoder.progressInfoSpec[0]->BenchInfo.NumIterations = numEncoderThreads; - SetStartTime(encoder.progressInfoSpec[0]->BenchInfo); - } - - #ifdef BENCH_MT - if (numEncoderThreads > 1) - { - #ifdef USE_ALLOCA - encoder.AllocaSize = (i * 16 * 21) & 0x7FF; - #endif - RINOK(encoder.CreateEncoderThread()) - } - else - #endif - { - RINOK(encoder.Encode()); - } - } - #ifdef BENCH_MT - if (numEncoderThreads > 1) - for (i = 0; i < numEncoderThreads; i++) - encoders[i].thread[0].Wait(); - #endif - - RINOK(status.Res); - - CBenchInfo info; - - SetFinishTime(encoders[0].progressInfoSpec[0]->BenchInfo, info); - info.UnpackSize = 0; - info.PackSize = 0; - info.NumIterations = 1; // progressInfoSpec->NumIterations; - for (i = 0; i < numEncoderThreads; i++) - { - CEncoderInfo &encoder = encoders[i]; - info.UnpackSize += encoder.kBufferSize; - info.PackSize += encoder.compressedSize; - } - RINOK(callback->SetEncodeResult(info, true)); - - - status.Res = S_OK; - status.EncodeMode = false; - - UInt32 numDecoderThreads = numEncoderThreads * numSubDecoderThreads; - for (i = 0; i < numEncoderThreads; i++) - { - CEncoderInfo &encoder = encoders[i]; - encoder.NumIterations = 2 + kUncompressMinBlockSize / encoder.kBufferSize; - - if (i == 0) - { - encoder.progressInfoSpec[0]->callback = callback; - encoder.progressInfoSpec[0]->BenchInfo.NumIterations = numDecoderThreads; - SetStartTime(encoder.progressInfoSpec[0]->BenchInfo); - } - - #ifdef BENCH_MT - if (numDecoderThreads > 1) - { - for (UInt32 j = 0; j < numSubDecoderThreads; j++) - { - HRESULT res = encoder.CreateDecoderThread(j, (i == 0 && j == 0) - #ifdef USE_ALLOCA - , ((i * numSubDecoderThreads + j) * 16 * 21) & 0x7FF - #endif - ); - RINOK(res); - } - } - else - #endif - { - RINOK(encoder.Decode(0)); - } - } - #ifdef BENCH_MT - HRESULT res = S_OK; - if (numDecoderThreads > 1) - for (i = 0; i < numEncoderThreads; i++) - for (UInt32 j = 0; j < numSubDecoderThreads; j++) - { - CEncoderInfo &encoder = encoders[i]; - encoder.thread[j].Wait(); - if (encoder.Results[j] != S_OK) - res = encoder.Results[j]; - } - RINOK(res); - #endif - RINOK(status.Res); - SetFinishTime(encoders[0].progressInfoSpec[0]->BenchInfo, info); - #ifdef BENCH_MT - #ifdef UNDER_CE - if (numDecoderThreads > 1) - for (i = 0; i < numEncoderThreads; i++) - for (UInt32 j = 0; j < numSubDecoderThreads; j++) - { - FILETIME creationTime, exitTime, kernelTime, userTime; - if (::GetThreadTimes(encoders[i].thread[j], &creationTime, &exitTime, &kernelTime, &userTime) != 0) - info.UserTime += GetTime64(userTime) + GetTime64(kernelTime); - } - #endif - #endif - info.UnpackSize = 0; - info.PackSize = 0; - info.NumIterations = numSubDecoderThreads * encoders[0].NumIterations; - for (i = 0; i < numEncoderThreads; i++) - { - CEncoderInfo &encoder = encoders[i]; - info.UnpackSize += encoder.kBufferSize; - info.PackSize += encoder.compressedSize; - } - RINOK(callback->SetDecodeResult(info, false)); - RINOK(callback->SetDecodeResult(info, true)); - return S_OK; -} - - -inline UInt64 GetLZMAUsage(bool multiThread, UInt32 dictionary) -{ - UInt32 hs = dictionary - 1; - hs |= (hs >> 1); - hs |= (hs >> 2); - hs |= (hs >> 4); - hs |= (hs >> 8); - hs >>= 1; - hs |= 0xFFFF; - if (hs > (1 << 24)) - hs >>= 1; - hs++; - return ((hs + (1 << 16)) + (UInt64)dictionary * 2) * 4 + (UInt64)dictionary * 3 / 2 + - (1 << 20) + (multiThread ? (6 << 20) : 0); -} - -UInt64 GetBenchMemoryUsage(UInt32 numThreads, UInt32 dictionary) -{ - const UInt32 kBufferSize = dictionary; - const UInt32 kCompressedBufferSize = (kBufferSize / 2); - UInt32 numSubThreads = (numThreads > 1) ? 2 : 1; - UInt32 numBigThreads = numThreads / numSubThreads; - return (kBufferSize + kCompressedBufferSize + - GetLZMAUsage((numThreads > 1), dictionary) + (2 << 20)) * numBigThreads; -} - -static bool CrcBig(const void *data, UInt32 size, UInt32 numCycles, UInt32 crcBase) -{ - for (UInt32 i = 0; i < numCycles; i++) - if (CrcCalc(data, size) != crcBase) - return false; - return true; -} - -#ifdef BENCH_MT -struct CCrcInfo -{ - NWindows::CThread Thread; - const Byte *Data; - UInt32 Size; - UInt32 NumCycles; - UInt32 Crc; - bool Res; - void Wait() - { - Thread.Wait(); - Thread.Close(); - } -}; - -static THREAD_FUNC_DECL CrcThreadFunction(void *param) -{ - CCrcInfo *p = (CCrcInfo *)param; - p->Res = CrcBig(p->Data, p->Size, p->NumCycles, p->Crc); - return 0; -} - -struct CCrcThreads -{ - UInt32 NumThreads; - CCrcInfo *Items; - CCrcThreads(): Items(0), NumThreads(0) {} - void WaitAll() - { - for (UInt32 i = 0; i < NumThreads; i++) - Items[i].Wait(); - NumThreads = 0; - } - ~CCrcThreads() - { - WaitAll(); - delete []Items; - } -}; -#endif - -static UInt32 CrcCalc1(const Byte *buf, UInt32 size) -{ - UInt32 crc = CRC_INIT_VAL;; - for (UInt32 i = 0; i < size; i++) - crc = CRC_UPDATE_BYTE(crc, buf[i]); - return CRC_GET_DIGEST(crc); -} - -static void RandGen(Byte *buf, UInt32 size, CBaseRandomGenerator &RG) -{ - for (UInt32 i = 0; i < size; i++) - buf[i] = (Byte)RG.GetRnd(); -} - -static UInt32 RandGenCrc(Byte *buf, UInt32 size, CBaseRandomGenerator &RG) -{ - RandGen(buf, size, RG); - return CrcCalc1(buf, size); -} - -bool CrcInternalTest() -{ - CBenchBuffer buffer; - const UInt32 kBufferSize0 = (1 << 8); - const UInt32 kBufferSize1 = (1 << 10); - const UInt32 kCheckSize = (1 << 5); - if (!buffer.Alloc(kBufferSize0 + kBufferSize1)) - return false; - Byte *buf = buffer.Buffer; - UInt32 i; - for (i = 0; i < kBufferSize0; i++) - buf[i] = (Byte)i; - UInt32 crc1 = CrcCalc1(buf, kBufferSize0); - if (crc1 != 0x29058C73) - return false; - CBaseRandomGenerator RG; - RandGen(buf + kBufferSize0, kBufferSize1, RG); - for (i = 0; i < kBufferSize0 + kBufferSize1 - kCheckSize; i++) - for (UInt32 j = 0; j < kCheckSize; j++) - if (CrcCalc1(buf + i, j) != CrcCalc(buf + i, j)) - return false; - return true; -} - -HRESULT CrcBench(UInt32 numThreads, UInt32 bufferSize, UInt64 &speed) -{ - if (numThreads == 0) - numThreads = 1; - - CBenchBuffer buffer; - size_t totalSize = (size_t)bufferSize * numThreads; - if (totalSize / numThreads != bufferSize) - return E_OUTOFMEMORY; - if (!buffer.Alloc(totalSize)) - return E_OUTOFMEMORY; - - Byte *buf = buffer.Buffer; - CBaseRandomGenerator RG; - UInt32 numCycles = (kCrcBlockSize) / ((bufferSize >> 2) + 1) + 1; - - UInt64 timeVal; - #ifdef BENCH_MT - CCrcThreads threads; - if (numThreads > 1) - { - threads.Items = new CCrcInfo[numThreads]; - UInt32 i; - for (i = 0; i < numThreads; i++) - { - CCrcInfo &info = threads.Items[i]; - Byte *data = buf + (size_t)bufferSize * i; - info.Data = data; - info.NumCycles = numCycles; - info.Size = bufferSize; - info.Crc = RandGenCrc(data, bufferSize, RG); - } - timeVal = GetTimeCount(); - for (i = 0; i < numThreads; i++) - { - CCrcInfo &info = threads.Items[i]; - RINOK(info.Thread.Create(CrcThreadFunction, &info)); - threads.NumThreads++; - } - threads.WaitAll(); - for (i = 0; i < numThreads; i++) - if (!threads.Items[i].Res) - return S_FALSE; - } - else - #endif - { - UInt32 crc = RandGenCrc(buf, bufferSize, RG); - timeVal = GetTimeCount(); - if (!CrcBig(buf, bufferSize, numCycles, crc)) - return S_FALSE; - } - timeVal = GetTimeCount() - timeVal; - if (timeVal == 0) - timeVal = 1; - - UInt64 size = (UInt64)numCycles * totalSize; - speed = MyMultDiv64(size, timeVal, GetFreq()); - return S_OK; -} - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h deleted file mode 100644 index 7fe0a6bff9ff..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h +++ /dev/null @@ -1,48 +0,0 @@ -// LzmaBench.h - -#ifndef __LZMABENCH_H -#define __LZMABENCH_H - -#include -#include "../../../Common/Types.h" -#ifdef EXTERNAL_LZMA -#include "../../UI/Common/LoadCodecs.h" -#endif - -struct CBenchInfo -{ - UInt64 GlobalTime; - UInt64 GlobalFreq; - UInt64 UserTime; - UInt64 UserFreq; - UInt64 UnpackSize; - UInt64 PackSize; - UInt32 NumIterations; - CBenchInfo(): NumIterations(0) {} -}; - -struct IBenchCallback -{ - virtual HRESULT SetEncodeResult(const CBenchInfo &info, bool final) = 0; - virtual HRESULT SetDecodeResult(const CBenchInfo &info, bool final) = 0; -}; - -UInt64 GetUsage(const CBenchInfo &benchOnfo); -UInt64 GetRatingPerUsage(const CBenchInfo &info, UInt64 rating); -UInt64 GetCompressRating(UInt32 dictionarySize, UInt64 elapsedTime, UInt64 freq, UInt64 size); -UInt64 GetDecompressRating(UInt64 elapsedTime, UInt64 freq, UInt64 outSize, UInt64 inSize, UInt32 numIterations); - -HRESULT LzmaBench( - #ifdef EXTERNAL_LZMA - CCodecs *codecs, - #endif - UInt32 numThreads, UInt32 dictionarySize, IBenchCallback *callback); - -const int kBenchMinDicLogSize = 18; - -UInt64 GetBenchMemoryUsage(UInt32 numThreads, UInt32 dictionary); - -bool CrcInternalTest(); -HRESULT CrcBench(UInt32 numThreads, UInt32 bufferSize, UInt64 &speed); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp deleted file mode 100644 index 8f8820e01bdc..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp +++ /dev/null @@ -1,311 +0,0 @@ -// LzmaBenchCon.cpp - -#include "StdAfx.h" - -#include - -#include "LzmaBench.h" -#include "LzmaBenchCon.h" -#include "../../../Common/IntToString.h" - -#if defined(BENCH_MT) || defined(_WIN32) -#include "../../../Windows/System.h" -#endif - -#ifdef BREAK_HANDLER -#include "../../UI/Console/ConsoleClose.h" -#endif -#include "../../../Common/MyCom.h" - -struct CTotalBenchRes -{ - UInt64 NumIterations; - UInt64 Rating; - UInt64 Usage; - UInt64 RPU; - void Init() { NumIterations = 0; Rating = 0; Usage = 0; RPU = 0; } - void Normalize() - { - if (NumIterations == 0) - return; - Rating /= NumIterations; - Usage /= NumIterations; - RPU /= NumIterations; - NumIterations = 1; - } - void SetMid(const CTotalBenchRes &r1, const CTotalBenchRes &r2) - { - Rating = (r1.Rating + r2.Rating) / 2; - Usage = (r1.Usage + r2.Usage) / 2; - RPU = (r1.RPU + r2.RPU) / 2; - NumIterations = (r1.NumIterations + r2.NumIterations) / 2; - } -}; - -struct CBenchCallback: public IBenchCallback -{ - CTotalBenchRes EncodeRes; - CTotalBenchRes DecodeRes; - FILE *f; - void Init() { EncodeRes.Init(); DecodeRes.Init(); } - void Normalize() { EncodeRes.Normalize(); DecodeRes.Normalize(); } - UInt32 dictionarySize; - HRESULT SetEncodeResult(const CBenchInfo &info, bool final); - HRESULT SetDecodeResult(const CBenchInfo &info, bool final); -}; - -static void NormalizeVals(UInt64 &v1, UInt64 &v2) -{ - while (v1 > 1000000) - { - v1 >>= 1; - v2 >>= 1; - } -} - -static UInt64 MyMultDiv64(UInt64 value, UInt64 elapsedTime, UInt64 freq) -{ - UInt64 elTime = elapsedTime; - NormalizeVals(freq, elTime); - if (elTime == 0) - elTime = 1; - return value * freq / elTime; -} - -static void PrintNumber(FILE *f, UInt64 value, int size) -{ - char s[32]; - ConvertUInt64ToString(value, s); - fprintf(f, " "); - for (int len = (int)strlen(s); len < size; len++) - fprintf(f, " "); - fprintf(f, "%s", s); -} - -static void PrintRating(FILE *f, UInt64 rating) -{ - PrintNumber(f, rating / 1000000, 6); -} - -static void PrintResults(FILE *f, UInt64 usage, UInt64 rpu, UInt64 rating) -{ - PrintNumber(f, (usage + 5000) / 10000, 5); - PrintRating(f, rpu); - PrintRating(f, rating); -} - - -static void PrintResults(FILE *f, const CBenchInfo &info, UInt64 rating, CTotalBenchRes &res) -{ - UInt64 speed = MyMultDiv64(info.UnpackSize, info.GlobalTime, info.GlobalFreq); - PrintNumber(f, speed / 1024, 7); - UInt64 usage = GetUsage(info); - UInt64 rpu = GetRatingPerUsage(info, rating); - PrintResults(f, usage, rpu, rating); - res.NumIterations++; - res.RPU += rpu; - res.Rating += rating; - res.Usage += usage; -} - -static void PrintTotals(FILE *f, const CTotalBenchRes &res) -{ - fprintf(f, " "); - PrintResults(f, res.Usage, res.RPU, res.Rating); -} - - -HRESULT CBenchCallback::SetEncodeResult(const CBenchInfo &info, bool final) -{ - #ifdef BREAK_HANDLER - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - #endif - - if (final) - { - UInt64 rating = GetCompressRating(dictionarySize, info.GlobalTime, info.GlobalFreq, info.UnpackSize); - PrintResults(f, info, rating, EncodeRes); - } - return S_OK; -} - -static const char *kSep = " | "; - - -HRESULT CBenchCallback::SetDecodeResult(const CBenchInfo &info, bool final) -{ - #ifdef BREAK_HANDLER - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - #endif - if (final) - { - UInt64 rating = GetDecompressRating(info.GlobalTime, info.GlobalFreq, info.UnpackSize, info.PackSize, info.NumIterations); - fprintf(f, kSep); - CBenchInfo info2 = info; - info2.UnpackSize *= info2.NumIterations; - info2.PackSize *= info2.NumIterations; - info2.NumIterations = 1; - PrintResults(f, info2, rating, DecodeRes); - } - return S_OK; -} - -static void PrintRequirements(FILE *f, const char *sizeString, UInt64 size, const char *threadsString, UInt32 numThreads) -{ - fprintf(f, "\nRAM %s ", sizeString); - PrintNumber(f, (size >> 20), 5); - fprintf(f, " MB, # %s %3d", threadsString, (unsigned int)numThreads); -} - -HRESULT LzmaBenchCon( - #ifdef EXTERNAL_LZMA - CCodecs *codecs, - #endif - FILE *f, UInt32 numIterations, UInt32 numThreads, UInt32 dictionary) -{ - if (!CrcInternalTest()) - return S_FALSE; - #ifdef BENCH_MT - UInt64 ramSize = NWindows::NSystem::GetRamSize(); // - UInt32 numCPUs = NWindows::NSystem::GetNumberOfProcessors(); - PrintRequirements(f, "size: ", ramSize, "CPU hardware threads:", numCPUs); - if (numThreads == (UInt32)-1) - numThreads = numCPUs; - if (numThreads > 1) - numThreads &= ~1; - if (dictionary == (UInt32)-1) - { - int dicSizeLog; - for (dicSizeLog = 25; dicSizeLog > kBenchMinDicLogSize; dicSizeLog--) - if (GetBenchMemoryUsage(numThreads, ((UInt32)1 << dicSizeLog)) + (8 << 20) <= ramSize) - break; - dictionary = (1 << dicSizeLog); - } - #else - if (dictionary == (UInt32)-1) - dictionary = (1 << 22); - numThreads = 1; - #endif - - PrintRequirements(f, "usage:", GetBenchMemoryUsage(numThreads, dictionary), "Benchmark threads: ", numThreads); - - CBenchCallback callback; - callback.Init(); - callback.f = f; - - fprintf(f, "\n\nDict Compressing | Decompressing\n "); - int j; - for (j = 0; j < 2; j++) - { - fprintf(f, " Speed Usage R/U Rating"); - if (j == 0) - fprintf(f, kSep); - } - fprintf(f, "\n "); - for (j = 0; j < 2; j++) - { - fprintf(f, " KB/s %% MIPS MIPS"); - if (j == 0) - fprintf(f, kSep); - } - fprintf(f, "\n\n"); - for (UInt32 i = 0; i < numIterations; i++) - { - const int kStartDicLog = 22; - int pow = (dictionary < ((UInt32)1 << kStartDicLog)) ? kBenchMinDicLogSize : kStartDicLog; - while (((UInt32)1 << pow) > dictionary) - pow--; - for (; ((UInt32)1 << pow) <= dictionary; pow++) - { - fprintf(f, "%2d:", pow); - callback.dictionarySize = (UInt32)1 << pow; - HRESULT res = LzmaBench( - #ifdef EXTERNAL_LZMA - codecs, - #endif - numThreads, callback.dictionarySize, &callback); - fprintf(f, "\n"); - RINOK(res); - } - } - callback.Normalize(); - fprintf(f, "----------------------------------------------------------------\nAvr:"); - PrintTotals(f, callback.EncodeRes); - fprintf(f, " "); - PrintTotals(f, callback.DecodeRes); - fprintf(f, "\nTot:"); - CTotalBenchRes midRes; - midRes.SetMid(callback.EncodeRes, callback.DecodeRes); - PrintTotals(f, midRes); - fprintf(f, "\n"); - return S_OK; -} - -struct CTempValues -{ - UInt64 *Values; - CTempValues(UInt32 num) { Values = new UInt64[num]; } - ~CTempValues() { delete []Values; } -}; - -HRESULT CrcBenchCon(FILE *f, UInt32 numIterations, UInt32 numThreads, UInt32 dictionary) -{ - if (!CrcInternalTest()) - return S_FALSE; - - #ifdef BENCH_MT - UInt64 ramSize = NWindows::NSystem::GetRamSize(); - UInt32 numCPUs = NWindows::NSystem::GetNumberOfProcessors(); - PrintRequirements(f, "size: ", ramSize, "CPU hardware threads:", numCPUs); - if (numThreads == (UInt32)-1) - numThreads = numCPUs; - #else - numThreads = 1; - #endif - if (dictionary == (UInt32)-1) - dictionary = (1 << 24); - - CTempValues speedTotals(numThreads); - fprintf(f, "\n\nSize"); - for (UInt32 ti = 0; ti < numThreads; ti++) - { - fprintf(f, " %5d", ti + 1); - speedTotals.Values[ti] = 0; - } - fprintf(f, "\n\n"); - - UInt64 numSteps = 0; - for (UInt32 i = 0; i < numIterations; i++) - { - for (int pow = 10; pow < 32; pow++) - { - UInt32 bufSize = (UInt32)1 << pow; - if (bufSize > dictionary) - break; - fprintf(f, "%2d: ", pow); - UInt64 speed; - for (UInt32 ti = 0; ti < numThreads; ti++) - { - #ifdef BREAK_HANDLER - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - #endif - RINOK(CrcBench(ti + 1, bufSize, speed)); - PrintNumber(f, (speed >> 20), 5); - speedTotals.Values[ti] += speed; - } - fprintf(f, "\n"); - numSteps++; - } - } - if (numSteps != 0) - { - fprintf(f, "\nAvg:"); - for (UInt32 ti = 0; ti < numThreads; ti++) - PrintNumber(f, ((speedTotals.Values[ti] / numSteps) >> 20), 5); - fprintf(f, "\n"); - } - return S_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h deleted file mode 100644 index 67346df42ea8..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h +++ /dev/null @@ -1,20 +0,0 @@ -// LzmaBenchCon.h - -#ifndef __LZMABENCHCON_H -#define __LZMABENCHCON_H - -#include -#include "../../../Common/Types.h" -#ifdef EXTERNAL_LZMA -#include "../../UI/Common/LoadCodecs.h" -#endif -HRESULT LzmaBenchCon( - #ifdef EXTERNAL_LZMA - CCodecs *codecs, - #endif - FILE *f, UInt32 numIterations, UInt32 numThreads, UInt32 dictionary); - -HRESULT CrcBenchCon(FILE *f, UInt32 numIterations, UInt32 numThreads, UInt32 dictionary); - -#endif - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/StdAfx.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/StdAfx.cpp deleted file mode 100644 index c6d3b1fa6231..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/StdAfx.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/StdAfx.h deleted file mode 100644 index 83fdd22d5866..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/StdAfx.h +++ /dev/null @@ -1,8 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/makefile b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/makefile deleted file mode 100644 index 69f684b9e90e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/makefile +++ /dev/null @@ -1,75 +0,0 @@ -PROG = lzma.exe -MY_CONSOLE = 1 -CFLAGS = $(CFLAGS) \ - -DCOMPRESS_MF_MT \ - -DBENCH_MT \ - -LZMA_OBJS = \ - $O\LzmaAlone.obj \ - $O\LzmaBench.obj \ - $O\LzmaBenchCon.obj \ - -LZMA_OPT_OBJS = \ - $O\LzmaDecoder.obj \ - $O\LzmaEncoder.obj \ - -COMMON_OBJS = \ - $O\CommandLineParser.obj \ - $O\CRC.obj \ - $O\IntToString.obj \ - $O\MyString.obj \ - $O\StringConvert.obj \ - $O\StringToInt.obj \ - $O\MyVector.obj - -WIN_OBJS = \ - $O\System.obj - -7ZIP_COMMON_OBJS = \ - $O\CWrappers.obj \ - $O\InBuffer.obj \ - $O\OutBuffer.obj \ - $O\StreamUtils.obj \ - -C_OBJS = \ - $O\7zCrc.obj \ - $O\Alloc.obj \ - $O\Bra86.obj \ - $O\LzFind.obj \ - $O\LzFindMt.obj \ - $O\Lzma86Dec.obj \ - $O\Lzma86Enc.obj \ - $O\LzmaDec.obj \ - $O\LzmaEnc.obj \ - $O\Threads.obj \ - -OBJS = \ - $O\StdAfx.obj \ - $(LZMA_OBJS) \ - $(LZMA_OPT_OBJS) \ - $(COMMON_OBJS) \ - $(WIN_OBJS) \ - $(7ZIP_COMMON_OBJS) \ - $(C_OBJS) \ - $O\FileStreams.obj \ - $O\FileIO.obj \ - -!include "../../../Build.mak" - - -$(LZMA_OBJS): $(*B).cpp - $(COMPL) -$(LZMA_OPT_OBJS): ../$(*B).cpp - $(COMPL_O2) -$(COMMON_OBJS): ../../../Common/$(*B).cpp - $(COMPL) -$(WIN_OBJS): ../../../Windows/$(*B).cpp - $(COMPL) -$(7ZIP_COMMON_OBJS): ../../Common/$(*B).cpp - $(COMPL) -$O\FileStreams.obj: ../../Common/FileStreams.cpp - $(COMPL) -$O\FileIO.obj: ../../../Windows/FileIO.cpp - $(COMPL) -$(C_OBJS): ../../../../C/$(*B).c - $(COMPL_O2) diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/makefile.gcc b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/makefile.gcc deleted file mode 100644 index d7a899c8b0bf..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LZMA_Alone/makefile.gcc +++ /dev/null @@ -1,139 +0,0 @@ -PROG = lzma -CXX = g++ -O2 -Wall -CXX_C = gcc -O2 -Wall -LIB = -lm -RM = rm -f -CFLAGS = -c - -ifdef SystemDrive -IS_MINGW = 1 -endif - -ifdef IS_MINGW -FILE_IO =FileIO -FILE_IO_2 =Windows/$(FILE_IO) -LIB2 = -luuid -else -FILE_IO =C_FileIO -FILE_IO_2 =Common/$(FILE_IO) -endif - -OBJS = \ - LzmaAlone.o \ - LzmaBench.o \ - LzmaBenchCon.o \ - LzmaDecoder.o \ - LzmaEncoder.o \ - CWrappers.o \ - InBuffer.o \ - OutBuffer.o \ - FileStreams.o \ - StreamUtils.o \ - $(FILE_IO).o \ - CommandLineParser.o \ - CRC.o \ - IntToString.o \ - MyString.o \ - StringConvert.o \ - StringToInt.o \ - MyVector.o \ - 7zCrc.o \ - Alloc.o \ - Bra86.o \ - LzFind.o \ - LzmaDec.o \ - LzmaEnc.o \ - Lzma86Dec.o \ - Lzma86Enc.o \ - - -all: $(PROG) - -$(PROG): $(OBJS) - $(CXX) -o $(PROG) $(LDFLAGS) $(OBJS) $(LIB) $(LIB2) - -LzmaAlone.o: LzmaAlone.cpp - $(CXX) $(CFLAGS) LzmaAlone.cpp - -LzmaBench.o: LzmaBench.cpp - $(CXX) $(CFLAGS) LzmaBench.cpp - -LzmaBenchCon.o: LzmaBenchCon.cpp - $(CXX) $(CFLAGS) LzmaBenchCon.cpp - -LzmaDecoder.o: ../LzmaDecoder.cpp - $(CXX) $(CFLAGS) ../LzmaDecoder.cpp - -LzmaEncoder.o: ../LzmaEncoder.cpp - $(CXX) $(CFLAGS) ../LzmaEncoder.cpp - -CWrappers.o: ../../Common/CWrappers.cpp - $(CXX) $(CFLAGS) ../../Common/CWrappers.cpp - -InBuffer.o: ../../Common/InBuffer.cpp - $(CXX) $(CFLAGS) ../../Common/InBuffer.cpp - -OutBuffer.o: ../../Common/OutBuffer.cpp - $(CXX) $(CFLAGS) ../../Common/OutBuffer.cpp - -FileStreams.o: ../../Common/FileStreams.cpp - $(CXX) $(CFLAGS) ../../Common/FileStreams.cpp - -StreamUtils.o: ../../Common/StreamUtils.cpp - $(CXX) $(CFLAGS) ../../Common/StreamUtils.cpp - -$(FILE_IO).o: ../../../$(FILE_IO_2).cpp - $(CXX) $(CFLAGS) ../../../$(FILE_IO_2).cpp - - -CommandLineParser.o: ../../../Common/CommandLineParser.cpp - $(CXX) $(CFLAGS) ../../../Common/CommandLineParser.cpp - -CRC.o: ../../../Common/CRC.cpp - $(CXX) $(CFLAGS) ../../../Common/CRC.cpp - -MyWindows.o: ../../../Common/MyWindows.cpp - $(CXX) $(CFLAGS) ../../../Common/MyWindows.cpp - -IntToString.o: ../../../Common/IntToString.cpp - $(CXX) $(CFLAGS) ../../../Common/IntToString.cpp - -MyString.o: ../../../Common/MyString.cpp - $(CXX) $(CFLAGS) ../../../Common/MyString.cpp - -StringConvert.o: ../../../Common/StringConvert.cpp - $(CXX) $(CFLAGS) ../../../Common/StringConvert.cpp - -StringToInt.o: ../../../Common/StringToInt.cpp - $(CXX) $(CFLAGS) ../../../Common/StringToInt.cpp - -MyVector.o: ../../../Common/MyVector.cpp - $(CXX) $(CFLAGS) ../../../Common/MyVector.cpp - -7zCrc.o: ../../../../C/7zCrc.c - $(CXX_C) $(CFLAGS) ../../../../C/7zCrc.c - -Alloc.o: ../../../../C/Alloc.c - $(CXX_C) $(CFLAGS) ../../../../C/Alloc.c - -Bra86.o: ../../../../C/Bra86.c - $(CXX_C) $(CFLAGS) ../../../../C/Bra86.c - -LzFind.o: ../../../../C/LzFind.c - $(CXX_C) $(CFLAGS) ../../../../C/LzFind.c - -LzmaDec.o: ../../../../C/LzmaDec.c - $(CXX_C) $(CFLAGS) ../../../../C/LzmaDec.c - -LzmaEnc.o: ../../../../C/LzmaEnc.c - $(CXX_C) $(CFLAGS) ../../../../C/LzmaEnc.c - -Lzma86Dec.o: ../../../../C/Lzma86Dec.c - $(CXX_C) $(CFLAGS) ../../../../C/Lzma86Dec.c - -Lzma86Enc.o: ../../../../C/Lzma86Enc.c - $(CXX_C) $(CFLAGS) ../../../../C/Lzma86Enc.c - -clean: - -$(RM) $(PROG) $(OBJS) - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Decoder.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Decoder.cpp deleted file mode 100644 index 8d3d83099775..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Decoder.cpp +++ /dev/null @@ -1,189 +0,0 @@ -// Lzma2Decoder.cpp - -#include "StdAfx.h" - -#include "../../../C/Alloc.h" - -#include "../Common/StreamUtils.h" - -#include "Lzma2Decoder.h" - -static HRESULT SResToHRESULT(SRes res) -{ - switch(res) - { - case SZ_OK: return S_OK; - case SZ_ERROR_MEM: return E_OUTOFMEMORY; - case SZ_ERROR_PARAM: return E_INVALIDARG; - // case SZ_ERROR_PROGRESS: return E_ABORT; - case SZ_ERROR_DATA: return S_FALSE; - } - return E_FAIL; -} - -namespace NCompress { -namespace NLzma2 { - -static const UInt32 kInBufSize = 1 << 20; - -CDecoder::CDecoder(): _inBuf(0), _outSizeDefined(false) -{ - Lzma2Dec_Construct(&_state); -} - -static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); } -static void SzFree(void *p, void *address) { p = p; MyFree(address); } -static ISzAlloc g_Alloc = { SzAlloc, SzFree }; - -CDecoder::~CDecoder() -{ - Lzma2Dec_Free(&_state, &g_Alloc); - MyFree(_inBuf); -} - -STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *prop, UInt32 size) -{ - if (size != 1) return SZ_ERROR_UNSUPPORTED; - RINOK(SResToHRESULT(Lzma2Dec_Allocate(&_state, prop[0], &g_Alloc))); - if (_inBuf == 0) - { - _inBuf = (Byte *)MyAlloc(kInBufSize); - if (_inBuf == 0) - return E_OUTOFMEMORY; - } - - return S_OK; -} - -STDMETHODIMP CDecoder::GetInStreamProcessedSize(UInt64 *value) { *value = _inSizeProcessed; return S_OK; } -STDMETHODIMP CDecoder::SetInStream(ISequentialInStream *inStream) { _inStream = inStream; return S_OK; } -STDMETHODIMP CDecoder::ReleaseInStream() { _inStream.Release(); return S_OK; } - -STDMETHODIMP CDecoder::SetOutStreamSize(const UInt64 *outSize) -{ - _outSizeDefined = (outSize != NULL); - if (_outSizeDefined) - _outSize = *outSize; - - Lzma2Dec_Init(&_state); - - _inPos = _inSize = 0; - _inSizeProcessed = _outSizeProcessed = 0; - return S_OK; -} - -STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, - ISequentialOutStream *outStream, const UInt64 * /* inSize */, - const UInt64 *outSize, ICompressProgressInfo *progress) -{ - if (_inBuf == 0) - return S_FALSE; - SetOutStreamSize(outSize); - - for (;;) - { - if (_inPos == _inSize) - { - _inPos = _inSize = 0; - RINOK(inStream->Read(_inBuf, kInBufSize, &_inSize)); - } - - SizeT dicPos = _state.decoder.dicPos; - SizeT curSize = _state.decoder.dicBufSize - dicPos; - const UInt32 kStepSize = ((UInt32)1 << 22); - if (curSize > kStepSize) - curSize = (SizeT)kStepSize; - - ELzmaFinishMode finishMode = LZMA_FINISH_ANY; - if (_outSizeDefined) - { - const UInt64 rem = _outSize - _outSizeProcessed; - if (rem < curSize) - { - curSize = (SizeT)rem; - /* - // finishMode = LZMA_FINISH_END; - we can't use LZMA_FINISH_END here to allow partial decoding - */ - } - } - - SizeT inSizeProcessed = _inSize - _inPos; - ELzmaStatus status; - SRes res = Lzma2Dec_DecodeToDic(&_state, dicPos + curSize, _inBuf + _inPos, &inSizeProcessed, finishMode, &status); - - _inPos += (UInt32)inSizeProcessed; - _inSizeProcessed += inSizeProcessed; - SizeT outSizeProcessed = _state.decoder.dicPos - dicPos; - _outSizeProcessed += outSizeProcessed; - - bool finished = (inSizeProcessed == 0 && outSizeProcessed == 0); - bool stopDecoding = (_outSizeDefined && _outSizeProcessed >= _outSize); - - if (res != 0 || _state.decoder.dicPos == _state.decoder.dicBufSize || finished || stopDecoding) - { - HRESULT res2 = WriteStream(outStream, _state.decoder.dic, _state.decoder.dicPos); - if (res != 0) - return S_FALSE; - RINOK(res2); - if (stopDecoding) - return S_OK; - if (finished) - return (status == LZMA_STATUS_FINISHED_WITH_MARK ? S_OK : S_FALSE); - } - if (_state.decoder.dicPos == _state.decoder.dicBufSize) - _state.decoder.dicPos = 0; - - if (progress != NULL) - { - RINOK(progress->SetRatioInfo(&_inSizeProcessed, &_outSizeProcessed)); - } - } -} - -#ifndef NO_READ_FROM_CODER - -STDMETHODIMP CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - if (processedSize) - *processedSize = 0; - do - { - if (_inPos == _inSize) - { - _inPos = _inSize = 0; - RINOK(_inStream->Read(_inBuf, kInBufSize, &_inSize)); - } - { - SizeT inProcessed = _inSize - _inPos; - - if (_outSizeDefined) - { - const UInt64 rem = _outSize - _outSizeProcessed; - if (rem < size) - size = (UInt32)rem; - } - - SizeT outProcessed = size; - ELzmaStatus status; - SRes res = Lzma2Dec_DecodeToBuf(&_state, (Byte *)data, &outProcessed, - _inBuf + _inPos, &inProcessed, LZMA_FINISH_ANY, &status); - _inPos += (UInt32)inProcessed; - _inSizeProcessed += inProcessed; - _outSizeProcessed += outProcessed; - size -= (UInt32)outProcessed; - data = (Byte *)data + outProcessed; - if (processedSize) - *processedSize += (UInt32)outProcessed; - RINOK(SResToHRESULT(res)); - if (inProcessed == 0 && outProcessed == 0) - return S_OK; - } - } - while (size != 0); - return S_OK; -} - -#endif - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Decoder.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Decoder.h deleted file mode 100644 index 3540097080a3..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Decoder.h +++ /dev/null @@ -1,73 +0,0 @@ -// Lzma2Decoder.h - -#ifndef __LZMA2_DECODER_H -#define __LZMA2_DECODER_H - -#include "../../../C/Lzma2Dec.h" - -#include "../../Common/MyCom.h" - -#include "../ICoder.h" - -namespace NCompress { -namespace NLzma2 { - -class CDecoder: - public ICompressCoder, - public ICompressSetDecoderProperties2, - public ICompressGetInStreamProcessedSize, - #ifndef NO_READ_FROM_CODER - public ICompressSetInStream, - public ICompressSetOutStreamSize, - public ISequentialInStream, - #endif - public CMyUnknownImp -{ - CMyComPtr _inStream; - Byte *_inBuf; - UInt32 _inPos; - UInt32 _inSize; - CLzma2Dec _state; - bool _outSizeDefined; - UInt64 _outSize; - UInt64 _inSizeProcessed; - UInt64 _outSizeProcessed; -public: - - #ifndef NO_READ_FROM_CODER - MY_UNKNOWN_IMP5( - ICompressSetDecoderProperties2, - ICompressGetInStreamProcessedSize, - ICompressSetInStream, - ICompressSetOutStreamSize, - ISequentialInStream) - #else - MY_UNKNOWN_IMP2( - ICompressSetDecoderProperties2, - ICompressGetInStreamProcessedSize) - #endif - - STDMETHOD(Code)(ISequentialInStream *inStream, - ISequentialOutStream *outStream, const UInt64 *_inSize, const UInt64 *outSize, - ICompressProgressInfo *progress); - - STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size); - - STDMETHOD(GetInStreamProcessedSize)(UInt64 *value); - - STDMETHOD(SetInStream)(ISequentialInStream *inStream); - STDMETHOD(ReleaseInStream)(); - STDMETHOD(SetOutStreamSize)(const UInt64 *outSize); - - #ifndef NO_READ_FROM_CODER - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - #endif - - CDecoder(); - virtual ~CDecoder(); - -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Encoder.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Encoder.cpp deleted file mode 100644 index 871f146c2665..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Encoder.cpp +++ /dev/null @@ -1,94 +0,0 @@ -// Lzma2Encoder.cpp - -#include "StdAfx.h" - -#include "../../../C/Alloc.h" - -#include "../Common/CWrappers.h" -#include "../Common/StreamUtils.h" - -#include "Lzma2Encoder.h" - -namespace NCompress { - -namespace NLzma { - -HRESULT SetLzmaProp(PROPID propID, const PROPVARIANT &prop, CLzmaEncProps &ep); - -} - -namespace NLzma2 { - -static void *SzBigAlloc(void *, size_t size) { return BigAlloc(size); } -static void SzBigFree(void *, void *address) { BigFree(address); } -static ISzAlloc g_BigAlloc = { SzBigAlloc, SzBigFree }; - -static void *SzAlloc(void *, size_t size) { return MyAlloc(size); } -static void SzFree(void *, void *address) { MyFree(address); } -static ISzAlloc g_Alloc = { SzAlloc, SzFree }; - -CEncoder::CEncoder() -{ - _encoder = 0; - _encoder = Lzma2Enc_Create(&g_Alloc, &g_BigAlloc); - if (_encoder == 0) - throw 1; -} - -CEncoder::~CEncoder() -{ - if (_encoder != 0) - Lzma2Enc_Destroy(_encoder); -} - -HRESULT SetLzma2Prop(PROPID propID, const PROPVARIANT &prop, CLzma2EncProps &lzma2Props) -{ - switch (propID) - { - case NCoderPropID::kBlockSize: - if (prop.vt != VT_UI4) return E_INVALIDARG; lzma2Props.blockSize = prop.ulVal; break; - case NCoderPropID::kNumThreads: - if (prop.vt != VT_UI4) return E_INVALIDARG; lzma2Props.numTotalThreads = (int)(prop.ulVal); break; - default: - RINOK(NLzma::SetLzmaProp(propID, prop, lzma2Props.lzmaProps)); - } - return S_OK; -} - -STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs, - const PROPVARIANT *coderProps, UInt32 numProps) -{ - CLzma2EncProps lzma2Props; - Lzma2EncProps_Init(&lzma2Props); - - for (UInt32 i = 0; i < numProps; i++) - { - RINOK(SetLzma2Prop(propIDs[i], coderProps[i], lzma2Props)); - } - return SResToHRESULT(Lzma2Enc_SetProps(_encoder, &lzma2Props)); -} - -STDMETHODIMP CEncoder::WriteCoderProperties(ISequentialOutStream *outStream) -{ - Byte prop = Lzma2Enc_WriteProperties(_encoder); - return WriteStream(outStream, &prop, 1); -} - -STDMETHODIMP CEncoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream, - const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress) -{ - CSeqInStreamWrap inWrap(inStream); - CSeqOutStreamWrap outWrap(outStream); - CCompressProgressWrap progressWrap(progress); - - SRes res = Lzma2Enc_Encode(_encoder, &outWrap.p, &inWrap.p, progress ? &progressWrap.p : NULL); - if (res == SZ_ERROR_READ && inWrap.Res != S_OK) - return inWrap.Res; - if (res == SZ_ERROR_WRITE && outWrap.Res != S_OK) - return outWrap.Res; - if (res == SZ_ERROR_PROGRESS && progressWrap.Res != S_OK) - return progressWrap.Res; - return SResToHRESULT(res); -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Encoder.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Encoder.h deleted file mode 100644 index fc43702035c3..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Encoder.h +++ /dev/null @@ -1,36 +0,0 @@ -// Lzma2Encoder.h - -#ifndef __LZMA2_ENCODER_H -#define __LZMA2_ENCODER_H - -#include "../../../C/Lzma2Enc.h" - -#include "../../Common/MyCom.h" - -#include "../ICoder.h" - -namespace NCompress { -namespace NLzma2 { - -class CEncoder: - public ICompressCoder, - public ICompressSetCoderProperties, - public ICompressWriteCoderProperties, - public CMyUnknownImp -{ - CLzma2EncHandle _encoder; -public: - MY_UNKNOWN_IMP2(ICompressSetCoderProperties, ICompressWriteCoderProperties) - - STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, - const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress); - STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps); - STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream); - - CEncoder(); - virtual ~CEncoder(); -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Register.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Register.cpp deleted file mode 100644 index 28430b4bd70c..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/Lzma2Register.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// Lzma2Register.cpp - -#include "StdAfx.h" - -#include "../Common/RegisterCodec.h" - -#include "Lzma2Decoder.h" - -static void *CreateCodec() { return (void *)(ICompressCoder *)(new NCompress::NLzma2::CDecoder); } -#ifndef EXTRACT_ONLY -#include "Lzma2Encoder.h" -static void *CreateCodecOut() { return (void *)(ICompressCoder *)(new NCompress::NLzma2::CEncoder); } -#else -#define CreateCodecOut 0 -#endif - -static CCodecInfo g_CodecInfo = - { CreateCodec, CreateCodecOut, 0x21, L"LZMA2", 1, false }; - -REGISTER_CODEC(LZMA2) diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaDecoder.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaDecoder.cpp deleted file mode 100644 index e9fbdab570cc..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaDecoder.cpp +++ /dev/null @@ -1,239 +0,0 @@ -// LzmaDecoder.cpp - -#include "StdAfx.h" - -#include "../../../C/Alloc.h" - -#include "../Common/StreamUtils.h" - -#include "LzmaDecoder.h" - -static HRESULT SResToHRESULT(SRes res) -{ - switch(res) - { - case SZ_OK: return S_OK; - case SZ_ERROR_MEM: return E_OUTOFMEMORY; - case SZ_ERROR_PARAM: return E_INVALIDARG; - case SZ_ERROR_UNSUPPORTED: return E_NOTIMPL; - case SZ_ERROR_DATA: return S_FALSE; - } - return E_FAIL; -} - -namespace NCompress { -namespace NLzma { - -static const UInt32 kInBufSize = 1 << 20; - -CDecoder::CDecoder(): _inBuf(0), _propsWereSet(false), _outSizeDefined(false), FinishStream(false) -{ - _inSizeProcessed = 0; - _inPos = _inSize = 0; - LzmaDec_Construct(&_state); -} - -static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); } -static void SzFree(void *p, void *address) { p = p; MyFree(address); } -static ISzAlloc g_Alloc = { SzAlloc, SzFree }; - -CDecoder::~CDecoder() -{ - LzmaDec_Free(&_state, &g_Alloc); - MyFree(_inBuf); -} - -HRESULT CDecoder::CreateInputBuffer() -{ - if (_inBuf == 0) - { - _inBuf = (Byte *)MyAlloc(kInBufSize); - if (_inBuf == 0) - return E_OUTOFMEMORY; - } - return S_OK; -} - -STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *prop, UInt32 size) -{ - RINOK(SResToHRESULT(LzmaDec_Allocate(&_state, prop, size, &g_Alloc))); - _propsWereSet = true; - return CreateInputBuffer(); -} - -void CDecoder::SetOutStreamSizeResume(const UInt64 *outSize) -{ - _outSizeDefined = (outSize != NULL); - if (_outSizeDefined) - _outSize = *outSize; - _outSizeProcessed = 0; - LzmaDec_Init(&_state); -} - -STDMETHODIMP CDecoder::SetOutStreamSize(const UInt64 *outSize) -{ - _inSizeProcessed = 0; - _inPos = _inSize = 0; - SetOutStreamSizeResume(outSize); - return S_OK; -} - -HRESULT CDecoder::CodeSpec(ISequentialInStream *inStream, ISequentialOutStream *outStream, ICompressProgressInfo *progress) -{ - if (_inBuf == 0 || !_propsWereSet) - return S_FALSE; - - UInt64 startInProgress = _inSizeProcessed; - - for (;;) - { - if (_inPos == _inSize) - { - _inPos = _inSize = 0; - RINOK(inStream->Read(_inBuf, kInBufSize, &_inSize)); - } - - SizeT dicPos = _state.dicPos; - SizeT curSize = _state.dicBufSize - dicPos; - const UInt32 kStepSize = ((UInt32)1 << 22); - if (curSize > kStepSize) - curSize = (SizeT)kStepSize; - - ELzmaFinishMode finishMode = LZMA_FINISH_ANY; - if (_outSizeDefined) - { - const UInt64 rem = _outSize - _outSizeProcessed; - if (rem < curSize) - { - curSize = (SizeT)rem; - if (FinishStream) - finishMode = LZMA_FINISH_END; - } - } - - SizeT inSizeProcessed = _inSize - _inPos; - ELzmaStatus status; - SRes res = LzmaDec_DecodeToDic(&_state, dicPos + curSize, _inBuf + _inPos, &inSizeProcessed, finishMode, &status); - - _inPos += (UInt32)inSizeProcessed; - _inSizeProcessed += inSizeProcessed; - SizeT outSizeProcessed = _state.dicPos - dicPos; - _outSizeProcessed += outSizeProcessed; - - bool finished = (inSizeProcessed == 0 && outSizeProcessed == 0); - bool stopDecoding = (_outSizeDefined && _outSizeProcessed >= _outSize); - - if (res != 0 || _state.dicPos == _state.dicBufSize || finished || stopDecoding) - { - HRESULT res2 = WriteStream(outStream, _state.dic, _state.dicPos); - if (res != 0) - return S_FALSE; - RINOK(res2); - if (stopDecoding) - return S_OK; - if (finished) - return (status == LZMA_STATUS_FINISHED_WITH_MARK ? S_OK : S_FALSE); - } - if (_state.dicPos == _state.dicBufSize) - _state.dicPos = 0; - - if (progress) - { - UInt64 inSize = _inSizeProcessed - startInProgress; - RINOK(progress->SetRatioInfo(&inSize, &_outSizeProcessed)); - } - } -} - -STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream, - const UInt64 * /* inSize */, const UInt64 *outSize, ICompressProgressInfo *progress) -{ - SetOutStreamSize(outSize); - return CodeSpec(inStream, outStream, progress); -} - -#ifndef NO_READ_FROM_CODER - -STDMETHODIMP CDecoder::SetInStream(ISequentialInStream *inStream) { _inStream = inStream; return S_OK; } -STDMETHODIMP CDecoder::ReleaseInStream() { _inStream.Release(); return S_OK; } - -STDMETHODIMP CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - if (processedSize) - *processedSize = 0; - do - { - if (_inPos == _inSize) - { - _inPos = _inSize = 0; - RINOK(_inStream->Read(_inBuf, kInBufSize, &_inSize)); - } - { - SizeT inProcessed = _inSize - _inPos; - - if (_outSizeDefined) - { - const UInt64 rem = _outSize - _outSizeProcessed; - if (rem < size) - size = (UInt32)rem; - } - - SizeT outProcessed = size; - ELzmaStatus status; - SRes res = LzmaDec_DecodeToBuf(&_state, (Byte *)data, &outProcessed, - _inBuf + _inPos, &inProcessed, LZMA_FINISH_ANY, &status); - _inPos += (UInt32)inProcessed; - _inSizeProcessed += inProcessed; - _outSizeProcessed += outProcessed; - size -= (UInt32)outProcessed; - data = (Byte *)data + outProcessed; - if (processedSize) - *processedSize += (UInt32)outProcessed; - RINOK(SResToHRESULT(res)); - if (inProcessed == 0 && outProcessed == 0) - return S_OK; - } - } - while (size != 0); - return S_OK; -} - -HRESULT CDecoder::CodeResume(ISequentialOutStream *outStream, const UInt64 *outSize, ICompressProgressInfo *progress) -{ - SetOutStreamSizeResume(outSize); - return CodeSpec(_inStream, outStream, progress); -} - -HRESULT CDecoder::ReadFromInputStream(void *data, UInt32 size, UInt32 *processedSize) -{ - RINOK(CreateInputBuffer()); - if (processedSize) - *processedSize = 0; - while (size > 0) - { - if (_inPos == _inSize) - { - _inPos = _inSize = 0; - RINOK(_inStream->Read(_inBuf, kInBufSize, &_inSize)); - if (_inSize == 0) - break; - } - { - UInt32 curSize = _inSize - _inPos; - if (curSize > size) - curSize = size; - memcpy(data, _inBuf + _inPos, curSize); - _inPos += curSize; - _inSizeProcessed += curSize; - size -= curSize; - data = (Byte *)data + curSize; - if (processedSize) - *processedSize += curSize; - } - } - return S_OK; -} - -#endif - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaDecoder.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaDecoder.h deleted file mode 100644 index 3d1ae9905a75..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaDecoder.h +++ /dev/null @@ -1,76 +0,0 @@ -// LzmaDecoder.h - -#ifndef __LZMA_DECODER_H -#define __LZMA_DECODER_H - -#include "../../../C/LzmaDec.h" - -#include "../../Common/MyCom.h" -#include "../ICoder.h" - -namespace NCompress { -namespace NLzma { - -class CDecoder: - public ICompressCoder, - public ICompressSetDecoderProperties2, - #ifndef NO_READ_FROM_CODER - public ICompressSetInStream, - public ICompressSetOutStreamSize, - public ISequentialInStream, - #endif - public CMyUnknownImp -{ - CMyComPtr _inStream; - Byte *_inBuf; - UInt32 _inPos; - UInt32 _inSize; - CLzmaDec _state; - bool _propsWereSet; - bool _outSizeDefined; - UInt64 _outSize; - UInt64 _inSizeProcessed; - UInt64 _outSizeProcessed; - - HRESULT CreateInputBuffer(); - HRESULT CodeSpec(ISequentialInStream *inStream, ISequentialOutStream *outStream, ICompressProgressInfo *progress); - void SetOutStreamSizeResume(const UInt64 *outSize); - -public: - MY_QUERYINTERFACE_BEGIN - MY_QUERYINTERFACE_ENTRY(ICompressSetDecoderProperties2) - #ifndef NO_READ_FROM_CODER - MY_QUERYINTERFACE_ENTRY(ICompressSetInStream) - MY_QUERYINTERFACE_ENTRY(ICompressSetOutStreamSize) - MY_QUERYINTERFACE_ENTRY(ISequentialInStream) - #endif - MY_QUERYINTERFACE_END - MY_ADDREF_RELEASE - - STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, - const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress); - STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size); - STDMETHOD(SetOutStreamSize)(const UInt64 *outSize); - - #ifndef NO_READ_FROM_CODER - - STDMETHOD(SetInStream)(ISequentialInStream *inStream); - STDMETHOD(ReleaseInStream)(); - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - - HRESULT CodeResume(ISequentialOutStream *outStream, const UInt64 *outSize, ICompressProgressInfo *progress); - HRESULT ReadFromInputStream(void *data, UInt32 size, UInt32 *processedSize); - UInt64 GetInputProcessedSize() const { return _inSizeProcessed; } - - #endif - - bool FinishStream; - - CDecoder(); - virtual ~CDecoder(); - -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaEncoder.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaEncoder.cpp deleted file mode 100644 index aa96c0ea65e7..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaEncoder.cpp +++ /dev/null @@ -1,149 +0,0 @@ -// LzmaEncoder.cpp - -#include "StdAfx.h" - -#include "../../../C/Alloc.h" - -#include "../Common/CWrappers.h" -#include "../Common/StreamUtils.h" - -#include "LzmaEncoder.h" - -namespace NCompress { -namespace NLzma { - -static void *SzBigAlloc(void *, size_t size) { return BigAlloc(size); } -static void SzBigFree(void *, void *address) { BigFree(address); } -static ISzAlloc g_BigAlloc = { SzBigAlloc, SzBigFree }; - -static void *SzAlloc(void *, size_t size) { return MyAlloc(size); } -static void SzFree(void *, void *address) { MyFree(address); } -static ISzAlloc g_Alloc = { SzAlloc, SzFree }; - -CEncoder::CEncoder() -{ - _encoder = 0; - _encoder = LzmaEnc_Create(&g_Alloc); - if (_encoder == 0) - throw 1; -} - -CEncoder::~CEncoder() -{ - if (_encoder != 0) - LzmaEnc_Destroy(_encoder, &g_Alloc, &g_BigAlloc); -} - -inline wchar_t GetUpperChar(wchar_t c) -{ - if (c >= 'a' && c <= 'z') - c -= 0x20; - return c; -} - -static int ParseMatchFinder(const wchar_t *s, int *btMode, int *numHashBytes) -{ - wchar_t c = GetUpperChar(*s++); - if (c == L'H') - { - if (GetUpperChar(*s++) != L'C') - return 0; - int numHashBytesLoc = (int)(*s++ - L'0'); - if (numHashBytesLoc < 4 || numHashBytesLoc > 4) - return 0; - if (*s++ != 0) - return 0; - *btMode = 0; - *numHashBytes = numHashBytesLoc; - return 1; - } - if (c != L'B') - return 0; - - if (GetUpperChar(*s++) != L'T') - return 0; - int numHashBytesLoc = (int)(*s++ - L'0'); - if (numHashBytesLoc < 2 || numHashBytesLoc > 4) - return 0; - c = GetUpperChar(*s++); - if (c != L'\0') - return 0; - *btMode = 1; - *numHashBytes = numHashBytesLoc; - return 1; -} - -HRESULT SetLzmaProp(PROPID propID, const PROPVARIANT &prop, CLzmaEncProps &ep) -{ - if (propID == NCoderPropID::kMatchFinder) - { - if (prop.vt != VT_BSTR) - return E_INVALIDARG; - return ParseMatchFinder(prop.bstrVal, &ep.btMode, &ep.numHashBytes) ? S_OK : E_INVALIDARG; - } - if (prop.vt != VT_UI4) - return E_INVALIDARG; - UInt32 v = prop.ulVal; - switch (propID) - { - case NCoderPropID::kNumFastBytes: ep.fb = v; break; - case NCoderPropID::kMatchFinderCycles: ep.mc = v; break; - case NCoderPropID::kAlgorithm: ep.algo = v; break; - case NCoderPropID::kDictionarySize: ep.dictSize = v; break; - case NCoderPropID::kPosStateBits: ep.pb = v; break; - case NCoderPropID::kLitPosBits: ep.lp = v; break; - case NCoderPropID::kLitContextBits: ep.lc = v; break; - default: return E_INVALIDARG; - } - return S_OK; -} - -STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs, - const PROPVARIANT *coderProps, UInt32 numProps) -{ - CLzmaEncProps props; - LzmaEncProps_Init(&props); - - for (UInt32 i = 0; i < numProps; i++) - { - const PROPVARIANT &prop = coderProps[i]; - PROPID propID = propIDs[i]; - switch (propID) - { - case NCoderPropID::kEndMarker: - if (prop.vt != VT_BOOL) return E_INVALIDARG; props.writeEndMark = (prop.boolVal == VARIANT_TRUE); break; - case NCoderPropID::kNumThreads: - if (prop.vt != VT_UI4) return E_INVALIDARG; props.numThreads = prop.ulVal; break; - default: - RINOK(SetLzmaProp(propID, prop, props)); - } - } - return SResToHRESULT(LzmaEnc_SetProps(_encoder, &props)); -} - -STDMETHODIMP CEncoder::WriteCoderProperties(ISequentialOutStream *outStream) -{ - Byte props[LZMA_PROPS_SIZE]; - size_t size = LZMA_PROPS_SIZE; - RINOK(LzmaEnc_WriteProperties(_encoder, props, &size)); - return WriteStream(outStream, props, size); -} - -STDMETHODIMP CEncoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream, - const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress) -{ - CSeqInStreamWrap inWrap(inStream); - CSeqOutStreamWrap outWrap(outStream); - CCompressProgressWrap progressWrap(progress); - - SRes res = LzmaEnc_Encode(_encoder, &outWrap.p, &inWrap.p, progress ? &progressWrap.p : NULL, &g_Alloc, &g_BigAlloc); - if (res == SZ_ERROR_READ && inWrap.Res != S_OK) - return inWrap.Res; - if (res == SZ_ERROR_WRITE && outWrap.Res != S_OK) - return outWrap.Res; - if (res == SZ_ERROR_PROGRESS && progressWrap.Res != S_OK) - return progressWrap.Res; - return SResToHRESULT(res); -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaEncoder.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaEncoder.h deleted file mode 100644 index c3e896149824..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaEncoder.h +++ /dev/null @@ -1,36 +0,0 @@ -// LzmaEncoder.h - -#ifndef __LZMA_ENCODER_H -#define __LZMA_ENCODER_H - -#include "../../../C/LzmaEnc.h" - -#include "../../Common/MyCom.h" - -#include "../ICoder.h" - -namespace NCompress { -namespace NLzma { - -class CEncoder: - public ICompressCoder, - public ICompressSetCoderProperties, - public ICompressWriteCoderProperties, - public CMyUnknownImp -{ - CLzmaEncHandle _encoder; -public: - MY_UNKNOWN_IMP2(ICompressSetCoderProperties, ICompressWriteCoderProperties) - - STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, - const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress); - STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps); - STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream); - - CEncoder(); - virtual ~CEncoder(); -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaRegister.cpp b/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaRegister.cpp deleted file mode 100644 index 9c67eaf94117..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/LzmaRegister.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// LzmaRegister.cpp - -#include "StdAfx.h" - -#include "../Common/RegisterCodec.h" - -#include "LzmaDecoder.h" - -static void *CreateCodec() { return (void *)(ICompressCoder *)(new NCompress::NLzma::CDecoder); } -#ifndef EXTRACT_ONLY -#include "LzmaEncoder.h" -static void *CreateCodecOut() { return (void *)(ICompressCoder *)(new NCompress::NLzma::CEncoder); } -#else -#define CreateCodecOut 0 -#endif - -static CCodecInfo g_CodecInfo = - { CreateCodec, CreateCodecOut, 0x030101, L"LZMA", 1, false }; - -REGISTER_CODEC(LZMA) diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/RangeCoder.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/RangeCoder.h deleted file mode 100644 index e9e8e32910ac..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/RangeCoder.h +++ /dev/null @@ -1,205 +0,0 @@ -// Compress/RangeCoder.h -// 2009-05-30 : Igor Pavlov : Public domain - -#ifndef __COMPRESS_RANGE_CODER_H -#define __COMPRESS_RANGE_CODER_H - -#include "../Common/InBuffer.h" -#include "../Common/OutBuffer.h" - -namespace NCompress { -namespace NRangeCoder { - -const int kNumTopBits = 24; -const UInt32 kTopValue = (1 << kNumTopBits); - -class CEncoder -{ - UInt32 _cacheSize; - Byte _cache; -public: - UInt64 Low; - UInt32 Range; - COutBuffer Stream; - bool Create(UInt32 bufferSize) { return Stream.Create(bufferSize); } - - void SetStream(ISequentialOutStream *stream) { Stream.SetStream(stream); } - void Init() - { - Stream.Init(); - Low = 0; - Range = 0xFFFFFFFF; - _cacheSize = 1; - _cache = 0; - } - - void FlushData() - { - // Low += 1; - for(int i = 0; i < 5; i++) - ShiftLow(); - } - - HRESULT FlushStream() { return Stream.Flush(); } - - void ReleaseStream() { Stream.ReleaseStream(); } - - void Encode(UInt32 start, UInt32 size, UInt32 total) - { - Low += start * (Range /= total); - Range *= size; - while (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - - void ShiftLow() - { - if ((UInt32)Low < (UInt32)0xFF000000 || (int)(Low >> 32) != 0) - { - Byte temp = _cache; - do - { - Stream.WriteByte((Byte)(temp + (Byte)(Low >> 32))); - temp = 0xFF; - } - while(--_cacheSize != 0); - _cache = (Byte)((UInt32)Low >> 24); - } - _cacheSize++; - Low = (UInt32)Low << 8; - } - - void EncodeDirectBits(UInt32 value, int numBits) - { - for (numBits--; numBits >= 0; numBits--) - { - Range >>= 1; - Low += Range & (0 - ((value >> numBits) & 1)); - if (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - } - - void EncodeBit(UInt32 size0, UInt32 numTotalBits, UInt32 symbol) - { - UInt32 newBound = (Range >> numTotalBits) * size0; - if (symbol == 0) - Range = newBound; - else - { - Low += newBound; - Range -= newBound; - } - while (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - - UInt64 GetProcessedSize() { return Stream.GetProcessedSize() + _cacheSize + 4; } -}; - -class CDecoder -{ -public: - CInBuffer Stream; - UInt32 Range; - UInt32 Code; - bool Create(UInt32 bufferSize) { return Stream.Create(bufferSize); } - - void Normalize() - { - while (Range < kTopValue) - { - Code = (Code << 8) | Stream.ReadByte(); - Range <<= 8; - } - } - - void SetStream(ISequentialInStream *stream) { Stream.SetStream(stream); } - void Init() - { - Stream.Init(); - Code = 0; - Range = 0xFFFFFFFF; - for(int i = 0; i < 5; i++) - Code = (Code << 8) | Stream.ReadByte(); - } - - void ReleaseStream() { Stream.ReleaseStream(); } - - UInt32 GetThreshold(UInt32 total) - { - return (Code) / ( Range /= total); - } - - void Decode(UInt32 start, UInt32 size) - { - Code -= start * Range; - Range *= size; - Normalize(); - } - - UInt32 DecodeDirectBits(int numTotalBits) - { - UInt32 range = Range; - UInt32 code = Code; - UInt32 result = 0; - for (int i = numTotalBits; i != 0; i--) - { - range >>= 1; - /* - result <<= 1; - if (code >= range) - { - code -= range; - result |= 1; - } - */ - UInt32 t = (code - range) >> 31; - code -= range & (t - 1); - result = (result << 1) | (1 - t); - - if (range < kTopValue) - { - code = (code << 8) | Stream.ReadByte(); - range <<= 8; - } - } - Range = range; - Code = code; - return result; - } - - UInt32 DecodeBit(UInt32 size0, UInt32 numTotalBits) - { - UInt32 newBound = (Range >> numTotalBits) * size0; - UInt32 symbol; - if (Code < newBound) - { - symbol = 0; - Range = newBound; - } - else - { - symbol = 1; - Code -= newBound; - Range -= newBound; - } - Normalize(); - return symbol; - } - - UInt64 GetProcessedSize() {return Stream.GetProcessedSize(); } -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/RangeCoderBit.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/RangeCoderBit.h deleted file mode 100644 index f06408c365e8..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/RangeCoderBit.h +++ /dev/null @@ -1,114 +0,0 @@ -// Compress/RangeCoderBit.h -// 2009-05-30 : Igor Pavlov : Public domain - -#ifndef __COMPRESS_RANGE_CODER_BIT_H -#define __COMPRESS_RANGE_CODER_BIT_H - -#include "RangeCoder.h" - -namespace NCompress { -namespace NRangeCoder { - -const int kNumBitModelTotalBits = 11; -const UInt32 kBitModelTotal = (1 << kNumBitModelTotalBits); - -const int kNumMoveReducingBits = 4; - -const int kNumBitPriceShiftBits = 4; -const UInt32 kBitPrice = 1 << kNumBitPriceShiftBits; - -extern UInt32 ProbPrices[kBitModelTotal >> kNumMoveReducingBits]; - -template -class CBitModel -{ -public: - UInt32 Prob; - void UpdateModel(UInt32 symbol) - { - /* - Prob -= (Prob + ((symbol - 1) & ((1 << numMoveBits) - 1))) >> numMoveBits; - Prob += (1 - symbol) << (kNumBitModelTotalBits - numMoveBits); - */ - if (symbol == 0) - Prob += (kBitModelTotal - Prob) >> numMoveBits; - else - Prob -= (Prob) >> numMoveBits; - } -public: - void Init() { Prob = kBitModelTotal / 2; } -}; - -template -class CBitEncoder: public CBitModel -{ -public: - void Encode(CEncoder *encoder, UInt32 symbol) - { - /* - encoder->EncodeBit(this->Prob, kNumBitModelTotalBits, symbol); - this->UpdateModel(symbol); - */ - UInt32 newBound = (encoder->Range >> kNumBitModelTotalBits) * this->Prob; - if (symbol == 0) - { - encoder->Range = newBound; - this->Prob += (kBitModelTotal - this->Prob) >> numMoveBits; - } - else - { - encoder->Low += newBound; - encoder->Range -= newBound; - this->Prob -= (this->Prob) >> numMoveBits; - } - if (encoder->Range < kTopValue) - { - encoder->Range <<= 8; - encoder->ShiftLow(); - } - } - UInt32 GetPrice(UInt32 symbol) const - { - return ProbPrices[(this->Prob ^ ((-(int)symbol)) & (kBitModelTotal - 1)) >> kNumMoveReducingBits]; - } - UInt32 GetPrice0() const { return ProbPrices[this->Prob >> kNumMoveReducingBits]; } - UInt32 GetPrice1() const { return ProbPrices[(this->Prob ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits]; } -}; - - -template -class CBitDecoder: public CBitModel -{ -public: - UInt32 Decode(CDecoder *decoder) - { - UInt32 newBound = (decoder->Range >> kNumBitModelTotalBits) * this->Prob; - if (decoder->Code < newBound) - { - decoder->Range = newBound; - this->Prob += (kBitModelTotal - this->Prob) >> numMoveBits; - if (decoder->Range < kTopValue) - { - decoder->Code = (decoder->Code << 8) | decoder->Stream.ReadByte(); - decoder->Range <<= 8; - } - return 0; - } - else - { - decoder->Range -= newBound; - decoder->Code -= newBound; - this->Prob -= (this->Prob) >> numMoveBits; - if (decoder->Range < kTopValue) - { - decoder->Code = (decoder->Code << 8) | decoder->Stream.ReadByte(); - decoder->Range <<= 8; - } - return 1; - } - } -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Compress/StdAfx.h b/modules/lib7z/LZMASDK/CPP/7zip/Compress/StdAfx.h deleted file mode 100644 index c28ffcea728d..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Compress/StdAfx.h +++ /dev/null @@ -1,8 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../Common/MyWindows.h" - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Crc.mak b/modules/lib7z/LZMASDK/CPP/7zip/Crc.mak deleted file mode 100644 index 1ef009dc7c85..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Crc.mak +++ /dev/null @@ -1,15 +0,0 @@ -!IFNDEF CPU -$O\7zCrcT8U.obj: ../../../../Asm/x86/$(*B).asm - $(COMPL_ASM) -$O\7zCrcT8.obj: ../../../../C/$(*B).c - $(COMPL_O2) -!ELSE IF "$(CPU)" == "AMD64" -$O\7zCrcT8U.obj: ../../../../Asm/x64/$(*B).asm - $(COMPL_ASM) -$O\7zCrcT8.obj: ../../../../C/$(*B).c - $(COMPL_O2) -!ELSE -$(CRC_OBJS): ../../../../C/$(*B).c - $(COMPL_O2) -!ENDIF - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Crc2.mak b/modules/lib7z/LZMASDK/CPP/7zip/Crc2.mak deleted file mode 100644 index 9324df502663..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Crc2.mak +++ /dev/null @@ -1,7 +0,0 @@ -CRC_OBJS = \ -!IF "$(CPU)" != "IA64" && "$(CPU)" != "ARM" - $O\7zCrcT8U.obj \ - $O\7zCrcT8.obj \ -!ELSE - $O\7zCrc.obj \ -!ENDIF diff --git a/modules/lib7z/LZMASDK/CPP/7zip/Guid.txt b/modules/lib7z/LZMASDK/CPP/7zip/Guid.txt deleted file mode 100644 index 9f4fb2e8f9d4..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/Guid.txt +++ /dev/null @@ -1,164 +0,0 @@ -{23170F69-40C1-278A-0000-00yy00xx0000} - -00 IProgress.h - - 05 IProgress - -01 IFolderArchive.h - - 05 IArchiveFolder - // 06 IInFolderArchive // old - 07 IFileExtractCallback.h::IFolderArchiveExtractCallback - 0A IOutFolderArchive - 0B IFolderArchiveUpdateCallback - 0Ñ Agent.h::IArchiveFolderInternal - 0D IInFolderArchive - -03 IStream.h - - 01 ISequentialInStream - 02 ISequentialOutStream - 03 IInStream - 04 IOutStream - 06 IStreamGetSize - 07 IOutStreamFlush - - -04 ICoder.h - - 04 ICompressProgressInfo - 05 ICompressCoder - 18 ICompressCoder2 - 20 ICompressSetCoderProperties - 21 ICompressSetDecoderProperties // - 22 ICompressSetDecoderProperties2 - 23 ICompressWriteCoderProperties - 24 ICompressGetInStreamProcessedSize - 25 ICompressSetCoderMt - 30 ICompressGetSubStreamSize - 31 ICompressSetInStream - 32 ICompressSetOutStream - 33 ICompressSetInStreamSize - 34 ICompressSetOutStreamSize - 40 ICompressFilter - 60 ICompressCodecsInfo - 61 ISetCompressCodecsInfo - 80 ICryptoProperties - 88 ICryptoResetSalt - 8C ICryptoResetInitVector - 90 ICryptoSetPassword - A0 ICryptoSetCRC - - -05 IPassword.h - - 10 ICryptoGetTextPassword - 11 ICryptoGetTextPassword2 - - -06 IArchive.h - - 03 ISetProperties - - 10 IArchiveOpenCallback - 20 IArchiveExtractCallback - 30 IArchiveOpenVolumeCallback - 40 IInArchiveGetStream - 50 IArchiveOpenSetSubArchiveName - 60 IInArchive - 61 IArchiveOpenSeq - - 80 IArchiveUpdateCallback - 82 IArchiveUpdateCallback2 - A0 IOutArchive - - - -08 IFolder.h - - 00 IFolderFolder - 01 IEnumProperties - 02 IFolderGetTypeID - 03 IFolderGetPath - 04 IFolderWasChanged - 05 // IFolderReload - 06 IFolderOperations - 07 IFolderGetSystemIconIndex - 08 IFolderGetItemFullSize - 09 IFolderClone - 0A IFolderSetFlatMode - 0B IFolderOperationsExtractCallback - 0C IFolderArchiveProperties - 0D IGetFolderArchiveProperties - 0E IFolderProperties - - -09 IFolder.h :: FOLDER_MANAGER_INTERFACE - - 00 - 03 // old IFolderManager - 04 IFolderManager - - - ------------------- - - -{23170F69-40C1-278D-0000-000100010000} PluginInterface::IInitContextMenu -{23170F69-40C1-278D-0000-000100020100} PluginInterface::IPluginOptionsCallback -{23170F69-40C1-278D-0000-000100020000} PluginInterface::IPluginOptions - - -Handler GUIDs: - -{23170F69-40C1-278A-1000-000110xx0000} - - 01 Zip - 02 BZip2 - 03 Rar - 04 Arj - 05 Z - 06 Lzh - 07 7z - 08 Cab - 09 Nsis - 0A lzma - 0B lzma86 - 0C xz - - D5 Mslz - D6 Flv - D7 Swf - D8 Swfc - D9 Ntfs - DA Fat - DB Mbr - DC Vhd - DD Pe - DE Elf - DF Mach-O - E0 Udf - E1 Xar - E2 Mub - E3 Hfs - E4 Dmg - E5 Compound - E6 Wim - E7 Iso - E8 Bkf - E9 Chm - EA Split - EB Rpm - EC Deb - ED Cpio - EE Tar - EF GZip - -{23170F69-40C1-278A-1000-000100030000} CAgentArchiveHandle -{23170F69-40C1-278A-1000-000100020000} ContextMenu.h::CZipContextMenu - -{23170F69-40C1-278B- old codecs clsids - -{23170F69-40C1-278D-1000-000100020000} OptionsDialog.h::CLSID_CSevenZipOptions - -{23170F69-40C1-2790-id} Codec Decoders -{23170F69-40C1-2791-id} Codec Encoders diff --git a/modules/lib7z/LZMASDK/CPP/7zip/ICoder.h b/modules/lib7z/LZMASDK/CPP/7zip/ICoder.h deleted file mode 100644 index fac6bb0fd72f..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/ICoder.h +++ /dev/null @@ -1,179 +0,0 @@ -// ICoder.h - -#ifndef __ICODER_H -#define __ICODER_H - -#include "IStream.h" - -#define CODER_INTERFACE(i, x) DECL_INTERFACE(i, 4, x) - -CODER_INTERFACE(ICompressProgressInfo, 0x04) -{ - STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize) PURE; -}; - -CODER_INTERFACE(ICompressCoder, 0x05) -{ - STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, - const UInt64 *inSize, const UInt64 *outSize, - ICompressProgressInfo *progress) PURE; -}; - -CODER_INTERFACE(ICompressCoder2, 0x18) -{ - STDMETHOD(Code)(ISequentialInStream **inStreams, const UInt64 **inSizes, UInt32 numInStreams, - ISequentialOutStream **outStreams, const UInt64 **outSizes, UInt32 numOutStreams, - ICompressProgressInfo *progress) PURE; -}; - -namespace NCoderPropID -{ - enum EEnum - { - kDefaultProp = 0, - kDictionarySize, - kUsedMemorySize, - kOrder, - kBlockSize, - kPosStateBits, - kLitContextBits, - kLitPosBits, - kNumFastBytes, - kMatchFinder, - kMatchFinderCycles, - kNumPasses, - kAlgorithm, - kNumThreads, - kEndMarker - }; -} - -CODER_INTERFACE(ICompressSetCoderProperties, 0x20) -{ - STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps) PURE; -}; - -/* -CODER_INTERFACE(ICompressSetCoderProperties, 0x21) -{ - STDMETHOD(SetDecoderProperties)(ISequentialInStream *inStream) PURE; -}; -*/ - -CODER_INTERFACE(ICompressSetDecoderProperties2, 0x22) -{ - STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size) PURE; -}; - -CODER_INTERFACE(ICompressWriteCoderProperties, 0x23) -{ - STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream) PURE; -}; - -CODER_INTERFACE(ICompressGetInStreamProcessedSize, 0x24) -{ - STDMETHOD(GetInStreamProcessedSize)(UInt64 *value) PURE; -}; - -CODER_INTERFACE(ICompressSetCoderMt, 0x25) -{ - STDMETHOD(SetNumberOfThreads)(UInt32 numThreads) PURE; -}; - -CODER_INTERFACE(ICompressGetSubStreamSize, 0x30) -{ - STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value) PURE; -}; - -CODER_INTERFACE(ICompressSetInStream, 0x31) -{ - STDMETHOD(SetInStream)(ISequentialInStream *inStream) PURE; - STDMETHOD(ReleaseInStream)() PURE; -}; - -CODER_INTERFACE(ICompressSetOutStream, 0x32) -{ - STDMETHOD(SetOutStream)(ISequentialOutStream *outStream) PURE; - STDMETHOD(ReleaseOutStream)() PURE; -}; - -CODER_INTERFACE(ICompressSetInStreamSize, 0x33) -{ - STDMETHOD(SetInStreamSize)(const UInt64 *inSize) PURE; -}; - -CODER_INTERFACE(ICompressSetOutStreamSize, 0x34) -{ - STDMETHOD(SetOutStreamSize)(const UInt64 *outSize) PURE; -}; - -CODER_INTERFACE(ICompressFilter, 0x40) -{ - STDMETHOD(Init)() PURE; - STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size) PURE; - // Filter return outSize (UInt32) - // if (outSize <= size): Filter have converted outSize bytes - // if (outSize > size): Filter have not converted anything. - // and it needs at least outSize bytes to convert one block - // (it's for crypto block algorithms). -}; - -CODER_INTERFACE(ICompressCodecsInfo, 0x60) -{ - STDMETHOD(GetNumberOfMethods)(UInt32 *numMethods) PURE; - STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE; - STDMETHOD(CreateDecoder)(UInt32 index, const GUID *iid, void **coder) PURE; - STDMETHOD(CreateEncoder)(UInt32 index, const GUID *iid, void **coder) PURE; -}; -CODER_INTERFACE(ISetCompressCodecsInfo, 0x61) -{ - STDMETHOD(SetCompressCodecsInfo)(ICompressCodecsInfo *compressCodecsInfo) PURE; -}; - -CODER_INTERFACE(ICryptoProperties, 0x80) -{ - STDMETHOD(SetKey)(const Byte *data, UInt32 size) PURE; - STDMETHOD(SetInitVector)(const Byte *data, UInt32 size) PURE; -}; - -/* -CODER_INTERFACE(ICryptoResetSalt, 0x88) -{ - STDMETHOD(ResetSalt)() PURE; -}; -*/ - -CODER_INTERFACE(ICryptoResetInitVector, 0x8C) -{ - STDMETHOD(ResetInitVector)() PURE; -}; - -CODER_INTERFACE(ICryptoSetPassword, 0x90) -{ - STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size) PURE; -}; - -CODER_INTERFACE(ICryptoSetCRC, 0xA0) -{ - STDMETHOD(CryptoSetCRC)(UInt32 crc) PURE; -}; - -////////////////////// -// It's for DLL file -namespace NMethodPropID -{ - enum EEnum - { - kID, - kName, - kDecoder, - kEncoder, - kInStreams, - kOutStreams, - kDescription, - kDecoderIsAssigned, - kEncoderIsAssigned - }; -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/IDecl.h b/modules/lib7z/LZMASDK/CPP/7zip/IDecl.h deleted file mode 100644 index 768bbe710b02..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/IDecl.h +++ /dev/null @@ -1,15 +0,0 @@ -// IDecl.h - -#ifndef __IDECL_H -#define __IDECL_H - -#include "../Common/MyUnknown.h" - -#define DECL_INTERFACE_SUB(i, base, groupId, subId) \ -DEFINE_GUID(IID_ ## i, \ -0x23170F69, 0x40C1, 0x278A, 0, 0, 0, (groupId), 0, (subId), 0, 0); \ -struct i: public base - -#define DECL_INTERFACE(i, groupId, subId) DECL_INTERFACE_SUB(i, IUnknown, groupId, subId) - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/IPassword.h b/modules/lib7z/LZMASDK/CPP/7zip/IPassword.h deleted file mode 100644 index 5679d84cea17..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/IPassword.h +++ /dev/null @@ -1,24 +0,0 @@ -// IPassword.h - -#ifndef __IPASSWORD_H -#define __IPASSWORD_H - -#include "../Common/MyUnknown.h" -#include "../Common/Types.h" - -#include "IDecl.h" - -#define PASSWORD_INTERFACE(i, x) DECL_INTERFACE(i, 5, x) - -PASSWORD_INTERFACE(ICryptoGetTextPassword, 0x10) -{ - STDMETHOD(CryptoGetTextPassword)(BSTR *password) PURE; -}; - -PASSWORD_INTERFACE(ICryptoGetTextPassword2, 0x11) -{ - STDMETHOD(CryptoGetTextPassword2)(Int32 *passwordIsDefined, BSTR *password) PURE; -}; - -#endif - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/IProgress.h b/modules/lib7z/LZMASDK/CPP/7zip/IProgress.h deleted file mode 100644 index 09486baf3065..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/IProgress.h +++ /dev/null @@ -1,33 +0,0 @@ -// Interface/IProgress.h - -#ifndef __IPROGRESS_H -#define __IPROGRESS_H - -#include "../Common/MyUnknown.h" -#include "../Common/Types.h" - -#include "IDecl.h" - -#define INTERFACE_IProgress(x) \ - STDMETHOD(SetTotal)(UInt64 total) x; \ - STDMETHOD(SetCompleted)(const UInt64 *completeValue) x; \ - -DECL_INTERFACE(IProgress, 0, 5) -{ - INTERFACE_IProgress(PURE) -}; - -/* -// {23170F69-40C1-278A-0000-000000050002} -DEFINE_GUID(IID_IProgress2, -0x23170F69, 0x40C1, 0x278A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x02); -MIDL_INTERFACE("23170F69-40C1-278A-0000-000000050002") -IProgress2: public IUnknown -{ -public: - STDMETHOD(SetTotal)(const UInt64 *total) PURE; - STDMETHOD(SetCompleted)(const UInt64 *completeValue) PURE; -}; -*/ - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/IStream.h b/modules/lib7z/LZMASDK/CPP/7zip/IStream.h deleted file mode 100644 index d5ed723feac3..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/IStream.h +++ /dev/null @@ -1,58 +0,0 @@ -// IStream.h - -#ifndef __ISTREAM_H -#define __ISTREAM_H - -#include "../Common/MyUnknown.h" -#include "../Common/Types.h" - -#include "IDecl.h" - -#define STREAM_INTERFACE_SUB(i, base, x) DECL_INTERFACE_SUB(i, base, 3, x) -#define STREAM_INTERFACE(i, x) STREAM_INTERFACE_SUB(i, IUnknown, x) - -STREAM_INTERFACE(ISequentialInStream, 0x01) -{ - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize) PURE; - /* - Out: if size != 0, return_value = S_OK and (*processedSize == 0), - then there are no more bytes in stream. - if (size > 0) && there are bytes in stream, - this function must read at least 1 byte. - This function is allowed to read less than number of remaining bytes in stream. - You must call Read function in loop, if you need exact amount of data - */ -}; - -STREAM_INTERFACE(ISequentialOutStream, 0x02) -{ - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize) PURE; - /* - if (size > 0) this function must write at least 1 byte. - This function is allowed to write less than "size". - You must call Write function in loop, if you need to write exact amount of data - */ -}; - -STREAM_INTERFACE_SUB(IInStream, ISequentialInStream, 0x03) -{ - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) PURE; -}; - -STREAM_INTERFACE_SUB(IOutStream, ISequentialOutStream, 0x04) -{ - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) PURE; - STDMETHOD(SetSize)(Int64 newSize) PURE; -}; - -STREAM_INTERFACE(IStreamGetSize, 0x06) -{ - STDMETHOD(GetSize)(UInt64 *size) PURE; -}; - -STREAM_INTERFACE(IOutStreamFlush, 0x07) -{ - STDMETHOD(Flush)() PURE; -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/MyVersion.h b/modules/lib7z/LZMASDK/CPP/7zip/MyVersion.h deleted file mode 100644 index 7ff2a52c20c9..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/MyVersion.h +++ /dev/null @@ -1,8 +0,0 @@ -#define MY_VER_MAJOR 9 -#define MY_VER_MINOR 07 -#define MY_VER_BUILD 0 -#define MY_VERSION "9.07 beta" -#define MY_7ZIP_VERSION "7-Zip 9.07 beta" -#define MY_DATE "2009-08-29" -#define MY_COPYRIGHT "Copyright (c) 1999-2009 Igor Pavlov" -#define MY_VERSION_COPYRIGHT_DATE MY_VERSION " " MY_COPYRIGHT " " MY_DATE diff --git a/modules/lib7z/LZMASDK/CPP/7zip/MyVersionInfo.rc b/modules/lib7z/LZMASDK/CPP/7zip/MyVersionInfo.rc deleted file mode 100644 index 84e4ac3207c9..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/MyVersionInfo.rc +++ /dev/null @@ -1,52 +0,0 @@ -#define MY_VS_FFI_FILEFLAGSMASK 0x0000003FL -#define MY_VOS_NT_WINDOWS32 0x00040004L -#define MY_VOS_CE_WINDOWS32 0x00050004L - -#define MY_VFT_APP 0x00000001L -#define MY_VFT_DLL 0x00000002L - -// #include -#include "MyVersion.h" - -#define MY_VER MY_VER_MAJOR,MY_VER_MINOR,MY_VER_BUILD,0 - -#ifdef DEBUG -#define DBG_FL VS_FF_DEBUG -#else -#define DBG_FL 0 -#endif - -#define MY_VERSION_INFO(fileType, descr, intName, origName) \ -LANGUAGE 9, 1 \ -1 VERSIONINFO \ - FILEVERSION MY_VER \ - PRODUCTVERSION MY_VER \ - FILEFLAGSMASK MY_VS_FFI_FILEFLAGSMASK \ - FILEFLAGS DBG_FL \ - FILEOS MY_VOS_NT_WINDOWS32 \ - FILETYPE fileType \ - FILESUBTYPE 0x0L \ -BEGIN \ - BLOCK "StringFileInfo" \ - BEGIN \ - BLOCK "040904b0" \ - BEGIN \ - VALUE "CompanyName", "Igor Pavlov" \ - VALUE "FileDescription", descr \ - VALUE "FileVersion", MY_VERSION \ - VALUE "InternalName", intName \ - VALUE "LegalCopyright", MY_COPYRIGHT \ - VALUE "OriginalFilename", origName \ - VALUE "ProductName", "7-Zip" \ - VALUE "ProductVersion", MY_VERSION \ - END \ - END \ - BLOCK "VarFileInfo" \ - BEGIN \ - VALUE "Translation", 0x409, 1200 \ - END \ -END - -#define MY_VERSION_INFO_APP(descr, intName) MY_VERSION_INFO(MY_VFT_APP, descr, intName, intName ".exe") - -#define MY_VERSION_INFO_DLL(descr, intName) MY_VERSION_INFO(MY_VFT_DLL, descr, intName, intName ".dll") diff --git a/modules/lib7z/LZMASDK/CPP/7zip/PropID.h b/modules/lib7z/LZMASDK/CPP/7zip/PropID.h deleted file mode 100644 index 35c8933fa075..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/PropID.h +++ /dev/null @@ -1,75 +0,0 @@ -// PropID.h - -#ifndef __7ZIP_PROPID_H -#define __7ZIP_PROPID_H - -enum -{ - kpidNoProperty = 0, - kpidMainSubfile = 1, - kpidHandlerItemIndex = 2, - kpidPath, - kpidName, - kpidExtension, - kpidIsDir, - kpidSize, - kpidPackSize, - kpidAttrib, - kpidCTime, - kpidATime, - kpidMTime, - kpidSolid, - kpidCommented, - kpidEncrypted, - kpidSplitBefore, - kpidSplitAfter, - kpidDictionarySize, - kpidCRC, - kpidType, - kpidIsAnti, - kpidMethod, - kpidHostOS, - kpidFileSystem, - kpidUser, - kpidGroup, - kpidBlock, - kpidComment, - kpidPosition, - kpidPrefix, - kpidNumSubDirs, - kpidNumSubFiles, - kpidUnpackVer, - kpidVolume, - kpidIsVolume, - kpidOffset, - kpidLinks, - kpidNumBlocks, - kpidNumVolumes, - kpidTimeType, - kpidBit64, - kpidBigEndian, - kpidCpu, - kpidPhySize, - kpidHeadersSize, - kpidChecksum, - kpidCharacts, - kpidVa, - kpidId, - kpidShortName, - kpidCreatorApp, - kpidSectorSize, - kpidPosixAttrib, - kpidLink, - - kpidTotalSize = 0x1100, - kpidFreeSpace, - kpidClusterSize, - kpidVolumeName, - - kpidLocalName = 0x1200, - kpidProvider, - - kpidUserDefined = 0x10000 -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/SubBuild.mak b/modules/lib7z/LZMASDK/CPP/7zip/SubBuild.mak deleted file mode 100644 index 0c49d3b7125d..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/SubBuild.mak +++ /dev/null @@ -1,3 +0,0 @@ - cd $(@D) - $(MAKE) -nologo $(TARGETS) - cd .. diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/Client7z.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/Client7z.cpp deleted file mode 100644 index 7001fe893f56..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/Client7z.cpp +++ /dev/null @@ -1,871 +0,0 @@ -// Client7z.cpp - -#include "StdAfx.h" - -#include "Common/IntToString.h" -#include "Common/MyInitGuid.h" -#include "Common/StringConvert.h" - -#include "Windows/DLL.h" -#include "Windows/FileDir.h" -#include "Windows/FileFind.h" -#include "Windows/FileName.h" -#include "Windows/NtCheck.h" -#include "Windows/PropVariant.h" -#include "Windows/PropVariantConversions.h" - -#include "../../Common/FileStreams.h" - -#include "../../Archive/IArchive.h" - -#include "../../IPassword.h" -#include "../../MyVersion.h" - -// use another CLSIDs, if you want to support other formats (zip, rar, ...). -// {23170F69-40C1-278A-1000-000110070000} -DEFINE_GUID(CLSID_CFormat7z, - 0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x07, 0x00, 0x00); - -using namespace NWindows; - -#define kDllName "7z.dll" - -static const char *kCopyrightString = MY_7ZIP_VERSION -" (" kDllName " client) " -MY_COPYRIGHT " " MY_DATE; - -static const char *kHelpString = -"Usage: Client7z.exe [a | l | x ] archive.7z [fileName ...]\n" -"Examples:\n" -" Client7z.exe a archive.7z f1.txt f2.txt : compress two files to archive.7z\n" -" Client7z.exe l archive.7z : List contents of archive.7z\n" -" Client7z.exe x archive.7z : eXtract files from archive.7z\n"; - - -typedef UINT32 (WINAPI * CreateObjectFunc)( - const GUID *clsID, - const GUID *interfaceID, - void **outObject); - - -void PrintString(const UString &s) -{ - printf("%s", (LPCSTR)GetOemString(s)); -} - -void PrintString(const AString &s) -{ - printf("%s", (LPCSTR)s); -} - -void PrintNewLine() -{ - PrintString("\n"); -} - -void PrintStringLn(const AString &s) -{ - PrintString(s); - PrintNewLine(); -} - -void PrintError(const AString &s) -{ - PrintNewLine(); - PrintString(s); - PrintNewLine(); -} - -static HRESULT IsArchiveItemProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result) -{ - NCOM::CPropVariant prop; - RINOK(archive->GetProperty(index, propID, &prop)); - if (prop.vt == VT_BOOL) - result = VARIANT_BOOLToBool(prop.boolVal); - else if (prop.vt == VT_EMPTY) - result = false; - else - return E_FAIL; - return S_OK; -} - -static HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result) -{ - return IsArchiveItemProp(archive, index, kpidIsDir, result); -} - - -static const wchar_t *kEmptyFileAlias = L"[Content]"; - - -////////////////////////////////////////////////////////////// -// Archive Open callback class - - -class CArchiveOpenCallback: - public IArchiveOpenCallback, - public ICryptoGetTextPassword, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP1(ICryptoGetTextPassword) - - STDMETHOD(SetTotal)(const UInt64 *files, const UInt64 *bytes); - STDMETHOD(SetCompleted)(const UInt64 *files, const UInt64 *bytes); - - STDMETHOD(CryptoGetTextPassword)(BSTR *password); - - bool PasswordIsDefined; - UString Password; - - CArchiveOpenCallback() : PasswordIsDefined(false) {} -}; - -STDMETHODIMP CArchiveOpenCallback::SetTotal(const UInt64 * /* files */, const UInt64 * /* bytes */) -{ - return S_OK; -} - -STDMETHODIMP CArchiveOpenCallback::SetCompleted(const UInt64 * /* files */, const UInt64 * /* bytes */) -{ - return S_OK; -} - -STDMETHODIMP CArchiveOpenCallback::CryptoGetTextPassword(BSTR *password) -{ - if (!PasswordIsDefined) - { - // You can ask real password here from user - // Password = GetPassword(OutStream); - // PasswordIsDefined = true; - PrintError("Password is not defined"); - return E_ABORT; - } - return StringToBstr(Password, password); -} - - -////////////////////////////////////////////////////////////// -// Archive Extracting callback class - -static const wchar_t *kCantDeleteOutputFile = L"ERROR: Can not delete output file "; - -static const char *kTestingString = "Testing "; -static const char *kExtractingString = "Extracting "; -static const char *kSkippingString = "Skipping "; - -static const char *kUnsupportedMethod = "Unsupported Method"; -static const char *kCRCFailed = "CRC Failed"; -static const char *kDataError = "Data Error"; -static const char *kUnknownError = "Unknown Error"; - -class CArchiveExtractCallback: - public IArchiveExtractCallback, - public ICryptoGetTextPassword, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP1(ICryptoGetTextPassword) - - // IProgress - STDMETHOD(SetTotal)(UInt64 size); - STDMETHOD(SetCompleted)(const UInt64 *completeValue); - - // IArchiveExtractCallback - STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode); - STDMETHOD(PrepareOperation)(Int32 askExtractMode); - STDMETHOD(SetOperationResult)(Int32 resultEOperationResult); - - // ICryptoGetTextPassword - STDMETHOD(CryptoGetTextPassword)(BSTR *aPassword); - -private: - CMyComPtr _archiveHandler; - UString _directoryPath; // Output directory - UString _filePath; // name inside arcvhive - UString _diskFilePath; // full path to file on disk - bool _extractMode; - struct CProcessedFileInfo - { - FILETIME MTime; - UInt32 Attrib; - bool isDir; - bool AttribDefined; - bool MTimeDefined; - } _processedFileInfo; - - COutFileStream *_outFileStreamSpec; - CMyComPtr _outFileStream; - -public: - void Init(IInArchive *archiveHandler, const UString &directoryPath); - - UInt64 NumErrors; - bool PasswordIsDefined; - UString Password; - - CArchiveExtractCallback() : PasswordIsDefined(false) {} -}; - -void CArchiveExtractCallback::Init(IInArchive *archiveHandler, const UString &directoryPath) -{ - NumErrors = 0; - _archiveHandler = archiveHandler; - _directoryPath = directoryPath; - NFile::NName::NormalizeDirPathPrefix(_directoryPath); -} - -STDMETHODIMP CArchiveExtractCallback::SetTotal(UInt64 /* size */) -{ - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::SetCompleted(const UInt64 * /* completeValue */) -{ - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, - ISequentialOutStream **outStream, Int32 askExtractMode) -{ - *outStream = 0; - _outFileStream.Release(); - - { - // Get Name - NCOM::CPropVariant prop; - RINOK(_archiveHandler->GetProperty(index, kpidPath, &prop)); - - UString fullPath; - if (prop.vt == VT_EMPTY) - fullPath = kEmptyFileAlias; - else - { - if (prop.vt != VT_BSTR) - return E_FAIL; - fullPath = prop.bstrVal; - } - _filePath = fullPath; - } - - if (askExtractMode != NArchive::NExtract::NAskMode::kExtract) - return S_OK; - - { - // Get Attrib - NCOM::CPropVariant prop; - RINOK(_archiveHandler->GetProperty(index, kpidAttrib, &prop)); - if (prop.vt == VT_EMPTY) - { - _processedFileInfo.Attrib = 0; - _processedFileInfo.AttribDefined = false; - } - else - { - if (prop.vt != VT_UI4) - return E_FAIL; - _processedFileInfo.Attrib = prop.ulVal; - _processedFileInfo.AttribDefined = true; - } - } - - RINOK(IsArchiveItemFolder(_archiveHandler, index, _processedFileInfo.isDir)); - - { - // Get Modified Time - NCOM::CPropVariant prop; - RINOK(_archiveHandler->GetProperty(index, kpidMTime, &prop)); - _processedFileInfo.MTimeDefined = false; - switch(prop.vt) - { - case VT_EMPTY: - // _processedFileInfo.MTime = _utcMTimeDefault; - break; - case VT_FILETIME: - _processedFileInfo.MTime = prop.filetime; - _processedFileInfo.MTimeDefined = true; - break; - default: - return E_FAIL; - } - - } - { - // Get Size - NCOM::CPropVariant prop; - RINOK(_archiveHandler->GetProperty(index, kpidSize, &prop)); - bool newFileSizeDefined = (prop.vt != VT_EMPTY); - UInt64 newFileSize; - if (newFileSizeDefined) - newFileSize = ConvertPropVariantToUInt64(prop); - } - - - { - // Create folders for file - int slashPos = _filePath.ReverseFind(WCHAR_PATH_SEPARATOR); - if (slashPos >= 0) - NFile::NDirectory::CreateComplexDirectory(_directoryPath + _filePath.Left(slashPos)); - } - - UString fullProcessedPath = _directoryPath + _filePath; - _diskFilePath = fullProcessedPath; - - if (_processedFileInfo.isDir) - { - NFile::NDirectory::CreateComplexDirectory(fullProcessedPath); - } - else - { - NFile::NFind::CFileInfoW fi; - if (fi.Find(fullProcessedPath)) - { - if (!NFile::NDirectory::DeleteFileAlways(fullProcessedPath)) - { - PrintString(UString(kCantDeleteOutputFile) + fullProcessedPath); - return E_ABORT; - } - } - - _outFileStreamSpec = new COutFileStream; - CMyComPtr outStreamLoc(_outFileStreamSpec); - if (!_outFileStreamSpec->Open(fullProcessedPath, CREATE_ALWAYS)) - { - PrintString((UString)L"can not open output file " + fullProcessedPath); - return E_ABORT; - } - _outFileStream = outStreamLoc; - *outStream = outStreamLoc.Detach(); - } - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::PrepareOperation(Int32 askExtractMode) -{ - _extractMode = false; - switch (askExtractMode) - { - case NArchive::NExtract::NAskMode::kExtract: _extractMode = true; break; - }; - switch (askExtractMode) - { - case NArchive::NExtract::NAskMode::kExtract: PrintString(kExtractingString); break; - case NArchive::NExtract::NAskMode::kTest: PrintString(kTestingString); break; - case NArchive::NExtract::NAskMode::kSkip: PrintString(kSkippingString); break; - }; - PrintString(_filePath); - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 operationResult) -{ - switch(operationResult) - { - case NArchive::NExtract::NOperationResult::kOK: - break; - default: - { - NumErrors++; - PrintString(" "); - switch(operationResult) - { - case NArchive::NExtract::NOperationResult::kUnSupportedMethod: - PrintString(kUnsupportedMethod); - break; - case NArchive::NExtract::NOperationResult::kCRCError: - PrintString(kCRCFailed); - break; - case NArchive::NExtract::NOperationResult::kDataError: - PrintString(kDataError); - break; - default: - PrintString(kUnknownError); - } - } - } - - if (_outFileStream != NULL) - { - if (_processedFileInfo.MTimeDefined) - _outFileStreamSpec->SetMTime(&_processedFileInfo.MTime); - RINOK(_outFileStreamSpec->Close()); - } - _outFileStream.Release(); - if (_extractMode && _processedFileInfo.AttribDefined) - NFile::NDirectory::MySetFileAttributes(_diskFilePath, _processedFileInfo.Attrib); - PrintNewLine(); - return S_OK; -} - - -STDMETHODIMP CArchiveExtractCallback::CryptoGetTextPassword(BSTR *password) -{ - if (!PasswordIsDefined) - { - // You can ask real password here from user - // Password = GetPassword(OutStream); - // PasswordIsDefined = true; - PrintError("Password is not defined"); - return E_ABORT; - } - return StringToBstr(Password, password); -} - - - -////////////////////////////////////////////////////////////// -// Archive Creating callback class - -struct CDirItem -{ - UInt64 Size; - FILETIME CTime; - FILETIME ATime; - FILETIME MTime; - UString Name; - UString FullPath; - UInt32 Attrib; - - bool isDir() const { return (Attrib & FILE_ATTRIBUTE_DIRECTORY) != 0 ; } -}; - -class CArchiveUpdateCallback: - public IArchiveUpdateCallback2, - public ICryptoGetTextPassword2, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP2(IArchiveUpdateCallback2, ICryptoGetTextPassword2) - - // IProgress - STDMETHOD(SetTotal)(UInt64 size); - STDMETHOD(SetCompleted)(const UInt64 *completeValue); - - // IUpdateCallback2 - STDMETHOD(EnumProperties)(IEnumSTATPROPSTG **enumerator); - STDMETHOD(GetUpdateItemInfo)(UInt32 index, - Int32 *newData, Int32 *newProperties, UInt32 *indexInArchive); - STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value); - STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **inStream); - STDMETHOD(SetOperationResult)(Int32 operationResult); - STDMETHOD(GetVolumeSize)(UInt32 index, UInt64 *size); - STDMETHOD(GetVolumeStream)(UInt32 index, ISequentialOutStream **volumeStream); - - STDMETHOD(CryptoGetTextPassword2)(Int32 *passwordIsDefined, BSTR *password); - -public: - CRecordVector VolumesSizes; - UString VolName; - UString VolExt; - - UString DirPrefix; - const CObjectVector *DirItems; - - bool PasswordIsDefined; - UString Password; - bool AskPassword; - - bool m_NeedBeClosed; - - UStringVector FailedFiles; - CRecordVector FailedCodes; - - CArchiveUpdateCallback(): PasswordIsDefined(false), AskPassword(false), DirItems(0) {}; - - ~CArchiveUpdateCallback() { Finilize(); } - HRESULT Finilize(); - - void Init(const CObjectVector *dirItems) - { - DirItems = dirItems; - m_NeedBeClosed = false; - FailedFiles.Clear(); - FailedCodes.Clear(); - } -}; - -STDMETHODIMP CArchiveUpdateCallback::SetTotal(UInt64 /* size */) -{ - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::SetCompleted(const UInt64 * /* completeValue */) -{ - return S_OK; -} - - -STDMETHODIMP CArchiveUpdateCallback::EnumProperties(IEnumSTATPROPSTG ** /* enumerator */) -{ - return E_NOTIMPL; -} - -STDMETHODIMP CArchiveUpdateCallback::GetUpdateItemInfo(UInt32 /* index */, - Int32 *newData, Int32 *newProperties, UInt32 *indexInArchive) -{ - if (newData != NULL) - *newData = BoolToInt(true); - if (newProperties != NULL) - *newProperties = BoolToInt(true); - if (indexInArchive != NULL) - *indexInArchive = (UInt32)-1; - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value) -{ - NWindows::NCOM::CPropVariant prop; - - if (propID == kpidIsAnti) - { - prop = false; - prop.Detach(value); - return S_OK; - } - - { - const CDirItem &dirItem = (*DirItems)[index]; - switch(propID) - { - case kpidPath: prop = dirItem.Name; break; - case kpidIsDir: prop = dirItem.isDir(); break; - case kpidSize: prop = dirItem.Size; break; - case kpidAttrib: prop = dirItem.Attrib; break; - case kpidCTime: prop = dirItem.CTime; break; - case kpidATime: prop = dirItem.ATime; break; - case kpidMTime: prop = dirItem.MTime; break; - } - } - prop.Detach(value); - return S_OK; -} - -HRESULT CArchiveUpdateCallback::Finilize() -{ - if (m_NeedBeClosed) - { - PrintNewLine(); - m_NeedBeClosed = false; - } - return S_OK; -} - -static void GetStream2(const wchar_t *name) -{ - PrintString("Compressing "); - if (name[0] == 0) - name = kEmptyFileAlias; - PrintString(name); -} - -STDMETHODIMP CArchiveUpdateCallback::GetStream(UInt32 index, ISequentialInStream **inStream) -{ - RINOK(Finilize()); - - const CDirItem &dirItem = (*DirItems)[index]; - GetStream2(dirItem.Name); - - if (dirItem.isDir()) - return S_OK; - - { - CInFileStream *inStreamSpec = new CInFileStream; - CMyComPtr inStreamLoc(inStreamSpec); - UString path = DirPrefix + dirItem.FullPath; - if (!inStreamSpec->Open(path)) - { - DWORD sysError = ::GetLastError(); - FailedCodes.Add(sysError); - FailedFiles.Add(path); - // if (systemError == ERROR_SHARING_VIOLATION) - { - PrintNewLine(); - PrintError("WARNING: can't open file"); - // PrintString(NError::MyFormatMessageW(systemError)); - return S_FALSE; - } - // return sysError; - } - *inStream = inStreamLoc.Detach(); - } - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::SetOperationResult(Int32 /* operationResult */) -{ - m_NeedBeClosed = true; - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::GetVolumeSize(UInt32 index, UInt64 *size) -{ - if (VolumesSizes.Size() == 0) - return S_FALSE; - if (index >= (UInt32)VolumesSizes.Size()) - index = VolumesSizes.Size() - 1; - *size = VolumesSizes[index]; - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::GetVolumeStream(UInt32 index, ISequentialOutStream **volumeStream) -{ - wchar_t temp[16]; - ConvertUInt32ToString(index + 1, temp); - UString res = temp; - while (res.Length() < 2) - res = UString(L'0') + res; - UString fileName = VolName; - fileName += L'.'; - fileName += res; - fileName += VolExt; - COutFileStream *streamSpec = new COutFileStream; - CMyComPtr streamLoc(streamSpec); - if (!streamSpec->Create(fileName, false)) - return ::GetLastError(); - *volumeStream = streamLoc.Detach(); - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) -{ - if (!PasswordIsDefined) - { - if (AskPassword) - { - // You can ask real password here from user - // Password = GetPassword(OutStream); - // PasswordIsDefined = true; - PrintError("Password is not defined"); - return E_ABORT; - } - } - *passwordIsDefined = BoolToInt(PasswordIsDefined); - return StringToBstr(Password, password); -} - - - -////////////////////////////////////////////////////////////////////////// -// Main function - -#define NT_CHECK_FAIL_ACTION PrintError("Unsupported Windows version"); return 1; - -int MY_CDECL main(int numArgs, const char *args[]) -{ - NT_CHECK - - PrintStringLn(kCopyrightString); - - if (numArgs < 3) - { - PrintStringLn(kHelpString); - return 1; - } - NWindows::NDLL::CLibrary lib; - if (!lib.Load(TEXT(kDllName))) - { - PrintError("Can not load 7-zip library"); - return 1; - } - CreateObjectFunc createObjectFunc = (CreateObjectFunc)lib.GetProc("CreateObject"); - if (createObjectFunc == 0) - { - PrintError("Can not get CreateObject"); - return 1; - } - - char c; - { - AString command = args[1]; - if (command.Length() != 1) - { - PrintError("incorrect command"); - return 1; - } - c = MyCharLower(command[0]); - } - UString archiveName = GetUnicodeString(args[2]); - if (c == 'a') - { - // create archive command - if (numArgs < 4) - { - PrintStringLn(kHelpString); - return 1; - } - CObjectVector dirItems; - int i; - for (i = 3; i < numArgs; i++) - { - CDirItem di; - UString name = GetUnicodeString(args[i]); - - NFile::NFind::CFileInfoW fi; - if (!fi.Find(name)) - { - PrintString(UString(L"Can't find file") + name); - return 1; - } - - di.Attrib = fi.Attrib; - di.Size = fi.Size; - di.CTime = fi.CTime; - di.ATime = fi.ATime; - di.MTime = fi.MTime; - di.Name = name; - di.FullPath = name; - dirItems.Add(di); - } - COutFileStream *outFileStreamSpec = new COutFileStream; - CMyComPtr outFileStream = outFileStreamSpec; - if (!outFileStreamSpec->Create(archiveName, false)) - { - PrintError("can't create archive file"); - return 1; - } - - CMyComPtr outArchive; - if (createObjectFunc(&CLSID_CFormat7z, &IID_IOutArchive, (void **)&outArchive) != S_OK) - { - PrintError("Can not get class object"); - return 1; - } - - CArchiveUpdateCallback *updateCallbackSpec = new CArchiveUpdateCallback; - CMyComPtr updateCallback(updateCallbackSpec); - updateCallbackSpec->Init(&dirItems); - // updateCallbackSpec->PasswordIsDefined = true; - // updateCallbackSpec->Password = L"1"; - - /* - { - const wchar_t *names[] = - { - L"s", - L"x" - }; - const int kNumProps = sizeof(names) / sizeof(names[0]); - NWindows::NCOM::CPropVariant values[kNumProps] = - { - false, // solid mode OFF - (UInt32)9 // compression level = 9 - ultra - }; - CMyComPtr setProperties; - outArchive->QueryInterface(IID_ISetProperties, (void **)&setProperties); - if (!setProperties) - { - PrintError("ISetProperties unsupported"); - return 1; - } - RINOK(setProperties->SetProperties(names, values, kNumProps)); - } - */ - - HRESULT result = outArchive->UpdateItems(outFileStream, dirItems.Size(), updateCallback); - updateCallbackSpec->Finilize(); - if (result != S_OK) - { - PrintError("Update Error"); - return 1; - } - for (i = 0; i < updateCallbackSpec->FailedFiles.Size(); i++) - { - PrintNewLine(); - PrintString((UString)L"Error for file: " + updateCallbackSpec->FailedFiles[i]); - } - if (updateCallbackSpec->FailedFiles.Size() != 0) - return 1; - } - else - { - if (numArgs != 3) - { - PrintStringLn(kHelpString); - return 1; - } - - bool listCommand; - if (c == 'l') - listCommand = true; - else if (c == 'x') - listCommand = false; - else - { - PrintError("incorrect command"); - return 1; - } - - CMyComPtr archive; - if (createObjectFunc(&CLSID_CFormat7z, &IID_IInArchive, (void **)&archive) != S_OK) - { - PrintError("Can not get class object"); - return 1; - } - - CInFileStream *fileSpec = new CInFileStream; - CMyComPtr file = fileSpec; - - if (!fileSpec->Open(archiveName)) - { - PrintError("Can not open archive file"); - return 1; - } - - { - CArchiveOpenCallback *openCallbackSpec = new CArchiveOpenCallback; - CMyComPtr openCallback(openCallbackSpec); - openCallbackSpec->PasswordIsDefined = false; - // openCallbackSpec->PasswordIsDefined = true; - // openCallbackSpec->Password = L"1"; - - if (archive->Open(file, 0, openCallback) != S_OK) - { - PrintError("Can not open archive"); - return 1; - } - } - - if (listCommand) - { - // List command - UInt32 numItems = 0; - archive->GetNumberOfItems(&numItems); - for (UInt32 i = 0; i < numItems; i++) - { - { - // Get uncompressed size of file - NWindows::NCOM::CPropVariant prop; - archive->GetProperty(i, kpidSize, &prop); - UString s = ConvertPropVariantToString(prop); - PrintString(s); - PrintString(" "); - } - { - // Get name of file - NWindows::NCOM::CPropVariant prop; - archive->GetProperty(i, kpidPath, &prop); - UString s = ConvertPropVariantToString(prop); - PrintString(s); - } - PrintString("\n"); - } - } - else - { - // Extract command - CArchiveExtractCallback *extractCallbackSpec = new CArchiveExtractCallback; - CMyComPtr extractCallback(extractCallbackSpec); - extractCallbackSpec->Init(archive, L""); // second parameter is output folder path - extractCallbackSpec->PasswordIsDefined = false; - // extractCallbackSpec->PasswordIsDefined = true; - // extractCallbackSpec->Password = L"1"; - HRESULT result = archive->Extract(NULL, (UInt32)(Int32)(-1), false, extractCallback); - if (result != S_OK) - { - PrintError("Extract Error"); - return 1; - } - } - } - return 0; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/Client7z.dsp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/Client7z.dsp deleted file mode 100644 index 34eb42bd4575..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/Client7z.dsp +++ /dev/null @@ -1,226 +0,0 @@ -# Microsoft Developer Studio Project File - Name="Client7z" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=Client7z - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "Client7z.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "Client7z.mak" CFG="Client7z - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "Client7z - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "Client7z - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "Client7z - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\\" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "Client7z - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\\" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "Client7z - Win32 Release" -# Name "Client7z - Win32 Debug" -# Begin Group "Spec" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\StdAfx.cpp -# ADD CPP /Yc"stdafx.h" -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.h -# End Source File -# End Group -# Begin Group "Windows" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Windows\DLL.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\DLL.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileDir.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileDir.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileFind.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileFind.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileIO.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileIO.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileName.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileName.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariant.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariant.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariantConversions.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariantConversions.h -# End Source File -# End Group -# Begin Group "Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Common\IntToString.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\IntToString.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyString.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyString.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyVector.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyVector.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Wildcard.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Wildcard.h -# End Source File -# End Group -# Begin Group "7zip Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Common\FileStreams.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FileStreams.h -# End Source File -# End Group -# Begin Source File - -SOURCE=.\Client7z.cpp -# End Source File -# End Target -# End Project diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/Client7z.dsw b/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/Client7z.dsw deleted file mode 100644 index 4c2685118318..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/Client7z.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "Client7z"=.\Client7z.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/StdAfx.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/StdAfx.cpp deleted file mode 100644 index c6d3b1fa6231..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/StdAfx.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/StdAfx.h deleted file mode 100644 index 2edddf4abf03..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include -#include - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/makefile b/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/makefile deleted file mode 100644 index e3a8239e268c..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Client7z/makefile +++ /dev/null @@ -1,45 +0,0 @@ -PROG = 7z.exe -MY_CONSOLE = 1 -CFLAGS = $(CFLAGS) -I ../../../ - -CONSOLE_OBJS = \ - $O\Client7z.obj \ - -COMMON_OBJS = \ - $O\IntToString.obj \ - $O\NewHandler.obj \ - $O\MyString.obj \ - $O\StringConvert.obj \ - $O\StringToInt.obj \ - $O\MyVector.obj \ - $O\Wildcard.obj \ - -WIN_OBJS = \ - $O\DLL.obj \ - $O\FileDir.obj \ - $O\FileFind.obj \ - $O\FileIO.obj \ - $O\FileName.obj \ - $O\PropVariant.obj \ - $O\PropVariantConversions.obj \ - -7ZIP_COMMON_OBJS = \ - $O\FileStreams.obj \ - -OBJS = \ - $O\StdAfx.obj \ - $(CONSOLE_OBJS) \ - $(COMMON_OBJS) \ - $(WIN_OBJS) \ - $(7ZIP_COMMON_OBJS) \ - -!include "../../../Build.mak" - -$(CONSOLE_OBJS): $(*B).cpp - $(COMPL) -$(COMMON_OBJS): ../../../Common/$(*B).cpp - $(COMPL) -$(WIN_OBJS): ../../../Windows/$(*B).cpp - $(COMPL) -$(7ZIP_COMMON_OBJS): ../../Common/$(*B).cpp - $(COMPL) diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveCommandLine.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveCommandLine.cpp deleted file mode 100644 index fc36d43c3a1b..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveCommandLine.cpp +++ /dev/null @@ -1,1034 +0,0 @@ -// ArchiveCommandLine.cpp - -#include "StdAfx.h" - -#ifdef _WIN32 -#ifndef UNDER_CE -#include -#endif -#endif -#include - -#include "Common/ListFileUtils.h" -#include "Common/StringConvert.h" -#include "Common/StringToInt.h" - -#include "Windows/FileDir.h" -#include "Windows/FileName.h" -#ifdef _WIN32 -#include "Windows/FileMapping.h" -#include "Windows/Synchronization.h" -#endif - -#include "ArchiveCommandLine.h" -#include "EnumDirItems.h" -#include "SortUtils.h" -#include "Update.h" -#include "UpdateAction.h" - -extern bool g_CaseSensitive; - -#ifdef UNDER_CE - -#define MY_IS_TERMINAL(x) false; - -#else - -#if _MSC_VER >= 1400 -#define MY_isatty_fileno(x) _isatty(_fileno(x)) -#else -#define MY_isatty_fileno(x) isatty(fileno(x)) -#endif - -#define MY_IS_TERMINAL(x) (MY_isatty_fileno(x) != 0); - -#endif - -using namespace NCommandLineParser; -using namespace NWindows; -using namespace NFile; - -int g_CodePage = -1; - -namespace NKey { -enum Enum -{ - kHelp1 = 0, - kHelp2, - kHelp3, - kDisableHeaders, - kDisablePercents, - kArchiveType, - kYes, - #ifndef _NO_CRYPTO - kPassword, - #endif - kProperty, - kOutputDir, - kWorkingDir, - kInclude, - kExclude, - kArInclude, - kArExclude, - kNoArName, - kUpdate, - kVolume, - kRecursed, - kSfx, - kStdIn, - kStdOut, - kOverwrite, - kEmail, - kShowDialog, - kLargePages, - kListfileCharSet, - kConsoleCharSet, - kTechMode, - kShareForWrite, - kCaseSensitive, - kCalcCrc, -}; - -} - - -static const wchar_t kRecursedIDChar = 'R'; -static const wchar_t *kRecursedPostCharSet = L"0-"; - -namespace NRecursedPostCharIndex { - enum EEnum - { - kWildCardRecursionOnly = 0, - kNoRecursion = 1 - }; -} - -static const char kImmediateNameID = '!'; -static const char kMapNameID = '#'; -static const char kFileListID = '@'; - -static const char kSomeCludePostStringMinSize = 2; // at least <@|!>ame must be -static const char kSomeCludeAfterRecursedPostStringMinSize = 2; // at least <@|!>ame must be - -static const wchar_t *kOverwritePostCharSet = L"asut"; - -NExtract::NOverwriteMode::EEnum k_OverwriteModes[] = -{ - NExtract::NOverwriteMode::kWithoutPrompt, - NExtract::NOverwriteMode::kSkipExisting, - NExtract::NOverwriteMode::kAutoRename, - NExtract::NOverwriteMode::kAutoRenameExisting -}; - -static const CSwitchForm kSwitchForms[] = - { - { L"?", NSwitchType::kSimple, false }, - { L"H", NSwitchType::kSimple, false }, - { L"-HELP", NSwitchType::kSimple, false }, - { L"BA", NSwitchType::kSimple, false }, - { L"BD", NSwitchType::kSimple, false }, - { L"T", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"Y", NSwitchType::kSimple, false }, - #ifndef _NO_CRYPTO - { L"P", NSwitchType::kUnLimitedPostString, false, 0 }, - #endif - { L"M", NSwitchType::kUnLimitedPostString, true, 1 }, - { L"O", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"W", NSwitchType::kUnLimitedPostString, false, 0 }, - { L"I", NSwitchType::kUnLimitedPostString, true, kSomeCludePostStringMinSize}, - { L"X", NSwitchType::kUnLimitedPostString, true, kSomeCludePostStringMinSize}, - { L"AI", NSwitchType::kUnLimitedPostString, true, kSomeCludePostStringMinSize}, - { L"AX", NSwitchType::kUnLimitedPostString, true, kSomeCludePostStringMinSize}, - { L"AN", NSwitchType::kSimple, false }, - { L"U", NSwitchType::kUnLimitedPostString, true, 1}, - { L"V", NSwitchType::kUnLimitedPostString, true, 1}, - { L"R", NSwitchType::kPostChar, false, 0, 0, kRecursedPostCharSet }, - { L"SFX", NSwitchType::kUnLimitedPostString, false, 0 }, - { L"SI", NSwitchType::kUnLimitedPostString, false, 0 }, - { L"SO", NSwitchType::kSimple, false, 0 }, - { L"AO", NSwitchType::kPostChar, false, 1, 1, kOverwritePostCharSet}, - { L"SEML", NSwitchType::kUnLimitedPostString, false, 0}, - { L"AD", NSwitchType::kSimple, false }, - { L"SLP", NSwitchType::kUnLimitedPostString, false, 0}, - { L"SCS", NSwitchType::kUnLimitedPostString, false, 0}, - { L"SCC", NSwitchType::kUnLimitedPostString, false, 0}, - { L"SLT", NSwitchType::kSimple, false }, - { L"SSW", NSwitchType::kSimple, false }, - { L"SSC", NSwitchType::kPostChar, false, 0, 0, L"-" }, - { L"SCRC", NSwitchType::kSimple, false } - }; - -static const CCommandForm g_CommandForms[] = -{ - { L"A", false }, - { L"U", false }, - { L"D", false }, - { L"T", false }, - { L"E", false }, - { L"X", false }, - { L"L", false }, - { L"B", false }, - { L"I", false } -}; - -static const int kNumCommandForms = sizeof(g_CommandForms) / sizeof(g_CommandForms[0]); - -static const wchar_t *kUniversalWildcard = L"*"; -static const int kMinNonSwitchWords = 1; -static const int kCommandIndex = 0; - -// --------------------------- -// exception messages - -static const char *kUserErrorMessage = "Incorrect command line"; -static const char *kIncorrectListFile = "Incorrect item in listfile.\nCheck charset encoding and -scs switch."; -static const char *kIncorrectWildCardInListFile = "Incorrect wildcard in listfile"; -static const char *kIncorrectWildCardInCommandLine = "Incorrect wildcard in command line"; -static const char *kTerminalOutError = "I won't write compressed data to a terminal"; -static const char *kSameTerminalError = "I won't write data and program's messages to same terminal"; - -static void ThrowException(const char *errorMessage) -{ - throw CArchiveCommandLineException(errorMessage); -}; - -static void ThrowUserErrorException() -{ - ThrowException(kUserErrorMessage); -}; - -// --------------------------- - -bool CArchiveCommand::IsFromExtractGroup() const -{ - switch(CommandType) - { - case NCommandType::kTest: - case NCommandType::kExtract: - case NCommandType::kFullExtract: - return true; - default: - return false; - } -} - -NExtract::NPathMode::EEnum CArchiveCommand::GetPathMode() const -{ - switch(CommandType) - { - case NCommandType::kTest: - case NCommandType::kFullExtract: - return NExtract::NPathMode::kFullPathnames; - default: - return NExtract::NPathMode::kNoPathnames; - } -} - -bool CArchiveCommand::IsFromUpdateGroup() const -{ - return (CommandType == NCommandType::kAdd || - CommandType == NCommandType::kUpdate || - CommandType == NCommandType::kDelete); -} - -static NRecursedType::EEnum GetRecursedTypeFromIndex(int index) -{ - switch (index) - { - case NRecursedPostCharIndex::kWildCardRecursionOnly: - return NRecursedType::kWildCardOnlyRecursed; - case NRecursedPostCharIndex::kNoRecursion: - return NRecursedType::kNonRecursed; - default: - return NRecursedType::kRecursed; - } -} - -static bool ParseArchiveCommand(const UString &commandString, CArchiveCommand &command) -{ - UString commandStringUpper = commandString; - commandStringUpper.MakeUpper(); - UString postString; - int commandIndex = ParseCommand(kNumCommandForms, g_CommandForms, commandStringUpper, - postString) ; - if (commandIndex < 0) - return false; - command.CommandType = (NCommandType::EEnum)commandIndex; - return true; -} - -// ------------------------------------------------------------------ -// filenames functions - -static void AddNameToCensor(NWildcard::CCensor &wildcardCensor, - const UString &name, bool include, NRecursedType::EEnum type) -{ - bool recursed = false; - - switch (type) - { - case NRecursedType::kWildCardOnlyRecursed: - recursed = DoesNameContainWildCard(name); - break; - case NRecursedType::kRecursed: - recursed = true; - break; - } - wildcardCensor.AddItem(include, name, recursed); -} - -static void AddToCensorFromListFile(NWildcard::CCensor &wildcardCensor, - LPCWSTR fileName, bool include, NRecursedType::EEnum type, UINT codePage) -{ - UStringVector names; - if (!ReadNamesFromListFile(fileName, names, codePage)) - throw kIncorrectListFile; - for (int i = 0; i < names.Size(); i++) - AddNameToCensor(wildcardCensor, names[i], include, type); -} - -static void AddToCensorFromNonSwitchesStrings( - int startIndex, - NWildcard::CCensor &wildcardCensor, - const UStringVector &nonSwitchStrings, NRecursedType::EEnum type, - bool thereAreSwitchIncludes, UINT codePage) -{ - if (nonSwitchStrings.Size() == startIndex && (!thereAreSwitchIncludes)) - AddNameToCensor(wildcardCensor, kUniversalWildcard, true, type); - for (int i = startIndex; i < nonSwitchStrings.Size(); i++) - { - const UString &s = nonSwitchStrings[i]; - if (s[0] == kFileListID) - AddToCensorFromListFile(wildcardCensor, s.Mid(1), true, type, codePage); - else - AddNameToCensor(wildcardCensor, s, true, type); - } -} - -#ifdef _WIN32 -static void ParseMapWithPaths(NWildcard::CCensor &wildcardCensor, - const UString &switchParam, bool include, - NRecursedType::EEnum commonRecursedType) -{ - int splitPos = switchParam.Find(L':'); - if (splitPos < 0) - ThrowUserErrorException(); - UString mappingName = switchParam.Left(splitPos); - - UString switchParam2 = switchParam.Mid(splitPos + 1); - splitPos = switchParam2.Find(L':'); - if (splitPos < 0) - ThrowUserErrorException(); - - UString mappingSize = switchParam2.Left(splitPos); - UString eventName = switchParam2.Mid(splitPos + 1); - - UInt64 dataSize64 = ConvertStringToUInt64(mappingSize, NULL); - UInt32 dataSize = (UInt32)dataSize64; - { - CFileMapping fileMapping; - if (fileMapping.Open(FILE_MAP_READ, GetSystemString(mappingName)) != 0) - ThrowException("Can not open mapping"); - LPVOID data = fileMapping.Map(FILE_MAP_READ, 0, dataSize); - if (data == NULL) - ThrowException("MapViewOfFile error"); - try - { - const wchar_t *curData = (const wchar_t *)data; - if (*curData != 0) - ThrowException("Incorrect mapping data"); - UInt32 numChars = dataSize / sizeof(wchar_t); - UString name; - for (UInt32 i = 1; i < numChars; i++) - { - wchar_t c = curData[i]; - if (c == L'\0') - { - AddNameToCensor(wildcardCensor, name, include, commonRecursedType); - name.Empty(); - } - else - name += c; - } - if (!name.IsEmpty()) - ThrowException("data error"); - } - catch(...) - { - UnmapViewOfFile(data); - throw; - } - UnmapViewOfFile(data); - } - - { - NSynchronization::CManualResetEvent event; - if (event.Open(EVENT_MODIFY_STATE, false, GetSystemString(eventName)) == S_OK) - event.Set(); - } -} -#endif - -static void AddSwitchWildCardsToCensor(NWildcard::CCensor &wildcardCensor, - const UStringVector &strings, bool include, - NRecursedType::EEnum commonRecursedType, UINT codePage) -{ - for (int i = 0; i < strings.Size(); i++) - { - const UString &name = strings[i]; - NRecursedType::EEnum recursedType; - int pos = 0; - if (name.Length() < kSomeCludePostStringMinSize) - ThrowUserErrorException(); - if (::MyCharUpper(name[pos]) == kRecursedIDChar) - { - pos++; - int index = UString(kRecursedPostCharSet).Find(name[pos]); - recursedType = GetRecursedTypeFromIndex(index); - if (index >= 0) - pos++; - } - else - recursedType = commonRecursedType; - if (name.Length() < pos + kSomeCludeAfterRecursedPostStringMinSize) - ThrowUserErrorException(); - UString tail = name.Mid(pos + 1); - if (name[pos] == kImmediateNameID) - AddNameToCensor(wildcardCensor, tail, include, recursedType); - else if (name[pos] == kFileListID) - AddToCensorFromListFile(wildcardCensor, tail, include, recursedType, codePage); - #ifdef _WIN32 - else if (name[pos] == kMapNameID) - ParseMapWithPaths(wildcardCensor, tail, include, recursedType); - #endif - else - ThrowUserErrorException(); - } -} - -#ifdef _WIN32 - -// This code converts all short file names to long file names. - -static void ConvertToLongName(const UString &prefix, UString &name) -{ - if (name.IsEmpty() || DoesNameContainWildCard(name)) - return; - NFind::CFileInfoW fi; - if (fi.Find(prefix + name)) - name = fi.Name; -} - -static void ConvertToLongNames(const UString &prefix, CObjectVector &items) -{ - for (int i = 0; i < items.Size(); i++) - { - NWildcard::CItem &item = items[i]; - if (item.Recursive || item.PathParts.Size() != 1) - continue; - ConvertToLongName(prefix, item.PathParts.Front()); - } -} - -static void ConvertToLongNames(const UString &prefix, NWildcard::CCensorNode &node) -{ - ConvertToLongNames(prefix, node.IncludeItems); - ConvertToLongNames(prefix, node.ExcludeItems); - int i; - for (i = 0; i < node.SubNodes.Size(); i++) - ConvertToLongName(prefix, node.SubNodes[i].Name); - // mix folders with same name - for (i = 0; i < node.SubNodes.Size(); i++) - { - NWildcard::CCensorNode &nextNode1 = node.SubNodes[i]; - for (int j = i + 1; j < node.SubNodes.Size();) - { - const NWildcard::CCensorNode &nextNode2 = node.SubNodes[j]; - if (nextNode1.Name.CompareNoCase(nextNode2.Name) == 0) - { - nextNode1.IncludeItems += nextNode2.IncludeItems; - nextNode1.ExcludeItems += nextNode2.ExcludeItems; - node.SubNodes.Delete(j); - } - else - j++; - } - } - for (i = 0; i < node.SubNodes.Size(); i++) - { - NWildcard::CCensorNode &nextNode = node.SubNodes[i]; - ConvertToLongNames(prefix + nextNode.Name + wchar_t(NFile::NName::kDirDelimiter), nextNode); - } -} - -static void ConvertToLongNames(NWildcard::CCensor &censor) -{ - for (int i = 0; i < censor.Pairs.Size(); i++) - { - NWildcard::CPair &pair = censor.Pairs[i]; - ConvertToLongNames(pair.Prefix, pair.Head); - } -} - -#endif - -static NUpdateArchive::NPairAction::EEnum GetUpdatePairActionType(int i) -{ - switch(i) - { - case NUpdateArchive::NPairAction::kIgnore: return NUpdateArchive::NPairAction::kIgnore; - case NUpdateArchive::NPairAction::kCopy: return NUpdateArchive::NPairAction::kCopy; - case NUpdateArchive::NPairAction::kCompress: return NUpdateArchive::NPairAction::kCompress; - case NUpdateArchive::NPairAction::kCompressAsAnti: return NUpdateArchive::NPairAction::kCompressAsAnti; - } - throw 98111603; -} - -const UString kUpdatePairStateIDSet = L"PQRXYZW"; -const int kUpdatePairStateNotSupportedActions[] = {2, 2, 1, -1, -1, -1, -1}; - -const UString kUpdatePairActionIDSet = L"0123"; //Ignore, Copy, Compress, Create Anti - -const wchar_t *kUpdateIgnoreItselfPostStringID = L"-"; -const wchar_t kUpdateNewArchivePostCharID = '!'; - - -static bool ParseUpdateCommandString2(const UString &command, - NUpdateArchive::CActionSet &actionSet, UString &postString) -{ - for (int i = 0; i < command.Length();) - { - wchar_t c = MyCharUpper(command[i]); - int statePos = kUpdatePairStateIDSet.Find(c); - if (statePos < 0) - { - postString = command.Mid(i); - return true; - } - i++; - if (i >= command.Length()) - return false; - int actionPos = kUpdatePairActionIDSet.Find(::MyCharUpper(command[i])); - if (actionPos < 0) - return false; - actionSet.StateActions[statePos] = GetUpdatePairActionType(actionPos); - if (kUpdatePairStateNotSupportedActions[statePos] == actionPos) - return false; - i++; - } - postString.Empty(); - return true; -} - -static void ParseUpdateCommandString(CUpdateOptions &options, - const UStringVector &updatePostStrings, - const NUpdateArchive::CActionSet &defaultActionSet) -{ - for (int i = 0; i < updatePostStrings.Size(); i++) - { - const UString &updateString = updatePostStrings[i]; - if (updateString.CompareNoCase(kUpdateIgnoreItselfPostStringID) == 0) - { - if (options.UpdateArchiveItself) - { - options.UpdateArchiveItself = false; - options.Commands.Delete(0); - } - } - else - { - NUpdateArchive::CActionSet actionSet = defaultActionSet; - - UString postString; - if (!ParseUpdateCommandString2(updateString, actionSet, postString)) - ThrowUserErrorException(); - if (postString.IsEmpty()) - { - if (options.UpdateArchiveItself) - options.Commands[0].ActionSet = actionSet; - } - else - { - if (MyCharUpper(postString[0]) != kUpdateNewArchivePostCharID) - ThrowUserErrorException(); - CUpdateArchiveCommand uc; - UString archivePath = postString.Mid(1); - if (archivePath.IsEmpty()) - ThrowUserErrorException(); - uc.UserArchivePath = archivePath; - uc.ActionSet = actionSet; - options.Commands.Add(uc); - } - } - } -} - -static const char kByteSymbol = 'B'; -static const char kKiloSymbol = 'K'; -static const char kMegaSymbol = 'M'; -static const char kGigaSymbol = 'G'; - -static bool ParseComplexSize(const UString &src, UInt64 &result) -{ - UString s = src; - s.MakeUpper(); - - const wchar_t *start = s; - const wchar_t *end; - UInt64 number = ConvertStringToUInt64(start, &end); - int numDigits = (int)(end - start); - if (numDigits == 0 || s.Length() > numDigits + 1) - return false; - if (s.Length() == numDigits) - { - result = number; - return true; - } - int numBits; - switch (s[numDigits]) - { - case kByteSymbol: - result = number; - return true; - case kKiloSymbol: - numBits = 10; - break; - case kMegaSymbol: - numBits = 20; - break; - case kGigaSymbol: - numBits = 30; - break; - default: - return false; - } - if (number >= ((UInt64)1 << (64 - numBits))) - return false; - result = number << numBits; - return true; -} - -static void SetAddCommandOptions( - NCommandType::EEnum commandType, - const CParser &parser, - CUpdateOptions &options) -{ - NUpdateArchive::CActionSet defaultActionSet; - switch(commandType) - { - case NCommandType::kAdd: - defaultActionSet = NUpdateArchive::kAddActionSet; - break; - case NCommandType::kDelete: - defaultActionSet = NUpdateArchive::kDeleteActionSet; - break; - default: - defaultActionSet = NUpdateArchive::kUpdateActionSet; - } - - options.UpdateArchiveItself = true; - - options.Commands.Clear(); - CUpdateArchiveCommand updateMainCommand; - updateMainCommand.ActionSet = defaultActionSet; - options.Commands.Add(updateMainCommand); - if (parser[NKey::kUpdate].ThereIs) - ParseUpdateCommandString(options, parser[NKey::kUpdate].PostStrings, - defaultActionSet); - if (parser[NKey::kWorkingDir].ThereIs) - { - const UString &postString = parser[NKey::kWorkingDir].PostStrings[0]; - if (postString.IsEmpty()) - NDirectory::MyGetTempPath(options.WorkingDir); - else - options.WorkingDir = postString; - } - options.SfxMode = parser[NKey::kSfx].ThereIs; - if (options.SfxMode) - options.SfxModule = parser[NKey::kSfx].PostStrings[0]; - - if (parser[NKey::kVolume].ThereIs) - { - const UStringVector &sv = parser[NKey::kVolume].PostStrings; - for (int i = 0; i < sv.Size(); i++) - { - UInt64 size; - if (!ParseComplexSize(sv[i], size)) - ThrowException("Incorrect volume size"); - options.VolumesSizes.Add(size); - } - } -} - -static void SetMethodOptions(const CParser &parser, CObjectVector &properties) -{ - if (parser[NKey::kProperty].ThereIs) - { - // options.MethodMode.Properties.Clear(); - for (int i = 0; i < parser[NKey::kProperty].PostStrings.Size(); i++) - { - CProperty property; - const UString &postString = parser[NKey::kProperty].PostStrings[i]; - int index = postString.Find(L'='); - if (index < 0) - property.Name = postString; - else - { - property.Name = postString.Left(index); - property.Value = postString.Mid(index + 1); - } - properties.Add(property); - } - } -} - -CArchiveCommandLineParser::CArchiveCommandLineParser(): - parser(sizeof(kSwitchForms) / sizeof(kSwitchForms[0])) {} - -void CArchiveCommandLineParser::Parse1(const UStringVector &commandStrings, - CArchiveCommandLineOptions &options) -{ - try - { - parser.ParseStrings(kSwitchForms, commandStrings); - } - catch(...) - { - ThrowUserErrorException(); - } - - options.IsInTerminal = MY_IS_TERMINAL(stdin); - options.IsStdOutTerminal = MY_IS_TERMINAL(stdout); - options.IsStdErrTerminal = MY_IS_TERMINAL(stderr); - options.StdInMode = parser[NKey::kStdIn].ThereIs; - options.StdOutMode = parser[NKey::kStdOut].ThereIs; - options.EnableHeaders = !parser[NKey::kDisableHeaders].ThereIs; - options.HelpMode = parser[NKey::kHelp1].ThereIs || parser[NKey::kHelp2].ThereIs || parser[NKey::kHelp3].ThereIs; - - #ifdef _WIN32 - options.LargePages = false; - if (parser[NKey::kLargePages].ThereIs) - { - const UString &postString = parser[NKey::kLargePages].PostStrings.Front(); - if (postString.IsEmpty()) - options.LargePages = true; - } - #endif -} - -struct CCodePagePair -{ - const wchar_t *Name; - UINT CodePage; -}; - -static CCodePagePair g_CodePagePairs[] = -{ - { L"UTF-8", CP_UTF8 }, - { L"WIN", CP_ACP }, - { L"DOS", CP_OEMCP } -}; - -static int FindCharset(const NCommandLineParser::CParser &parser, int keyIndex, int defaultVal) -{ - if (!parser[keyIndex].ThereIs) - return defaultVal; - - UString name = parser[keyIndex].PostStrings.Back(); - name.MakeUpper(); - int i; - for (i = 0; i < sizeof(g_CodePagePairs) / sizeof(g_CodePagePairs[0]); i++) - { - const CCodePagePair &pair = g_CodePagePairs[i]; - if (name.Compare(pair.Name) == 0) - return pair.CodePage; - } - if (i == sizeof(g_CodePagePairs) / sizeof(g_CodePagePairs[0])) - ThrowUserErrorException(); - return -1; -} - -static bool ConvertStringToUInt32(const wchar_t *s, UInt32 &v) -{ - const wchar_t *end; - UInt64 number = ConvertStringToUInt64(s, &end); - if (*end != 0) - return false; - if (number > (UInt32)0xFFFFFFFF) - return false; - v = (UInt32)number; - return true; -} - -void EnumerateDirItemsAndSort(NWildcard::CCensor &wildcardCensor, - UStringVector &sortedPaths, - UStringVector &sortedFullPaths) -{ - UStringVector paths; - { - CDirItems dirItems; - { - UStringVector errorPaths; - CRecordVector errorCodes; - HRESULT res = EnumerateItems(wildcardCensor, dirItems, NULL, errorPaths, errorCodes); - if (res != S_OK || errorPaths.Size() > 0) - throw "cannot find archive"; - } - for (int i = 0; i < dirItems.Items.Size(); i++) - { - const CDirItem &dirItem = dirItems.Items[i]; - if (!dirItem.IsDir()) - paths.Add(dirItems.GetPhyPath(i)); - } - } - - if (paths.Size() == 0) - throw "there is no such archive"; - - UStringVector fullPaths; - - int i; - for (i = 0; i < paths.Size(); i++) - { - UString fullPath; - NFile::NDirectory::MyGetFullPathName(paths[i], fullPath); - fullPaths.Add(fullPath); - } - CIntVector indices; - SortFileNames(fullPaths, indices); - sortedPaths.Reserve(indices.Size()); - sortedFullPaths.Reserve(indices.Size()); - for (i = 0; i < indices.Size(); i++) - { - int index = indices[i]; - sortedPaths.Add(paths[index]); - sortedFullPaths.Add(fullPaths[index]); - } -} - -void CArchiveCommandLineParser::Parse2(CArchiveCommandLineOptions &options) -{ - const UStringVector &nonSwitchStrings = parser.NonSwitchStrings; - int numNonSwitchStrings = nonSwitchStrings.Size(); - if (numNonSwitchStrings < kMinNonSwitchWords) - ThrowUserErrorException(); - - if (!ParseArchiveCommand(nonSwitchStrings[kCommandIndex], options.Command)) - ThrowUserErrorException(); - - options.TechMode = parser[NKey::kTechMode].ThereIs; - options.CalcCrc = parser[NKey::kCalcCrc].ThereIs; - - if (parser[NKey::kCaseSensitive].ThereIs) - g_CaseSensitive = (parser[NKey::kCaseSensitive].PostCharIndex < 0); - - NRecursedType::EEnum recursedType; - if (parser[NKey::kRecursed].ThereIs) - recursedType = GetRecursedTypeFromIndex(parser[NKey::kRecursed].PostCharIndex); - else - recursedType = NRecursedType::kNonRecursed; - - g_CodePage = FindCharset(parser, NKey::kConsoleCharSet, -1); - UINT codePage = FindCharset(parser, NKey::kListfileCharSet, CP_UTF8); - - bool thereAreSwitchIncludes = false; - if (parser[NKey::kInclude].ThereIs) - { - thereAreSwitchIncludes = true; - AddSwitchWildCardsToCensor(options.WildcardCensor, - parser[NKey::kInclude].PostStrings, true, recursedType, codePage); - } - if (parser[NKey::kExclude].ThereIs) - AddSwitchWildCardsToCensor(options.WildcardCensor, - parser[NKey::kExclude].PostStrings, false, recursedType, codePage); - - int curCommandIndex = kCommandIndex + 1; - bool thereIsArchiveName = !parser[NKey::kNoArName].ThereIs && - options.Command.CommandType != NCommandType::kBenchmark && - options.Command.CommandType != NCommandType::kInfo; - - bool isExtractGroupCommand = options.Command.IsFromExtractGroup(); - bool isExtractOrList = isExtractGroupCommand || options.Command.CommandType == NCommandType::kList; - - if (isExtractOrList && options.StdInMode) - thereIsArchiveName = false; - - if (thereIsArchiveName) - { - if (curCommandIndex >= numNonSwitchStrings) - ThrowUserErrorException(); - options.ArchiveName = nonSwitchStrings[curCommandIndex++]; - } - - AddToCensorFromNonSwitchesStrings( - curCommandIndex, options.WildcardCensor, - nonSwitchStrings, recursedType, thereAreSwitchIncludes, codePage); - - options.YesToAll = parser[NKey::kYes].ThereIs; - - - #ifndef _NO_CRYPTO - options.PasswordEnabled = parser[NKey::kPassword].ThereIs; - if (options.PasswordEnabled) - options.Password = parser[NKey::kPassword].PostStrings[0]; - #endif - - options.ShowDialog = parser[NKey::kShowDialog].ThereIs; - - if (parser[NKey::kArchiveType].ThereIs) - options.ArcType = parser[NKey::kArchiveType].PostStrings[0]; - - if (isExtractOrList) - { - if (!options.WildcardCensor.AllAreRelative()) - ThrowException("Cannot use absolute pathnames for this command"); - - NWildcard::CCensor archiveWildcardCensor; - - if (parser[NKey::kArInclude].ThereIs) - AddSwitchWildCardsToCensor(archiveWildcardCensor, - parser[NKey::kArInclude].PostStrings, true, NRecursedType::kNonRecursed, codePage); - if (parser[NKey::kArExclude].ThereIs) - AddSwitchWildCardsToCensor(archiveWildcardCensor, - parser[NKey::kArExclude].PostStrings, false, NRecursedType::kNonRecursed, codePage); - - if (thereIsArchiveName) - AddNameToCensor(archiveWildcardCensor, options.ArchiveName, true, NRecursedType::kNonRecursed); - - #ifdef _WIN32 - ConvertToLongNames(archiveWildcardCensor); - #endif - - archiveWildcardCensor.ExtendExclude(); - - if (options.StdInMode) - { - UString arcName = parser[NKey::kStdIn].PostStrings.Front(); - options.ArchivePathsSorted.Add(arcName); - options.ArchivePathsFullSorted.Add(arcName); - } - else - { - EnumerateDirItemsAndSort(archiveWildcardCensor, - options.ArchivePathsSorted, - options.ArchivePathsFullSorted); - } - - if (isExtractGroupCommand) - { - SetMethodOptions(parser, options.ExtractProperties); - if (options.StdOutMode && options.IsStdOutTerminal && options.IsStdErrTerminal) - throw kSameTerminalError; - if (parser[NKey::kOutputDir].ThereIs) - { - options.OutputDir = parser[NKey::kOutputDir].PostStrings[0]; - NFile::NName::NormalizeDirPathPrefix(options.OutputDir); - } - - options.OverwriteMode = NExtract::NOverwriteMode::kAskBefore; - if (parser[NKey::kOverwrite].ThereIs) - options.OverwriteMode = k_OverwriteModes[parser[NKey::kOverwrite].PostCharIndex]; - else if (options.YesToAll) - options.OverwriteMode = NExtract::NOverwriteMode::kWithoutPrompt; - } - } - else if (options.Command.IsFromUpdateGroup()) - { - CUpdateOptions &updateOptions = options.UpdateOptions; - - SetAddCommandOptions(options.Command.CommandType, parser, updateOptions); - - SetMethodOptions(parser, updateOptions.MethodMode.Properties); - - if (parser[NKey::kShareForWrite].ThereIs) - updateOptions.OpenShareForWrite = true; - - options.EnablePercents = !parser[NKey::kDisablePercents].ThereIs; - - if (options.EnablePercents) - { - if ((options.StdOutMode && !options.IsStdErrTerminal) || - (!options.StdOutMode && !options.IsStdOutTerminal)) - options.EnablePercents = false; - } - - updateOptions.EMailMode = parser[NKey::kEmail].ThereIs; - if (updateOptions.EMailMode) - { - updateOptions.EMailAddress = parser[NKey::kEmail].PostStrings.Front(); - if (updateOptions.EMailAddress.Length() > 0) - if (updateOptions.EMailAddress[0] == L'.') - { - updateOptions.EMailRemoveAfter = true; - updateOptions.EMailAddress.Delete(0); - } - } - - updateOptions.StdOutMode = options.StdOutMode; - updateOptions.StdInMode = options.StdInMode; - - if (updateOptions.StdOutMode && updateOptions.EMailMode) - throw "stdout mode and email mode cannot be combined"; - if (updateOptions.StdOutMode && options.IsStdOutTerminal) - throw kTerminalOutError; - if (updateOptions.StdInMode) - updateOptions.StdInFileName = parser[NKey::kStdIn].PostStrings.Front(); - - #ifdef _WIN32 - ConvertToLongNames(options.WildcardCensor); - #endif - } - else if (options.Command.CommandType == NCommandType::kBenchmark) - { - options.NumThreads = (UInt32)-1; - options.DictionarySize = (UInt32)-1; - options.NumIterations = 1; - if (curCommandIndex < numNonSwitchStrings) - { - if (!ConvertStringToUInt32(nonSwitchStrings[curCommandIndex++], options.NumIterations)) - ThrowUserErrorException(); - } - for (int i = 0; i < parser[NKey::kProperty].PostStrings.Size(); i++) - { - UString postString = parser[NKey::kProperty].PostStrings[i]; - postString.MakeUpper(); - if (postString.Length() < 2) - ThrowUserErrorException(); - if (postString[0] == 'D') - { - int pos = 1; - if (postString[pos] == '=') - pos++; - UInt32 logSize; - if (!ConvertStringToUInt32((const wchar_t *)postString + pos, logSize)) - ThrowUserErrorException(); - if (logSize > 31) - ThrowUserErrorException(); - options.DictionarySize = 1 << logSize; - } - else if (postString[0] == 'M' && postString[1] == 'T' ) - { - int pos = 2; - if (postString[pos] == '=') - pos++; - if (postString[pos] != 0) - if (!ConvertStringToUInt32((const wchar_t *)postString + pos, options.NumThreads)) - ThrowUserErrorException(); - } - else if (postString[0] == 'M' && postString[1] == '=' ) - { - int pos = 2; - if (postString[pos] != 0) - options.Method = postString.Mid(2); - } - else - ThrowUserErrorException(); - } - } - else if (options.Command.CommandType == NCommandType::kInfo) - { - } - else - ThrowUserErrorException(); - options.WildcardCensor.ExtendExclude(); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveCommandLine.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveCommandLine.h deleted file mode 100644 index 491689e9a498..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveCommandLine.h +++ /dev/null @@ -1,111 +0,0 @@ -// ArchiveCommandLine.h - -#ifndef __ARCHIVE_COMMAND_LINE_H -#define __ARCHIVE_COMMAND_LINE_H - -#include "Common/CommandLineParser.h" -#include "Common/Wildcard.h" - -#include "Extract.h" -#include "Update.h" - -struct CArchiveCommandLineException: public AString -{ - CArchiveCommandLineException(const char *errorMessage): AString(errorMessage) {} -}; - -namespace NCommandType { enum EEnum -{ - kAdd = 0, - kUpdate, - kDelete, - kTest, - kExtract, - kFullExtract, - kList, - kBenchmark, - kInfo -};} - -namespace NRecursedType { enum EEnum -{ - kRecursed, - kWildCardOnlyRecursed, - kNonRecursed -};} - -struct CArchiveCommand -{ - NCommandType::EEnum CommandType; - bool IsFromExtractGroup() const; - bool IsFromUpdateGroup() const; - bool IsTestMode() const { return CommandType == NCommandType::kTest; } - NExtract::NPathMode::EEnum GetPathMode() const; -}; - -struct CArchiveCommandLineOptions -{ - bool HelpMode; - - #ifdef _WIN32 - bool LargePages; - #endif - - bool IsInTerminal; - bool IsStdOutTerminal; - bool IsStdErrTerminal; - bool StdInMode; - bool StdOutMode; - bool EnableHeaders; - - bool YesToAll; - bool ShowDialog; - // NWildcard::CCensor ArchiveWildcardCensor; - NWildcard::CCensor WildcardCensor; - - CArchiveCommand Command; - UString ArchiveName; - - #ifndef _NO_CRYPTO - bool PasswordEnabled; - UString Password; - #endif - - bool TechMode; - // Extract - bool CalcCrc; - bool AppendName; - UString OutputDir; - NExtract::NOverwriteMode::EEnum OverwriteMode; - UStringVector ArchivePathsSorted; - UStringVector ArchivePathsFullSorted; - CObjectVector ExtractProperties; - - CUpdateOptions UpdateOptions; - UString ArcType; - bool EnablePercents; - - // Benchmark - UInt32 NumIterations; - UInt32 NumThreads; - UInt32 DictionarySize; - UString Method; - - - CArchiveCommandLineOptions(): StdInMode(false), StdOutMode(false) {}; -}; - -class CArchiveCommandLineParser -{ - NCommandLineParser::CParser parser; -public: - CArchiveCommandLineParser(); - void Parse1(const UStringVector &commandStrings, CArchiveCommandLineOptions &options); - void Parse2(CArchiveCommandLineOptions &options); -}; - -void EnumerateDirItemsAndSort(NWildcard::CCensor &wildcardCensor, - UStringVector &sortedPaths, - UStringVector &sortedFullPaths); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp deleted file mode 100644 index 2a322c513f39..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp +++ /dev/null @@ -1,488 +0,0 @@ -// ArchiveExtractCallback.cpp - -#include "StdAfx.h" - -#include "Common/ComTry.h" -#include "Common/Wildcard.h" - -#include "Windows/FileDir.h" -#include "Windows/FileFind.h" -#include "Windows/PropVariant.h" -#include "Windows/PropVariantConversions.h" - -#include "../../Common/FilePathAutoRename.h" - -#include "../Common/ExtractingFilePath.h" - -#include "ArchiveExtractCallback.h" - -using namespace NWindows; - -static const wchar_t *kCantAutoRename = L"ERROR: Can not create file with auto name"; -static const wchar_t *kCantRenameFile = L"ERROR: Can not rename existing file "; -static const wchar_t *kCantDeleteOutputFile = L"ERROR: Can not delete output file "; - -void CArchiveExtractCallback::Init( - const NWildcard::CCensorNode *wildcardCensor, - const CArc *arc, - IFolderArchiveExtractCallback *extractCallback2, - bool stdOutMode, bool testMode, bool crcMode, - const UString &directoryPath, - const UStringVector &removePathParts, - UInt64 packSize) -{ - _wildcardCensor = wildcardCensor; - - _stdOutMode = stdOutMode; - _testMode = testMode; - _crcMode = crcMode; - _unpTotal = 1; - _packTotal = packSize; - - _extractCallback2 = extractCallback2; - _compressProgress.Release(); - _extractCallback2.QueryInterface(IID_ICompressProgressInfo, &_compressProgress); - - LocalProgressSpec->Init(extractCallback2, true); - LocalProgressSpec->SendProgress = false; - - - _removePathParts = removePathParts; - _arc = arc; - _directoryPath = directoryPath; - NFile::NName::NormalizeDirPathPrefix(_directoryPath); -} - -STDMETHODIMP CArchiveExtractCallback::SetTotal(UInt64 size) -{ - COM_TRY_BEGIN - _unpTotal = size; - if (!_multiArchives && _extractCallback2) - return _extractCallback2->SetTotal(size); - return S_OK; - COM_TRY_END -} - -static void NormalizeVals(UInt64 &v1, UInt64 &v2) -{ - const UInt64 kMax = (UInt64)1 << 31; - while (v1 > kMax) - { - v1 >>= 1; - v2 >>= 1; - } -} - -static UInt64 MyMultDiv64(UInt64 unpCur, UInt64 unpTotal, UInt64 packTotal) -{ - NormalizeVals(packTotal, unpTotal); - NormalizeVals(unpCur, unpTotal); - if (unpTotal == 0) - unpTotal = 1; - return unpCur * packTotal / unpTotal; -} - -STDMETHODIMP CArchiveExtractCallback::SetCompleted(const UInt64 *completeValue) -{ - COM_TRY_BEGIN - if (!_extractCallback2) - return S_OK; - - if (_multiArchives) - { - if (completeValue != NULL) - { - UInt64 packCur = LocalProgressSpec->InSize + MyMultDiv64(*completeValue, _unpTotal, _packTotal); - return _extractCallback2->SetCompleted(&packCur); - } - } - return _extractCallback2->SetCompleted(completeValue); - COM_TRY_END -} - -STDMETHODIMP CArchiveExtractCallback::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) -{ - COM_TRY_BEGIN - return _localProgress->SetRatioInfo(inSize, outSize); - COM_TRY_END -} - -void CArchiveExtractCallback::CreateComplexDirectory(const UStringVector &dirPathParts, UString &fullPath) -{ - fullPath = _directoryPath; - for (int i = 0; i < dirPathParts.Size(); i++) - { - if (i > 0) - fullPath += wchar_t(NFile::NName::kDirDelimiter); - fullPath += dirPathParts[i]; - NFile::NDirectory::MyCreateDirectory(fullPath); - } -} - -HRESULT CArchiveExtractCallback::GetTime(int index, PROPID propID, FILETIME &filetime, bool &filetimeIsDefined) -{ - filetimeIsDefined = false; - NCOM::CPropVariant prop; - RINOK(_arc->Archive->GetProperty(index, propID, &prop)); - if (prop.vt == VT_FILETIME) - { - filetime = prop.filetime; - filetimeIsDefined = (filetime.dwHighDateTime != 0 || filetime.dwLowDateTime != 0); - } - else if (prop.vt != VT_EMPTY) - return E_FAIL; - return S_OK; -} - -HRESULT CArchiveExtractCallback::GetUnpackSize() -{ - NCOM::CPropVariant prop; - RINOK(_arc->Archive->GetProperty(_index, kpidSize, &prop)); - _curSizeDefined = (prop.vt != VT_EMPTY); - if (_curSizeDefined) - _curSize = ConvertPropVariantToUInt64(prop); - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode) -{ - COM_TRY_BEGIN - _crcStream.Release(); - *outStream = 0; - _outFileStream.Release(); - - _encrypted = false; - _isSplit = false; - _curSize = 0; - _curSizeDefined = false; - _index = index; - - UString fullPath; - - IInArchive *archive = _arc->Archive; - RINOK(_arc->GetItemPath(index, fullPath)); - RINOK(IsArchiveItemFolder(archive, index, _fi.IsDir)); - - _filePath = fullPath; - - { - NCOM::CPropVariant prop; - RINOK(archive->GetProperty(index, kpidPosition, &prop)); - if (prop.vt != VT_EMPTY) - { - if (prop.vt != VT_UI8) - return E_FAIL; - _position = prop.uhVal.QuadPart; - _isSplit = true; - } - } - - RINOK(GetArchiveItemBoolProp(archive, index, kpidEncrypted, _encrypted)); - - RINOK(GetUnpackSize()); - - if (_wildcardCensor) - { - if (!_wildcardCensor->CheckPath(fullPath, !_fi.IsDir)) - return S_OK; - } - - if (askExtractMode == NArchive::NExtract::NAskMode::kExtract && !_testMode) - { - if (_stdOutMode) - { - CMyComPtr outStreamLoc = new CStdOutFileStream; - *outStream = outStreamLoc.Detach(); - return S_OK; - } - - { - NCOM::CPropVariant prop; - RINOK(archive->GetProperty(index, kpidAttrib, &prop)); - if (prop.vt == VT_UI4) - { - _fi.Attrib = prop.ulVal; - _fi.AttribDefined = true; - } - else if (prop.vt == VT_EMPTY) - _fi.AttribDefined = false; - else - return E_FAIL; - } - - RINOK(GetTime(index, kpidCTime, _fi.CTime, _fi.CTimeDefined)); - RINOK(GetTime(index, kpidATime, _fi.ATime, _fi.ATimeDefined)); - RINOK(GetTime(index, kpidMTime, _fi.MTime, _fi.MTimeDefined)); - - bool isAnti = false; - RINOK(_arc->IsItemAnti(index, isAnti)); - - UStringVector pathParts; - SplitPathToParts(fullPath, pathParts); - - if (pathParts.IsEmpty()) - return E_FAIL; - int numRemovePathParts = 0; - switch(_pathMode) - { - case NExtract::NPathMode::kFullPathnames: - break; - case NExtract::NPathMode::kCurrentPathnames: - { - numRemovePathParts = _removePathParts.Size(); - if (pathParts.Size() <= numRemovePathParts) - return E_FAIL; - for (int i = 0; i < numRemovePathParts; i++) - if (_removePathParts[i].CompareNoCase(pathParts[i]) != 0) - return E_FAIL; - break; - } - case NExtract::NPathMode::kNoPathnames: - { - numRemovePathParts = pathParts.Size() - 1; - break; - } - } - pathParts.Delete(0, numRemovePathParts); - MakeCorrectPath(pathParts); - UString processedPath = MakePathNameFromParts(pathParts); - if (!isAnti) - { - if (!_fi.IsDir) - { - if (!pathParts.IsEmpty()) - pathParts.DeleteBack(); - } - - if (!pathParts.IsEmpty()) - { - UString fullPathNew; - CreateComplexDirectory(pathParts, fullPathNew); - if (_fi.IsDir) - NFile::NDirectory::SetDirTime(fullPathNew, - (WriteCTime && _fi.CTimeDefined) ? &_fi.CTime : NULL, - (WriteATime && _fi.ATimeDefined) ? &_fi.ATime : NULL, - (WriteMTime && _fi.MTimeDefined) ? &_fi.MTime : (_arc->MTimeDefined ? &_arc->MTime : NULL)); - } - } - - - UString fullProcessedPath = _directoryPath + processedPath; - - if (_fi.IsDir) - { - _diskFilePath = fullProcessedPath; - if (isAnti) - NFile::NDirectory::MyRemoveDirectory(_diskFilePath); - return S_OK; - } - - if (!_isSplit) - { - NFile::NFind::CFileInfoW fileInfo; - if (fileInfo.Find(fullProcessedPath)) - { - switch(_overwriteMode) - { - case NExtract::NOverwriteMode::kSkipExisting: - return S_OK; - case NExtract::NOverwriteMode::kAskBefore: - { - Int32 overwiteResult; - RINOK(_extractCallback2->AskOverwrite( - fullProcessedPath, &fileInfo.MTime, &fileInfo.Size, fullPath, - _fi.MTimeDefined ? &_fi.MTime : NULL, - _curSizeDefined ? &_curSize : NULL, - &overwiteResult)) - - switch(overwiteResult) - { - case NOverwriteAnswer::kCancel: - return E_ABORT; - case NOverwriteAnswer::kNo: - return S_OK; - case NOverwriteAnswer::kNoToAll: - _overwriteMode = NExtract::NOverwriteMode::kSkipExisting; - return S_OK; - case NOverwriteAnswer::kYesToAll: - _overwriteMode = NExtract::NOverwriteMode::kWithoutPrompt; - break; - case NOverwriteAnswer::kYes: - break; - case NOverwriteAnswer::kAutoRename: - _overwriteMode = NExtract::NOverwriteMode::kAutoRename; - break; - default: - return E_FAIL; - } - } - } - if (_overwriteMode == NExtract::NOverwriteMode::kAutoRename) - { - if (!AutoRenamePath(fullProcessedPath)) - { - UString message = UString(kCantAutoRename) + fullProcessedPath; - RINOK(_extractCallback2->MessageError(message)); - return E_FAIL; - } - } - else if (_overwriteMode == NExtract::NOverwriteMode::kAutoRenameExisting) - { - UString existPath = fullProcessedPath; - if (!AutoRenamePath(existPath)) - { - UString message = kCantAutoRename + fullProcessedPath; - RINOK(_extractCallback2->MessageError(message)); - return E_FAIL; - } - if (!NFile::NDirectory::MyMoveFile(fullProcessedPath, existPath)) - { - UString message = UString(kCantRenameFile) + fullProcessedPath; - RINOK(_extractCallback2->MessageError(message)); - return E_FAIL; - } - } - else - if (!NFile::NDirectory::DeleteFileAlways(fullProcessedPath)) - { - UString message = UString(kCantDeleteOutputFile) + fullProcessedPath; - RINOK(_extractCallback2->MessageError(message)); - return S_OK; - // return E_FAIL; - } - } - } - if (!isAnti) - { - _outFileStreamSpec = new COutFileStream; - CMyComPtr outStreamLoc(_outFileStreamSpec); - if (!_outFileStreamSpec->Open(fullProcessedPath, _isSplit ? OPEN_ALWAYS: CREATE_ALWAYS)) - { - // if (::GetLastError() != ERROR_FILE_EXISTS || !isSplit) - { - UString message = L"can not open output file " + fullProcessedPath; - RINOK(_extractCallback2->MessageError(message)); - return S_OK; - } - } - if (_isSplit) - { - RINOK(_outFileStreamSpec->Seek(_position, STREAM_SEEK_SET, NULL)); - } - _outFileStream = outStreamLoc; - *outStream = outStreamLoc.Detach(); - } - _diskFilePath = fullProcessedPath; - } - else - { - *outStream = NULL; - } - if (_crcMode) - { - _crcStreamSpec = new COutStreamWithCRC; - _crcStream = _crcStreamSpec; - CMyComPtr crcStream = _crcStreamSpec; - _crcStreamSpec->SetStream(*outStream); - if (*outStream) - (*outStream)->Release(); - *outStream = crcStream.Detach(); - _crcStreamSpec->Init(true); - } - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CArchiveExtractCallback::PrepareOperation(Int32 askExtractMode) -{ - COM_TRY_BEGIN - _extractMode = false; - switch (askExtractMode) - { - case NArchive::NExtract::NAskMode::kExtract: - if (_testMode) - askExtractMode = NArchive::NExtract::NAskMode::kTest; - else - _extractMode = true; - break; - }; - return _extractCallback2->PrepareOperation(_filePath, _fi.IsDir, - askExtractMode, _isSplit ? &_position: 0); - COM_TRY_END -} - -STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 operationResult) -{ - COM_TRY_BEGIN - switch(operationResult) - { - case NArchive::NExtract::NOperationResult::kOK: - case NArchive::NExtract::NOperationResult::kUnSupportedMethod: - case NArchive::NExtract::NOperationResult::kCRCError: - case NArchive::NExtract::NOperationResult::kDataError: - break; - default: - _outFileStream.Release(); - return E_FAIL; - } - if (_crcStream) - { - CrcSum += _crcStreamSpec->GetCRC(); - _curSize = _crcStreamSpec->GetSize(); - _curSizeDefined = true; - _crcStream.Release(); - } - if (_outFileStream) - { - _outFileStreamSpec->SetTime( - (WriteCTime && _fi.CTimeDefined) ? &_fi.CTime : NULL, - (WriteATime && _fi.ATimeDefined) ? &_fi.ATime : NULL, - (WriteMTime && _fi.MTimeDefined) ? &_fi.MTime : (_arc->MTimeDefined ? &_arc->MTime : NULL)); - _curSize = _outFileStreamSpec->ProcessedSize; - _curSizeDefined = true; - RINOK(_outFileStreamSpec->Close()); - _outFileStream.Release(); - } - if (!_curSizeDefined) - GetUnpackSize(); - if (_curSizeDefined) - UnpackSize += _curSize; - if (_fi.IsDir) - NumFolders++; - else - NumFiles++; - - if (_extractMode && _fi.AttribDefined) - NFile::NDirectory::MySetFileAttributes(_diskFilePath, _fi.Attrib); - RINOK(_extractCallback2->SetOperationResult(operationResult, _encrypted)); - return S_OK; - COM_TRY_END -} - -/* -STDMETHODIMP CArchiveExtractCallback::GetInStream( - const wchar_t *name, ISequentialInStream **inStream) -{ - COM_TRY_BEGIN - CInFileStream *inFile = new CInFileStream; - CMyComPtr inStreamTemp = inFile; - if (!inFile->Open(_srcDirectoryPrefix + name)) - return ::GetLastError(); - *inStream = inStreamTemp.Detach(); - return S_OK; - COM_TRY_END -} -*/ - -STDMETHODIMP CArchiveExtractCallback::CryptoGetTextPassword(BSTR *password) -{ - COM_TRY_BEGIN - if (!_cryptoGetTextPassword) - { - RINOK(_extractCallback2.QueryInterface(IID_ICryptoGetTextPassword, - &_cryptoGetTextPassword)); - } - return _cryptoGetTextPassword->CryptoGetTextPassword(password); - COM_TRY_END -} - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveExtractCallback.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveExtractCallback.h deleted file mode 100644 index b7a6a474b08c..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveExtractCallback.h +++ /dev/null @@ -1,143 +0,0 @@ -// ArchiveExtractCallback.h - -#ifndef __ARCHIVE_EXTRACT_CALLBACK_H -#define __ARCHIVE_EXTRACT_CALLBACK_H - -#include "Common/MyCom.h" -#include "Common/Wildcard.h" - -#include "../../IPassword.h" - -#include "../../Common/FileStreams.h" -#include "../../Common/ProgressUtils.h" - -#include "../../Archive/IArchive.h" - -#include "../../Archive/Common/OutStreamWithCRC.h" - -#include "ExtractMode.h" -#include "IFileExtractCallback.h" -#include "OpenArchive.h" - -class CArchiveExtractCallback: - public IArchiveExtractCallback, - // public IArchiveVolumeExtractCallback, - public ICryptoGetTextPassword, - public ICompressProgressInfo, - public CMyUnknownImp -{ - const CArc *_arc; - const NWildcard::CCensorNode *_wildcardCensor; - CMyComPtr _extractCallback2; - CMyComPtr _compressProgress; - CMyComPtr _cryptoGetTextPassword; - UString _directoryPath; - NExtract::NPathMode::EEnum _pathMode; - NExtract::NOverwriteMode::EEnum _overwriteMode; - - UString _diskFilePath; - UString _filePath; - UInt64 _position; - bool _isSplit; - - bool _extractMode; - - bool WriteCTime; - bool WriteATime; - bool WriteMTime; - - bool _encrypted; - - struct CProcessedFileInfo - { - FILETIME CTime; - FILETIME ATime; - FILETIME MTime; - UInt32 Attrib; - - bool CTimeDefined; - bool ATimeDefined; - bool MTimeDefined; - bool AttribDefined; - - bool IsDir; - } _fi; - - UInt32 _index; - UInt64 _curSize; - bool _curSizeDefined; - COutFileStream *_outFileStreamSpec; - CMyComPtr _outFileStream; - - COutStreamWithCRC *_crcStreamSpec; - CMyComPtr _crcStream; - - UStringVector _removePathParts; - - bool _stdOutMode; - bool _testMode; - bool _crcMode; - bool _multiArchives; - - CMyComPtr _localProgress; - UInt64 _packTotal; - UInt64 _unpTotal; - - void CreateComplexDirectory(const UStringVector &dirPathParts, UString &fullPath); - HRESULT GetTime(int index, PROPID propID, FILETIME &filetime, bool &filetimeIsDefined); - HRESULT GetUnpackSize(); - -public: - - CLocalProgress *LocalProgressSpec; - - UInt64 NumFolders; - UInt64 NumFiles; - UInt64 UnpackSize; - UInt32 CrcSum; - - MY_UNKNOWN_IMP2(ICryptoGetTextPassword, ICompressProgressInfo) - // COM_INTERFACE_ENTRY(IArchiveVolumeExtractCallback) - - INTERFACE_IArchiveExtractCallback(;) - - STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); - - // IArchiveVolumeExtractCallback - // STDMETHOD(GetInStream)(const wchar_t *name, ISequentialInStream **inStream); - - STDMETHOD(CryptoGetTextPassword)(BSTR *password); - - CArchiveExtractCallback(): - WriteCTime(true), - WriteATime(true), - WriteMTime(true), - _multiArchives(false) - { - LocalProgressSpec = new CLocalProgress(); - _localProgress = LocalProgressSpec; - } - - void InitForMulti(bool multiArchives, - NExtract::NPathMode::EEnum pathMode, - NExtract::NOverwriteMode::EEnum overwriteMode) - { - _multiArchives = multiArchives; - _pathMode = pathMode; - _overwriteMode = overwriteMode; - NumFolders = NumFiles = UnpackSize = 0; - CrcSum = 0; - } - - void Init( - const NWildcard::CCensorNode *wildcardCensor, - const CArc *arc, - IFolderArchiveExtractCallback *extractCallback2, - bool stdOutMode, bool testMode, bool crcMode, - const UString &directoryPath, - const UStringVector &removePathParts, - UInt64 packSize); - -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveName.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveName.cpp deleted file mode 100644 index c62c7f1b18d3..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveName.cpp +++ /dev/null @@ -1,54 +0,0 @@ -// ArchiveName.cpp - -#include "StdAfx.h" - -#include "Windows/FileDir.h" -#include "Windows/FileFind.h" - -#include "ExtractingFilePath.h" - -using namespace NWindows; - -static UString CreateArchiveName2(const UString &srcName, bool fromPrev, bool keepName) -{ - UString resultName = L"Archive"; - if (fromPrev) - { - UString dirPrefix; - if (NFile::NDirectory::GetOnlyDirPrefix(srcName, dirPrefix)) - { - if (dirPrefix.Length() > 0) - if (dirPrefix[dirPrefix.Length() - 1] == WCHAR_PATH_SEPARATOR) - { - dirPrefix.Delete(dirPrefix.Length() - 1); - NFile::NFind::CFileInfoW fileInfo; - if (fileInfo.Find(dirPrefix)) - resultName = fileInfo.Name; - } - } - } - else - { - NFile::NFind::CFileInfoW fileInfo; - if (!fileInfo.Find(srcName)) - // return resultName; - return srcName; - resultName = fileInfo.Name; - if (!fileInfo.IsDir() && !keepName) - { - int dotPos = resultName.ReverseFind('.'); - if (dotPos > 0) - { - UString archiveName2 = resultName.Left(dotPos); - if (archiveName2.ReverseFind('.') < 0) - resultName = archiveName2; - } - } - } - return resultName; -} - -UString CreateArchiveName(const UString &srcName, bool fromPrev, bool keepName) -{ - return GetCorrectFsPath(CreateArchiveName2(srcName, fromPrev, keepName)); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveName.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveName.h deleted file mode 100644 index ba18eeaada7d..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveName.h +++ /dev/null @@ -1,10 +0,0 @@ -// ArchiveName.h - -#ifndef __ARCHIVENAME_H -#define __ARCHIVENAME_H - -#include "Common/MyString.h" - -UString CreateArchiveName(const UString &srcName, bool fromPrev, bool keepName); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp deleted file mode 100644 index bb8b6ccd5249..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp +++ /dev/null @@ -1,133 +0,0 @@ -// ArchiveOpenCallback.cpp - -#include "StdAfx.h" - -#include "Common/StringConvert.h" -#include "Common/ComTry.h" - -#include "Windows/PropVariant.h" - -#include "../../Common/FileStreams.h" - -#include "ArchiveOpenCallback.h" - -using namespace NWindows; - -STDMETHODIMP COpenCallbackImp::SetTotal(const UInt64 *files, const UInt64 *bytes) -{ - COM_TRY_BEGIN - if (ReOpenCallback) - return ReOpenCallback->SetTotal(files, bytes); - if (!Callback) - return S_OK; - return Callback->Open_SetTotal(files, bytes); - COM_TRY_END -} - -STDMETHODIMP COpenCallbackImp::SetCompleted(const UInt64 *files, const UInt64 *bytes) -{ - COM_TRY_BEGIN - if (ReOpenCallback) - return ReOpenCallback->SetCompleted(files, bytes); - if (!Callback) - return S_OK; - return Callback->Open_SetCompleted(files, bytes); - COM_TRY_END -} - -STDMETHODIMP COpenCallbackImp::GetProperty(PROPID propID, PROPVARIANT *value) -{ - COM_TRY_BEGIN - NCOM::CPropVariant prop; - if (_subArchiveMode) - switch(propID) - { - case kpidName: prop = _subArchiveName; break; - } - else - switch(propID) - { - case kpidName: prop = _fileInfo.Name; break; - case kpidIsDir: prop = _fileInfo.IsDir(); break; - case kpidSize: prop = _fileInfo.Size; break; - case kpidAttrib: prop = (UInt32)_fileInfo.Attrib; break; - case kpidCTime: prop = _fileInfo.CTime; break; - case kpidATime: prop = _fileInfo.ATime; break; - case kpidMTime: prop = _fileInfo.MTime; break; - } - prop.Detach(value); - return S_OK; - COM_TRY_END -} - -int COpenCallbackImp::FindName(const UString &name) -{ - for (int i = 0; i < FileNames.Size(); i++) - if (name.CompareNoCase(FileNames[i]) == 0) - return i; - return -1; -} - -struct CInFileStreamVol: public CInFileStream -{ - UString Name; - COpenCallbackImp *OpenCallbackImp; - CMyComPtr OpenCallbackRef; - ~CInFileStreamVol() - { - if (OpenCallbackRef) - { - int index = OpenCallbackImp->FindName(Name); - if (index >= 0) - OpenCallbackImp->FileNames.Delete(index); - } - } -}; - -STDMETHODIMP COpenCallbackImp::GetStream(const wchar_t *name, IInStream **inStream) -{ - COM_TRY_BEGIN - if (_subArchiveMode) - return S_FALSE; - if (Callback) - { - RINOK(Callback->Open_CheckBreak()); - } - *inStream = NULL; - UString fullPath = _folderPrefix + name; - if (!_fileInfo.Find(fullPath)) - return S_FALSE; - if (_fileInfo.IsDir()) - return S_FALSE; - CInFileStreamVol *inFile = new CInFileStreamVol; - CMyComPtr inStreamTemp = inFile; - if (!inFile->Open(fullPath)) - return ::GetLastError(); - *inStream = inStreamTemp.Detach(); - inFile->Name = name; - inFile->OpenCallbackImp = this; - inFile->OpenCallbackRef = this; - FileNames.Add(name); - TotalSize += _fileInfo.Size; - return S_OK; - COM_TRY_END -} - -#ifndef _NO_CRYPTO -STDMETHODIMP COpenCallbackImp::CryptoGetTextPassword(BSTR *password) -{ - COM_TRY_BEGIN - if (ReOpenCallback) - { - CMyComPtr getTextPassword; - ReOpenCallback.QueryInterface(IID_ICryptoGetTextPassword, &getTextPassword); - if (getTextPassword) - return getTextPassword->CryptoGetTextPassword(password); - } - if (!Callback) - return E_NOTIMPL; - return Callback->Open_CryptoGetTextPassword(password); - COM_TRY_END -} -#endif - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveOpenCallback.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveOpenCallback.h deleted file mode 100644 index a60fca3d7418..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ArchiveOpenCallback.h +++ /dev/null @@ -1,103 +0,0 @@ -// ArchiveOpenCallback.h - -#ifndef __ARCHIVE_OPEN_CALLBACK_H -#define __ARCHIVE_OPEN_CALLBACK_H - -#include "Common/MyCom.h" -#include "Common/MyString.h" - -#include "Windows/FileFind.h" - -#ifndef _NO_CRYPTO -#include "../../IPassword.h" -#endif -#include "../../Archive/IArchive.h" - -#ifdef _NO_CRYPTO - -#define INTERFACE_IOpenCallbackUI_Crypto(x) - -#else - -#define INTERFACE_IOpenCallbackUI_Crypto(x) \ - virtual HRESULT Open_CryptoGetTextPassword(BSTR *password) x; \ - virtual HRESULT Open_GetPasswordIfAny(UString &password) x; \ - virtual bool Open_WasPasswordAsked() x; \ - virtual void Open_ClearPasswordWasAskedFlag() x; \ - -#endif - -#define INTERFACE_IOpenCallbackUI(x) \ - virtual HRESULT Open_CheckBreak() x; \ - virtual HRESULT Open_SetTotal(const UInt64 *files, const UInt64 *bytes) x; \ - virtual HRESULT Open_SetCompleted(const UInt64 *files, const UInt64 *bytes) x; \ - INTERFACE_IOpenCallbackUI_Crypto(x) - -struct IOpenCallbackUI -{ - INTERFACE_IOpenCallbackUI(=0) -}; - -class COpenCallbackImp: - public IArchiveOpenCallback, - public IArchiveOpenVolumeCallback, - public IArchiveOpenSetSubArchiveName, - #ifndef _NO_CRYPTO - public ICryptoGetTextPassword, - #endif - public CMyUnknownImp -{ -public: - #ifndef _NO_CRYPTO - MY_UNKNOWN_IMP3( - IArchiveOpenVolumeCallback, - ICryptoGetTextPassword, - IArchiveOpenSetSubArchiveName - ) - #else - MY_UNKNOWN_IMP2( - IArchiveOpenVolumeCallback, - IArchiveOpenSetSubArchiveName - ) - #endif - - INTERFACE_IArchiveOpenCallback(;) - INTERFACE_IArchiveOpenVolumeCallback(;) - - #ifndef _NO_CRYPTO - STDMETHOD(CryptoGetTextPassword)(BSTR *password); - #endif - - STDMETHOD(SetSubArchiveName(const wchar_t *name)) - { - _subArchiveMode = true; - _subArchiveName = name; - TotalSize = 0; - return S_OK; - } - -private: - UString _folderPrefix; - NWindows::NFile::NFind::CFileInfoW _fileInfo; - bool _subArchiveMode; - UString _subArchiveName; -public: - UStringVector FileNames; - IOpenCallbackUI *Callback; - CMyComPtr ReOpenCallback; - UInt64 TotalSize; - - COpenCallbackImp(): Callback(NULL) {} - void Init(const UString &folderPrefix, const UString &fileName) - { - _folderPrefix = folderPrefix; - if (!_fileInfo.Find(_folderPrefix + fileName)) - throw 1; - FileNames.Clear(); - _subArchiveMode = false; - TotalSize = 0; - } - int FindName(const UString &name); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/DefaultName.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/DefaultName.cpp deleted file mode 100644 index 5c4650045cfb..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/DefaultName.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// DefaultName.cpp - -#include "StdAfx.h" - -#include "DefaultName.h" - -static UString GetDefaultName3(const UString &fileName, - const UString &extension, const UString &addSubExtension) -{ - int extLength = extension.Length(); - int fileNameLength = fileName.Length(); - if (fileNameLength > extLength + 1) - { - int dotPos = fileNameLength - (extLength + 1); - if (fileName[dotPos] == '.') - if (extension.CompareNoCase(fileName.Mid(dotPos + 1)) == 0) - return fileName.Left(dotPos) + addSubExtension; - } - int dotPos = fileName.ReverseFind(L'.'); - if (dotPos > 0) - return fileName.Left(dotPos) + addSubExtension; - - if (addSubExtension.IsEmpty()) - return fileName + L"~"; - else - return fileName + addSubExtension; -} - -UString GetDefaultName2(const UString &fileName, - const UString &extension, const UString &addSubExtension) -{ - UString name = GetDefaultName3(fileName, extension, addSubExtension); - name.TrimRight(); - return name; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/DefaultName.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/DefaultName.h deleted file mode 100644 index 3989a1f9c42f..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/DefaultName.h +++ /dev/null @@ -1,11 +0,0 @@ -// DefaultName.h - -#ifndef __DEFAULTNAME_H -#define __DEFAULTNAME_H - -#include "Common/MyString.h" - -UString GetDefaultName2(const UString &fileName, - const UString &extension, const UString &addSubExtension); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/DirItem.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/DirItem.h deleted file mode 100644 index e10d6b980e17..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/DirItem.h +++ /dev/null @@ -1,69 +0,0 @@ -// DirItem.h - -#ifndef __DIR_ITEM_H -#define __DIR_ITEM_H - -#include "Common/MyString.h" -#include "Common/Types.h" -#include "../../Archive/IArchive.h" - -struct CDirItem -{ - UInt64 Size; - FILETIME CTime; - FILETIME ATime; - FILETIME MTime; - UString Name; - UInt32 Attrib; - int PhyParent; - int LogParent; - - CDirItem(): PhyParent(-1), LogParent(-1) {} - bool IsDir() const { return (Attrib & FILE_ATTRIBUTE_DIRECTORY) != 0 ; } -}; - -class CDirItems -{ - UStringVector Prefixes; - CIntVector PhyParents; - CIntVector LogParents; - - UString GetPrefixesPath(const CIntVector &parents, int index, const UString &name) const; -public: - CObjectVector Items; - - int GetNumFolders() const { return Prefixes.Size(); } - UString GetPhyPath(int index) const; - UString GetLogPath(int index) const; - - int AddPrefix(int phyParent, int logParent, const UString &prefix); - void DeleteLastPrefix(); - - void EnumerateDirectory(int phyParent, int logParent, const UString &phyPrefix, - UStringVector &errorPaths, CRecordVector &errorCodes); - - void EnumerateDirItems2( - const UString &phyPrefix, - const UString &logPrefix, - const UStringVector &filePaths, - UStringVector &errorPaths, CRecordVector &errorCodes); - - void ReserveDown(); -}; - -struct CArcItem -{ - UInt64 Size; - FILETIME MTime; - UString Name; - bool IsDir; - bool SizeDefined; - bool MTimeDefined; - bool Censored; - UInt32 IndexInServer; - int TimeType; - - CArcItem(): IsDir(false), SizeDefined(false), MTimeDefined(false), Censored(false), TimeType(-1) {} -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/EnumDirItems.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/EnumDirItems.cpp deleted file mode 100644 index 61ecababcc6e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/EnumDirItems.cpp +++ /dev/null @@ -1,361 +0,0 @@ -// EnumDirItems.cpp - -#include "StdAfx.h" - -#include "EnumDirItems.h" - -using namespace NWindows; -using namespace NFile; -using namespace NName; - -void AddDirFileInfo(int phyParent, int logParent, - const NFind::CFileInfoW &fi, CObjectVector &dirItems) -{ - CDirItem di; - di.Size = fi.Size; - di.CTime = fi.CTime; - di.ATime = fi.ATime; - di.MTime = fi.MTime; - di.Attrib = fi.Attrib; - di.PhyParent = phyParent; - di.LogParent = logParent; - di.Name = fi.Name; - dirItems.Add(di); -} - -UString CDirItems::GetPrefixesPath(const CIntVector &parents, int index, const UString &name) const -{ - UString path; - int len = name.Length(); - int i; - for (i = index; i >= 0; i = parents[i]) - len += Prefixes[i].Length(); - int totalLen = len; - wchar_t *p = path.GetBuffer(len); - p[len] = 0; - len -= name.Length(); - memcpy(p + len, (const wchar_t *)name, name.Length() * sizeof(wchar_t)); - for (i = index; i >= 0; i = parents[i]) - { - const UString &s = Prefixes[i]; - len -= s.Length(); - memcpy(p + len, (const wchar_t *)s, s.Length() * sizeof(wchar_t)); - } - path.ReleaseBuffer(totalLen); - return path; -} - -UString CDirItems::GetPhyPath(int index) const -{ - const CDirItem &di = Items[index]; - return GetPrefixesPath(PhyParents, di.PhyParent, di.Name); -} - -UString CDirItems::GetLogPath(int index) const -{ - const CDirItem &di = Items[index]; - return GetPrefixesPath(LogParents, di.LogParent, di.Name); -} - -void CDirItems::ReserveDown() -{ - Prefixes.ReserveDown(); - PhyParents.ReserveDown(); - LogParents.ReserveDown(); - Items.ReserveDown(); -} - -int CDirItems::AddPrefix(int phyParent, int logParent, const UString &prefix) -{ - PhyParents.Add(phyParent); - LogParents.Add(logParent); - return Prefixes.Add(prefix); -} - -void CDirItems::DeleteLastPrefix() -{ - PhyParents.DeleteBack(); - LogParents.DeleteBack(); - Prefixes.DeleteBack(); -} - -void CDirItems::EnumerateDirectory(int phyParent, int logParent, const UString &phyPrefix, - UStringVector &errorPaths, CRecordVector &errorCodes) -{ - NFind::CEnumeratorW enumerator(phyPrefix + (wchar_t)kAnyStringWildcard); - for (;;) - { - NFind::CFileInfoW fi; - bool found; - if (!enumerator.Next(fi, found)) - { - errorCodes.Add(::GetLastError()); - errorPaths.Add(phyPrefix); - return; - } - if (!found) - break; - AddDirFileInfo(phyParent, logParent, fi, Items); - if (fi.IsDir()) - { - const UString name2 = fi.Name + (wchar_t)kDirDelimiter; - int parent = AddPrefix(phyParent, logParent, name2); - EnumerateDirectory(parent, parent, phyPrefix + name2, errorPaths, errorCodes); - } - } -} - -void CDirItems::EnumerateDirItems2(const UString &phyPrefix, const UString &logPrefix, - const UStringVector &filePaths, UStringVector &errorPaths, CRecordVector &errorCodes) -{ - int phyParent = phyPrefix.IsEmpty() ? -1 : AddPrefix(-1, -1, phyPrefix); - int logParent = logPrefix.IsEmpty() ? -1 : AddPrefix(-1, -1, logPrefix); - - for (int i = 0; i < filePaths.Size(); i++) - { - const UString &filePath = filePaths[i]; - NFind::CFileInfoW fi; - const UString phyPath = phyPrefix + filePath; - if (!fi.Find(phyPath)) - { - errorCodes.Add(::GetLastError()); - errorPaths.Add(phyPath); - continue; - } - int delimiter = filePath.ReverseFind((wchar_t)kDirDelimiter); - UString phyPrefixCur; - int phyParentCur = phyParent; - if (delimiter >= 0) - { - phyPrefixCur = filePath.Left(delimiter + 1); - phyParentCur = AddPrefix(phyParent, logParent, phyPrefixCur); - } - AddDirFileInfo(phyParentCur, logParent, fi, Items); - if (fi.IsDir()) - { - const UString name2 = fi.Name + (wchar_t)kDirDelimiter; - int parent = AddPrefix(phyParentCur, logParent, name2); - EnumerateDirectory(parent, parent, phyPrefix + phyPrefixCur + name2, errorPaths, errorCodes); - } - } - ReserveDown(); -} - -static HRESULT EnumerateDirItems(const NWildcard::CCensorNode &curNode, - int phyParent, int logParent, const UString &phyPrefix, - const UStringVector &addArchivePrefix, - CDirItems &dirItems, - bool enterToSubFolders, - IEnumDirItemCallback *callback, - UStringVector &errorPaths, - CRecordVector &errorCodes); - -static HRESULT EnumerateDirItems_Spec(const NWildcard::CCensorNode &curNode, - int phyParent, int logParent, const UString &curFolderName, - const UString &phyPrefix, - const UStringVector &addArchivePrefix, - CDirItems &dirItems, - bool enterToSubFolders, - IEnumDirItemCallback *callback, - UStringVector &errorPaths, - CRecordVector &errorCodes) - -{ - const UString name2 = curFolderName + (wchar_t)kDirDelimiter; - int parent = dirItems.AddPrefix(phyParent, logParent, name2); - int numItems = dirItems.Items.Size(); - HRESULT res = EnumerateDirItems(curNode, parent, parent, phyPrefix + name2, - addArchivePrefix, dirItems, enterToSubFolders, callback, errorPaths, errorCodes); - if (numItems == dirItems.Items.Size()) - dirItems.DeleteLastPrefix(); - return res; -} - - -static HRESULT EnumerateDirItems(const NWildcard::CCensorNode &curNode, - int phyParent, int logParent, const UString &phyPrefix, - const UStringVector &addArchivePrefix, // prefix from curNode - CDirItems &dirItems, - bool enterToSubFolders, - IEnumDirItemCallback *callback, - UStringVector &errorPaths, - CRecordVector &errorCodes) -{ - if (!enterToSubFolders) - if (curNode.NeedCheckSubDirs()) - enterToSubFolders = true; - if (callback) - RINOK(callback->ScanProgress(dirItems.GetNumFolders(), dirItems.Items.Size(), phyPrefix)); - - // try direct_names case at first - if (addArchivePrefix.IsEmpty() && !enterToSubFolders) - { - // check that all names are direct - int i; - for (i = 0; i < curNode.IncludeItems.Size(); i++) - { - const NWildcard::CItem &item = curNode.IncludeItems[i]; - if (item.Recursive || item.PathParts.Size() != 1) - break; - const UString &name = item.PathParts.Front(); - if (name.IsEmpty() || DoesNameContainWildCard(name)) - break; - } - if (i == curNode.IncludeItems.Size()) - { - // all names are direct (no wildcards) - // so we don't need file_system's dir enumerator - CRecordVector needEnterVector; - for (i = 0; i < curNode.IncludeItems.Size(); i++) - { - const NWildcard::CItem &item = curNode.IncludeItems[i]; - const UString &name = item.PathParts.Front(); - const UString fullPath = phyPrefix + name; - NFind::CFileInfoW fi; - if (!fi.Find(fullPath)) - { - errorCodes.Add(::GetLastError()); - errorPaths.Add(fullPath); - continue; - } - bool isDir = fi.IsDir(); - if (isDir && !item.ForDir || !isDir && !item.ForFile) - { - errorCodes.Add((DWORD)E_FAIL); - errorPaths.Add(fullPath); - continue; - } - { - UStringVector pathParts; - pathParts.Add(fi.Name); - if (curNode.CheckPathToRoot(false, pathParts, !isDir)) - continue; - } - AddDirFileInfo(phyParent, logParent, fi, dirItems.Items); - if (!isDir) - continue; - - UStringVector addArchivePrefixNew; - const NWildcard::CCensorNode *nextNode = 0; - int index = curNode.FindSubNode(name); - if (index >= 0) - { - for (int t = needEnterVector.Size(); t <= index; t++) - needEnterVector.Add(true); - needEnterVector[index] = false; - nextNode = &curNode.SubNodes[index]; - } - else - { - nextNode = &curNode; - addArchivePrefixNew.Add(name); // don't change it to fi.Name. It's for shortnames support - } - - RINOK(EnumerateDirItems_Spec(*nextNode, phyParent, logParent, fi.Name, phyPrefix, - addArchivePrefixNew, dirItems, true, callback, errorPaths, errorCodes)); - } - for (i = 0; i < curNode.SubNodes.Size(); i++) - { - if (i < needEnterVector.Size()) - if (!needEnterVector[i]) - continue; - const NWildcard::CCensorNode &nextNode = curNode.SubNodes[i]; - const UString fullPath = phyPrefix + nextNode.Name; - NFind::CFileInfoW fi; - if (!fi.Find(fullPath)) - { - if (!nextNode.AreThereIncludeItems()) - continue; - errorCodes.Add(::GetLastError()); - errorPaths.Add(fullPath); - continue; - } - if (!fi.IsDir()) - { - errorCodes.Add((DWORD)E_FAIL); - errorPaths.Add(fullPath); - continue; - } - - RINOK(EnumerateDirItems_Spec(nextNode, phyParent, logParent, fi.Name, phyPrefix, - UStringVector(), dirItems, false, callback, errorPaths, errorCodes)); - } - return S_OK; - } - } - - - NFind::CEnumeratorW enumerator(phyPrefix + wchar_t(kAnyStringWildcard)); - for (int ttt = 0; ; ttt++) - { - NFind::CFileInfoW fi; - bool found; - if (!enumerator.Next(fi, found)) - { - errorCodes.Add(::GetLastError()); - errorPaths.Add(phyPrefix); - break; - } - if (!found) - break; - - if (callback && (ttt & 0xFF) == 0xFF) - RINOK(callback->ScanProgress(dirItems.GetNumFolders(), dirItems.Items.Size(), phyPrefix)); - const UString &name = fi.Name; - bool enterToSubFolders2 = enterToSubFolders; - UStringVector addArchivePrefixNew = addArchivePrefix; - addArchivePrefixNew.Add(name); - { - UStringVector addArchivePrefixNewTemp(addArchivePrefixNew); - if (curNode.CheckPathToRoot(false, addArchivePrefixNewTemp, !fi.IsDir())) - continue; - } - if (curNode.CheckPathToRoot(true, addArchivePrefixNew, !fi.IsDir())) - { - AddDirFileInfo(phyParent, logParent, fi, dirItems.Items); - if (fi.IsDir()) - enterToSubFolders2 = true; - } - if (!fi.IsDir()) - continue; - - const NWildcard::CCensorNode *nextNode = 0; - if (addArchivePrefix.IsEmpty()) - { - int index = curNode.FindSubNode(name); - if (index >= 0) - nextNode = &curNode.SubNodes[index]; - } - if (!enterToSubFolders2 && nextNode == 0) - continue; - - addArchivePrefixNew = addArchivePrefix; - if (nextNode == 0) - { - nextNode = &curNode; - addArchivePrefixNew.Add(name); - } - - RINOK(EnumerateDirItems_Spec(*nextNode, phyParent, logParent, name, phyPrefix, - addArchivePrefixNew, dirItems, enterToSubFolders2, callback, errorPaths, errorCodes)); - } - return S_OK; -} - -HRESULT EnumerateItems( - const NWildcard::CCensor &censor, - CDirItems &dirItems, - IEnumDirItemCallback *callback, - UStringVector &errorPaths, - CRecordVector &errorCodes) -{ - for (int i = 0; i < censor.Pairs.Size(); i++) - { - const NWildcard::CPair &pair = censor.Pairs[i]; - int phyParent = pair.Prefix.IsEmpty() ? -1 : dirItems.AddPrefix(-1, -1, pair.Prefix); - RINOK(EnumerateDirItems(pair.Head, phyParent, -1, pair.Prefix, UStringVector(), dirItems, false, - callback, errorPaths, errorCodes)); - } - dirItems.ReserveDown(); - return S_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/EnumDirItems.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/EnumDirItems.h deleted file mode 100644 index 835ae028e3b1..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/EnumDirItems.h +++ /dev/null @@ -1,25 +0,0 @@ -// EnumDirItems.h - -#ifndef __ENUM_DIR_ITEMS_H -#define __ENUM_DIR_ITEMS_H - -#include "Common/Wildcard.h" -#include "Windows/FileFind.h" -#include "DirItem.h" - -void AddDirFileInfo(int phyParent, int logParent, - const NWindows::NFile::NFind::CFileInfoW &fi, CObjectVector &dirItems); - -struct IEnumDirItemCallback -{ - virtual HRESULT ScanProgress(UInt64 numFolders, UInt64 numFiles, const wchar_t *path) = 0; -}; - -HRESULT EnumerateItems( - const NWildcard::CCensor &censor, - CDirItems &dirItems, - IEnumDirItemCallback *callback, - UStringVector &errorPaths, - CRecordVector &errorCodes); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExitCode.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExitCode.h deleted file mode 100644 index d03ec6d797fa..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExitCode.h +++ /dev/null @@ -1,27 +0,0 @@ -// ExitCode.h - -#ifndef __EXIT_CODE_H -#define __EXIT_CODE_H - -namespace NExitCode { - -enum EEnum { - - kSuccess = 0, // Successful operation - kWarning = 1, // Non fatal error(s) occurred - kFatalError = 2, // A fatal error occurred - // kCRCError = 3, // A CRC error occurred when unpacking - // kLockedArchive = 4, // Attempt to modify an archive previously locked - // kWriteError = 5, // Write to disk error - // kOpenError = 6, // Open file error - kUserError = 7, // Command line option error - kMemoryError = 8, // Not enough memory for operation - // kCreateFileError = 9, // Create file error - - kUserBreak = 255 // User stopped the process - -}; - -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Extract.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Extract.cpp deleted file mode 100644 index cd05c5e36799..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Extract.cpp +++ /dev/null @@ -1,253 +0,0 @@ -// Extract.cpp - -#include "StdAfx.h" - -#include - -#include "Windows/FileDir.h" -#include "Windows/PropVariant.h" -#include "Windows/PropVariantConversions.h" - -#include "../Common/ExtractingFilePath.h" - -#include "Extract.h" -#include "SetProperties.h" - -using namespace NWindows; - -static HRESULT DecompressArchive( - const CArc &arc, - UInt64 packSize, - const NWildcard::CCensorNode &wildcardCensor, - const CExtractOptions &options, - IExtractCallbackUI *callback, - CArchiveExtractCallback *extractCallbackSpec, - UString &errorMessage, - UInt64 &stdInProcessed) -{ - stdInProcessed = 0; - IInArchive *archive = arc.Archive; - CRecordVector realIndices; - if (!options.StdInMode) - { - UInt32 numItems; - RINOK(archive->GetNumberOfItems(&numItems)); - - for (UInt32 i = 0; i < numItems; i++) - { - UString filePath; - RINOK(arc.GetItemPath(i, filePath)); - bool isFolder; - RINOK(IsArchiveItemFolder(archive, i, isFolder)); - if (!wildcardCensor.CheckPath(filePath, !isFolder)) - continue; - realIndices.Add(i); - } - if (realIndices.Size() == 0) - { - callback->ThereAreNoFiles(); - return S_OK; - } - } - - UStringVector removePathParts; - - UString outDir = options.OutputDir; - outDir.Replace(L"*", GetCorrectFsPath(arc.DefaultName)); - #ifdef _WIN32 - outDir.TrimRight(); - outDir = GetCorrectFullFsPath(outDir); - #endif - - if (!outDir.IsEmpty()) - if (!NFile::NDirectory::CreateComplexDirectory(outDir)) - { - HRESULT res = ::GetLastError(); - if (res == S_OK) - res = E_FAIL; - errorMessage = ((UString)L"Can not create output directory ") + outDir; - return res; - } - - extractCallbackSpec->Init( - options.StdInMode ? &wildcardCensor : NULL, - &arc, - callback, - options.StdOutMode, options.TestMode, options.CalcCrc, - outDir, - removePathParts, - packSize); - - #ifdef COMPRESS_MT - RINOK(SetProperties(archive, options.Properties)); - #endif - - HRESULT result; - Int32 testMode = (options.TestMode && !options.CalcCrc) ? 1: 0; - if (options.StdInMode) - { - result = archive->Extract(NULL, (UInt32)(Int32)-1, testMode, extractCallbackSpec); - NCOM::CPropVariant prop; - if (archive->GetArchiveProperty(kpidPhySize, &prop) == S_OK) - if (prop.vt == VT_UI8 || prop.vt == VT_UI4) - stdInProcessed = ConvertPropVariantToUInt64(prop); - } - else - result = archive->Extract(&realIndices.Front(), realIndices.Size(), testMode, extractCallbackSpec); - - return callback->ExtractResult(result); -} - -HRESULT DecompressArchives( - CCodecs *codecs, const CIntVector &formatIndices, - UStringVector &arcPaths, UStringVector &arcPathsFull, - const NWildcard::CCensorNode &wildcardCensor, - const CExtractOptions &options, - IOpenCallbackUI *openCallback, - IExtractCallbackUI *extractCallback, - UString &errorMessage, - CDecompressStat &stat) -{ - stat.Clear(); - int i; - UInt64 totalPackSize = 0; - CRecordVector archiveSizes; - - int numArcs = options.StdInMode ? 1 : arcPaths.Size(); - - for (i = 0; i < numArcs; i++) - { - NFile::NFind::CFileInfoW fi; - fi.Size = 0; - if (!options.StdInMode) - { - const UString &arcPath = arcPaths[i]; - if (!fi.Find(arcPath)) - throw "there is no such archive"; - if (fi.IsDir()) - throw "can't decompress folder"; - } - archiveSizes.Add(fi.Size); - totalPackSize += fi.Size; - } - CArchiveExtractCallback *extractCallbackSpec = new CArchiveExtractCallback; - CMyComPtr ec(extractCallbackSpec); - bool multi = (numArcs > 1); - extractCallbackSpec->InitForMulti(multi, options.PathMode, options.OverwriteMode); - if (multi) - { - RINOK(extractCallback->SetTotal(totalPackSize)); - } - for (i = 0; i < numArcs; i++) - { - const UString &arcPath = arcPaths[i]; - NFile::NFind::CFileInfoW fi; - if (options.StdInMode) - { - fi.Size = 0; - fi.Attrib = 0; - } - else - { - if (!fi.Find(arcPath) || fi.IsDir()) - throw "there is no such archive"; - } - - #ifndef _NO_CRYPTO - openCallback->Open_ClearPasswordWasAskedFlag(); - #endif - - RINOK(extractCallback->BeforeOpen(arcPath)); - CArchiveLink archiveLink; - - CIntVector formatIndices2 = formatIndices; - #ifndef _SFX - if (formatIndices.IsEmpty()) - { - int pos = arcPath.ReverseFind(L'.'); - if (pos >= 0) - { - UString s = arcPath.Mid(pos + 1); - int index = codecs->FindFormatForExtension(s); - if (index >= 0 && s == L"001") - { - s = arcPath.Left(pos); - pos = s.ReverseFind(L'.'); - if (pos >= 0) - { - int index2 = codecs->FindFormatForExtension(s.Mid(pos + 1)); - if (index2 >= 0 && s.CompareNoCase(L"rar") != 0) - { - formatIndices2.Add(index2); - formatIndices2.Add(index); - } - } - } - } - } - #endif - HRESULT result = archiveLink.Open2(codecs, formatIndices2, options.StdInMode, NULL, arcPath, openCallback); - if (result == E_ABORT) - return result; - - bool crypted = false; - #ifndef _NO_CRYPTO - crypted = openCallback->Open_WasPasswordAsked(); - #endif - - RINOK(extractCallback->OpenResult(arcPath, result, crypted)); - if (result != S_OK) - continue; - - if (!options.StdInMode) - for (int v = 0; v < archiveLink.VolumePaths.Size(); v++) - { - int index = arcPathsFull.FindInSorted(archiveLink.VolumePaths[v]); - if (index >= 0 && index > i) - { - arcPaths.Delete(index); - arcPathsFull.Delete(index); - totalPackSize -= archiveSizes[index]; - archiveSizes.Delete(index); - numArcs = arcPaths.Size(); - } - } - if (archiveLink.VolumePaths.Size() != 0) - { - totalPackSize += archiveLink.VolumesSize; - RINOK(extractCallback->SetTotal(totalPackSize)); - } - - #ifndef _NO_CRYPTO - UString password; - RINOK(openCallback->Open_GetPasswordIfAny(password)); - if (!password.IsEmpty()) - { - RINOK(extractCallback->SetPassword(password)); - } - #endif - - CArc &arc = archiveLink.Arcs.Back(); - arc.MTimeDefined = (!options.StdInMode && !fi.IsDevice); - arc.MTime = fi.MTime; - - UInt64 packProcessed; - RINOK(DecompressArchive(arc, - fi.Size + archiveLink.VolumesSize, - wildcardCensor, options, extractCallback, extractCallbackSpec, errorMessage, packProcessed)); - if (!options.StdInMode) - packProcessed = fi.Size + archiveLink.VolumesSize; - extractCallbackSpec->LocalProgressSpec->InSize += packProcessed; - extractCallbackSpec->LocalProgressSpec->OutSize = extractCallbackSpec->UnpackSize; - if (!errorMessage.IsEmpty()) - return E_FAIL; - } - stat.NumFolders = extractCallbackSpec->NumFolders; - stat.NumFiles = extractCallbackSpec->NumFiles; - stat.UnpackSize = extractCallbackSpec->UnpackSize; - stat.CrcSum = extractCallbackSpec->CrcSum; - - stat.NumArchives = arcPaths.Size(); - stat.PackSize = extractCallbackSpec->LocalProgressSpec->InSize; - return S_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Extract.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Extract.h deleted file mode 100644 index b171a7e5379b..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Extract.h +++ /dev/null @@ -1,76 +0,0 @@ -// Extract.h - -#ifndef __EXTRACT_H -#define __EXTRACT_H - -#include "Windows/FileFind.h" - -#include "../../Archive/IArchive.h" - -#include "ArchiveExtractCallback.h" -#include "ArchiveOpenCallback.h" -#include "ExtractMode.h" -#include "Property.h" - -#include "../Common/LoadCodecs.h" - -struct CExtractOptions -{ - bool StdInMode; - bool StdOutMode; - bool YesToAll; - bool TestMode; - bool CalcCrc; - NExtract::NPathMode::EEnum PathMode; - NExtract::NOverwriteMode::EEnum OverwriteMode; - UString OutputDir; - - // bool ShowDialog; - // bool PasswordEnabled; - // UString Password; - #ifdef COMPRESS_MT - CObjectVector Properties; - #endif - - #ifdef EXTERNAL_CODECS - CCodecs *Codecs; - #endif - - CExtractOptions(): - StdInMode(false), - StdOutMode(false), - YesToAll(false), - TestMode(false), - CalcCrc(false), - PathMode(NExtract::NPathMode::kFullPathnames), - OverwriteMode(NExtract::NOverwriteMode::kAskBefore) - {} -}; - -struct CDecompressStat -{ - UInt64 NumArchives; - UInt64 UnpackSize; - UInt64 PackSize; - UInt64 NumFolders; - UInt64 NumFiles; - UInt32 CrcSum; - - void Clear() - { - NumArchives = UnpackSize = PackSize = NumFolders = NumFiles = 0; - CrcSum = 0; - } -}; - -HRESULT DecompressArchives( - CCodecs *codecs, const CIntVector &formatIndices, - UStringVector &archivePaths, UStringVector &archivePathsFull, - const NWildcard::CCensorNode &wildcardCensor, - const CExtractOptions &options, - IOpenCallbackUI *openCallback, - IExtractCallbackUI *extractCallback, - UString &errorMessage, - CDecompressStat &stat); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExtractMode.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExtractMode.h deleted file mode 100644 index 44c40531f585..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExtractMode.h +++ /dev/null @@ -1,31 +0,0 @@ -// ExtractMode.h - -#ifndef __EXTRACT_MODE_H -#define __EXTRACT_MODE_H - -namespace NExtract { - - namespace NPathMode - { - enum EEnum - { - kFullPathnames, - kCurrentPathnames, - kNoPathnames - }; - } - - namespace NOverwriteMode - { - enum EEnum - { - kAskBefore, - kWithoutPrompt, - kSkipExisting, - kAutoRename, - kAutoRenameExisting - }; - } -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExtractingFilePath.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExtractingFilePath.cpp deleted file mode 100644 index fc889a313943..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExtractingFilePath.cpp +++ /dev/null @@ -1,140 +0,0 @@ -// ExtractingFilePath.cpp - -#include "StdAfx.h" - -#include "Common/Wildcard.h" - -#include "ExtractingFilePath.h" - -static UString ReplaceIncorrectChars(const UString &s) -{ - #ifdef _WIN32 - UString res; - for (int i = 0; i < s.Length(); i++) - { - wchar_t c = s[i]; - if (c < 0x20 || c == '*' || c == '?' || c == '<' || c == '>' || c == '|' || c == ':' || c == '"') - c = '_'; - res += c; - } - res.TrimRight(); - while (!res.IsEmpty() && res[res.Length() - 1] == '.') - res.Delete(res.Length() - 1); - return res; - #else - return s; - #endif -} - -#ifdef _WIN32 -static const wchar_t *g_ReservedNames[] = -{ - L"CON", L"PRN", L"AUX", L"NUL" -}; - -static bool CheckTail(const UString &name, int len) -{ - int dotPos = name.Find(L'.'); - if (dotPos < 0) - dotPos = name.Length(); - UString s = name.Left(dotPos); - s.TrimRight(); - return (s.Length() != len); -} - -static bool CheckNameNum(const UString &name, const wchar_t *reservedName) -{ - int len = MyStringLen(reservedName); - if (name.Length() <= len) - return true; - if (name.Left(len).CompareNoCase(reservedName) != 0) - return true; - wchar_t c = name[len]; - if (c < L'0' || c > L'9') - return true; - return CheckTail(name, len + 1); -} - -static bool IsSupportedName(const UString &name) -{ - for (int i = 0; i < sizeof(g_ReservedNames) / sizeof(g_ReservedNames[0]); i++) - { - const wchar_t *reservedName = g_ReservedNames[i]; - int len = MyStringLen(reservedName); - if (name.Length() < len) - continue; - if (name.Left(len).CompareNoCase(reservedName) != 0) - continue; - if (!CheckTail(name, len)) - return false; - } - if (!CheckNameNum(name, L"COM")) - return false; - return CheckNameNum(name, L"LPT"); -} -#endif - -static UString GetCorrectFileName(const UString &path) -{ - if (path == L".." || path == L".") - return UString(); - return ReplaceIncorrectChars(path); -} - -void MakeCorrectPath(UStringVector &pathParts) -{ - for (int i = 0; i < pathParts.Size();) - { - UString &s = pathParts[i]; - s = GetCorrectFileName(s); - if (s.IsEmpty()) - pathParts.Delete(i); - else - { - #ifdef _WIN32 - if (!IsSupportedName(s)) - s = (UString)L"_" + s; - #endif - i++; - } - } -} - -UString MakePathNameFromParts(const UStringVector &parts) -{ - UString result; - for (int i = 0; i < parts.Size(); i++) - { - if (i != 0) - result += WCHAR_PATH_SEPARATOR; - result += parts[i]; - } - return result; -} - -UString GetCorrectFsPath(const UString &path) -{ - UString res = GetCorrectFileName(path); - #ifdef _WIN32 - if (!IsSupportedName(res)) - res = (UString)L"_" + res; - #endif - return res; -} - -UString GetCorrectFullFsPath(const UString &path) -{ - UStringVector parts; - SplitPathToParts(path, parts); - for (int i = 0; i < parts.Size(); i++) - { - UString &s = parts[i]; - #ifdef _WIN32 - while (!s.IsEmpty() && s[s.Length() - 1] == '.') - s.Delete(s.Length() - 1); - if (!IsSupportedName(s)) - s = (UString)L"_" + s; - #endif - } - return MakePathNameFromParts(parts); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExtractingFilePath.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExtractingFilePath.h deleted file mode 100644 index 54bdc72fa06b..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ExtractingFilePath.h +++ /dev/null @@ -1,13 +0,0 @@ -// ExtractingFilePath.h - -#ifndef __EXTRACTING_FILE_PATH_H -#define __EXTRACTING_FILE_PATH_H - -#include "Common/MyString.h" - -UString MakePathNameFromParts(const UStringVector &parts); -void MakeCorrectPath(UStringVector &pathParts); -UString GetCorrectFsPath(const UString &path); -UString GetCorrectFullFsPath(const UString &path); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/IFileExtractCallback.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/IFileExtractCallback.h deleted file mode 100644 index 5aff92fdc8d7..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/IFileExtractCallback.h +++ /dev/null @@ -1,46 +0,0 @@ -// IFileExtractCallback.h - -#ifndef __IFILEEXTRACTCALLBACK_H -#define __IFILEEXTRACTCALLBACK_H - -#include "Common/MyString.h" -#include "../../IDecl.h" - -namespace NOverwriteAnswer -{ - enum EEnum - { - kYes, - kYesToAll, - kNo, - kNoToAll, - kAutoRename, - kCancel - }; -} - -DECL_INTERFACE_SUB(IFolderArchiveExtractCallback, IProgress, 0x01, 0x07) -{ -public: - STDMETHOD(AskOverwrite)( - const wchar_t *existName, const FILETIME *existTime, const UInt64 *existSize, - const wchar_t *newName, const FILETIME *newTime, const UInt64 *newSize, - Int32 *answer) PURE; - STDMETHOD(PrepareOperation)(const wchar_t *name, bool isFolder, Int32 askExtractMode, const UInt64 *position) PURE; - STDMETHOD(MessageError)(const wchar_t *message) PURE; - STDMETHOD(SetOperationResult)(Int32 operationResult, bool encrypted) PURE; -}; - -struct IExtractCallbackUI: IFolderArchiveExtractCallback -{ - virtual HRESULT BeforeOpen(const wchar_t *name) = 0; - virtual HRESULT OpenResult(const wchar_t *name, HRESULT result, bool encrypted) = 0; - virtual HRESULT ThereAreNoFiles() = 0; - virtual HRESULT ExtractResult(HRESULT result) = 0; - - #ifndef _NO_CRYPTO - virtual HRESULT SetPassword(const UString &password) = 0; - #endif -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/LoadCodecs.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/LoadCodecs.cpp deleted file mode 100644 index 67a0cc77911d..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/LoadCodecs.cpp +++ /dev/null @@ -1,681 +0,0 @@ -// LoadCodecs.cpp - -#include "StdAfx.h" - -#include "LoadCodecs.h" - -#include "../../../Common/MyCom.h" -#ifdef NEW_FOLDER_INTERFACE -#include "../../../Common/StringToInt.h" -#endif -#include "../../../Windows/PropVariant.h" - -#include "../../ICoder.h" -#include "../../Common/RegisterArc.h" - -#ifdef EXTERNAL_CODECS -#include "../../../Windows/FileFind.h" -#include "../../../Windows/DLL.h" -#ifdef NEW_FOLDER_INTERFACE -#include "../../../Windows/ResourceString.h" -static const UINT kIconTypesResId = 100; -#endif - -#ifdef _WIN32 -#include "Windows/Registry.h" -#endif - -using namespace NWindows; -using namespace NFile; - -#ifdef _WIN32 -extern HINSTANCE g_hInstance; -#endif - -static CSysString GetLibraryFolderPrefix() -{ - #ifdef _WIN32 - TCHAR fullPath[MAX_PATH + 1]; - ::GetModuleFileName(g_hInstance, fullPath, MAX_PATH); - CSysString path = fullPath; - int pos = path.ReverseFind(TEXT(CHAR_PATH_SEPARATOR)); - return path.Left(pos + 1); - #else - return CSysString(); // FIX IT - #endif -} - -#define kCodecsFolderName TEXT("Codecs") -#define kFormatsFolderName TEXT("Formats") -static const TCHAR *kMainDll = TEXT("7z.dll"); - -#ifdef _WIN32 -static LPCTSTR kRegistryPath = TEXT("Software") TEXT(STRING_PATH_SEPARATOR) TEXT("7-zip"); -static LPCTSTR kProgramPathValue = TEXT("Path"); -static bool ReadPathFromRegistry(HKEY baseKey, CSysString &path) -{ - NRegistry::CKey key; - if(key.Open(baseKey, kRegistryPath, KEY_READ) == ERROR_SUCCESS) - if (key.QueryValue(kProgramPathValue, path) == ERROR_SUCCESS) - { - NName::NormalizeDirPathPrefix(path); - return true; - } - return false; -} - -#endif - -CSysString GetBaseFolderPrefixFromRegistry() -{ - CSysString moduleFolderPrefix = GetLibraryFolderPrefix(); - #ifdef _WIN32 - if (!NFind::DoesFileExist(moduleFolderPrefix + kMainDll) && - !NFind::DoesDirExist(moduleFolderPrefix + kCodecsFolderName) && - !NFind::DoesDirExist(moduleFolderPrefix + kFormatsFolderName)) - { - CSysString path; - if (ReadPathFromRegistry(HKEY_CURRENT_USER, path)) - return path; - if (ReadPathFromRegistry(HKEY_LOCAL_MACHINE, path)) - return path; - } - #endif - return moduleFolderPrefix; -} - -typedef UInt32 (WINAPI *GetNumberOfMethodsFunc)(UInt32 *numMethods); -typedef UInt32 (WINAPI *GetNumberOfFormatsFunc)(UInt32 *numFormats); -typedef UInt32 (WINAPI *GetHandlerPropertyFunc)(PROPID propID, PROPVARIANT *value); -typedef UInt32 (WINAPI *GetHandlerPropertyFunc2)(UInt32 index, PROPID propID, PROPVARIANT *value); -typedef UInt32 (WINAPI *CreateObjectFunc)(const GUID *clsID, const GUID *iid, void **outObject); -typedef UInt32 (WINAPI *SetLargePageModeFunc)(); - - -static HRESULT GetCoderClass(GetMethodPropertyFunc getMethodProperty, UInt32 index, - PROPID propId, CLSID &clsId, bool &isAssigned) -{ - NWindows::NCOM::CPropVariant prop; - isAssigned = false; - RINOK(getMethodProperty(index, propId, &prop)); - if (prop.vt == VT_BSTR) - { - isAssigned = true; - clsId = *(const GUID *)prop.bstrVal; - } - else if (prop.vt != VT_EMPTY) - return E_FAIL; - return S_OK; -} - -HRESULT CCodecs::LoadCodecs() -{ - CCodecLib &lib = Libs.Back(); - lib.GetMethodProperty = (GetMethodPropertyFunc)lib.Lib.GetProc("GetMethodProperty"); - if (lib.GetMethodProperty == NULL) - return S_OK; - - UInt32 numMethods = 1; - GetNumberOfMethodsFunc getNumberOfMethodsFunc = (GetNumberOfMethodsFunc)lib.Lib.GetProc("GetNumberOfMethods"); - if (getNumberOfMethodsFunc != NULL) - { - RINOK(getNumberOfMethodsFunc(&numMethods)); - } - - for(UInt32 i = 0; i < numMethods; i++) - { - CDllCodecInfo info; - info.LibIndex = Libs.Size() - 1; - info.CodecIndex = i; - - RINOK(GetCoderClass(lib.GetMethodProperty, i, NMethodPropID::kEncoder, info.Encoder, info.EncoderIsAssigned)); - RINOK(GetCoderClass(lib.GetMethodProperty, i, NMethodPropID::kDecoder, info.Decoder, info.DecoderIsAssigned)); - - Codecs.Add(info); - } - return S_OK; -} - -static HRESULT ReadProp( - GetHandlerPropertyFunc getProp, - GetHandlerPropertyFunc2 getProp2, - UInt32 index, PROPID propID, NCOM::CPropVariant &prop) -{ - if (getProp2) - return getProp2(index, propID, &prop);; - return getProp(propID, &prop); -} - -static HRESULT ReadBoolProp( - GetHandlerPropertyFunc getProp, - GetHandlerPropertyFunc2 getProp2, - UInt32 index, PROPID propID, bool &res) -{ - NCOM::CPropVariant prop; - RINOK(ReadProp(getProp, getProp2, index, propID, prop)); - if (prop.vt == VT_BOOL) - res = VARIANT_BOOLToBool(prop.boolVal); - else if (prop.vt != VT_EMPTY) - return E_FAIL; - return S_OK; -} - -static HRESULT ReadStringProp( - GetHandlerPropertyFunc getProp, - GetHandlerPropertyFunc2 getProp2, - UInt32 index, PROPID propID, UString &res) -{ - NCOM::CPropVariant prop; - RINOK(ReadProp(getProp, getProp2, index, propID, prop)); - if (prop.vt == VT_BSTR) - res = prop.bstrVal; - else if (prop.vt != VT_EMPTY) - return E_FAIL; - return S_OK; -} - -#endif - -static const unsigned int kNumArcsMax = 48; -static unsigned int g_NumArcs = 0; -static const CArcInfo *g_Arcs[kNumArcsMax]; -void RegisterArc(const CArcInfo *arcInfo) -{ - if (g_NumArcs < kNumArcsMax) - g_Arcs[g_NumArcs++] = arcInfo; -} - -static void SplitString(const UString &srcString, UStringVector &destStrings) -{ - destStrings.Clear(); - UString s; - int len = srcString.Length(); - if (len == 0) - return; - for (int i = 0; i < len; i++) - { - wchar_t c = srcString[i]; - if (c == L' ') - { - if (!s.IsEmpty()) - { - destStrings.Add(s); - s.Empty(); - } - } - else - s += c; - } - if (!s.IsEmpty()) - destStrings.Add(s); -} - -void CArcInfoEx::AddExts(const wchar_t *ext, const wchar_t *addExt) -{ - UStringVector exts, addExts; - if (ext != 0) - SplitString(ext, exts); - if (addExt != 0) - SplitString(addExt, addExts); - for (int i = 0; i < exts.Size(); i++) - { - CArcExtInfo extInfo; - extInfo.Ext = exts[i]; - if (i < addExts.Size()) - { - extInfo.AddExt = addExts[i]; - if (extInfo.AddExt == L"*") - extInfo.AddExt.Empty(); - } - Exts.Add(extInfo); - } -} - -#ifdef EXTERNAL_CODECS - -HRESULT CCodecs::LoadFormats() -{ - const NDLL::CLibrary &lib = Libs.Back().Lib; - GetHandlerPropertyFunc getProp = 0; - GetHandlerPropertyFunc2 getProp2 = (GetHandlerPropertyFunc2)lib.GetProc("GetHandlerProperty2"); - if (getProp2 == NULL) - { - getProp = (GetHandlerPropertyFunc)lib.GetProc("GetHandlerProperty"); - if (getProp == NULL) - return S_OK; - } - - UInt32 numFormats = 1; - GetNumberOfFormatsFunc getNumberOfFormats = (GetNumberOfFormatsFunc)lib.GetProc("GetNumberOfFormats"); - if (getNumberOfFormats != NULL) - { - RINOK(getNumberOfFormats(&numFormats)); - } - if (getProp2 == NULL) - numFormats = 1; - - for(UInt32 i = 0; i < numFormats; i++) - { - CArcInfoEx item; - item.LibIndex = Libs.Size() - 1; - item.FormatIndex = i; - - RINOK(ReadStringProp(getProp, getProp2, i, NArchive::kName, item.Name)); - - NCOM::CPropVariant prop; - if (ReadProp(getProp, getProp2, i, NArchive::kClassID, prop) != S_OK) - continue; - if (prop.vt != VT_BSTR) - continue; - item.ClassID = *(const GUID *)prop.bstrVal; - prop.Clear(); - - UString ext, addExt; - RINOK(ReadStringProp(getProp, getProp2, i, NArchive::kExtension, ext)); - RINOK(ReadStringProp(getProp, getProp2, i, NArchive::kAddExtension, addExt)); - item.AddExts(ext, addExt); - - ReadBoolProp(getProp, getProp2, i, NArchive::kUpdate, item.UpdateEnabled); - if (item.UpdateEnabled) - ReadBoolProp(getProp, getProp2, i, NArchive::kKeepName, item.KeepName); - - if (ReadProp(getProp, getProp2, i, NArchive::kStartSignature, prop) == S_OK) - if (prop.vt == VT_BSTR) - { - UINT len = ::SysStringByteLen(prop.bstrVal); - item.StartSignature.SetCapacity(len); - memmove(item.StartSignature, prop.bstrVal, len); - } - Formats.Add(item); - } - return S_OK; -} - -#ifdef NEW_FOLDER_INTERFACE -void CCodecIcons::LoadIcons(HMODULE m) -{ - UString iconTypes = MyLoadStringW(m, kIconTypesResId); - UStringVector pairs; - SplitString(iconTypes, pairs); - for (int i = 0; i < pairs.Size(); i++) - { - const UString &s = pairs[i]; - int pos = s.Find(L':'); - CIconPair iconPair; - iconPair.IconIndex = -1; - if (pos < 0) - pos = s.Length(); - else - { - UString num = s.Mid(pos + 1); - if (!num.IsEmpty()) - { - const wchar_t *end; - iconPair.IconIndex = (UInt32)ConvertStringToUInt64(num, &end); - if (*end != L'\0') - continue; - } - } - iconPair.Ext = s.Left(pos); - IconPairs.Add(iconPair); - } -} - -bool CCodecIcons::FindIconIndex(const UString &ext, int &iconIndex) const -{ - iconIndex = -1; - for (int i = 0; i < IconPairs.Size(); i++) - { - const CIconPair &pair = IconPairs[i]; - if (ext.CompareNoCase(pair.Ext) == 0) - { - iconIndex = pair.IconIndex; - return true; - } - } - return false; -} -#endif - -#ifdef _7ZIP_LARGE_PAGES -extern "C" -{ - extern SIZE_T g_LargePageSize; -} -#endif - -HRESULT CCodecs::LoadDll(const CSysString &dllPath, bool needCheckDll) -{ - if (needCheckDll) - { - NDLL::CLibrary library; - if (!library.LoadEx(dllPath, LOAD_LIBRARY_AS_DATAFILE)) - return S_OK; - } - Libs.Add(CCodecLib()); - CCodecLib &lib = Libs.Back(); - #ifdef NEW_FOLDER_INTERFACE - lib.Path = dllPath; - #endif - bool used = false; - HRESULT res = S_OK; - if (lib.Lib.Load(dllPath)) - { - #ifdef NEW_FOLDER_INTERFACE - lib.LoadIcons(); - #endif - - #ifdef _7ZIP_LARGE_PAGES - if (g_LargePageSize != 0) - { - SetLargePageModeFunc setLargePageMode = (SetLargePageModeFunc)lib.Lib.GetProc("SetLargePageMode"); - if (setLargePageMode != 0) - setLargePageMode(); - } - #endif - - lib.CreateObject = (CreateObjectFunc)lib.Lib.GetProc("CreateObject"); - if (lib.CreateObject != 0) - { - int startSize = Codecs.Size(); - res = LoadCodecs(); - used = (Codecs.Size() != startSize); - if (res == S_OK) - { - startSize = Formats.Size(); - res = LoadFormats(); - used = used || (Formats.Size() != startSize); - } - } - } - if (!used) - Libs.DeleteBack(); - return res; -} - -HRESULT CCodecs::LoadDllsFromFolder(const CSysString &folderPrefix) -{ - NFile::NFind::CEnumerator enumerator(folderPrefix + CSysString(TEXT("*"))); - NFile::NFind::CFileInfo fi; - while (enumerator.Next(fi)) - { - if (fi.IsDir()) - continue; - RINOK(LoadDll(folderPrefix + fi.Name, true)); - } - return S_OK; -} - -#endif - -#ifndef _SFX -static inline void SetBuffer(CByteBuffer &bb, const Byte *data, int size) -{ - bb.SetCapacity(size); - memmove((Byte *)bb, data, size); -} -#endif - -HRESULT CCodecs::Load() -{ - #ifdef NEW_FOLDER_INTERFACE - InternalIcons.LoadIcons(g_hInstance); - #endif - - Formats.Clear(); - #ifdef EXTERNAL_CODECS - Codecs.Clear(); - #endif - for (UInt32 i = 0; i < g_NumArcs; i++) - { - const CArcInfo &arc = *g_Arcs[i]; - CArcInfoEx item; - item.Name = arc.Name; - item.CreateInArchive = arc.CreateInArchive; - item.CreateOutArchive = arc.CreateOutArchive; - item.AddExts(arc.Ext, arc.AddExt); - item.UpdateEnabled = (arc.CreateOutArchive != 0); - item.KeepName = arc.KeepName; - - #ifndef _SFX - SetBuffer(item.StartSignature, arc.Signature, arc.SignatureSize); - #endif - Formats.Add(item); - } - #ifdef EXTERNAL_CODECS - const CSysString baseFolder = GetBaseFolderPrefixFromRegistry(); - RINOK(LoadDll(baseFolder + kMainDll, false)); - RINOK(LoadDllsFromFolder(baseFolder + kCodecsFolderName TEXT(STRING_PATH_SEPARATOR))); - RINOK(LoadDllsFromFolder(baseFolder + kFormatsFolderName TEXT(STRING_PATH_SEPARATOR))); - #endif - return S_OK; -} - -#ifndef _SFX - -int CCodecs::FindFormatForArchiveName(const UString &arcPath) const -{ - int slashPos1 = arcPath.ReverseFind(WCHAR_PATH_SEPARATOR); - int slashPos2 = arcPath.ReverseFind(L'.'); - int dotPos = arcPath.ReverseFind(L'.'); - if (dotPos < 0 || dotPos < slashPos1 || dotPos < slashPos2) - return -1; - UString ext = arcPath.Mid(dotPos + 1); - for (int i = 0; i < Formats.Size(); i++) - { - const CArcInfoEx &arc = Formats[i]; - if (!arc.UpdateEnabled) - continue; - if (arc.FindExtension(ext) >= 0) - return i; - } - return -1; -} - -int CCodecs::FindFormatForExtension(const UString &ext) const -{ - if (ext.IsEmpty()) - return -1; - for (int i = 0; i < Formats.Size(); i++) - if (Formats[i].FindExtension(ext) >= 0) - return i; - return -1; -} - -int CCodecs::FindFormatForArchiveType(const UString &arcType) const -{ - for (int i = 0; i < Formats.Size(); i++) - if (Formats[i].Name.CompareNoCase(arcType) == 0) - return i; - return -1; -} - -bool CCodecs::FindFormatForArchiveType(const UString &arcType, CIntVector &formatIndices) const -{ - formatIndices.Clear(); - for (int pos = 0; pos < arcType.Length();) - { - int pos2 = arcType.Find('.', pos); - if (pos2 < 0) - pos2 = arcType.Length(); - const UString name = arcType.Mid(pos, pos2 - pos); - int index = FindFormatForArchiveType(name); - if (index < 0 && name != L"*") - { - formatIndices.Clear(); - return false; - } - formatIndices.Add(index); - pos = pos2 + 1; - } - return true; -} - -#endif - -#ifdef EXTERNAL_CODECS - -#ifdef EXPORT_CODECS -extern unsigned int g_NumCodecs; -STDAPI CreateCoder2(bool encode, UInt32 index, const GUID *iid, void **outObject); -STDAPI GetMethodProperty(UInt32 codecIndex, PROPID propID, PROPVARIANT *value); -// STDAPI GetNumberOfMethods(UInt32 *numCodecs); -#endif - -STDMETHODIMP CCodecs::GetNumberOfMethods(UInt32 *numMethods) -{ - *numMethods = - #ifdef EXPORT_CODECS - g_NumCodecs + - #endif - Codecs.Size(); - return S_OK; -} - -STDMETHODIMP CCodecs::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value) -{ - #ifdef EXPORT_CODECS - if (index < g_NumCodecs) - return GetMethodProperty(index, propID, value); - #endif - - const CDllCodecInfo &ci = Codecs[index - #ifdef EXPORT_CODECS - - g_NumCodecs - #endif - ]; - - if (propID == NMethodPropID::kDecoderIsAssigned) - { - NWindows::NCOM::CPropVariant propVariant; - propVariant = ci.DecoderIsAssigned; - propVariant.Detach(value); - return S_OK; - } - if (propID == NMethodPropID::kEncoderIsAssigned) - { - NWindows::NCOM::CPropVariant propVariant; - propVariant = ci.EncoderIsAssigned; - propVariant.Detach(value); - return S_OK; - } - return Libs[ci.LibIndex].GetMethodProperty(ci.CodecIndex, propID, value); -} - -STDMETHODIMP CCodecs::CreateDecoder(UInt32 index, const GUID *iid, void **coder) -{ - #ifdef EXPORT_CODECS - if (index < g_NumCodecs) - return CreateCoder2(false, index, iid, coder); - #endif - const CDllCodecInfo &ci = Codecs[index - #ifdef EXPORT_CODECS - - g_NumCodecs - #endif - ]; - if (ci.DecoderIsAssigned) - return Libs[ci.LibIndex].CreateObject(&ci.Decoder, iid, (void **)coder); - return S_OK; -} - -STDMETHODIMP CCodecs::CreateEncoder(UInt32 index, const GUID *iid, void **coder) -{ - #ifdef EXPORT_CODECS - if (index < g_NumCodecs) - return CreateCoder2(true, index, iid, coder); - #endif - const CDllCodecInfo &ci = Codecs[index - #ifdef EXPORT_CODECS - - g_NumCodecs - #endif - ]; - if (ci.EncoderIsAssigned) - return Libs[ci.LibIndex].CreateObject(&ci.Encoder, iid, (void **)coder); - return S_OK; -} - -HRESULT CCodecs::CreateCoder(const UString &name, bool encode, CMyComPtr &coder) const -{ - for (int i = 0; i < Codecs.Size(); i++) - { - const CDllCodecInfo &codec = Codecs[i]; - if (encode && !codec.EncoderIsAssigned || !encode && !codec.DecoderIsAssigned) - continue; - const CCodecLib &lib = Libs[codec.LibIndex]; - UString res; - NWindows::NCOM::CPropVariant prop; - RINOK(lib.GetMethodProperty(codec.CodecIndex, NMethodPropID::kName, &prop)); - if (prop.vt == VT_BSTR) - res = prop.bstrVal; - else if (prop.vt != VT_EMPTY) - continue; - if (name.CompareNoCase(res) == 0) - return lib.CreateObject(encode ? &codec.Encoder : &codec.Decoder, &IID_ICompressCoder, (void **)&coder); - } - return CLASS_E_CLASSNOTAVAILABLE; -} - -int CCodecs::GetCodecLibIndex(UInt32 index) -{ - #ifdef EXPORT_CODECS - if (index < g_NumCodecs) - return -1; - #endif - #ifdef EXTERNAL_CODECS - const CDllCodecInfo &ci = Codecs[index - #ifdef EXPORT_CODECS - - g_NumCodecs - #endif - ]; - return ci.LibIndex; - #else - return -1; - #endif -} - -bool CCodecs::GetCodecEncoderIsAssigned(UInt32 index) -{ - #ifdef EXPORT_CODECS - if (index < g_NumCodecs) - { - NWindows::NCOM::CPropVariant prop; - if (GetProperty(index, NMethodPropID::kEncoder, &prop) == S_OK) - if (prop.vt != VT_EMPTY) - return true; - return false; - } - #endif - #ifdef EXTERNAL_CODECS - const CDllCodecInfo &ci = Codecs[index - #ifdef EXPORT_CODECS - - g_NumCodecs - #endif - ]; - return ci.EncoderIsAssigned; - #else - return false; - #endif -} - -HRESULT CCodecs::GetCodecId(UInt32 index, UInt64 &id) -{ - UString s; - NWindows::NCOM::CPropVariant prop; - RINOK(GetProperty(index, NMethodPropID::kID, &prop)); - if (prop.vt != VT_UI8) - return E_INVALIDARG; - id = prop.uhVal.QuadPart; - return S_OK; -} - -UString CCodecs::GetCodecName(UInt32 index) -{ - UString s; - NWindows::NCOM::CPropVariant prop; - if (GetProperty(index, NMethodPropID::kName, &prop) == S_OK) - if (prop.vt == VT_BSTR) - s = prop.bstrVal; - return s; -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/LoadCodecs.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/LoadCodecs.h deleted file mode 100644 index 5630b59767e2..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/LoadCodecs.h +++ /dev/null @@ -1,235 +0,0 @@ -// LoadCodecs.h - -#ifndef __LOADCODECS_H -#define __LOADCODECS_H - -#include "../../../Common/Types.h" -#include "../../../Common/MyCom.h" -#include "../../../Common/MyString.h" -#include "../../../Common/Buffer.h" -#include "../../ICoder.h" - -#ifdef EXTERNAL_CODECS -#include "../../../Windows/DLL.h" -#endif - -struct CDllCodecInfo -{ - CLSID Encoder; - CLSID Decoder; - bool EncoderIsAssigned; - bool DecoderIsAssigned; - int LibIndex; - UInt32 CodecIndex; -}; - -#include "../../Archive/IArchive.h" - -typedef IInArchive * (*CreateInArchiveP)(); -typedef IOutArchive * (*CreateOutArchiveP)(); - -struct CArcExtInfo -{ - UString Ext; - UString AddExt; - CArcExtInfo() {} - CArcExtInfo(const UString &ext): Ext(ext) {} - CArcExtInfo(const UString &ext, const UString &addExt): Ext(ext), AddExt(addExt) {} -}; - - -struct CArcInfoEx -{ - #ifdef EXTERNAL_CODECS - int LibIndex; - UInt32 FormatIndex; - CLSID ClassID; - #endif - bool UpdateEnabled; - CreateInArchiveP CreateInArchive; - CreateOutArchiveP CreateOutArchive; - UString Name; - CObjectVector Exts; - #ifndef _SFX - CByteBuffer StartSignature; - // CByteBuffer FinishSignature; - #ifdef NEW_FOLDER_INTERFACE - UStringVector AssociateExts; - #endif - #endif - bool KeepName; - UString GetMainExt() const - { - if (Exts.IsEmpty()) - return UString(); - return Exts[0].Ext; - } - int FindExtension(const UString &ext) const - { - for (int i = 0; i < Exts.Size(); i++) - if (ext.CompareNoCase(Exts[i].Ext) == 0) - return i; - return -1; - } - UString GetAllExtensions() const - { - UString s; - for (int i = 0; i < Exts.Size(); i++) - { - if (i > 0) - s += ' '; - s += Exts[i].Ext; - } - return s; - } - - void AddExts(const wchar_t* ext, const wchar_t* addExt); - - CArcInfoEx(): - #ifdef EXTERNAL_CODECS - LibIndex(-1), - #endif - UpdateEnabled(false), - CreateInArchive(0), CreateOutArchive(0), - KeepName(false) - #ifndef _SFX - #endif - {} -}; - -#ifdef EXTERNAL_CODECS -typedef UInt32 (WINAPI *GetMethodPropertyFunc)(UInt32 index, PROPID propID, PROPVARIANT *value); -typedef UInt32 (WINAPI *CreateObjectFunc)(const GUID *clsID, const GUID *interfaceID, void **outObject); - - -#ifdef NEW_FOLDER_INTERFACE -struct CCodecIcons -{ - struct CIconPair - { - UString Ext; - int IconIndex; - }; - CObjectVector IconPairs; - void LoadIcons(HMODULE m); - bool FindIconIndex(const UString &ext, int &iconIndex) const; -}; -#endif - -struct CCodecLib -#ifdef NEW_FOLDER_INTERFACE -: public CCodecIcons -#endif -{ - NWindows::NDLL::CLibrary Lib; - GetMethodPropertyFunc GetMethodProperty; - CreateObjectFunc CreateObject; - #ifdef NEW_FOLDER_INTERFACE - CSysString Path; - void LoadIcons() { CCodecIcons::LoadIcons((HMODULE)Lib); } - #endif - CCodecLib(): GetMethodProperty(0) {} -}; -#endif - -class CCodecs: - #ifdef EXTERNAL_CODECS - public ICompressCodecsInfo, - #else - public IUnknown, - #endif - public CMyUnknownImp -{ -public: - #ifdef EXTERNAL_CODECS - CObjectVector Libs; - CObjectVector Codecs; - - #ifdef NEW_FOLDER_INTERFACE - CCodecIcons InternalIcons; - #endif - - HRESULT LoadCodecs(); - HRESULT LoadFormats(); - HRESULT LoadDll(const CSysString &path, bool needCheckDll); - HRESULT LoadDllsFromFolder(const CSysString &folderPrefix); - - HRESULT CreateArchiveHandler(const CArcInfoEx &ai, void **archive, bool outHandler) const - { - return Libs[ai.LibIndex].CreateObject(&ai.ClassID, outHandler ? &IID_IOutArchive : &IID_IInArchive, (void **)archive); - } - #endif - -public: - CObjectVector Formats; - HRESULT Load(); - - #ifndef _SFX - int FindFormatForArchiveName(const UString &arcPath) const; - int FindFormatForExtension(const UString &ext) const; - int FindFormatForArchiveType(const UString &arcType) const; - bool FindFormatForArchiveType(const UString &arcType, CIntVector &formatIndices) const; - #endif - - MY_UNKNOWN_IMP - - #ifdef EXTERNAL_CODECS - STDMETHOD(GetNumberOfMethods)(UInt32 *numMethods); - STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value); - STDMETHOD(CreateDecoder)(UInt32 index, const GUID *interfaceID, void **coder); - STDMETHOD(CreateEncoder)(UInt32 index, const GUID *interfaceID, void **coder); - #endif - - int GetCodecLibIndex(UInt32 index); - bool GetCodecEncoderIsAssigned(UInt32 index); - HRESULT GetCodecId(UInt32 index, UInt64 &id); - UString GetCodecName(UInt32 index); - - HRESULT CreateInArchive(int formatIndex, CMyComPtr &archive) const - { - const CArcInfoEx &ai = Formats[formatIndex]; - #ifdef EXTERNAL_CODECS - if (ai.LibIndex < 0) - #endif - { - archive = ai.CreateInArchive(); - return S_OK; - } - #ifdef EXTERNAL_CODECS - return CreateArchiveHandler(ai, (void **)&archive, false); - #endif - } - HRESULT CreateOutArchive(int formatIndex, CMyComPtr &archive) const - { - const CArcInfoEx &ai = Formats[formatIndex]; - #ifdef EXTERNAL_CODECS - if (ai.LibIndex < 0) - #endif - { - archive = ai.CreateOutArchive(); - return S_OK; - } - #ifdef EXTERNAL_CODECS - return CreateArchiveHandler(ai, (void **)&archive, true); - #endif - } - int FindOutFormatFromName(const UString &name) const - { - for (int i = 0; i < Formats.Size(); i++) - { - const CArcInfoEx &arc = Formats[i]; - if (!arc.UpdateEnabled) - continue; - if (arc.Name.CompareNoCase(name) == 0) - return i; - } - return -1; - } - - #ifdef EXTERNAL_CODECS - HRESULT CreateCoder(const UString &name, bool encode, CMyComPtr &coder) const; - #endif - -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/OpenArchive.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/OpenArchive.cpp deleted file mode 100644 index 07cbe93cfb29..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/OpenArchive.cpp +++ /dev/null @@ -1,528 +0,0 @@ -// OpenArchive.cpp - -#include "StdAfx.h" - -#include "Common/Wildcard.h" - -#include "Windows/FileDir.h" -#include "Windows/PropVariant.h" - -#include "../../Common/FileStreams.h" -#include "../../Common/StreamUtils.h" - -#include "DefaultName.h" -#include "OpenArchive.h" - -using namespace NWindows; - -// Static-SFX (for Linux) can be big. -const UInt64 kMaxCheckStartPosition = 1 << 22; - -HRESULT GetArchiveItemBoolProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result) -{ - NCOM::CPropVariant prop; - result = false; - RINOK(archive->GetProperty(index, propID, &prop)); - if (prop.vt == VT_BOOL) - result = VARIANT_BOOLToBool(prop.boolVal); - else if (prop.vt != VT_EMPTY) - return E_FAIL; - return S_OK; -} - -HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result) -{ - return GetArchiveItemBoolProp(archive, index, kpidIsDir, result); -} - -HRESULT CArc::GetItemPath(UInt32 index, UString &result) const -{ - { - NCOM::CPropVariant prop; - RINOK(Archive->GetProperty(index, kpidPath, &prop)); - if (prop.vt == VT_BSTR) - result = prop.bstrVal; - else if (prop.vt == VT_EMPTY) - result.Empty(); - else - return E_FAIL; - } - if (result.IsEmpty()) - { - result = DefaultName; - NCOM::CPropVariant prop; - RINOK(Archive->GetProperty(index, kpidExtension, &prop)); - if (prop.vt == VT_BSTR) - { - result += L'.'; - result += prop.bstrVal; - } - else if (prop.vt != VT_EMPTY) - return E_FAIL; - } - return S_OK; -} - -HRESULT CArc::GetItemMTime(UInt32 index, FILETIME &ft, bool &defined) const -{ - NCOM::CPropVariant prop; - defined = false; - ft.dwHighDateTime = ft.dwLowDateTime = 0; - RINOK(Archive->GetProperty(index, kpidMTime, &prop)); - if (prop.vt == VT_FILETIME) - { - ft = prop.filetime; - defined = true; - } - else if (prop.vt != VT_EMPTY) - return E_FAIL; - else if (MTimeDefined) - { - ft = MTime; - defined = true; - } - return S_OK; -} - -#ifndef _SFX -static inline bool TestSignature(const Byte *p1, const Byte *p2, size_t size) -{ - for (size_t i = 0; i < size; i++) - if (p1[i] != p2[i]) - return false; - return true; -} -#endif - -#ifdef UNDER_CE -static const int kNumHashBytes = 1; -#define HASH_VAL(buf, pos) ((buf)[pos]) -#else -static const int kNumHashBytes = 2; -#define HASH_VAL(buf, pos) ((buf)[pos] | ((UInt32)(buf)[pos + 1] << 8)) -#endif - - -HRESULT CArc::OpenStream( - CCodecs *codecs, - int formatIndex, - IInStream *stream, - ISequentialInStream *seqStream, - IArchiveOpenCallback *callback) -{ - Archive.Release(); - const UString fileName = ExtractFileNameFromPath(Path); - UString extension; - { - int dotPos = fileName.ReverseFind(L'.'); - if (dotPos >= 0) - extension = fileName.Mid(dotPos + 1); - } - CIntVector orderIndices; - if (formatIndex >= 0) - orderIndices.Add(formatIndex); - else - { - - int i; - int numFinded = 0; - for (i = 0; i < codecs->Formats.Size(); i++) - if (codecs->Formats[i].FindExtension(extension) >= 0) - orderIndices.Insert(numFinded++, i); - else - orderIndices.Add(i); - - if (!stream) - { - if (numFinded != 1) - return E_NOTIMPL; - orderIndices.DeleteFrom(1); - } - - #ifndef _SFX - if (orderIndices.Size() >= 2 && (numFinded == 0 || extension.CompareNoCase(L"exe") == 0)) - { - CIntVector orderIndices2; - CByteBuffer byteBuffer; - const size_t kBufferSize = (1 << 21); - byteBuffer.SetCapacity(kBufferSize); - RINOK(stream->Seek(0, STREAM_SEEK_SET, NULL)); - size_t processedSize = kBufferSize; - RINOK(ReadStream(stream, byteBuffer, &processedSize)); - if (processedSize == 0) - return S_FALSE; - - const Byte *buf = byteBuffer; - CByteBuffer hashBuffer; - const UInt32 kNumVals = 1 << (kNumHashBytes * 8); - hashBuffer.SetCapacity(kNumVals); - Byte *hash = hashBuffer; - memset(hash, 0xFF, kNumVals); - Byte prevs[256]; - if (orderIndices.Size() >= 256) - return S_FALSE; - int i; - for (i = 0; i < orderIndices.Size(); i++) - { - const CArcInfoEx &ai = codecs->Formats[orderIndices[i]]; - const CByteBuffer &sig = ai.StartSignature; - if (sig.GetCapacity() < kNumHashBytes) - continue; - UInt32 v = HASH_VAL(sig, 0); - prevs[i] = hash[v]; - hash[v] = (Byte)i; - } - - processedSize -= (kNumHashBytes - 1); - for (UInt32 pos = 0; pos < processedSize; pos++) - { - for (; pos < processedSize && hash[HASH_VAL(buf, pos)] == 0xFF; pos++); - if (pos == processedSize) - break; - UInt32 v = HASH_VAL(buf, pos); - Byte *ptr = &hash[v]; - int i = *ptr; - do - { - int index = orderIndices[i]; - const CArcInfoEx &ai = codecs->Formats[index]; - const CByteBuffer &sig = ai.StartSignature; - if (sig.GetCapacity() != 0 && pos + sig.GetCapacity() <= processedSize + (kNumHashBytes - 1) && - TestSignature(buf + pos, sig, sig.GetCapacity())) - { - orderIndices2.Add(index); - orderIndices[i] = 0xFF; - *ptr = prevs[i]; - } - else - ptr = &prevs[i]; - i = *ptr; - } - while (i != 0xFF); - } - - for (i = 0; i < orderIndices.Size(); i++) - { - int val = orderIndices[i]; - if (val != 0xFF) - orderIndices2.Add(val); - } - orderIndices = orderIndices2; - } - else if (extension == L"000" || extension == L"001") - { - CByteBuffer byteBuffer; - const size_t kBufferSize = (1 << 10); - byteBuffer.SetCapacity(kBufferSize); - Byte *buffer = byteBuffer; - RINOK(stream->Seek(0, STREAM_SEEK_SET, NULL)); - size_t processedSize = kBufferSize; - RINOK(ReadStream(stream, buffer, &processedSize)); - if (processedSize >= 16) - { - Byte kRarHeader[] = {0x52 , 0x61, 0x72, 0x21, 0x1a, 0x07, 0x00}; - if (TestSignature(buffer, kRarHeader, 7) && buffer[9] == 0x73 && (buffer[10] & 1) != 0) - { - for (int i = 0; i < orderIndices.Size(); i++) - { - int index = orderIndices[i]; - const CArcInfoEx &ai = codecs->Formats[index]; - if (ai.Name.CompareNoCase(L"rar") != 0) - continue; - orderIndices.Delete(i--); - orderIndices.Insert(0, index); - break; - } - } - } - } - if (orderIndices.Size() >= 2) - { - int isoIndex = codecs->FindFormatForArchiveType(L"iso"); - int udfIndex = codecs->FindFormatForArchiveType(L"udf"); - int iIso = -1; - int iUdf = -1; - for (int i = 0; i < orderIndices.Size(); i++) - { - if (orderIndices[i] == isoIndex) iIso = i; - if (orderIndices[i] == udfIndex) iUdf = i; - } - if (iUdf > iIso && iIso >= 0) - { - orderIndices[iUdf] = isoIndex; - orderIndices[iIso] = udfIndex; - } - } - - #endif - } - - for (int i = 0; i < orderIndices.Size(); i++) - { - if (stream) - { - RINOK(stream->Seek(0, STREAM_SEEK_SET, NULL)); - } - CMyComPtr archive; - - FormatIndex = orderIndices[i]; - RINOK(codecs->CreateInArchive(FormatIndex, archive)); - if (!archive) - continue; - - #ifdef EXTERNAL_CODECS - { - CMyComPtr setCompressCodecsInfo; - archive.QueryInterface(IID_ISetCompressCodecsInfo, (void **)&setCompressCodecsInfo); - if (setCompressCodecsInfo) - { - RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(codecs)); - } - } - #endif - - // OutputDebugStringW(codecs->Formats[FormatIndex].Name); - - HRESULT result; - if (stream) - result = archive->Open(stream, &kMaxCheckStartPosition, callback); - else - { - CMyComPtr openSeq; - archive.QueryInterface(IID_IArchiveOpenSeq, (void **)&openSeq); - if (!openSeq) - return E_NOTIMPL; - result = openSeq->OpenSeq(seqStream); - } - - if (result == S_FALSE) - continue; - RINOK(result); - - Archive = archive; - const CArcInfoEx &format = codecs->Formats[FormatIndex]; - if (format.Exts.Size() == 0) - DefaultName = GetDefaultName2(fileName, L"", L""); - else - { - int subExtIndex = format.FindExtension(extension); - if (subExtIndex < 0) - subExtIndex = 0; - const CArcExtInfo &extInfo = format.Exts[subExtIndex]; - DefaultName = GetDefaultName2(fileName, extInfo.Ext, extInfo.AddExt); - } - return S_OK; - } - return S_FALSE; -} - -HRESULT CArc::OpenStreamOrFile( - CCodecs *codecs, - int formatIndex, - bool stdInMode, - IInStream *stream, - IArchiveOpenCallback *callback) -{ - CMyComPtr fileStream; - CMyComPtr seqStream; - if (stdInMode) - seqStream = new CStdInFileStream; - else if (!stream) - { - CInFileStream *fileStreamSpec = new CInFileStream; - fileStream = fileStreamSpec; - if (!fileStreamSpec->Open(Path)) - return GetLastError(); - stream = fileStream; - } - - /* - if (callback) - { - UInt64 fileSize; - RINOK(stream->Seek(0, STREAM_SEEK_END, &fileSize)); - RINOK(callback->SetTotal(NULL, &fileSize)) - } - */ - - return OpenStream(codecs, formatIndex, stream, seqStream, callback); -} - -HRESULT CArchiveLink::Close() -{ - for (int i = Arcs.Size() - 1; i >= 0; i--) - { - RINOK(Arcs[i].Archive->Close()); - } - IsOpen = false; - return S_OK; -} - -void CArchiveLink::Release() -{ - while (!Arcs.IsEmpty()) - Arcs.DeleteBack(); -} - -HRESULT CArchiveLink::Open( - CCodecs *codecs, - const CIntVector &formatIndices, - bool stdInMode, - IInStream *stream, - const UString &filePath, - IArchiveOpenCallback *callback) -{ - Release(); - if (formatIndices.Size() >= 32) - return E_NOTIMPL; - - HRESULT resSpec; - - for (;;) - { - resSpec = S_OK; - int formatIndex = -1; - if (formatIndices.Size() >= 1) - { - if (Arcs.Size() >= formatIndices.Size()) - break; - formatIndex = formatIndices[formatIndices.Size() - Arcs.Size() - 1]; - } - else if (Arcs.Size() >= 32) - break; - - if (Arcs.IsEmpty()) - { - CArc arc; - arc.Path = filePath; - arc.SubfileIndex = (UInt32)(Int32)-1; - RINOK(arc.OpenStreamOrFile(codecs, formatIndex, stdInMode, stream, callback)); - Arcs.Add(arc); - continue; - } - - const CArc &arc = Arcs.Back(); - - resSpec = (formatIndices.Size() == 0 ? S_OK : E_NOTIMPL); - - UInt32 mainSubfile; - { - NCOM::CPropVariant prop; - RINOK(arc.Archive->GetArchiveProperty(kpidMainSubfile, &prop)); - if (prop.vt == VT_UI4) - mainSubfile = prop.ulVal; - else - break; - UInt32 numItems; - RINOK(arc.Archive->GetNumberOfItems(&numItems)); - if (mainSubfile >= numItems) - break; - } - - - CMyComPtr getStream; - if (arc.Archive->QueryInterface(IID_IInArchiveGetStream, (void **)&getStream) != S_OK || !getStream) - break; - - CMyComPtr subSeqStream; - if (getStream->GetStream(mainSubfile, &subSeqStream) != S_OK || !subSeqStream) - break; - - CMyComPtr subStream; - if (subSeqStream.QueryInterface(IID_IInStream, &subStream) != S_OK || !subStream) - break; - - CArc arc2; - RINOK(arc.GetItemPath(mainSubfile, arc2.Path)); - - CMyComPtr setSubArchiveName; - callback->QueryInterface(IID_IArchiveOpenSetSubArchiveName, (void **)&setSubArchiveName); - if (setSubArchiveName) - setSubArchiveName->SetSubArchiveName(arc2.Path); - - arc2.SubfileIndex = mainSubfile; - HRESULT result = arc2.OpenStream(codecs, formatIndex, subStream, NULL, callback); - resSpec = (formatIndices.Size() == 0 ? S_OK : S_FALSE); - if (result == S_FALSE) - break; - RINOK(result); - RINOK(arc.GetItemMTime(mainSubfile, arc2.MTime, arc2.MTimeDefined)); - Arcs.Add(arc2); - } - IsOpen = !Arcs.IsEmpty(); - return S_OK; -} - -static void SetCallback(const UString &filePath, - IOpenCallbackUI *callbackUI, - IArchiveOpenCallback *reOpenCallback, - CMyComPtr &callback) -{ - COpenCallbackImp *openCallbackSpec = new COpenCallbackImp; - callback = openCallbackSpec; - openCallbackSpec->Callback = callbackUI; - openCallbackSpec->ReOpenCallback = reOpenCallback; - - UString fullName; - int fileNamePartStartIndex; - NFile::NDirectory::MyGetFullPathName(filePath, fullName, fileNamePartStartIndex); - openCallbackSpec->Init( - fullName.Left(fileNamePartStartIndex), - fullName.Mid(fileNamePartStartIndex)); -} - -HRESULT CArchiveLink::Open2(CCodecs *codecs, - const CIntVector &formatIndices, - bool stdInMode, - IInStream *stream, - const UString &filePath, - IOpenCallbackUI *callbackUI) -{ - VolumesSize = 0; - COpenCallbackImp *openCallbackSpec = new COpenCallbackImp; - CMyComPtr callback = openCallbackSpec; - openCallbackSpec->Callback = callbackUI; - - UString fullName, prefix, name; - if (!stream && !stdInMode) - { - int fileNamePartStartIndex; - if (!NFile::NDirectory::MyGetFullPathName(filePath, fullName, fileNamePartStartIndex)) - return GetLastError(); - prefix = fullName.Left(fileNamePartStartIndex); - name = fullName.Mid(fileNamePartStartIndex); - openCallbackSpec->Init(prefix, name); - } - else - { - openCallbackSpec->SetSubArchiveName(filePath); - } - - RINOK(Open(codecs, formatIndices, stdInMode, stream, filePath, callback)); - VolumePaths.Add(prefix + name); - for (int i = 0; i < openCallbackSpec->FileNames.Size(); i++) - VolumePaths.Add(prefix + openCallbackSpec->FileNames[i]); - VolumesSize = openCallbackSpec->TotalSize; - return S_OK; -} - -HRESULT CArchiveLink::ReOpen(CCodecs *codecs, const UString &filePath, - IArchiveOpenCallback *callback) -{ - if (Arcs.Size() > 1) - return E_NOTIMPL; - - if (Arcs.Size() == 0) - return Open2(codecs, CIntVector(), false, NULL, filePath, 0); - - CMyComPtr openCallbackNew; - SetCallback(filePath, NULL, callback, openCallbackNew); - - CInFileStream *fileStreamSpec = new CInFileStream; - CMyComPtr stream(fileStreamSpec); - if (!fileStreamSpec->Open(filePath)) - return GetLastError(); - HRESULT res = GetArchive()->Open(stream, &kMaxCheckStartPosition, callback); - IsOpen = (res == S_OK); - return res; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/OpenArchive.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/OpenArchive.h deleted file mode 100644 index 4910e5a9f618..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/OpenArchive.h +++ /dev/null @@ -1,86 +0,0 @@ -// OpenArchive.h - -#ifndef __OPEN_ARCHIVE_H -#define __OPEN_ARCHIVE_H - -#include "Common/MyString.h" - -#include "Windows/FileFind.h" - -#include "../../Archive/IArchive.h" - -#include "ArchiveOpenCallback.h" -#include "LoadCodecs.h" - -HRESULT GetArchiveItemBoolProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result); -HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result); - -struct CArc -{ - CMyComPtr Archive; - UString Path; - UString DefaultName; - int FormatIndex; - int SubfileIndex; - FILETIME MTime; - bool MTimeDefined; - - CArc(): MTimeDefined(false) {} - - HRESULT GetItemPath(UInt32 index, UString &result) const; - HRESULT GetItemMTime(UInt32 index, FILETIME &ft, bool &defined) const; - HRESULT IsItemAnti(UInt32 index, bool &result) const - { return GetArchiveItemBoolProp(Archive, index, kpidIsAnti, result); } - - HRESULT OpenStream( - CCodecs *codecs, - int formatIndex, - IInStream *stream, - ISequentialInStream *seqStream, - IArchiveOpenCallback *callback); - - HRESULT OpenStreamOrFile( - CCodecs *codecs, - int formatIndex, - bool stdInMode, - IInStream *stream, - IArchiveOpenCallback *callback); -}; - -struct CArchiveLink -{ - CObjectVector Arcs; - UStringVector VolumePaths; - UInt64 VolumesSize; - bool IsOpen; - - CArchiveLink(): VolumesSize(0), IsOpen(false) {} - HRESULT Close(); - void Release(); - ~CArchiveLink() { Release(); } - - IInArchive *GetArchive() const { return Arcs.Back().Archive; } - - HRESULT Open( - CCodecs *codecs, - const CIntVector &formatIndices, - bool stdInMode, - IInStream *stream, - const UString &filePath, - IArchiveOpenCallback *callback); - - HRESULT Open2( - CCodecs *codecs, - const CIntVector &formatIndices, - bool stdInMode, - IInStream *stream, - const UString &filePath, - IOpenCallbackUI *callbackUI); - - HRESULT ReOpen( - CCodecs *codecs, - const UString &filePath, - IArchiveOpenCallback *callback); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/PropIDUtils.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/PropIDUtils.cpp deleted file mode 100644 index 37459a9e1d24..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/PropIDUtils.cpp +++ /dev/null @@ -1,96 +0,0 @@ -// PropIDUtils.cpp - -#include "StdAfx.h" - -#include "Common/IntToString.h" - -#include "Windows/FileFind.h" -#include "Windows/PropVariantConversions.h" - -#include "../../PropID.h" - -#include "PropIDUtils.h" - -using namespace NWindows; - -void ConvertUInt32ToHex(UInt32 value, wchar_t *s) -{ - for (int i = 0; i < 8; i++) - { - int t = value & 0xF; - value >>= 4; - s[7 - i] = (wchar_t)((t < 10) ? (L'0' + t) : (L'A' + (t - 10))); - } - s[8] = L'\0'; -} - -#define MY_ATTR_CHAR(a, n, c) ((a )& (1 << (n))) ? c : L'-'; - -UString ConvertPropertyToString(const PROPVARIANT &prop, PROPID propID, bool full) -{ - switch(propID) - { - case kpidCTime: - case kpidATime: - case kpidMTime: - { - if (prop.vt != VT_FILETIME) - break; - FILETIME localFileTime; - if ((prop.filetime.dwHighDateTime == 0 && - prop.filetime.dwLowDateTime == 0) || - !::FileTimeToLocalFileTime(&prop.filetime, &localFileTime)) - return UString(); - return ConvertFileTimeToString(localFileTime, true, full); - } - case kpidCRC: - { - if (prop.vt != VT_UI4) - break; - wchar_t temp[12]; - ConvertUInt32ToHex(prop.ulVal, temp); - return temp; - } - case kpidAttrib: - { - if (prop.vt != VT_UI4) - break; - UString res; - UInt32 a = prop.ulVal; - if (NFile::NFind::NAttributes::IsReadOnly(a)) res += L'R'; - if (NFile::NFind::NAttributes::IsHidden(a)) res += L'H'; - if (NFile::NFind::NAttributes::IsSystem(a)) res += L'S'; - if (NFile::NFind::NAttributes::IsDir(a)) res += L'D'; - if (NFile::NFind::NAttributes::IsArchived(a)) res += L'A'; - if (NFile::NFind::NAttributes::IsCompressed(a)) res += L'C'; - if (NFile::NFind::NAttributes::IsEncrypted(a)) res += L'E'; - return res; - } - case kpidPosixAttrib: - { - if (prop.vt != VT_UI4) - break; - UString res; - UInt32 a = prop.ulVal; - wchar_t temp[16]; - temp[0] = MY_ATTR_CHAR(a, 14, L'd'); - for (int i = 6; i >= 0; i -= 3) - { - temp[7 - i] = MY_ATTR_CHAR(a, i + 2, L'r'); - temp[8 - i] = MY_ATTR_CHAR(a, i + 1, L'w'); - temp[9 - i] = MY_ATTR_CHAR(a, i + 0, L'x'); - } - temp[10] = 0; - res = temp; - a &= ~0x1FF; - a &= ~0xC000; - if (a != 0) - { - ConvertUInt32ToHex(a, temp); - res = UString(temp) + L' ' + res; - } - return res; - } - } - return ConvertPropVariantToString(prop); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/PropIDUtils.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/PropIDUtils.h deleted file mode 100644 index 05c09e736a9e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/PropIDUtils.h +++ /dev/null @@ -1,12 +0,0 @@ -// PropIDUtils.h - -#ifndef __PROPID_UTILS_H -#define __PROPID_UTILS_H - -#include "Common/MyString.h" -#include "Common/Types.h" - -void ConvertUInt32ToHex(UInt32 value, wchar_t *s); -UString ConvertPropertyToString(const PROPVARIANT &propVariant, PROPID propID, bool full = true); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Property.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Property.h deleted file mode 100644 index 5253d523ffb8..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Property.h +++ /dev/null @@ -1,14 +0,0 @@ -// Property.h - -#ifndef __PROPERTY_H -#define __PROPERTY_H - -#include "Common/MyString.h" - -struct CProperty -{ - UString Name; - UString Value; -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SetProperties.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SetProperties.cpp deleted file mode 100644 index b3347ce383b4..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SetProperties.cpp +++ /dev/null @@ -1,79 +0,0 @@ -// SetProperties.cpp - -#include "StdAfx.h" - -#include "SetProperties.h" - -#include "Windows/PropVariant.h" -#include "Common/MyString.h" -#include "Common/StringToInt.h" -#include "Common/MyCom.h" - -#include "../../Archive/IArchive.h" - -using namespace NWindows; -using namespace NCOM; - -static void ParseNumberString(const UString &s, NCOM::CPropVariant &prop) -{ - const wchar_t *endPtr; - UInt64 result = ConvertStringToUInt64(s, &endPtr); - if (endPtr - (const wchar_t *)s != s.Length()) - prop = s; - else if (result <= 0xFFFFFFFF) - prop = (UInt32)result; - else - prop = result; -} - -HRESULT SetProperties(IUnknown *unknown, const CObjectVector &properties) -{ - if (properties.IsEmpty()) - return S_OK; - CMyComPtr setProperties; - unknown->QueryInterface(IID_ISetProperties, (void **)&setProperties); - if (!setProperties) - return S_OK; - - UStringVector realNames; - CPropVariant *values = new CPropVariant[properties.Size()]; - try - { - int i; - for(i = 0; i < properties.Size(); i++) - { - const CProperty &property = properties[i]; - NCOM::CPropVariant propVariant; - UString name = property.Name; - if (property.Value.IsEmpty()) - { - if (!name.IsEmpty()) - { - wchar_t c = name[name.Length() - 1]; - if (c == L'-') - propVariant = false; - else if (c == L'+') - propVariant = true; - if (propVariant.vt != VT_EMPTY) - name = name.Left(name.Length() - 1); - } - } - else - ParseNumberString(property.Value, propVariant); - realNames.Add(name); - values[i] = propVariant; - } - CRecordVector names; - for(i = 0; i < realNames.Size(); i++) - names.Add((const wchar_t *)realNames[i]); - - RINOK(setProperties->SetProperties(&names.Front(), values, names.Size())); - } - catch(...) - { - delete []values; - throw; - } - delete []values; - return S_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SetProperties.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SetProperties.h deleted file mode 100644 index 64c947cf864b..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SetProperties.h +++ /dev/null @@ -1,10 +0,0 @@ -// SetProperties.h - -#ifndef __SETPROPERTIES_H -#define __SETPROPERTIES_H - -#include "Property.h" - -HRESULT SetProperties(IUnknown *unknown, const CObjectVector &properties); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SortUtils.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SortUtils.cpp deleted file mode 100644 index 039adfa93101..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SortUtils.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// SortUtils.cpp - -#include "StdAfx.h" - -#include "SortUtils.h" -#include "Common/Wildcard.h" - -static int CompareStrings(const int *p1, const int *p2, void *param) -{ - const UStringVector &strings = *(const UStringVector *)param; - return CompareFileNames(strings[*p1], strings[*p2]); -} - -void SortFileNames(const UStringVector &strings, CIntVector &indices) -{ - indices.Clear(); - int numItems = strings.Size(); - indices.Reserve(numItems); - for(int i = 0; i < numItems; i++) - indices.Add(i); - indices.Sort(CompareStrings, (void *)&strings); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SortUtils.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SortUtils.h deleted file mode 100644 index 4835f11c32c7..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/SortUtils.h +++ /dev/null @@ -1,10 +0,0 @@ -// SortUtils.h - -#ifndef __SORTUTLS_H -#define __SORTUTLS_H - -#include "Common/MyString.h" - -void SortFileNames(const UStringVector &strings, CIntVector &indices); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/StdAfx.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/StdAfx.h deleted file mode 100644 index ab2617ecf634..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// stdafx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" -#include "../../../Common/NewHandler.h" - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/TempFiles.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/TempFiles.cpp deleted file mode 100644 index 48fb4e7467cf..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/TempFiles.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// TempFiles.cpp - -#include "StdAfx.h" - -#include "TempFiles.h" - -#include "Windows/FileDir.h" -#include "Windows/FileIO.h" - -using namespace NWindows; -using namespace NFile; - -void CTempFiles::Clear() -{ - while(!Paths.IsEmpty()) - { - NDirectory::DeleteFileAlways((LPCWSTR)Paths.Back()); - Paths.DeleteBack(); - } -} - - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/TempFiles.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/TempFiles.h deleted file mode 100644 index 9e8e131c19d4..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/TempFiles.h +++ /dev/null @@ -1,16 +0,0 @@ -// TempFiles.h - -#ifndef __TEMPFILES_H -#define __TEMPFILES_H - -#include "Common/MyString.h" - -class CTempFiles -{ - void Clear(); -public: - UStringVector Paths; - ~CTempFiles() { Clear(); } -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Update.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Update.cpp deleted file mode 100644 index 6386e3af00d6..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Update.cpp +++ /dev/null @@ -1,908 +0,0 @@ -// Update.cpp - -#include "StdAfx.h" - -#include "Update.h" - -#include "Common/IntToString.h" -#include "Common/StringConvert.h" - -#ifdef _WIN32 -#include "Windows/DLL.h" -#endif - -#include "Windows/FileDir.h" -#include "Windows/FileFind.h" -#include "Windows/FileName.h" -#include "Windows/PropVariant.h" -#include "Windows/PropVariantConversions.h" -#include "Windows/Time.h" - -#include "../../Common/FileStreams.h" - -#include "../../Compress/CopyCoder.h" - -#include "../Common/DirItem.h" -#include "../Common/EnumDirItems.h" -#include "../Common/OpenArchive.h" -#include "../Common/UpdateProduce.h" - -#include "EnumDirItems.h" -#include "SetProperties.h" -#include "TempFiles.h" -#include "UpdateCallback.h" - -static const char *kUpdateIsNotSupoorted = - "update operations are not supported for this archive"; - -using namespace NWindows; -using namespace NCOM; -using namespace NFile; -using namespace NName; - -static const wchar_t *kTempFolderPrefix = L"7zE"; - -using namespace NUpdateArchive; - -class COutMultiVolStream: - public IOutStream, - public CMyUnknownImp -{ - int _streamIndex; // required stream - UInt64 _offsetPos; // offset from start of _streamIndex index - UInt64 _absPos; - UInt64 _length; - - struct CSubStreamInfo - { - COutFileStream *StreamSpec; - CMyComPtr Stream; - UString Name; - UInt64 Pos; - UInt64 RealSize; - }; - CObjectVector Streams; -public: - // CMyComPtr VolumeCallback; - CRecordVector Sizes; - UString Prefix; - CTempFiles *TempFiles; - - void Init() - { - _streamIndex = 0; - _offsetPos = 0; - _absPos = 0; - _length = 0; - } - - HRESULT Close(); - - MY_UNKNOWN_IMP1(IOutStream) - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); - STDMETHOD(SetSize)(Int64 newSize); -}; - -// static NSynchronization::CCriticalSection g_TempPathsCS; - -HRESULT COutMultiVolStream::Close() -{ - HRESULT res = S_OK; - for (int i = 0; i < Streams.Size(); i++) - { - CSubStreamInfo &s = Streams[i]; - if (s.StreamSpec) - { - HRESULT res2 = s.StreamSpec->Close(); - if (res2 != S_OK) - res = res2; - } - } - return res; -} - -STDMETHODIMP COutMultiVolStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - if (processedSize != NULL) - *processedSize = 0; - while(size > 0) - { - if (_streamIndex >= Streams.Size()) - { - CSubStreamInfo subStream; - - wchar_t temp[16]; - ConvertUInt32ToString(_streamIndex + 1, temp); - UString res = temp; - while (res.Length() < 3) - res = UString(L'0') + res; - UString name = Prefix + res; - subStream.StreamSpec = new COutFileStream; - subStream.Stream = subStream.StreamSpec; - if (!subStream.StreamSpec->Create(name, false)) - return ::GetLastError(); - { - // NSynchronization::CCriticalSectionLock lock(g_TempPathsCS); - TempFiles->Paths.Add(name); - } - - subStream.Pos = 0; - subStream.RealSize = 0; - subStream.Name = name; - Streams.Add(subStream); - continue; - } - CSubStreamInfo &subStream = Streams[_streamIndex]; - - int index = _streamIndex; - if (index >= Sizes.Size()) - index = Sizes.Size() - 1; - UInt64 volSize = Sizes[index]; - - if (_offsetPos >= volSize) - { - _offsetPos -= volSize; - _streamIndex++; - continue; - } - if (_offsetPos != subStream.Pos) - { - // CMyComPtr outStream; - // RINOK(subStream.Stream.QueryInterface(IID_IOutStream, &outStream)); - RINOK(subStream.Stream->Seek(_offsetPos, STREAM_SEEK_SET, NULL)); - subStream.Pos = _offsetPos; - } - - UInt32 curSize = (UInt32)MyMin((UInt64)size, volSize - subStream.Pos); - UInt32 realProcessed; - RINOK(subStream.Stream->Write(data, curSize, &realProcessed)); - data = (void *)((Byte *)data + realProcessed); - size -= realProcessed; - subStream.Pos += realProcessed; - _offsetPos += realProcessed; - _absPos += realProcessed; - if (_absPos > _length) - _length = _absPos; - if (_offsetPos > subStream.RealSize) - subStream.RealSize = _offsetPos; - if (processedSize != NULL) - *processedSize += realProcessed; - if (subStream.Pos == volSize) - { - _streamIndex++; - _offsetPos = 0; - } - if (realProcessed == 0 && curSize != 0) - return E_FAIL; - break; - } - return S_OK; -} - -STDMETHODIMP COutMultiVolStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) -{ - if (seekOrigin >= 3) - return STG_E_INVALIDFUNCTION; - switch(seekOrigin) - { - case STREAM_SEEK_SET: - _absPos = offset; - break; - case STREAM_SEEK_CUR: - _absPos += offset; - break; - case STREAM_SEEK_END: - _absPos = _length + offset; - break; - } - _offsetPos = _absPos; - if (newPosition != NULL) - *newPosition = _absPos; - _streamIndex = 0; - return S_OK; -} - -STDMETHODIMP COutMultiVolStream::SetSize(Int64 newSize) -{ - if (newSize < 0) - return E_INVALIDARG; - int i = 0; - while (i < Streams.Size()) - { - CSubStreamInfo &subStream = Streams[i++]; - if ((UInt64)newSize < subStream.RealSize) - { - RINOK(subStream.Stream->SetSize(newSize)); - subStream.RealSize = newSize; - break; - } - newSize -= subStream.RealSize; - } - while (i < Streams.Size()) - { - { - CSubStreamInfo &subStream = Streams.Back(); - subStream.Stream.Release(); - NDirectory::DeleteFileAlways(subStream.Name); - } - Streams.DeleteBack(); - } - _offsetPos = _absPos; - _streamIndex = 0; - _length = newSize; - return S_OK; -} - -static const wchar_t *kDefaultArchiveType = L"7z"; -static const wchar_t *kSFXExtension = - #ifdef _WIN32 - L"exe"; - #else - L""; - #endif - -bool CUpdateOptions::Init(const CCodecs *codecs, const CIntVector &formatIndices, const UString &arcPath) -{ - if (formatIndices.Size() > 1) - return false; - int arcTypeIndex = -1; - if (formatIndices.Size() != 0) - arcTypeIndex = formatIndices[0]; - if (arcTypeIndex >= 0) - MethodMode.FormatIndex = arcTypeIndex; - else - { - MethodMode.FormatIndex = codecs->FindFormatForArchiveName(arcPath); - // It works incorrectly for update command if archive has some non-default extension! - if (MethodMode.FormatIndex < 0) - MethodMode.FormatIndex = codecs->FindFormatForArchiveType(kDefaultArchiveType); - } - if (MethodMode.FormatIndex < 0) - return false; - const CArcInfoEx &arcInfo = codecs->Formats[MethodMode.FormatIndex]; - if (!arcInfo.UpdateEnabled) - return false; - UString typeExt = arcInfo.GetMainExt(); - UString ext = typeExt; - if (SfxMode) - ext = kSFXExtension; - ArchivePath.BaseExtension = ext; - ArchivePath.VolExtension = typeExt; - ArchivePath.ParseFromPath(arcPath); - for (int i = 0; i < Commands.Size(); i++) - { - CUpdateArchiveCommand &uc = Commands[i]; - uc.ArchivePath.BaseExtension = ext; - uc.ArchivePath.VolExtension = typeExt; - uc.ArchivePath.ParseFromPath(uc.UserArchivePath); - } - return true; -} - -/* -struct CUpdateProduceCallbackImp: public IUpdateProduceCallback -{ - const CObjectVector *_arcItems; - IUpdateCallbackUI *_callback; - - CUpdateProduceCallbackImp(const CObjectVector *a, - IUpdateCallbackUI *callback): _arcItems(a), _callback(callback) {} - virtual HRESULT ShowDeleteFile(int arcIndex); -}; - -HRESULT CUpdateProduceCallbackImp::ShowDeleteFile(int arcIndex) -{ - return _callback->ShowDeleteFile((*_arcItems)[arcIndex].Name); -} -*/ - -static HRESULT Compress( - CCodecs *codecs, - const CActionSet &actionSet, - IInArchive *archive, - const CCompressionMethodMode &compressionMethod, - CArchivePath &archivePath, - const CObjectVector &arcItems, - bool shareForWrite, - bool stdInMode, - /* const UString & stdInFileName, */ - bool stdOutMode, - const CDirItems &dirItems, - bool sfxMode, - const UString &sfxModule, - const CRecordVector &volumesSizes, - CTempFiles &tempFiles, - CUpdateErrorInfo &errorInfo, - IUpdateCallbackUI *callback) -{ - CMyComPtr outArchive; - if (archive != NULL) - { - CMyComPtr archive2 = archive; - HRESULT result = archive2.QueryInterface(IID_IOutArchive, &outArchive); - if (result != S_OK) - throw kUpdateIsNotSupoorted; - } - else - { - RINOK(codecs->CreateOutArchive(compressionMethod.FormatIndex, outArchive)); - - #ifdef EXTERNAL_CODECS - { - CMyComPtr setCompressCodecsInfo; - outArchive.QueryInterface(IID_ISetCompressCodecsInfo, (void **)&setCompressCodecsInfo); - if (setCompressCodecsInfo) - { - RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(codecs)); - } - } - #endif - } - if (outArchive == 0) - throw kUpdateIsNotSupoorted; - - NFileTimeType::EEnum fileTimeType; - UInt32 value; - RINOK(outArchive->GetFileTimeType(&value)); - - switch(value) - { - case NFileTimeType::kWindows: - case NFileTimeType::kUnix: - case NFileTimeType::kDOS: - fileTimeType = (NFileTimeType::EEnum)value; - break; - default: - return E_FAIL; - } - - CRecordVector updatePairs2; - - { - CRecordVector updatePairs; - GetUpdatePairInfoList(dirItems, arcItems, fileTimeType, updatePairs); // must be done only once!!! - // CUpdateProduceCallbackImp upCallback(&arcItems, callback); - UpdateProduce(updatePairs, actionSet, updatePairs2, NULL /* &upCallback */); - } - - UInt32 numFiles = 0; - for (int i = 0; i < updatePairs2.Size(); i++) - if (updatePairs2[i].NewData) - numFiles++; - - RINOK(callback->SetNumFiles(numFiles)); - - - CArchiveUpdateCallback *updateCallbackSpec = new CArchiveUpdateCallback; - CMyComPtr updateCallback(updateCallbackSpec); - - updateCallbackSpec->ShareForWrite = shareForWrite; - updateCallbackSpec->StdInMode = stdInMode; - updateCallbackSpec->Callback = callback; - updateCallbackSpec->DirItems = &dirItems; - updateCallbackSpec->ArcItems = &arcItems; - updateCallbackSpec->UpdatePairs = &updatePairs2; - - CMyComPtr outStream; - - const UString &archiveName = archivePath.GetFinalPath(); - if (!stdOutMode) - { - UString resultPath; - int pos; - if (!NFile::NDirectory::MyGetFullPathName(archiveName, resultPath, pos)) - throw 1417161; - NFile::NDirectory::CreateComplexDirectory(resultPath.Left(pos)); - } - - COutFileStream *outStreamSpec = NULL; - COutMultiVolStream *volStreamSpec = NULL; - - if (volumesSizes.Size() == 0) - { - if (stdOutMode) - outStream = new CStdOutFileStream; - else - { - outStreamSpec = new COutFileStream; - outStream = outStreamSpec; - bool isOK = false; - UString realPath; - for (int i = 0; i < (1 << 16); i++) - { - if (archivePath.Temp) - { - if (i > 0) - { - wchar_t s[16]; - ConvertUInt32ToString(i, s); - archivePath.TempPostfix = s; - } - realPath = archivePath.GetTempPath(); - } - else - realPath = archivePath.GetFinalPath(); - if (outStreamSpec->Create(realPath, false)) - { - tempFiles.Paths.Add(realPath); - isOK = true; - break; - } - if (::GetLastError() != ERROR_FILE_EXISTS) - break; - if (!archivePath.Temp) - break; - } - if (!isOK) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.FileName = realPath; - errorInfo.Message = L"7-Zip cannot open file"; - return E_FAIL; - } - } - } - else - { - if (stdOutMode) - return E_FAIL; - volStreamSpec = new COutMultiVolStream; - outStream = volStreamSpec; - volStreamSpec->Sizes = volumesSizes; - volStreamSpec->Prefix = archivePath.GetFinalPath() + UString(L"."); - volStreamSpec->TempFiles = &tempFiles; - volStreamSpec->Init(); - - /* - updateCallbackSpec->VolumesSizes = volumesSizes; - updateCallbackSpec->VolName = archivePath.Prefix + archivePath.Name; - if (!archivePath.VolExtension.IsEmpty()) - updateCallbackSpec->VolExt = UString(L'.') + archivePath.VolExtension; - */ - } - - RINOK(SetProperties(outArchive, compressionMethod.Properties)); - - if (sfxMode) - { - CInFileStream *sfxStreamSpec = new CInFileStream; - CMyComPtr sfxStream(sfxStreamSpec); - if (!sfxStreamSpec->Open(sfxModule)) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.Message = L"7-Zip cannot open SFX module"; - errorInfo.FileName = sfxModule; - return E_FAIL; - } - - CMyComPtr sfxOutStream; - COutFileStream *outStreamSpec = NULL; - if (volumesSizes.Size() == 0) - sfxOutStream = outStream; - else - { - outStreamSpec = new COutFileStream; - sfxOutStream = outStreamSpec; - UString realPath = archivePath.GetFinalPath(); - if (!outStreamSpec->Create(realPath, false)) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.FileName = realPath; - errorInfo.Message = L"7-Zip cannot open file"; - return E_FAIL; - } - } - RINOK(NCompress::CopyStream(sfxStream, sfxOutStream, NULL)); - if (outStreamSpec) - { - RINOK(outStreamSpec->Close()); - } - } - - HRESULT result = outArchive->UpdateItems(outStream, updatePairs2.Size(), updateCallback); - callback->Finilize(); - RINOK(result); - if (outStreamSpec) - result = outStreamSpec->Close(); - else if (volStreamSpec) - result = volStreamSpec->Close(); - return result; -} - -HRESULT EnumerateInArchiveItems(const NWildcard::CCensor &censor, - const CArc &arc, - CObjectVector &arcItems) -{ - arcItems.Clear(); - UInt32 numItems; - IInArchive *archive = arc.Archive; - RINOK(archive->GetNumberOfItems(&numItems)); - arcItems.Reserve(numItems); - for (UInt32 i = 0; i < numItems; i++) - { - CArcItem ai; - - RINOK(arc.GetItemPath(i, ai.Name)); - RINOK(IsArchiveItemFolder(archive, i, ai.IsDir)); - ai.Censored = censor.CheckPath(ai.Name, !ai.IsDir); - RINOK(arc.GetItemMTime(i, ai.MTime, ai.MTimeDefined)); - - { - CPropVariant prop; - RINOK(archive->GetProperty(i, kpidSize, &prop)); - ai.SizeDefined = (prop.vt != VT_EMPTY); - if (ai.SizeDefined) - ai.Size = ConvertPropVariantToUInt64(prop); - } - - { - CPropVariant prop; - RINOK(archive->GetProperty(i, kpidTimeType, &prop)); - if (prop.vt == VT_UI4) - { - ai.TimeType = (int)(NFileTimeType::EEnum)prop.ulVal; - switch(ai.TimeType) - { - case NFileTimeType::kWindows: - case NFileTimeType::kUnix: - case NFileTimeType::kDOS: - break; - default: - return E_FAIL; - } - } - } - - ai.IndexInServer = i; - arcItems.Add(ai); - } - return S_OK; -} - - -static HRESULT UpdateWithItemLists( - CCodecs *codecs, - CUpdateOptions &options, - IInArchive *archive, - const CObjectVector &arcItems, - CDirItems &dirItems, - CTempFiles &tempFiles, - CUpdateErrorInfo &errorInfo, - IUpdateCallbackUI2 *callback) -{ - for(int i = 0; i < options.Commands.Size(); i++) - { - CUpdateArchiveCommand &command = options.Commands[i]; - if (options.StdOutMode) - { - RINOK(callback->StartArchive(L"stdout", archive != 0)); - } - else - { - RINOK(callback->StartArchive(command.ArchivePath.GetFinalPath(), - i == 0 && options.UpdateArchiveItself && archive != 0)); - } - - RINOK(Compress( - codecs, - command.ActionSet, archive, - options.MethodMode, - command.ArchivePath, - arcItems, - options.OpenShareForWrite, - options.StdInMode, - /* options.StdInFileName, */ - options.StdOutMode, - dirItems, - options.SfxMode, options.SfxModule, - options.VolumesSizes, - tempFiles, - errorInfo, callback)); - - RINOK(callback->FinishArchive()); - } - return S_OK; -} - -#if defined(_WIN32) && !defined(UNDER_CE) -class CCurrentDirRestorer -{ - UString _path; -public: - CCurrentDirRestorer() { NFile::NDirectory::MyGetCurrentDirectory(_path); } - ~CCurrentDirRestorer() { RestoreDirectory();} - bool RestoreDirectory() { return BOOLToBool(NFile::NDirectory::MySetCurrentDirectory(_path)); } -}; -#endif - -struct CEnumDirItemUpdateCallback: public IEnumDirItemCallback -{ - IUpdateCallbackUI2 *Callback; - HRESULT ScanProgress(UInt64 numFolders, UInt64 numFiles, const wchar_t *path) - { - return Callback->ScanProgress(numFolders, numFiles, path); - } -}; - -#ifdef _WIN32 -typedef ULONG (FAR PASCAL MY_MAPISENDDOCUMENTS)( - ULONG_PTR ulUIParam, - LPSTR lpszDelimChar, - LPSTR lpszFilePaths, - LPSTR lpszFileNames, - ULONG ulReserved -); -typedef MY_MAPISENDDOCUMENTS FAR *MY_LPMAPISENDDOCUMENTS; -#endif - -HRESULT UpdateArchive( - CCodecs *codecs, - const NWildcard::CCensor &censor, - CUpdateOptions &options, - CUpdateErrorInfo &errorInfo, - IOpenCallbackUI *openCallback, - IUpdateCallbackUI2 *callback) -{ - if (options.StdOutMode && options.EMailMode) - return E_FAIL; - - if (options.VolumesSizes.Size() > 0 && (options.EMailMode || options.SfxMode)) - return E_NOTIMPL; - - if (options.SfxMode) - { - CProperty property; - property.Name = L"rsfx"; - property.Value = L"on"; - options.MethodMode.Properties.Add(property); - if (options.SfxModule.IsEmpty()) - { - errorInfo.Message = L"SFX file is not specified"; - return E_FAIL; - } - UString name = options.SfxModule; - #ifdef UNDER_CE - if (!NFind::DoesFileExist(name)) - #else - if (!NDirectory::MySearchPath(NULL, name, NULL, options.SfxModule)) - #endif - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.Message = L"7-Zip cannot find specified SFX module"; - errorInfo.FileName = name; - return E_FAIL; - } - } - - const UString archiveName = options.ArchivePath.GetFinalPath(); - - CArchiveLink archiveLink; - NFind::CFileInfoW archiveFileInfo; - - if (archiveFileInfo.Find(archiveName)) - { - if (archiveFileInfo.IsDir()) - throw "there is no such archive"; - if (options.VolumesSizes.Size() > 0) - return E_NOTIMPL; - CIntVector formatIndices; - if (options.MethodMode.FormatIndex >= 0) - formatIndices.Add(options.MethodMode.FormatIndex); - HRESULT result = archiveLink.Open2(codecs, formatIndices, false, NULL, archiveName, openCallback); - if (result == E_ABORT) - return result; - RINOK(callback->OpenResult(archiveName, result)); - RINOK(result); - if (archiveLink.VolumePaths.Size() > 1) - { - errorInfo.SystemError = (DWORD)E_NOTIMPL; - errorInfo.Message = L"Updating for multivolume archives is not implemented"; - return E_NOTIMPL; - } - - CArc &arc = archiveLink.Arcs.Back(); - arc.MTimeDefined = !archiveFileInfo.IsDevice; - arc.MTime = archiveFileInfo.MTime; - } - else - { - /* - if (archiveType.IsEmpty()) - throw "type of archive is not specified"; - */ - } - - CDirItems dirItems; - if (options.StdInMode) - { - CDirItem di; - di.Name = options.StdInFileName; - di.Size = (UInt64)(Int64)-1; - di.Attrib = 0; - NTime::GetCurUtcFileTime(di.MTime); - di.CTime = di.ATime = di.MTime; - dirItems.Items.Add(di); - } - else - { - bool needScanning = false; - for(int i = 0; i < options.Commands.Size(); i++) - if (options.Commands[i].ActionSet.NeedScanning()) - needScanning = true; - if (needScanning) - { - CEnumDirItemUpdateCallback enumCallback; - enumCallback.Callback = callback; - RINOK(callback->StartScanning()); - UStringVector errorPaths; - CRecordVector errorCodes; - HRESULT res = EnumerateItems(censor, dirItems, &enumCallback, errorPaths, errorCodes); - for (int i = 0; i < errorPaths.Size(); i++) - { - RINOK(callback->CanNotFindError(errorPaths[i], errorCodes[i])); - } - if (res != S_OK) - { - if (res != E_ABORT) - errorInfo.Message = L"Scanning error"; - return res; - } - RINOK(callback->FinishScanning()); - } - } - - UString tempDirPrefix; - bool usesTempDir = false; - - #ifdef _WIN32 - NDirectory::CTempDirectoryW tempDirectory; - if (options.EMailMode && options.EMailRemoveAfter) - { - tempDirectory.Create(kTempFolderPrefix); - tempDirPrefix = tempDirectory.GetPath(); - NormalizeDirPathPrefix(tempDirPrefix); - usesTempDir = true; - } - #endif - - CTempFiles tempFiles; - - bool createTempFile = false; - - bool thereIsInArchive = archiveLink.IsOpen; - - if (!options.StdOutMode && options.UpdateArchiveItself) - { - CArchivePath &ap = options.Commands[0].ArchivePath; - ap = options.ArchivePath; - // if ((archive != 0 && !usesTempDir) || !options.WorkingDir.IsEmpty()) - if ((thereIsInArchive || !options.WorkingDir.IsEmpty()) && !usesTempDir && options.VolumesSizes.Size() == 0) - { - createTempFile = true; - ap.Temp = true; - if (!options.WorkingDir.IsEmpty()) - { - ap.TempPrefix = options.WorkingDir; - NormalizeDirPathPrefix(ap.TempPrefix); - } - } - } - - for(int i = 0; i < options.Commands.Size(); i++) - { - CArchivePath &ap = options.Commands[i].ArchivePath; - if (usesTempDir) - { - // Check it - ap.Prefix = tempDirPrefix; - // ap.Temp = true; - // ap.TempPrefix = tempDirPrefix; - } - if (i > 0 || !createTempFile) - { - const UString &path = ap.GetFinalPath(); - if (NFind::DoesFileOrDirExist(path)) - { - errorInfo.SystemError = 0; - errorInfo.Message = L"The file already exists"; - errorInfo.FileName = path; - return E_FAIL; - } - } - } - - CObjectVector arcItems; - if (thereIsInArchive) - { - RINOK(EnumerateInArchiveItems(censor, archiveLink.Arcs.Back(), arcItems)); - } - - RINOK(UpdateWithItemLists(codecs, options, - thereIsInArchive ? archiveLink.GetArchive() : 0, - arcItems, dirItems, - tempFiles, errorInfo, callback)); - - if (thereIsInArchive) - { - RINOK(archiveLink.Close()); - archiveLink.Release(); - } - - tempFiles.Paths.Clear(); - if (createTempFile) - { - try - { - CArchivePath &ap = options.Commands[0].ArchivePath; - const UString &tempPath = ap.GetTempPath(); - if (thereIsInArchive) - if (!NDirectory::DeleteFileAlways(archiveName)) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.Message = L"7-Zip cannot delete the file"; - errorInfo.FileName = archiveName; - return E_FAIL; - } - if (!NDirectory::MyMoveFile(tempPath, archiveName)) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.Message = L"7-Zip cannot move the file"; - errorInfo.FileName = tempPath; - errorInfo.FileName2 = archiveName; - return E_FAIL; - } - } - catch(...) - { - throw; - } - } - - #if defined(_WIN32) && !defined(UNDER_CE) - if (options.EMailMode) - { - NDLL::CLibrary mapiLib; - if (!mapiLib.Load(TEXT("Mapi32.dll"))) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.Message = L"7-Zip cannot load Mapi32.dll"; - return E_FAIL; - } - MY_LPMAPISENDDOCUMENTS fnSend = (MY_LPMAPISENDDOCUMENTS)mapiLib.GetProc("MAPISendDocuments"); - if (fnSend == 0) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.Message = L"7-Zip cannot find MAPISendDocuments function"; - return E_FAIL; - } - UStringVector fullPaths; - int i; - for(i = 0; i < options.Commands.Size(); i++) - { - CArchivePath &ap = options.Commands[i].ArchivePath; - UString arcPath; - if (!NFile::NDirectory::MyGetFullPathName(ap.GetFinalPath(), arcPath)) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.Message = L"GetFullPathName error"; - return E_FAIL; - } - fullPaths.Add(arcPath); - } - CCurrentDirRestorer curDirRestorer; - for(i = 0; i < fullPaths.Size(); i++) - { - UString arcPath = fullPaths[i]; - UString fileName = ExtractFileNameFromPath(arcPath); - AString path = GetAnsiString(arcPath); - AString name = GetAnsiString(fileName); - // Warning!!! MAPISendDocuments function changes Current directory - fnSend(0, ";", (LPSTR)(LPCSTR)path, (LPSTR)(LPCSTR)name, 0); - } - } - #endif - return S_OK; -} - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Update.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Update.h deleted file mode 100644 index d6eb3977f936..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/Update.h +++ /dev/null @@ -1,175 +0,0 @@ -// Update.h - -#ifndef __UPDATE_H -#define __UPDATE_H - -#include "Common/Wildcard.h" -#include "Windows/FileFind.h" -#include "../../Archive/IArchive.h" - -#include "UpdateAction.h" -#include "ArchiveOpenCallback.h" -#include "UpdateCallback.h" -#include "Property.h" -#include "LoadCodecs.h" - -struct CArchivePath -{ - UString Prefix; // path(folder) prefix including slash - UString Name; // base name - UString BaseExtension; // archive type extension or "exe" extension - UString VolExtension; // archive type extension for volumes - - bool Temp; - UString TempPrefix; // path(folder) for temp location - UString TempPostfix; - - CArchivePath(): Temp(false) {}; - - void ParseFromPath(const UString &path) - { - SplitPathToParts(path, Prefix, Name); - if (Name.IsEmpty()) - return; - int dotPos = Name.ReverseFind(L'.'); - if (dotPos <= 0) - return; - if (dotPos == Name.Length() - 1) - { - Name = Name.Left(dotPos); - BaseExtension.Empty(); - return; - } - if (BaseExtension.CompareNoCase(Name.Mid(dotPos + 1)) == 0) - { - BaseExtension = Name.Mid(dotPos + 1); - Name = Name.Left(dotPos); - } - else - BaseExtension.Empty(); - } - - UString GetPathWithoutExt() const - { - return Prefix + Name; - } - - UString GetFinalPath() const - { - UString path = GetPathWithoutExt(); - if (!BaseExtension.IsEmpty()) - path += UString(L'.') + BaseExtension; - return path; - } - - - UString GetTempPath() const - { - UString path = TempPrefix + Name; - if (!BaseExtension.IsEmpty()) - path += UString(L'.') + BaseExtension; - path += L".tmp"; - path += TempPostfix; - return path; - } -}; - -struct CUpdateArchiveCommand -{ - UString UserArchivePath; - CArchivePath ArchivePath; - NUpdateArchive::CActionSet ActionSet; -}; - -struct CCompressionMethodMode -{ - int FormatIndex; - CObjectVector Properties; - CCompressionMethodMode(): FormatIndex(-1) {} -}; - -struct CUpdateOptions -{ - CCompressionMethodMode MethodMode; - - CObjectVector Commands; - bool UpdateArchiveItself; - CArchivePath ArchivePath; - - bool SfxMode; - UString SfxModule; - - bool OpenShareForWrite; - - bool StdInMode; - UString StdInFileName; - bool StdOutMode; - - bool EMailMode; - bool EMailRemoveAfter; - UString EMailAddress; - - UString WorkingDir; - - bool Init(const CCodecs *codecs, const CIntVector &formatIndices, const UString &arcPath); - - CUpdateOptions(): - UpdateArchiveItself(true), - SfxMode(false), - StdInMode(false), - StdOutMode(false), - EMailMode(false), - EMailRemoveAfter(false), - OpenShareForWrite(false) - {}; - - void SetAddActionCommand() - { - Commands.Clear(); - CUpdateArchiveCommand c; - c.ActionSet = NUpdateArchive::kAddActionSet; - Commands.Add(c); - } - - CRecordVector VolumesSizes; -}; - -struct CErrorInfo -{ - DWORD SystemError; - UString FileName; - UString FileName2; - UString Message; - // UStringVector ErrorPaths; - // CRecordVector ErrorCodes; - CErrorInfo(): SystemError(0) {}; -}; - -struct CUpdateErrorInfo: public CErrorInfo -{ -}; - -#define INTERFACE_IUpdateCallbackUI2(x) \ - INTERFACE_IUpdateCallbackUI(x) \ - virtual HRESULT OpenResult(const wchar_t *name, HRESULT result) x; \ - virtual HRESULT StartScanning() x; \ - virtual HRESULT ScanProgress(UInt64 numFolders, UInt64 numFiles, const wchar_t *path) x; \ - virtual HRESULT CanNotFindError(const wchar_t *name, DWORD systemError) x; \ - virtual HRESULT FinishScanning() x; \ - virtual HRESULT StartArchive(const wchar_t *name, bool updating) x; \ - virtual HRESULT FinishArchive() x; \ - -struct IUpdateCallbackUI2: public IUpdateCallbackUI -{ - INTERFACE_IUpdateCallbackUI2(=0) -}; - -HRESULT UpdateArchive( - CCodecs *codecs, - const NWildcard::CCensor &censor, - CUpdateOptions &options, - CUpdateErrorInfo &errorInfo, - IOpenCallbackUI *openCallback, - IUpdateCallbackUI2 *callback); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateAction.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateAction.cpp deleted file mode 100644 index 9e67db295a55..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateAction.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// UpdateAction.cpp - -#include "StdAfx.h" - -#include "UpdateAction.h" - -namespace NUpdateArchive { - -const CActionSet kAddActionSet = -{ - NPairAction::kCopy, - NPairAction::kCopy, - NPairAction::kCompress, - NPairAction::kCompress, - NPairAction::kCompress, - NPairAction::kCompress, - NPairAction::kCompress -}; - -const CActionSet kUpdateActionSet = -{ - NPairAction::kCopy, - NPairAction::kCopy, - NPairAction::kCompress, - NPairAction::kCopy, - NPairAction::kCompress, - NPairAction::kCopy, - NPairAction::kCompress -}; - -const CActionSet kFreshActionSet = -{ - NPairAction::kCopy, - NPairAction::kCopy, - NPairAction::kIgnore, - NPairAction::kCopy, - NPairAction::kCompress, - NPairAction::kCopy, - NPairAction::kCompress -}; - -const CActionSet kSynchronizeActionSet = -{ - NPairAction::kCopy, - NPairAction::kIgnore, - NPairAction::kCompress, - NPairAction::kCopy, - NPairAction::kCompress, - NPairAction::kCopy, - NPairAction::kCompress, -}; - -const CActionSet kDeleteActionSet = -{ - NPairAction::kCopy, - NPairAction::kIgnore, - NPairAction::kIgnore, - NPairAction::kIgnore, - NPairAction::kIgnore, - NPairAction::kIgnore, - NPairAction::kIgnore -}; - -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateAction.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateAction.h deleted file mode 100644 index d1822c170ff7..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateAction.h +++ /dev/null @@ -1,57 +0,0 @@ -// UpdateAction.h - -#ifndef __UPDATE_ACTION_H -#define __UPDATE_ACTION_H - -namespace NUpdateArchive { - - namespace NPairState - { - const int kNumValues = 7; - enum EEnum - { - kNotMasked = 0, - kOnlyInArchive, - kOnlyOnDisk, - kNewInArchive, - kOldInArchive, - kSameFiles, - kUnknowNewerFiles - }; - } - namespace NPairAction - { - enum EEnum - { - kIgnore = 0, - kCopy, - kCompress, - kCompressAsAnti - }; - } - struct CActionSet - { - NPairAction::EEnum StateActions[NPairState::kNumValues]; - bool NeedScanning() const - { - int i; - for (i = 0; i < NPairState::kNumValues; i++) - if (StateActions[i] == NPairAction::kCompress) - return true; - for (i = 1; i < NPairState::kNumValues; i++) - if (StateActions[i] != NPairAction::kIgnore) - return true; - return false; - } - }; - extern const CActionSet kAddActionSet; - extern const CActionSet kUpdateActionSet; - extern const CActionSet kFreshActionSet; - extern const CActionSet kSynchronizeActionSet; - extern const CActionSet kDeleteActionSet; -}; - - -#endif - - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateCallback.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateCallback.cpp deleted file mode 100644 index 55c937402377..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateCallback.cpp +++ /dev/null @@ -1,249 +0,0 @@ -// UpdateCallback.cpp - -#include "StdAfx.h" - -#include "Common/ComTry.h" -#include "Common/Defs.h" -#include "Common/IntToString.h" -#include "Common/StringConvert.h" - -#include "Windows/PropVariant.h" - -#include "../../Common/FileStreams.h" - -#include "UpdateCallback.h" - -using namespace NWindows; - -CArchiveUpdateCallback::CArchiveUpdateCallback(): - Callback(0), - ShareForWrite(false), - StdInMode(false), - DirItems(0), - ArcItems(0), - UpdatePairs(0), - NewNames(0) - {} - - -STDMETHODIMP CArchiveUpdateCallback::SetTotal(UInt64 size) -{ - COM_TRY_BEGIN - return Callback->SetTotal(size); - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::SetCompleted(const UInt64 *completeValue) -{ - COM_TRY_BEGIN - return Callback->SetCompleted(completeValue); - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) -{ - COM_TRY_BEGIN - return Callback->SetRatioInfo(inSize, outSize); - COM_TRY_END -} - - -/* -STATPROPSTG kProperties[] = -{ - { NULL, kpidPath, VT_BSTR}, - { NULL, kpidIsDir, VT_BOOL}, - { NULL, kpidSize, VT_UI8}, - { NULL, kpidCTime, VT_FILETIME}, - { NULL, kpidATime, VT_FILETIME}, - { NULL, kpidMTime, VT_FILETIME}, - { NULL, kpidAttrib, VT_UI4}, - { NULL, kpidIsAnti, VT_BOOL} -}; - -STDMETHODIMP CArchiveUpdateCallback::EnumProperties(IEnumSTATPROPSTG **) -{ - return CStatPropEnumerator::CreateEnumerator(kProperties, sizeof(kProperties) / sizeof(kProperties[0]), enumerator); -} -*/ - -STDMETHODIMP CArchiveUpdateCallback::GetUpdateItemInfo(UInt32 index, - Int32 *newData, Int32 *newProps, UInt32 *indexInArchive) -{ - COM_TRY_BEGIN - RINOK(Callback->CheckBreak()); - const CUpdatePair2 &up = (*UpdatePairs)[index]; - if (newData != NULL) *newData = BoolToInt(up.NewData); - if (newProps != NULL) *newProps = BoolToInt(up.NewProps); - if (indexInArchive != NULL) - { - *indexInArchive = (UInt32)-1; - if (up.ExistInArchive()) - *indexInArchive = (ArcItems == 0) ? up.ArcIndex : (*ArcItems)[up.ArcIndex].IndexInServer; - } - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value) -{ - COM_TRY_BEGIN - const CUpdatePair2 &up = (*UpdatePairs)[index]; - NWindows::NCOM::CPropVariant prop; - - if (propID == kpidIsAnti) - { - prop = up.IsAnti; - prop.Detach(value); - return S_OK; - } - - if (up.IsAnti) - { - switch(propID) - { - case kpidIsDir: - case kpidPath: - break; - case kpidSize: - prop = (UInt64)0; - prop.Detach(value); - return S_OK; - default: - prop.Detach(value); - return S_OK; - } - } - - if (up.ExistOnDisk()) - { - const CDirItem &di = DirItems->Items[up.DirIndex]; - switch(propID) - { - case kpidPath: prop = DirItems->GetLogPath(up.DirIndex); break; - case kpidIsDir: prop = di.IsDir(); break; - case kpidSize: prop = di.Size; break; - case kpidAttrib: prop = di.Attrib; break; - case kpidCTime: prop = di.CTime; break; - case kpidATime: prop = di.ATime; break; - case kpidMTime: prop = di.MTime; break; - } - } - else - { - if (propID == kpidPath) - { - if (up.NewNameIndex >= 0) - { - prop = (*NewNames)[up.NewNameIndex]; - prop.Detach(value); - return S_OK; - } - } - if (up.ExistInArchive() && Archive) - { - UInt32 indexInArchive; - if (ArcItems == 0) - indexInArchive = up.ArcIndex; - else - indexInArchive = (*ArcItems)[up.ArcIndex].IndexInServer; - return Archive->GetProperty(indexInArchive, propID, value); - } - } - prop.Detach(value); - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::GetStream(UInt32 index, ISequentialInStream **inStream) -{ - COM_TRY_BEGIN - const CUpdatePair2 &up = (*UpdatePairs)[index]; - if (!up.NewData) - return E_FAIL; - - RINOK(Callback->CheckBreak()); - RINOK(Callback->Finilize()); - - if (up.IsAnti) - { - return Callback->GetStream((*ArcItems)[up.ArcIndex].Name, true); - } - const CDirItem &di = DirItems->Items[up.DirIndex]; - RINOK(Callback->GetStream(DirItems->GetLogPath(up.DirIndex), false)); - - if (di.IsDir()) - return S_OK; - - if (StdInMode) - { - CStdInFileStream *inStreamSpec = new CStdInFileStream; - CMyComPtr inStreamLoc(inStreamSpec); - *inStream = inStreamLoc.Detach(); - } - else - { - CInFileStream *inStreamSpec = new CInFileStream; - CMyComPtr inStreamLoc(inStreamSpec); - const UString path = DirItems->GetPhyPath(up.DirIndex); - if (!inStreamSpec->OpenShared(path, ShareForWrite)) - { - return Callback->OpenFileError(path, ::GetLastError()); - } - *inStream = inStreamLoc.Detach(); - } - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::SetOperationResult(Int32 operationResult) -{ - COM_TRY_BEGIN - return Callback->SetOperationResult(operationResult); - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::GetVolumeSize(UInt32 index, UInt64 *size) -{ - if (VolumesSizes.Size() == 0) - return S_FALSE; - if (index >= (UInt32)VolumesSizes.Size()) - index = VolumesSizes.Size() - 1; - *size = VolumesSizes[index]; - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::GetVolumeStream(UInt32 index, ISequentialOutStream **volumeStream) -{ - COM_TRY_BEGIN - wchar_t temp[16]; - ConvertUInt32ToString(index + 1, temp); - UString res = temp; - while (res.Length() < 2) - res = UString(L'0') + res; - UString fileName = VolName; - fileName += L'.'; - fileName += res; - fileName += VolExt; - COutFileStream *streamSpec = new COutFileStream; - CMyComPtr streamLoc(streamSpec); - if (!streamSpec->Create(fileName, false)) - return ::GetLastError(); - *volumeStream = streamLoc.Detach(); - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) -{ - COM_TRY_BEGIN - return Callback->CryptoGetTextPassword2(passwordIsDefined, password); - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::CryptoGetTextPassword(BSTR *password) -{ - COM_TRY_BEGIN - return Callback->CryptoGetTextPassword(password); - COM_TRY_END -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateCallback.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateCallback.h deleted file mode 100644 index 86d11e51a627..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateCallback.h +++ /dev/null @@ -1,74 +0,0 @@ -// UpdateCallback.h - -#ifndef __UPDATECALLBACK_H -#define __UPDATECALLBACK_H - -#include "Common/MyCom.h" -#include "Common/MyString.h" - -#include "../../IPassword.h" -#include "../../ICoder.h" - -#include "../Common/UpdatePair.h" -#include "../Common/UpdateProduce.h" - -#define INTERFACE_IUpdateCallbackUI(x) \ - virtual HRESULT SetTotal(UInt64 size) x; \ - virtual HRESULT SetCompleted(const UInt64 *completeValue) x; \ - virtual HRESULT SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) x; \ - virtual HRESULT CheckBreak() x; \ - virtual HRESULT Finilize() x; \ - virtual HRESULT SetNumFiles(UInt64 numFiles) x; \ - virtual HRESULT GetStream(const wchar_t *name, bool isAnti) x; \ - virtual HRESULT OpenFileError(const wchar_t *name, DWORD systemError) x; \ - virtual HRESULT SetOperationResult(Int32 operationResult) x; \ - virtual HRESULT CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) x; \ - virtual HRESULT CryptoGetTextPassword(BSTR *password) x; \ - // virtual HRESULT ShowDeleteFile(const wchar_t *name) x; \ - // virtual HRESULT CloseProgress() { return S_OK; }; - -struct IUpdateCallbackUI -{ - INTERFACE_IUpdateCallbackUI(=0) -}; - -class CArchiveUpdateCallback: - public IArchiveUpdateCallback2, - public ICryptoGetTextPassword2, - public ICryptoGetTextPassword, - public ICompressProgressInfo, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP4( - IArchiveUpdateCallback2, - ICryptoGetTextPassword2, - ICryptoGetTextPassword, - ICompressProgressInfo) - - STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); - - INTERFACE_IArchiveUpdateCallback2(;) - - STDMETHOD(CryptoGetTextPassword2)(Int32 *passwordIsDefined, BSTR *password); - STDMETHOD(CryptoGetTextPassword)(BSTR *password); - -public: - CRecordVector VolumesSizes; - UString VolName; - UString VolExt; - - IUpdateCallbackUI *Callback; - - bool ShareForWrite; - bool StdInMode; - const CDirItems *DirItems; - const CObjectVector *ArcItems; - const CRecordVector *UpdatePairs; - const UStringVector *NewNames; - CMyComPtr Archive; - - CArchiveUpdateCallback(); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdatePair.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdatePair.cpp deleted file mode 100644 index 812bff8382da..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdatePair.cpp +++ /dev/null @@ -1,158 +0,0 @@ -// UpdatePair.cpp - -#include "StdAfx.h" - -#include - -#include "Common/Defs.h" -#include "Common/Wildcard.h" - -#include "Windows/Time.h" - -#include "SortUtils.h" -#include "UpdatePair.h" - -using namespace NWindows; -using namespace NTime; - -static int MyCompareTime(NFileTimeType::EEnum fileTimeType, const FILETIME &time1, const FILETIME &time2) -{ - switch(fileTimeType) - { - case NFileTimeType::kWindows: - return ::CompareFileTime(&time1, &time2); - case NFileTimeType::kUnix: - { - UInt32 unixTime1, unixTime2; - FileTimeToUnixTime(time1, unixTime1); - FileTimeToUnixTime(time2, unixTime2); - return MyCompare(unixTime1, unixTime2); - } - case NFileTimeType::kDOS: - { - UInt32 dosTime1, dosTime2; - FileTimeToDosTime(time1, dosTime1); - FileTimeToDosTime(time2, dosTime2); - return MyCompare(dosTime1, dosTime2); - } - } - throw 4191618; -} - -static const wchar_t *kDuplicateFileNameMessage = L"Duplicate filename:"; -static const wchar_t *kNotCensoredCollisionMessaged = L"Internal file name collision (file on disk, file in archive):"; - -static void ThrowError(const UString &message, const UString &s1, const UString &s2) -{ - UString m = message; - m += L'\n'; - m += s1; - m += L'\n'; - m += s2; - throw m; -} - -static void TestDuplicateString(const UStringVector &strings, const CIntVector &indices) -{ - for(int i = 0; i + 1 < indices.Size(); i++) - if (CompareFileNames(strings[indices[i]], strings[indices[i + 1]]) == 0) - ThrowError(kDuplicateFileNameMessage, strings[indices[i]], strings[indices[i + 1]]); -} - -void GetUpdatePairInfoList( - const CDirItems &dirItems, - const CObjectVector &arcItems, - NFileTimeType::EEnum fileTimeType, - CRecordVector &updatePairs) -{ - CIntVector dirIndices, arcIndices; - - int numDirItems = dirItems.Items.Size(); - int numArcItems = arcItems.Size(); - - - { - UStringVector arcNames; - arcNames.Reserve(numArcItems); - for (int i = 0; i < numArcItems; i++) - arcNames.Add(arcItems[i].Name); - SortFileNames(arcNames, arcIndices); - TestDuplicateString(arcNames, arcIndices); - } - - UStringVector dirNames; - { - dirNames.Reserve(numDirItems); - for (int i = 0; i < numDirItems; i++) - dirNames.Add(dirItems.GetLogPath(i)); - SortFileNames(dirNames, dirIndices); - TestDuplicateString(dirNames, dirIndices); - } - - int dirIndex = 0, arcIndex = 0; - while (dirIndex < numDirItems && arcIndex < numArcItems) - { - CUpdatePair pair; - int dirIndex2 = dirIndices[dirIndex]; - int arcIndex2 = arcIndices[arcIndex]; - const CDirItem &di = dirItems.Items[dirIndex2]; - const CArcItem &ai = arcItems[arcIndex2]; - int compareResult = CompareFileNames(dirNames[dirIndex2], ai.Name); - if (compareResult < 0) - { - pair.State = NUpdateArchive::NPairState::kOnlyOnDisk; - pair.DirIndex = dirIndex2; - dirIndex++; - } - else if (compareResult > 0) - { - pair.State = ai.Censored ? - NUpdateArchive::NPairState::kOnlyInArchive: - NUpdateArchive::NPairState::kNotMasked; - pair.ArcIndex = arcIndex2; - arcIndex++; - } - else - { - if (!ai.Censored) - ThrowError(kNotCensoredCollisionMessaged, dirNames[dirIndex2], ai.Name); - pair.DirIndex = dirIndex2; - pair.ArcIndex = arcIndex2; - switch (ai.MTimeDefined ? MyCompareTime( - ai.TimeType != - 1 ? (NFileTimeType::EEnum)ai.TimeType : fileTimeType, - di.MTime, ai.MTime): 0) - { - case -1: pair.State = NUpdateArchive::NPairState::kNewInArchive; break; - case 1: pair.State = NUpdateArchive::NPairState::kOldInArchive; break; - default: - pair.State = (ai.SizeDefined && di.Size == ai.Size) ? - NUpdateArchive::NPairState::kSameFiles : - NUpdateArchive::NPairState::kUnknowNewerFiles; - } - dirIndex++; - arcIndex++; - } - updatePairs.Add(pair); - } - - for (; dirIndex < numDirItems; dirIndex++) - { - CUpdatePair pair; - pair.State = NUpdateArchive::NPairState::kOnlyOnDisk; - pair.DirIndex = dirIndices[dirIndex]; - updatePairs.Add(pair); - } - - for (; arcIndex < numArcItems; arcIndex++) - { - CUpdatePair pair; - int arcIndex2 = arcIndices[arcIndex]; - pair.State = arcItems[arcIndex2].Censored ? - NUpdateArchive::NPairState::kOnlyInArchive: - NUpdateArchive::NPairState::kNotMasked; - pair.ArcIndex = arcIndex2; - updatePairs.Add(pair); - } - - updatePairs.ReserveDown(); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdatePair.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdatePair.h deleted file mode 100644 index 5ee2665ce44b..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdatePair.h +++ /dev/null @@ -1,25 +0,0 @@ -// UpdatePair.h - -#ifndef __UPDATE_PAIR_H -#define __UPDATE_PAIR_H - -#include "DirItem.h" -#include "UpdateAction.h" - -#include "../../Archive/IArchive.h" - -struct CUpdatePair -{ - NUpdateArchive::NPairState::EEnum State; - int ArcIndex; - int DirIndex; - CUpdatePair(): ArcIndex(-1), DirIndex(-1) {} -}; - -void GetUpdatePairInfoList( - const CDirItems &dirItems, - const CObjectVector &arcItems, - NFileTimeType::EEnum fileTimeType, - CRecordVector &updatePairs); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateProduce.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateProduce.cpp deleted file mode 100644 index 3ba677de6001..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateProduce.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// UpdateProduce.cpp - -#include "StdAfx.h" - -#include "UpdateProduce.h" - -using namespace NUpdateArchive; - -static const char *kUpdateActionSetCollision = "Internal collision in update action set"; - -void UpdateProduce( - const CRecordVector &updatePairs, - const CActionSet &actionSet, - CRecordVector &operationChain, - IUpdateProduceCallback *callback) -{ - for (int i = 0; i < updatePairs.Size(); i++) - { - const CUpdatePair &pair = updatePairs[i]; - - CUpdatePair2 up2; - up2.IsAnti = false; - up2.DirIndex = pair.DirIndex; - up2.ArcIndex = pair.ArcIndex; - up2.NewData = up2.NewProps = true; - - switch(actionSet.StateActions[pair.State]) - { - case NPairAction::kIgnore: - /* - if (pair.State != NPairState::kOnlyOnDisk) - IgnoreArchiveItem(m_ArchiveItems[pair.ArcIndex]); - // cout << "deleting"; - */ - if (callback) - callback->ShowDeleteFile(pair.ArcIndex); - continue; - - case NPairAction::kCopy: - if (pair.State == NPairState::kOnlyOnDisk) - throw kUpdateActionSetCollision; - up2.NewData = up2.NewProps = false; - break; - - case NPairAction::kCompress: - if (pair.State == NPairState::kOnlyInArchive || - pair.State == NPairState::kNotMasked) - throw kUpdateActionSetCollision; - break; - - case NPairAction::kCompressAsAnti: - up2.IsAnti = true; - break; - } - operationChain.Add(up2); - } - operationChain.ReserveDown(); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateProduce.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateProduce.h deleted file mode 100644 index c511caff4bec..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/UpdateProduce.h +++ /dev/null @@ -1,35 +0,0 @@ -// UpdateProduce.h - -#ifndef __UPDATE_PRODUCE_H -#define __UPDATE_PRODUCE_H - -#include "UpdatePair.h" - -struct CUpdatePair2 -{ - bool NewData; - bool NewProps; - bool IsAnti; - - int DirIndex; - int ArcIndex; - int NewNameIndex; - - bool ExistOnDisk() const { return DirIndex != -1; } - bool ExistInArchive() const { return ArcIndex != -1; } - - CUpdatePair2(): IsAnti(false), DirIndex(-1), ArcIndex(-1), NewNameIndex(-1) {} -}; - -struct IUpdateProduceCallback -{ - virtual HRESULT ShowDeleteFile(int arcIndex) = 0; -}; - -void UpdateProduce( - const CRecordVector &updatePairs, - const NUpdateArchive::CActionSet &actionSet, - CRecordVector &operationChain, - IUpdateProduceCallback *callback); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/WorkDir.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/WorkDir.cpp deleted file mode 100644 index 2989632e0e18..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/WorkDir.cpp +++ /dev/null @@ -1,59 +0,0 @@ -// WorkDir.cpp - -#include "StdAfx.h" - -#include "Common/StringConvert.h" -#include "Common/Wildcard.h" - -#include "Windows/FileDir.h" -#include "Windows/FileName.h" - -#include "WorkDir.h" - -using namespace NWindows; -using namespace NFile; - -UString GetWorkDir(const NWorkDir::CInfo &workDirInfo, const UString &path) -{ - NWorkDir::NMode::EEnum mode = workDirInfo.Mode; - #ifndef UNDER_CE - if (workDirInfo.ForRemovableOnly) - { - mode = NWorkDir::NMode::kCurrent; - UString prefix = path.Left(3); - if (prefix[1] == L':' && prefix[2] == L'\\') - { - UINT driveType = GetDriveType(GetSystemString(prefix, ::AreFileApisANSI() ? CP_ACP : CP_OEMCP)); - if (driveType == DRIVE_CDROM || driveType == DRIVE_REMOVABLE) - mode = workDirInfo.Mode; - } - /* - CParsedPath parsedPath; - parsedPath.ParsePath(archiveName); - UINT driveType = GetDriveType(parsedPath.Prefix); - if ((driveType != DRIVE_CDROM) && (driveType != DRIVE_REMOVABLE)) - mode = NZipSettings::NWorkDir::NMode::kCurrent; - */ - } - #endif - switch(mode) - { - case NWorkDir::NMode::kCurrent: - { - return ExtractDirPrefixFromPath(path); - } - case NWorkDir::NMode::kSpecified: - { - UString tempDir = workDirInfo.Path; - NName::NormalizeDirPathPrefix(tempDir); - return tempDir; - } - default: - { - UString tempDir; - if (!NDirectory::MyGetTempPath(tempDir)) - throw 141717; - return tempDir; - } - } -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/WorkDir.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/WorkDir.h deleted file mode 100644 index 8208f3a0fcd3..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/WorkDir.h +++ /dev/null @@ -1,10 +0,0 @@ -// WorkDir.h - -#ifndef __WORKDIR_H -#define __WORKDIR_H - -#include "ZipRegistry.h" - -UString GetWorkDir(const NWorkDir::CInfo &workDirInfo, const UString &path); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ZipRegistry.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ZipRegistry.h deleted file mode 100644 index 1760d9bc319b..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Common/ZipRegistry.h +++ /dev/null @@ -1,105 +0,0 @@ -// ZipRegistry.h - -#ifndef __ZIP_REGISTRY_H -#define __ZIP_REGISTRY_H - -#include "Common/MyString.h" -#include "Common/Types.h" - -#include "ExtractMode.h" - -namespace NExtract -{ - struct CInfo - { - NPathMode::EEnum PathMode; - NOverwriteMode::EEnum OverwriteMode; - bool ShowPassword; - UStringVector Paths; - - void Save() const; - void Load(); - }; -} - -namespace NCompression -{ - struct CFormatOptions - { - UInt32 Level; - UInt32 Dictionary; - UInt32 Order; - UInt32 BlockLogSize; - UInt32 NumThreads; - - CSysString FormatID; - UString Method; - UString Options; - UString EncryptionMethod; - - void ResetForLevelChange() - { - BlockLogSize = NumThreads = Level = Dictionary = Order = UInt32(-1); - Method.Empty(); - // Options.Empty(); - // EncryptionMethod.Empty(); - } - CFormatOptions() { ResetForLevelChange(); } - }; - - struct CInfo - { - UInt32 Level; - bool ShowPassword; - bool EncryptHeaders; - UString ArcType; - UStringVector ArcPaths; - - CObjectVector Formats; - - void Save() const; - void Load(); - }; -} - -namespace NWorkDir -{ - namespace NMode - { - enum EEnum - { - kSystem, - kCurrent, - kSpecified - }; - } - struct CInfo - { - NMode::EEnum Mode; - UString Path; - bool ForRemovableOnly; - - void SetForRemovableOnlyDefault() { ForRemovableOnly = true; } - void SetDefault() - { - Mode = NMode::kSystem; - Path.Empty(); - SetForRemovableOnlyDefault(); - } - - void Save() const; - void Load(); - }; -} - - -struct CContextMenuInfo -{ - bool Cascaded; - UInt32 Flags; - - void Save() const; - void Load(); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ConsoleClose.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ConsoleClose.cpp deleted file mode 100644 index aa9d94434cd0..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ConsoleClose.cpp +++ /dev/null @@ -1,73 +0,0 @@ -// ConsoleClose.cpp - -#include "StdAfx.h" - -#include "ConsoleClose.h" - -static int g_BreakCounter = 0; -static const int kBreakAbortThreshold = 2; - -namespace NConsoleClose { - -#ifndef UNDER_CE -static BOOL WINAPI HandlerRoutine(DWORD ctrlType) -{ - if (ctrlType == CTRL_LOGOFF_EVENT) - { - // printf("\nCTRL_LOGOFF_EVENT\n"); - return TRUE; - } - - g_BreakCounter++; - if (g_BreakCounter < kBreakAbortThreshold) - return TRUE; - return FALSE; - /* - switch(ctrlType) - { - case CTRL_C_EVENT: - case CTRL_BREAK_EVENT: - if (g_BreakCounter < kBreakAbortThreshold) - return TRUE; - } - return FALSE; - */ -} -#endif - -bool TestBreakSignal() -{ - #ifdef UNDER_CE - return false; - #else - /* - if (g_BreakCounter > 0) - return true; - */ - return (g_BreakCounter > 0); - #endif -} - -void CheckCtrlBreak() -{ - if (TestBreakSignal()) - throw CCtrlBreakException(); -} - -CCtrlHandlerSetter::CCtrlHandlerSetter() -{ - #ifndef UNDER_CE - if(!SetConsoleCtrlHandler(HandlerRoutine, TRUE)) - throw "SetConsoleCtrlHandler fails"; - #endif -} - -CCtrlHandlerSetter::~CCtrlHandlerSetter() -{ - #ifndef UNDER_CE - if(!SetConsoleCtrlHandler(HandlerRoutine, FALSE)) - throw "SetConsoleCtrlHandler fails"; - #endif -} - -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ConsoleClose.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ConsoleClose.h deleted file mode 100644 index 7101018a4dcd..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ConsoleClose.h +++ /dev/null @@ -1,24 +0,0 @@ -// ConsoleCloseUtils.h - -#ifndef __CONSOLECLOSEUTILS_H -#define __CONSOLECLOSEUTILS_H - -namespace NConsoleClose { - -bool TestBreakSignal(); - -class CCtrlHandlerSetter -{ -public: - CCtrlHandlerSetter(); - virtual ~CCtrlHandlerSetter(); -}; - -class CCtrlBreakException -{}; - -void CheckCtrlBreak(); - -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp deleted file mode 100644 index 278b0694f624..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp +++ /dev/null @@ -1,228 +0,0 @@ -// ExtractCallbackConsole.h - -#include "StdAfx.h" - -#include "ExtractCallbackConsole.h" -#include "UserInputUtils.h" -#include "ConsoleClose.h" - -#include "Common/Wildcard.h" - -#include "Windows/FileDir.h" -#include "Windows/FileFind.h" -#include "Windows/Time.h" -#include "Windows/Defs.h" -#include "Windows/PropVariant.h" -#include "Windows/Error.h" -#include "Windows/PropVariantConversions.h" - -#include "../../Common/FilePathAutoRename.h" - -#include "../Common/ExtractingFilePath.h" - -using namespace NWindows; -using namespace NFile; -using namespace NDirectory; - -static const char *kTestString = "Testing "; -static const char *kExtractString = "Extracting "; -static const char *kSkipString = "Skipping "; - -// static const char *kCantAutoRename = "can not create file with auto name\n"; -// static const char *kCantRenameFile = "can not rename existing file\n"; -// static const char *kCantDeleteOutputFile = "can not delete output file "; -static const char *kError = "ERROR: "; -static const char *kMemoryExceptionMessage = "Can't allocate required memory!"; - -static const char *kProcessing = "Processing archive: "; -static const char *kEverythingIsOk = "Everything is Ok"; -static const char *kNoFiles = "No files to process"; - -static const char *kUnsupportedMethod = "Unsupported Method"; -static const char *kCrcFailed = "CRC Failed"; -static const char *kCrcFailedEncrypted = "CRC Failed in encrypted file. Wrong password?"; -static const char *kDataError = "Data Error"; -static const char *kDataErrorEncrypted = "Data Error in encrypted file. Wrong password?"; -static const char *kUnknownError = "Unknown Error"; - -STDMETHODIMP CExtractCallbackConsole::SetTotal(UInt64) -{ - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - return S_OK; -} - -STDMETHODIMP CExtractCallbackConsole::SetCompleted(const UInt64 *) -{ - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - return S_OK; -} - -STDMETHODIMP CExtractCallbackConsole::AskOverwrite( - const wchar_t *existName, const FILETIME *, const UInt64 *, - const wchar_t *newName, const FILETIME *, const UInt64 *, - Int32 *answer) -{ - (*OutStream) << "file " << existName << - "\nalready exists. Overwrite with " << endl; - (*OutStream) << newName; - - NUserAnswerMode::EEnum overwriteAnswer = ScanUserYesNoAllQuit(OutStream); - - switch(overwriteAnswer) - { - case NUserAnswerMode::kQuit: return E_ABORT; - case NUserAnswerMode::kNo: *answer = NOverwriteAnswer::kNo; break; - case NUserAnswerMode::kNoAll: *answer = NOverwriteAnswer::kNoToAll; break; - case NUserAnswerMode::kYesAll: *answer = NOverwriteAnswer::kYesToAll; break; - case NUserAnswerMode::kYes: *answer = NOverwriteAnswer::kYes; break; - case NUserAnswerMode::kAutoRenameAll: *answer = NOverwriteAnswer::kAutoRename; break; - default: return E_FAIL; - } - return S_OK; -} - -STDMETHODIMP CExtractCallbackConsole::PrepareOperation(const wchar_t *name, bool /* isFolder */, Int32 askExtractMode, const UInt64 *position) -{ - switch (askExtractMode) - { - case NArchive::NExtract::NAskMode::kExtract: (*OutStream) << kExtractString; break; - case NArchive::NExtract::NAskMode::kTest: (*OutStream) << kTestString; break; - case NArchive::NExtract::NAskMode::kSkip: (*OutStream) << kSkipString; break; - }; - (*OutStream) << name; - if (position != 0) - (*OutStream) << " <" << *position << ">"; - return S_OK; -} - -STDMETHODIMP CExtractCallbackConsole::MessageError(const wchar_t *message) -{ - (*OutStream) << message << endl; - NumFileErrorsInCurrentArchive++; - NumFileErrors++; - return S_OK; -} - -STDMETHODIMP CExtractCallbackConsole::SetOperationResult(Int32 operationResult, bool encrypted) -{ - switch(operationResult) - { - case NArchive::NExtract::NOperationResult::kOK: - break; - default: - { - NumFileErrorsInCurrentArchive++; - NumFileErrors++; - (*OutStream) << " "; - switch(operationResult) - { - case NArchive::NExtract::NOperationResult::kUnSupportedMethod: - (*OutStream) << kUnsupportedMethod; - break; - case NArchive::NExtract::NOperationResult::kCRCError: - (*OutStream) << (encrypted ? kCrcFailedEncrypted: kCrcFailed); - break; - case NArchive::NExtract::NOperationResult::kDataError: - (*OutStream) << (encrypted ? kDataErrorEncrypted : kDataError); - break; - default: - (*OutStream) << kUnknownError; - } - } - } - (*OutStream) << endl; - return S_OK; -} - -#ifndef _NO_CRYPTO - -HRESULT CExtractCallbackConsole::SetPassword(const UString &password) -{ - PasswordIsDefined = true; - Password = password; - return S_OK; -} - -STDMETHODIMP CExtractCallbackConsole::CryptoGetTextPassword(BSTR *password) -{ - if (!PasswordIsDefined) - { - Password = GetPassword(OutStream); - PasswordIsDefined = true; - } - return StringToBstr(Password, password); -} - -#endif - -HRESULT CExtractCallbackConsole::BeforeOpen(const wchar_t *name) -{ - NumArchives++; - NumFileErrorsInCurrentArchive = 0; - (*OutStream) << endl << kProcessing << name << endl; - return S_OK; -} - -HRESULT CExtractCallbackConsole::OpenResult(const wchar_t * /* name */, HRESULT result, bool encrypted) -{ - (*OutStream) << endl; - if (result != S_OK) - { - (*OutStream) << "Error: "; - if (result == S_FALSE) - { - (*OutStream) << (encrypted ? - "Can not open encrypted archive. Wrong password?" : - "Can not open file as archive"); - } - else - { - if (result == E_OUTOFMEMORY) - (*OutStream) << "Can't allocate required memory"; - else - (*OutStream) << NError::MyFormatMessage(result); - } - (*OutStream) << endl; - NumArchiveErrors++; - } - return S_OK; -} - -HRESULT CExtractCallbackConsole::ThereAreNoFiles() -{ - (*OutStream) << endl << kNoFiles << endl; - return S_OK; -} - -HRESULT CExtractCallbackConsole::ExtractResult(HRESULT result) -{ - if (result == S_OK) - { - (*OutStream) << endl; - if (NumFileErrorsInCurrentArchive == 0) - (*OutStream) << kEverythingIsOk << endl; - else - { - NumArchiveErrors++; - (*OutStream) << "Sub items Errors: " << NumFileErrorsInCurrentArchive << endl; - } - } - if (result == S_OK) - return result; - NumArchiveErrors++; - if (result == E_ABORT || result == ERROR_DISK_FULL) - return result; - (*OutStream) << endl << kError; - if (result == E_OUTOFMEMORY) - (*OutStream) << kMemoryExceptionMessage; - else - { - UString message; - NError::MyFormatMessage(result, message); - (*OutStream) << message; - } - (*OutStream) << endl; - return S_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ExtractCallbackConsole.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ExtractCallbackConsole.h deleted file mode 100644 index 7086527e5f3e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/ExtractCallbackConsole.h +++ /dev/null @@ -1,73 +0,0 @@ -// ExtractCallbackConsole.h - -#ifndef __EXTRACTCALLBACKCONSOLE_H -#define __EXTRACTCALLBACKCONSOLE_H - -#include "Common/MyString.h" -#include "Common/StdOutStream.h" -#include "../../Common/FileStreams.h" -#include "../../IPassword.h" -#include "../../Archive/IArchive.h" -#include "../Common/ArchiveExtractCallback.h" - -class CExtractCallbackConsole: - public IExtractCallbackUI, - #ifndef _NO_CRYPTO - public ICryptoGetTextPassword, - #endif - public CMyUnknownImp -{ -public: - MY_QUERYINTERFACE_BEGIN2(IFolderArchiveExtractCallback) - #ifndef _NO_CRYPTO - MY_QUERYINTERFACE_ENTRY(ICryptoGetTextPassword) - #endif - MY_QUERYINTERFACE_END - MY_ADDREF_RELEASE - - STDMETHOD(SetTotal)(UInt64 total); - STDMETHOD(SetCompleted)(const UInt64 *completeValue); - - // IFolderArchiveExtractCallback - STDMETHOD(AskOverwrite)( - const wchar_t *existName, const FILETIME *existTime, const UInt64 *existSize, - const wchar_t *newName, const FILETIME *newTime, const UInt64 *newSize, - Int32 *answer); - STDMETHOD (PrepareOperation)(const wchar_t *name, bool isFolder, Int32 askExtractMode, const UInt64 *position); - - STDMETHOD(MessageError)(const wchar_t *message); - STDMETHOD(SetOperationResult)(Int32 operationResult, bool encrypted); - - HRESULT BeforeOpen(const wchar_t *name); - HRESULT OpenResult(const wchar_t *name, HRESULT result, bool encrypted); - HRESULT ThereAreNoFiles(); - HRESULT ExtractResult(HRESULT result); - - - #ifndef _NO_CRYPTO - HRESULT SetPassword(const UString &password); - STDMETHOD(CryptoGetTextPassword)(BSTR *password); - - bool PasswordIsDefined; - UString Password; - - #endif - - UInt64 NumArchives; - UInt64 NumArchiveErrors; - UInt64 NumFileErrors; - UInt64 NumFileErrorsInCurrentArchive; - - CStdOutStream *OutStream; - - void Init() - { - NumArchives = 0; - NumArchiveErrors = 0; - NumFileErrors = 0; - NumFileErrorsInCurrentArchive = 0; - } - -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/List.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/List.cpp deleted file mode 100644 index 8d8998314218..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/List.cpp +++ /dev/null @@ -1,626 +0,0 @@ -// List.cpp - -#include "StdAfx.h" - -#include "Common/IntToString.h" -#include "Common/MyCom.h" -#include "Common/StdOutStream.h" -#include "Common/StringConvert.h" - -#include "Windows/Error.h" -#include "Windows/FileDir.h" -#include "Windows/PropVariant.h" -#include "Windows/PropVariantConversions.h" - -#include "../../Archive/IArchive.h" - -#include "../Common/OpenArchive.h" -#include "../Common/PropIDUtils.h" - -#include "ConsoleClose.h" -#include "List.h" -#include "OpenCallbackConsole.h" - -using namespace NWindows; - -struct CPropIdToName -{ - PROPID PropID; - const wchar_t *Name; -}; - -static CPropIdToName kPropIdToName[] = -{ - { kpidPath, L"Path" }, - { kpidName, L"Name" }, - { kpidIsDir, L"Folder" }, - { kpidSize, L"Size" }, - { kpidPackSize, L"Packed Size" }, - { kpidAttrib, L"Attributes" }, - { kpidCTime, L"Created" }, - { kpidATime, L"Accessed" }, - { kpidMTime, L"Modified" }, - { kpidSolid, L"Solid" }, - { kpidCommented, L"Commented" }, - { kpidEncrypted, L"Encrypted" }, - { kpidSplitBefore, L"Split Before" }, - { kpidSplitAfter, L"Split After" }, - { kpidDictionarySize, L"Dictionary Size" }, - { kpidCRC, L"CRC" }, - { kpidType, L"Type" }, - { kpidIsAnti, L"Anti" }, - { kpidMethod, L"Method" }, - { kpidHostOS, L"Host OS" }, - { kpidFileSystem, L"File System" }, - { kpidUser, L"User" }, - { kpidGroup, L"Group" }, - { kpidBlock, L"Block" }, - { kpidComment, L"Comment" }, - { kpidPosition, L"Position" }, - { kpidPrefix, L"Prefix" }, - { kpidNumSubDirs, L"Folders" }, - { kpidNumSubFiles, L"Files" }, - { kpidUnpackVer, L"Version" }, - { kpidVolume, L"Volume" }, - { kpidIsVolume, L"Multivolume" }, - { kpidOffset, L"Offset" }, - { kpidLinks, L"Links" }, - { kpidNumBlocks, L"Blocks" }, - { kpidNumVolumes, L"Volumes" }, - - { kpidBit64, L"64-bit" }, - { kpidBigEndian, L"Big-endian" }, - { kpidCpu, L"CPU" }, - { kpidPhySize, L"Physical Size" }, - { kpidHeadersSize, L"Headers Size" }, - { kpidChecksum, L"Checksum" }, - { kpidCharacts, L"Characteristics" }, - { kpidVa, L"Virtual Address" }, - { kpidId, L"ID" }, - { kpidShortName, L"Short Name" }, - { kpidCreatorApp, L"Creator Application"}, - { kpidSectorSize, L"Sector Size" }, - { kpidPosixAttrib, L"Mode" }, - { kpidLink, L"Link" }, - - { kpidTotalSize, L"Total Size" }, - { kpidFreeSpace, L"Free Space" }, - { kpidClusterSize, L"Cluster Size" }, - { kpidVolumeName, L"Label" } -}; - -static const char kEmptyAttribChar = '.'; - -static const char *kListing = "Listing archive: "; -static const wchar_t *kFilesMessage = L"files"; -static const wchar_t *kDirsMessage = L"folders"; - -static void GetAttribString(DWORD wa, bool isDir, char *s) -{ - s[0] = ((wa & FILE_ATTRIBUTE_DIRECTORY) != 0 || isDir) ? 'D' : kEmptyAttribChar; - s[1] = ((wa & FILE_ATTRIBUTE_READONLY) != 0) ? 'R': kEmptyAttribChar; - s[2] = ((wa & FILE_ATTRIBUTE_HIDDEN) != 0) ? 'H': kEmptyAttribChar; - s[3] = ((wa & FILE_ATTRIBUTE_SYSTEM) != 0) ? 'S': kEmptyAttribChar; - s[4] = ((wa & FILE_ATTRIBUTE_ARCHIVE) != 0) ? 'A': kEmptyAttribChar; - s[5] = '\0'; -} - -enum EAdjustment -{ - kLeft, - kCenter, - kRight -}; - -struct CFieldInfo -{ - PROPID PropID; - UString Name; - EAdjustment TitleAdjustment; - EAdjustment TextAdjustment; - int PrefixSpacesWidth; - int Width; -}; - -struct CFieldInfoInit -{ - PROPID PropID; - const wchar_t *Name; - EAdjustment TitleAdjustment; - EAdjustment TextAdjustment; - int PrefixSpacesWidth; - int Width; -}; - -static CFieldInfoInit kStandardFieldTable[] = -{ - { kpidMTime, L" Date Time", kLeft, kLeft, 0, 19 }, - { kpidAttrib, L"Attr", kRight, kCenter, 1, 5 }, - { kpidSize, L"Size", kRight, kRight, 1, 12 }, - { kpidPackSize, L"Compressed", kRight, kRight, 1, 12 }, - { kpidPath, L"Name", kLeft, kLeft, 2, 24 } -}; - -static void PrintSpaces(int numSpaces) -{ - for (int i = 0; i < numSpaces; i++) - g_StdOut << ' '; -} - -static void PrintString(EAdjustment adjustment, int width, const UString &textString) -{ - const int numSpaces = width - textString.Length(); - int numLeftSpaces = 0; - switch (adjustment) - { - case kLeft: - numLeftSpaces = 0; - break; - case kCenter: - numLeftSpaces = numSpaces / 2; - break; - case kRight: - numLeftSpaces = numSpaces; - break; - } - PrintSpaces(numLeftSpaces); - g_StdOut << textString; - PrintSpaces(numSpaces - numLeftSpaces); -} - -class CFieldPrinter -{ - CObjectVector _fields; -public: - void Clear() { _fields.Clear(); } - void Init(const CFieldInfoInit *standardFieldTable, int numItems); - HRESULT Init(IInArchive *archive); - void PrintTitle(); - void PrintTitleLines(); - HRESULT PrintItemInfo(const CArc &arc, UInt32 index, bool techMode); - HRESULT PrintSummaryInfo(UInt64 numFiles, UInt64 numDirs, - const UInt64 *size, const UInt64 *compressedSize); -}; - -void CFieldPrinter::Init(const CFieldInfoInit *standardFieldTable, int numItems) -{ - Clear(); - for (int i = 0; i < numItems; i++) - { - CFieldInfo fieldInfo; - const CFieldInfoInit &fieldInfoInit = standardFieldTable[i]; - fieldInfo.PropID = fieldInfoInit.PropID; - fieldInfo.Name = fieldInfoInit.Name; - fieldInfo.TitleAdjustment = fieldInfoInit.TitleAdjustment; - fieldInfo.TextAdjustment = fieldInfoInit.TextAdjustment; - fieldInfo.PrefixSpacesWidth = fieldInfoInit.PrefixSpacesWidth; - fieldInfo.Width = fieldInfoInit.Width; - _fields.Add(fieldInfo); - } -} - -static UString GetPropName(PROPID propID, BSTR name) -{ - for (int i = 0; i < sizeof(kPropIdToName) / sizeof(kPropIdToName[0]); i++) - { - const CPropIdToName &propIdToName = kPropIdToName[i]; - if (propIdToName.PropID == propID) - return propIdToName.Name; - } - if (name) - return name; - wchar_t s[16]; - ConvertUInt32ToString(propID, s); - return s; -} - -HRESULT CFieldPrinter::Init(IInArchive *archive) -{ - Clear(); - UInt32 numProps; - RINOK(archive->GetNumberOfProperties(&numProps)); - for (UInt32 i = 0; i < numProps; i++) - { - CMyComBSTR name; - PROPID propID; - VARTYPE vt; - RINOK(archive->GetPropertyInfo(i, &name, &propID, &vt)); - CFieldInfo fieldInfo; - fieldInfo.PropID = propID; - fieldInfo.Name = GetPropName(propID, name); - _fields.Add(fieldInfo); - } - return S_OK; -} - -void CFieldPrinter::PrintTitle() -{ - for (int i = 0; i < _fields.Size(); i++) - { - const CFieldInfo &fieldInfo = _fields[i]; - PrintSpaces(fieldInfo.PrefixSpacesWidth); - PrintString(fieldInfo.TitleAdjustment, - ((fieldInfo.PropID == kpidPath) ? 0: fieldInfo.Width), fieldInfo.Name); - } -} - -void CFieldPrinter::PrintTitleLines() -{ - for (int i = 0; i < _fields.Size(); i++) - { - const CFieldInfo &fieldInfo = _fields[i]; - PrintSpaces(fieldInfo.PrefixSpacesWidth); - for (int i = 0; i < fieldInfo.Width; i++) - g_StdOut << '-'; - } -} - - -static BOOL IsFileTimeZero(CONST FILETIME *lpFileTime) -{ - return (lpFileTime->dwLowDateTime == 0) && (lpFileTime->dwHighDateTime == 0); -} - -static const char *kEmptyTimeString = " "; -static void PrintTime(const NCOM::CPropVariant &prop) -{ - if (prop.vt != VT_FILETIME) - throw "incorrect item"; - if (IsFileTimeZero(&prop.filetime)) - g_StdOut << kEmptyTimeString; - else - { - FILETIME localFileTime; - if (!FileTimeToLocalFileTime(&prop.filetime, &localFileTime)) - throw "FileTimeToLocalFileTime error"; - char s[32]; - if (ConvertFileTimeToString(localFileTime, s, true, true)) - g_StdOut << s; - else - g_StdOut << kEmptyTimeString; - } -} - -HRESULT CFieldPrinter::PrintItemInfo(const CArc &arc, UInt32 index, bool techMode) -{ - /* - if (techMode) - { - g_StdOut << "Index = "; - g_StdOut << (UInt64)index; - g_StdOut << endl; - } - */ - for (int i = 0; i < _fields.Size(); i++) - { - const CFieldInfo &fieldInfo = _fields[i]; - if (!techMode) - PrintSpaces(fieldInfo.PrefixSpacesWidth); - - NCOM::CPropVariant prop; - if (fieldInfo.PropID == kpidPath) - { - UString s; - RINOK(arc.GetItemPath(index, s)); - prop = s; - } - else - { - RINOK(arc.Archive->GetProperty(index, fieldInfo.PropID, &prop)); - } - if (techMode) - { - g_StdOut << fieldInfo.Name << " = "; - } - int width = (fieldInfo.PropID == kpidPath) ? 0: fieldInfo.Width; - if (fieldInfo.PropID == kpidAttrib && (prop.vt == VT_EMPTY || prop.vt == VT_UI4)) - { - UInt32 attrib = (prop.vt == VT_EMPTY) ? 0 : prop.ulVal; - bool isFolder; - RINOK(IsArchiveItemFolder(arc.Archive, index, isFolder)); - char s[8]; - GetAttribString(attrib, isFolder, s); - g_StdOut << s; - } - else if (prop.vt == VT_EMPTY) - { - if (!techMode) - PrintSpaces(width); - } - else if (fieldInfo.PropID == kpidMTime) - { - PrintTime(prop); - } - else if (prop.vt == VT_BSTR) - { - if (techMode) - g_StdOut << prop.bstrVal; - else - PrintString(fieldInfo.TextAdjustment, width, prop.bstrVal); - } - else - { - UString s = ConvertPropertyToString(prop, fieldInfo.PropID); - s.Replace(wchar_t(0xA), L' '); - s.Replace(wchar_t(0xD), L' '); - - if (techMode) - g_StdOut << s; - else - PrintString(fieldInfo.TextAdjustment, width, s); - } - if (techMode) - g_StdOut << endl; - } - return S_OK; -} - -static void PrintNumberString(EAdjustment adjustment, int width, const UInt64 *value) -{ - wchar_t textString[32] = { 0 }; - if (value != NULL) - ConvertUInt64ToString(*value, textString); - PrintString(adjustment, width, textString); -} - - -HRESULT CFieldPrinter::PrintSummaryInfo(UInt64 numFiles, UInt64 numDirs, - const UInt64 *size, const UInt64 *compressedSize) -{ - for (int i = 0; i < _fields.Size(); i++) - { - const CFieldInfo &fieldInfo = _fields[i]; - PrintSpaces(fieldInfo.PrefixSpacesWidth); - NCOM::CPropVariant prop; - if (fieldInfo.PropID == kpidSize) - PrintNumberString(fieldInfo.TextAdjustment, fieldInfo.Width, size); - else if (fieldInfo.PropID == kpidPackSize) - PrintNumberString(fieldInfo.TextAdjustment, fieldInfo.Width, compressedSize); - else if (fieldInfo.PropID == kpidPath) - { - wchar_t textString[32]; - ConvertUInt64ToString(numFiles, textString); - UString temp = textString; - temp += L" "; - temp += kFilesMessage; - temp += L", "; - ConvertUInt64ToString(numDirs, textString); - temp += textString; - temp += L" "; - temp += kDirsMessage; - PrintString(fieldInfo.TextAdjustment, 0, temp); - } - else - PrintString(fieldInfo.TextAdjustment, fieldInfo.Width, L""); - } - return S_OK; -} - -bool GetUInt64Value(IInArchive *archive, UInt32 index, PROPID propID, UInt64 &value) -{ - NCOM::CPropVariant prop; - if (archive->GetProperty(index, propID, &prop) != S_OK) - throw "GetPropertyValue error"; - if (prop.vt == VT_EMPTY) - return false; - value = ConvertPropVariantToUInt64(prop); - return true; -} - -static void PrintPropPair(const wchar_t *name, const wchar_t *value) -{ - g_StdOut << name << " = " << value << endl; -} - -HRESULT ListArchives(CCodecs *codecs, const CIntVector &formatIndices, - bool stdInMode, - UStringVector &arcPaths, UStringVector &arcPathsFull, - const NWildcard::CCensorNode &wildcardCensor, - bool enableHeaders, bool techMode, - #ifndef _NO_CRYPTO - bool &passwordEnabled, UString &password, - #endif - UInt64 &numErrors) -{ - numErrors = 0; - CFieldPrinter fieldPrinter; - if (!techMode) - fieldPrinter.Init(kStandardFieldTable, sizeof(kStandardFieldTable) / sizeof(kStandardFieldTable[0])); - - UInt64 numFiles2 = 0, numDirs2 = 0, totalPackSize2 = 0, totalUnPackSize2 = 0; - UInt64 *totalPackSizePointer2 = 0, *totalUnPackSizePointer2 = 0; - int numArcs = /* stdInMode ? 1 : */ arcPaths.Size(); - for (int i = 0; i < numArcs; i++) - { - const UString &archiveName = arcPaths[i]; - UInt64 arcPackSize = 0; - if (!stdInMode) - { - NFile::NFind::CFileInfoW fi; - if (!fi.Find(archiveName) || fi.IsDir()) - { - g_StdOut << endl << "Error: " << archiveName << " is not file" << endl; - numErrors++; - continue; - } - arcPackSize = fi.Size; - } - - CArchiveLink archiveLink; - - COpenCallbackConsole openCallback; - openCallback.OutStream = &g_StdOut; - - #ifndef _NO_CRYPTO - - openCallback.PasswordIsDefined = passwordEnabled; - openCallback.Password = password; - - #endif - - HRESULT result = archiveLink.Open2(codecs, formatIndices, stdInMode, NULL, archiveName, &openCallback); - if (result != S_OK) - { - if (result == E_ABORT) - return result; - g_StdOut << endl << "Error: " << archiveName << ": "; - if (result == S_FALSE) - { - #ifndef _NO_CRYPTO - if (openCallback.Open_WasPasswordAsked()) - g_StdOut << "Can not open encrypted archive. Wrong password?"; - else - #endif - g_StdOut << "Can not open file as archive"; - } - else if (result == E_OUTOFMEMORY) - g_StdOut << "Can't allocate required memory"; - else - g_StdOut << NError::MyFormatMessage(result); - g_StdOut << endl; - numErrors++; - continue; - } - - if (!stdInMode) - for (int v = 0; v < archiveLink.VolumePaths.Size(); v++) - { - int index = arcPathsFull.FindInSorted(archiveLink.VolumePaths[v]); - if (index >= 0 && index > i) - { - arcPaths.Delete(index); - arcPathsFull.Delete(index); - numArcs = arcPaths.Size(); - } - } - - if (enableHeaders) - { - g_StdOut << endl << kListing << archiveName << endl << endl; - - for (int i = 0; i < archiveLink.Arcs.Size(); i++) - { - const CArc &arc = archiveLink.Arcs[i]; - - g_StdOut << "----\n"; - PrintPropPair(L"Path", arc.Path); - PrintPropPair(L"Type", codecs->Formats[arc.FormatIndex].Name); - UInt32 numProps; - IInArchive *archive = arc.Archive; - if (archive->GetNumberOfArchiveProperties(&numProps) == S_OK) - { - for (UInt32 j = 0; j < numProps; j++) - { - CMyComBSTR name; - PROPID propID; - VARTYPE vt; - if (archive->GetArchivePropertyInfo(j, &name, &propID, &vt) != S_OK) - continue; - NCOM::CPropVariant prop; - if (archive->GetArchiveProperty(propID, &prop) != S_OK) - continue; - UString s = ConvertPropertyToString(prop, propID); - if (!s.IsEmpty()) - PrintPropPair(GetPropName(propID, name), s); - } - } - } - g_StdOut << endl; - if (techMode) - g_StdOut << "----------\n"; - } - - if (enableHeaders && !techMode) - { - fieldPrinter.PrintTitle(); - g_StdOut << endl; - fieldPrinter.PrintTitleLines(); - g_StdOut << endl; - } - - const CArc &arc = archiveLink.Arcs.Back(); - IInArchive *archive = arc.Archive; - if (techMode) - { - RINOK(fieldPrinter.Init(archive)); - } - UInt64 numFiles = 0, numDirs = 0, totalPackSize = 0, totalUnPackSize = 0; - UInt64 *totalPackSizePointer = 0, *totalUnPackSizePointer = 0; - UInt32 numItems; - RINOK(archive->GetNumberOfItems(&numItems)); - for (UInt32 i = 0; i < numItems; i++) - { - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - - UString filePath; - HRESULT res = arc.GetItemPath(i, filePath); - if (stdInMode && res == E_INVALIDARG) - break; - RINOK(res); - - bool isFolder; - RINOK(IsArchiveItemFolder(archive, i, isFolder)); - if (!wildcardCensor.CheckPath(filePath, !isFolder)) - continue; - - fieldPrinter.PrintItemInfo(arc, i, techMode); - - UInt64 packSize, unpackSize; - if (!GetUInt64Value(archive, i, kpidSize, unpackSize)) - unpackSize = 0; - else - totalUnPackSizePointer = &totalUnPackSize; - if (!GetUInt64Value(archive, i, kpidPackSize, packSize)) - packSize = 0; - else - totalPackSizePointer = &totalPackSize; - - g_StdOut << endl; - - if (isFolder) - numDirs++; - else - numFiles++; - totalPackSize += packSize; - totalUnPackSize += unpackSize; - } - - if (!stdInMode && totalPackSizePointer == 0) - { - if (archiveLink.VolumePaths.Size() != 0) - arcPackSize += archiveLink.VolumesSize; - totalPackSize = arcPackSize; - totalPackSizePointer = &totalPackSize; - } - if (enableHeaders && !techMode) - { - fieldPrinter.PrintTitleLines(); - g_StdOut << endl; - fieldPrinter.PrintSummaryInfo(numFiles, numDirs, totalUnPackSizePointer, totalPackSizePointer); - g_StdOut << endl; - } - if (totalPackSizePointer != 0) - { - totalPackSizePointer2 = &totalPackSize2; - totalPackSize2 += totalPackSize; - } - if (totalUnPackSizePointer != 0) - { - totalUnPackSizePointer2 = &totalUnPackSize2; - totalUnPackSize2 += totalUnPackSize; - } - numFiles2 += numFiles; - numDirs2 += numDirs; - } - if (enableHeaders && !techMode && numArcs > 1) - { - g_StdOut << endl; - fieldPrinter.PrintTitleLines(); - g_StdOut << endl; - fieldPrinter.PrintSummaryInfo(numFiles2, numDirs2, totalUnPackSizePointer2, totalPackSizePointer2); - g_StdOut << endl; - g_StdOut << "Archives: " << numArcs << endl; - } - return S_OK; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/List.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/List.h deleted file mode 100644 index 7ea02cc2a38b..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/List.h +++ /dev/null @@ -1,20 +0,0 @@ -// List.h - -#ifndef __LIST_H -#define __LIST_H - -#include "Common/Wildcard.h" -#include "../Common/LoadCodecs.h" - -HRESULT ListArchives(CCodecs *codecs, const CIntVector &formatIndices, - bool stdInMode, - UStringVector &archivePaths, UStringVector &archivePathsFull, - const NWildcard::CCensorNode &wildcardCensor, - bool enableHeaders, bool techMode, - #ifndef _NO_CRYPTO - bool &passwordEnabled, UString &password, - #endif - UInt64 &errors); - -#endif - diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/Main.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/Main.cpp deleted file mode 100644 index 814fc4c40517..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/Main.cpp +++ /dev/null @@ -1,593 +0,0 @@ -// Main.cpp - -#include "StdAfx.h" - -#if defined( _WIN32) && defined( _7ZIP_LARGE_PAGES) -#include "../../../../C/Alloc.h" -#endif - -#include "Common/MyInitGuid.h" - -#include "Common/CommandLineParser.h" -#include "Common/IntToString.h" -#include "Common/MyException.h" -#include "Common/StdOutStream.h" -#include "Common/StringConvert.h" -#include "Common/StringToInt.h" - -#include "Windows/Error.h" -#ifdef _WIN32 -#include "Windows/MemoryLock.h" -#endif - -#include "../Common/ArchiveCommandLine.h" -#include "../Common/ExitCode.h" -#include "../Common/Extract.h" -#ifdef EXTERNAL_CODECS -#include "../Common/LoadCodecs.h" -#endif -#include "../Common/PropIDUtils.h" - -#include "../../Compress/LZMA_Alone/LzmaBenchCon.h" - -#include "ExtractCallbackConsole.h" -#include "List.h" -#include "OpenCallbackConsole.h" -#include "UpdateCallbackConsole.h" - -#include "../../MyVersion.h" - -using namespace NWindows; -using namespace NFile; -using namespace NCommandLineParser; - -HINSTANCE g_hInstance = 0; -extern CStdOutStream *g_StdStream; - -static const char *kCopyrightString = "\n7-Zip" -#ifndef EXTERNAL_CODECS -" (A)" -#endif - -#ifdef _WIN64 -" [64]" -#endif - -" " MY_VERSION_COPYRIGHT_DATE "\n"; - -static const char *kHelpString = - "\nUsage: 7z" -#ifdef _NO_CRYPTO - "r" -#else -#ifndef EXTERNAL_CODECS - "a" -#endif -#endif - " [...] [...]\n" - " [<@listfiles...>]\n" - "\n" - "\n" - " a: Add files to archive\n" - " b: Benchmark\n" - " d: Delete files from archive\n" - " e: Extract files from archive (without using directory names)\n" - " l: List contents of archive\n" -// " l[a|t][f]: List contents of archive\n" -// " a - with Additional fields\n" -// " t - with all fields\n" -// " f - with Full pathnames\n" - " t: Test integrity of archive\n" - " u: Update files to archive\n" - " x: eXtract files with full paths\n" - "\n" - " -ai[r[-|0]]{@listfile|!wildcard}: Include archives\n" - " -ax[r[-|0]]{@listfile|!wildcard}: eXclude archives\n" - " -bd: Disable percentage indicator\n" - " -i[r[-|0]]{@listfile|!wildcard}: Include filenames\n" - " -m{Parameters}: set compression Method\n" - " -o{Directory}: set Output directory\n" - #ifndef _NO_CRYPTO - " -p{Password}: set Password\n" - #endif - " -r[-|0]: Recurse subdirectories\n" - " -scs{UTF-8 | WIN | DOS}: set charset for list files\n" - " -sfx[{name}]: Create SFX archive\n" - " -si[{name}]: read data from stdin\n" - " -slt: show technical information for l (List) command\n" - " -so: write data to stdout\n" - " -ssc[-]: set sensitive case mode\n" - " -ssw: compress shared files\n" - " -t{Type}: Set type of archive\n" - " -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName]: Update options\n" - " -v{Size}[b|k|m|g]: Create volumes\n" - " -w[{path}]: assign Work directory. Empty path means a temporary directory\n" - " -x[r[-|0]]]{@listfile|!wildcard}: eXclude filenames\n" - " -y: assume Yes on all queries\n"; - -// --------------------------- -// exception messages - -static const char *kEverythingIsOk = "Everything is Ok"; -static const char *kUserErrorMessage = "Incorrect command line"; -static const char *kNoFormats = "7-Zip cannot find the code that works with archives."; -static const char *kUnsupportedArcTypeMessage = "Unsupported archive type"; - -static const wchar_t *kDefaultSfxModule = L"7zCon.sfx"; - -static void ShowMessageAndThrowException(CStdOutStream &s, LPCSTR message, NExitCode::EEnum code) -{ - s << message << endl; - throw code; -} - -static void PrintHelpAndExit(CStdOutStream &s) -{ - s << kHelpString; - ShowMessageAndThrowException(s, kUserErrorMessage, NExitCode::kUserError); -} - -#ifndef _WIN32 -static void GetArguments(int numArgs, const char *args[], UStringVector &parts) -{ - parts.Clear(); - for (int i = 0; i < numArgs; i++) - { - UString s = MultiByteToUnicodeString(args[i]); - parts.Add(s); - } -} -#endif - -static void ShowCopyrightAndHelp(CStdOutStream &s, bool needHelp) -{ - s << kCopyrightString; - // s << "# CPUs: " << (UInt64)NWindows::NSystem::GetNumberOfProcessors() << "\n"; - if (needHelp) - s << kHelpString; -} - -#ifdef EXTERNAL_CODECS -static void PrintString(CStdOutStream &stdStream, const AString &s, int size) -{ - int len = s.Length(); - stdStream << s; - for (int i = len; i < size; i++) - stdStream << ' '; -} -#endif - -static void PrintString(CStdOutStream &stdStream, const UString &s, int size) -{ - int len = s.Length(); - stdStream << s; - for (int i = len; i < size; i++) - stdStream << ' '; -} - -static inline char GetHex(Byte value) -{ - return (char)((value < 10) ? ('0' + value) : ('A' + (value - 10))); -} - -int Main2( - #ifndef _WIN32 - int numArgs, const char *args[] - #endif -) -{ - #if defined(_WIN32) && !defined(UNDER_CE) - SetFileApisToOEM(); - #endif - - UStringVector commandStrings; - #ifdef _WIN32 - NCommandLineParser::SplitCommandLine(GetCommandLineW(), commandStrings); - #else - GetArguments(numArgs, args, commandStrings); - #endif - - if (commandStrings.Size() == 1) - { - ShowCopyrightAndHelp(g_StdOut, true); - return 0; - } - commandStrings.Delete(0); - - CArchiveCommandLineOptions options; - - CArchiveCommandLineParser parser; - - parser.Parse1(commandStrings, options); - - if (options.HelpMode) - { - ShowCopyrightAndHelp(g_StdOut, true); - return 0; - } - - #if defined(_WIN32) && defined(_7ZIP_LARGE_PAGES) - if (options.LargePages) - { - SetLargePageSize(); - NSecurity::EnableLockMemoryPrivilege(); - } - #endif - - CStdOutStream &stdStream = options.StdOutMode ? g_StdErr : g_StdOut; - g_StdStream = &stdStream; - - if (options.EnableHeaders) - ShowCopyrightAndHelp(stdStream, false); - - parser.Parse2(options); - - CCodecs *codecs = new CCodecs; - CMyComPtr< - #ifdef EXTERNAL_CODECS - ICompressCodecsInfo - #else - IUnknown - #endif - > compressCodecsInfo = codecs; - HRESULT result = codecs->Load(); - if (result != S_OK) - throw CSystemException(result); - - bool isExtractGroupCommand = options.Command.IsFromExtractGroup(); - - if (codecs->Formats.Size() == 0 && - (isExtractGroupCommand || - options.Command.CommandType == NCommandType::kList || - options.Command.IsFromUpdateGroup())) - throw kNoFormats; - - CIntVector formatIndices; - if (!codecs->FindFormatForArchiveType(options.ArcType, formatIndices)) - throw kUnsupportedArcTypeMessage; - - if (options.Command.CommandType == NCommandType::kInfo) - { - stdStream << endl << "Formats:" << endl; - int i; - for (i = 0; i < codecs->Formats.Size(); i++) - { - const CArcInfoEx &arc = codecs->Formats[i]; - #ifdef EXTERNAL_CODECS - if (arc.LibIndex >= 0) - { - char s[16]; - ConvertUInt32ToString(arc.LibIndex, s); - PrintString(stdStream, s, 2); - } - else - #endif - stdStream << " "; - stdStream << ' '; - stdStream << (char)(arc.UpdateEnabled ? 'C' : ' '); - stdStream << (char)(arc.KeepName ? 'K' : ' '); - stdStream << " "; - PrintString(stdStream, arc.Name, 6); - stdStream << " "; - UString s; - for (int t = 0; t < arc.Exts.Size(); t++) - { - const CArcExtInfo &ext = arc.Exts[t]; - s += ext.Ext; - if (!ext.AddExt.IsEmpty()) - { - s += L" ("; - s += ext.AddExt; - s += L')'; - } - s += L' '; - } - PrintString(stdStream, s, 14); - stdStream << " "; - const CByteBuffer &sig = arc.StartSignature; - for (size_t j = 0; j < sig.GetCapacity(); j++) - { - Byte b = sig[j]; - if (b > 0x20 && b < 0x80) - { - stdStream << (char)b; - } - else - { - stdStream << GetHex((Byte)((b >> 4) & 0xF)); - stdStream << GetHex((Byte)(b & 0xF)); - } - stdStream << ' '; - } - stdStream << endl; - } - stdStream << endl << "Codecs:" << endl; - - #ifdef EXTERNAL_CODECS - UInt32 numMethods; - if (codecs->GetNumberOfMethods(&numMethods) == S_OK) - for (UInt32 j = 0; j < numMethods; j++) - { - int libIndex = codecs->GetCodecLibIndex(j); - if (libIndex >= 0) - { - char s[16]; - ConvertUInt32ToString(libIndex, s); - PrintString(stdStream, s, 2); - } - else - stdStream << " "; - stdStream << ' '; - stdStream << (char)(codecs->GetCodecEncoderIsAssigned(j) ? 'C' : ' '); - UInt64 id; - stdStream << " "; - HRESULT res = codecs->GetCodecId(j, id); - if (res != S_OK) - id = (UInt64)(Int64)-1; - char s[32]; - ConvertUInt64ToString(id, s, 16); - PrintString(stdStream, s, 8); - stdStream << " "; - PrintString(stdStream, codecs->GetCodecName(j), 11); - stdStream << endl; - /* - if (res != S_OK) - throw "incorrect Codec ID"; - */ - } - #endif - return S_OK; - } - else if (options.Command.CommandType == NCommandType::kBenchmark) - { - if (options.Method.CompareNoCase(L"CRC") == 0) - { - HRESULT res = CrcBenchCon((FILE *)stdStream, options.NumIterations, options.NumThreads, options.DictionarySize); - if (res != S_OK) - { - if (res == S_FALSE) - { - stdStream << "\nCRC Error\n"; - return NExitCode::kFatalError; - } - throw CSystemException(res); - } - } - else - { - HRESULT res = LzmaBenchCon( - #ifdef EXTERNAL_LZMA - codecs, - #endif - (FILE *)stdStream, options.NumIterations, options.NumThreads, options.DictionarySize); - if (res != S_OK) - { - if (res == S_FALSE) - { - stdStream << "\nDecoding Error\n"; - return NExitCode::kFatalError; - } - throw CSystemException(res); - } - } - } - else if (isExtractGroupCommand || options.Command.CommandType == NCommandType::kList) - { - if (isExtractGroupCommand) - { - CExtractCallbackConsole *ecs = new CExtractCallbackConsole; - CMyComPtr extractCallback = ecs; - - ecs->OutStream = &stdStream; - - #ifndef _NO_CRYPTO - ecs->PasswordIsDefined = options.PasswordEnabled; - ecs->Password = options.Password; - #endif - - ecs->Init(); - - COpenCallbackConsole openCallback; - openCallback.OutStream = &stdStream; - - #ifndef _NO_CRYPTO - openCallback.PasswordIsDefined = options.PasswordEnabled; - openCallback.Password = options.Password; - #endif - - CExtractOptions eo; - eo.StdInMode = options.StdInMode; - eo.StdOutMode = options.StdOutMode; - eo.PathMode = options.Command.GetPathMode(); - eo.TestMode = options.Command.IsTestMode(); - eo.OverwriteMode = options.OverwriteMode; - eo.OutputDir = options.OutputDir; - eo.YesToAll = options.YesToAll; - eo.CalcCrc = options.CalcCrc; - #ifdef COMPRESS_MT - eo.Properties = options.ExtractProperties; - #endif - UString errorMessage; - CDecompressStat stat; - HRESULT result = DecompressArchives( - codecs, - formatIndices, - options.ArchivePathsSorted, - options.ArchivePathsFullSorted, - options.WildcardCensor.Pairs.Front().Head, - eo, &openCallback, ecs, errorMessage, stat); - if (!errorMessage.IsEmpty()) - { - stdStream << endl << "Error: " << errorMessage; - if (result == S_OK) - result = E_FAIL; - } - - stdStream << endl; - if (ecs->NumArchives > 1) - stdStream << "Archives: " << ecs->NumArchives << endl; - if (ecs->NumArchiveErrors != 0 || ecs->NumFileErrors != 0) - { - if (ecs->NumArchives > 1) - { - stdStream << endl; - if (ecs->NumArchiveErrors != 0) - stdStream << "Archive Errors: " << ecs->NumArchiveErrors << endl; - if (ecs->NumFileErrors != 0) - stdStream << "Sub items Errors: " << ecs->NumFileErrors << endl; - } - if (result != S_OK) - throw CSystemException(result); - return NExitCode::kFatalError; - } - if (result != S_OK) - throw CSystemException(result); - if (stat.NumFolders != 0) - stdStream << "Folders: " << stat.NumFolders << endl; - if (stat.NumFiles != 1 || stat.NumFolders != 0) - stdStream << "Files: " << stat.NumFiles << endl; - stdStream - << "Size: " << stat.UnpackSize << endl - << "Compressed: " << stat.PackSize << endl; - if (options.CalcCrc) - { - wchar_t s[16]; - ConvertUInt32ToHex(stat.CrcSum, s); - stdStream << "CRC: " << s << endl; - } - } - else - { - UInt64 numErrors = 0; - HRESULT result = ListArchives( - codecs, - formatIndices, - options.StdInMode, - options.ArchivePathsSorted, - options.ArchivePathsFullSorted, - options.WildcardCensor.Pairs.Front().Head, - options.EnableHeaders, - options.TechMode, - #ifndef _NO_CRYPTO - options.PasswordEnabled, - options.Password, - #endif - numErrors); - if (numErrors > 0) - { - g_StdOut << endl << "Errors: " << numErrors; - return NExitCode::kFatalError; - } - if (result != S_OK) - throw CSystemException(result); - } - } - else if (options.Command.IsFromUpdateGroup()) - { - CUpdateOptions &uo = options.UpdateOptions; - if (uo.SfxMode && uo.SfxModule.IsEmpty()) - uo.SfxModule = kDefaultSfxModule; - - COpenCallbackConsole openCallback; - openCallback.OutStream = &stdStream; - - #ifndef _NO_CRYPTO - bool passwordIsDefined = - options.PasswordEnabled && !options.Password.IsEmpty(); - openCallback.PasswordIsDefined = passwordIsDefined; - openCallback.Password = options.Password; - #endif - - CUpdateCallbackConsole callback; - callback.EnablePercents = options.EnablePercents; - - #ifndef _NO_CRYPTO - callback.PasswordIsDefined = passwordIsDefined; - callback.AskPassword = options.PasswordEnabled && options.Password.IsEmpty(); - callback.Password = options.Password; - #endif - callback.StdOutMode = uo.StdOutMode; - callback.Init(&stdStream); - - CUpdateErrorInfo errorInfo; - - if (!uo.Init(codecs, formatIndices, options.ArchiveName)) - throw kUnsupportedArcTypeMessage; - HRESULT result = UpdateArchive(codecs, - options.WildcardCensor, uo, - errorInfo, &openCallback, &callback); - - int exitCode = NExitCode::kSuccess; - if (callback.CantFindFiles.Size() > 0) - { - stdStream << endl; - stdStream << "WARNINGS for files:" << endl << endl; - int numErrors = callback.CantFindFiles.Size(); - for (int i = 0; i < numErrors; i++) - { - stdStream << callback.CantFindFiles[i] << " : "; - stdStream << NError::MyFormatMessageW(callback.CantFindCodes[i]) << endl; - } - stdStream << "----------------" << endl; - stdStream << "WARNING: Cannot find " << numErrors << " file"; - if (numErrors > 1) - stdStream << "s"; - stdStream << endl; - exitCode = NExitCode::kWarning; - } - - if (result != S_OK) - { - UString message; - if (!errorInfo.Message.IsEmpty()) - { - message += errorInfo.Message; - message += L"\n"; - } - if (!errorInfo.FileName.IsEmpty()) - { - message += errorInfo.FileName; - message += L"\n"; - } - if (!errorInfo.FileName2.IsEmpty()) - { - message += errorInfo.FileName2; - message += L"\n"; - } - if (errorInfo.SystemError != 0) - { - message += NError::MyFormatMessageW(errorInfo.SystemError); - message += L"\n"; - } - if (!message.IsEmpty()) - stdStream << L"\nError:\n" << message; - throw CSystemException(result); - } - int numErrors = callback.FailedFiles.Size(); - if (numErrors == 0) - { - if (callback.CantFindFiles.Size() == 0) - stdStream << kEverythingIsOk << endl; - } - else - { - stdStream << endl; - stdStream << "WARNINGS for files:" << endl << endl; - for (int i = 0; i < numErrors; i++) - { - stdStream << callback.FailedFiles[i] << " : "; - stdStream << NError::MyFormatMessageW(callback.FailedCodes[i]) << endl; - } - stdStream << "----------------" << endl; - stdStream << "WARNING: Cannot open " << numErrors << " file"; - if (numErrors > 1) - stdStream << "s"; - stdStream << endl; - exitCode = NExitCode::kWarning; - } - return exitCode; - } - else - PrintHelpAndExit(stdStream); - return 0; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/MainAr.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/MainAr.cpp deleted file mode 100644 index b6681b406c08..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/MainAr.cpp +++ /dev/null @@ -1,125 +0,0 @@ -// MainAr.cpp - -#include "StdAfx.h" - -#include "Common/MyException.h" -#include "Common/StdOutStream.h" - -#include "Windows/Error.h" -#include "Windows/NtCheck.h" - -#include "../Common/ArchiveCommandLine.h" -#include "../Common/ExitCode.h" - -#include "ConsoleClose.h" - -using namespace NWindows; - -CStdOutStream *g_StdStream = 0; - -extern int Main2( - #ifndef _WIN32 - int numArgs, const char *args[] - #endif -); - -static const char *kExceptionErrorMessage = "\n\nError:\n"; -static const char *kUserBreak = "\nBreak signaled\n"; -static const char *kMemoryExceptionMessage = "\n\nERROR: Can't allocate required memory!\n"; -static const char *kUnknownExceptionMessage = "\n\nUnknown Error\n"; -static const char *kInternalExceptionMessage = "\n\nInternal Error #"; - -#define NT_CHECK_FAIL_ACTION (*g_StdStream) << "Unsupported Windows version"; return NExitCode::kFatalError; - -int MY_CDECL main -( - #ifndef _WIN32 - int numArgs, const char *args[] - #endif -) -{ - g_StdStream = &g_StdOut; - - NT_CHECK - - NConsoleClose::CCtrlHandlerSetter ctrlHandlerSetter; - int res = 0; - try - { - res = Main2( - #ifndef _WIN32 - numArgs, args - #endif - ); - } - catch(const CNewException &) - { - (*g_StdStream) << kMemoryExceptionMessage; - return (NExitCode::kMemoryError); - } - catch(const NConsoleClose::CCtrlBreakException &) - { - (*g_StdStream) << endl << kUserBreak; - return (NExitCode::kUserBreak); - } - catch(const CArchiveCommandLineException &e) - { - (*g_StdStream) << kExceptionErrorMessage << e << endl; - return (NExitCode::kUserError); - } - catch(const CSystemException &systemError) - { - if (systemError.ErrorCode == E_OUTOFMEMORY) - { - (*g_StdStream) << kMemoryExceptionMessage; - return (NExitCode::kMemoryError); - } - if (systemError.ErrorCode == E_ABORT) - { - (*g_StdStream) << endl << kUserBreak; - return (NExitCode::kUserBreak); - } - UString message; - NError::MyFormatMessage(systemError.ErrorCode, message); - (*g_StdStream) << endl << endl << "System error:" << endl << message << endl; - return (NExitCode::kFatalError); - } - catch(NExitCode::EEnum &exitCode) - { - (*g_StdStream) << kInternalExceptionMessage << exitCode << endl; - return (exitCode); - } - /* - catch(const NExitCode::CMultipleErrors &multipleErrors) - { - (*g_StdStream) << endl << multipleErrors.NumErrors << " errors" << endl; - return (NExitCode::kFatalError); - } - */ - catch(const UString &s) - { - (*g_StdStream) << kExceptionErrorMessage << s << endl; - return (NExitCode::kFatalError); - } - catch(const AString &s) - { - (*g_StdStream) << kExceptionErrorMessage << s << endl; - return (NExitCode::kFatalError); - } - catch(const char *s) - { - (*g_StdStream) << kExceptionErrorMessage << s << endl; - return (NExitCode::kFatalError); - } - catch(int t) - { - (*g_StdStream) << kInternalExceptionMessage << t << endl; - return (NExitCode::kFatalError); - } - catch(...) - { - (*g_StdStream) << kUnknownExceptionMessage; - return (NExitCode::kFatalError); - } - return res; -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/OpenCallbackConsole.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/OpenCallbackConsole.cpp deleted file mode 100644 index 986a5929cd1c..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/OpenCallbackConsole.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// OpenCallbackConsole.cpp - -#include "StdAfx.h" - -#include "OpenCallbackConsole.h" - -#include "ConsoleClose.h" -#include "UserInputUtils.h" - -HRESULT COpenCallbackConsole::Open_CheckBreak() -{ - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - return S_OK; -} - -HRESULT COpenCallbackConsole::Open_SetTotal(const UInt64 *, const UInt64 *) -{ - return Open_CheckBreak(); -} - -HRESULT COpenCallbackConsole::Open_SetCompleted(const UInt64 *, const UInt64 *) -{ - return Open_CheckBreak(); -} - -#ifndef _NO_CRYPTO - -HRESULT COpenCallbackConsole::Open_CryptoGetTextPassword(BSTR *password) -{ - PasswordWasAsked = true; - RINOK(Open_CheckBreak()); - if (!PasswordIsDefined) - { - Password = GetPassword(OutStream); - PasswordIsDefined = true; - } - return StringToBstr(Password, password); -} - -HRESULT COpenCallbackConsole::Open_GetPasswordIfAny(UString &password) -{ - if (PasswordIsDefined) - password = Password; - return S_OK; -} - -bool COpenCallbackConsole::Open_WasPasswordAsked() -{ - return PasswordWasAsked; -} - -void COpenCallbackConsole::Open_ClearPasswordWasAskedFlag() -{ - PasswordWasAsked = false; -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/OpenCallbackConsole.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/OpenCallbackConsole.h deleted file mode 100644 index 99e8c042b474..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/OpenCallbackConsole.h +++ /dev/null @@ -1,24 +0,0 @@ -// OpenCallbackConsole.h - -#ifndef __OPENCALLBACKCONSOLE_H -#define __OPENCALLBACKCONSOLE_H - -#include "Common/StdOutStream.h" -#include "../Common/ArchiveOpenCallback.h" - -class COpenCallbackConsole: public IOpenCallbackUI -{ -public: - INTERFACE_IOpenCallbackUI(;) - - CStdOutStream *OutStream; - - #ifndef _NO_CRYPTO - bool PasswordIsDefined; - bool PasswordWasAsked; - UString Password; - COpenCallbackConsole(): PasswordIsDefined(false), PasswordWasAsked(false) {} - #endif -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/PercentPrinter.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/PercentPrinter.cpp deleted file mode 100644 index 111ae256d6f8..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/PercentPrinter.cpp +++ /dev/null @@ -1,90 +0,0 @@ -// PercentPrinter.cpp - -#include "StdAfx.h" - -#include "Common/IntToString.h" -#include "Common/MyString.h" - -#include "PercentPrinter.h" - -const int kPaddingSize = 2; -const int kPercentsSize = 4; -const int kMaxExtraSize = kPaddingSize + 32 + kPercentsSize; - -static void ClearPrev(char *p, int num) -{ - int i; - for (i = 0; i < num; i++) *p++ = '\b'; - for (i = 0; i < num; i++) *p++ = ' '; - for (i = 0; i < num; i++) *p++ = '\b'; - *p = '\0'; -} - -void CPercentPrinter::ClosePrint() -{ - if (m_NumExtraChars == 0) - return; - char s[kMaxExtraSize * 3 + 1]; - ClearPrev(s, m_NumExtraChars); - (*OutStream) << s; - m_NumExtraChars = 0; -} - -void CPercentPrinter::PrintString(const char *s) -{ - ClosePrint(); - (*OutStream) << s; -} - -void CPercentPrinter::PrintString(const wchar_t *s) -{ - ClosePrint(); - (*OutStream) << s; -} - -void CPercentPrinter::PrintNewLine() -{ - ClosePrint(); - (*OutStream) << "\n"; -} - -void CPercentPrinter::RePrintRatio() -{ - char s[32]; - ConvertUInt64ToString(((m_Total == 0) ? 0 : (m_CurValue * 100 / m_Total)), s); - int size = (int)strlen(s); - s[size++] = '%'; - s[size] = '\0'; - - int extraSize = kPaddingSize + MyMax(size, kPercentsSize); - if (extraSize < m_NumExtraChars) - extraSize = m_NumExtraChars; - - char fullString[kMaxExtraSize * 3]; - char *p = fullString; - int i; - if (m_NumExtraChars == 0) - { - for (i = 0; i < extraSize; i++) - *p++ = ' '; - m_NumExtraChars = extraSize; - } - - for (i = 0; i < m_NumExtraChars; i++) - *p++ = '\b'; - m_NumExtraChars = extraSize; - for (; size < m_NumExtraChars; size++) - *p++ = ' '; - MyStringCopy(p, s); - (*OutStream) << fullString; - OutStream->Flush(); - m_PrevValue = m_CurValue; -} - -void CPercentPrinter::PrintRatio() -{ - if (m_CurValue < m_PrevValue + m_MinStepSize && - m_CurValue + m_MinStepSize > m_PrevValue && m_NumExtraChars != 0) - return; - RePrintRatio(); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/PercentPrinter.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/PercentPrinter.h deleted file mode 100644 index 212e11e2eadf..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/PercentPrinter.h +++ /dev/null @@ -1,31 +0,0 @@ -// PercentPrinter.h - -#ifndef __PERCENTPRINTER_H -#define __PERCENTPRINTER_H - -#include "Common/Types.h" -#include "Common/StdOutStream.h" - -class CPercentPrinter -{ - UInt64 m_MinStepSize; - UInt64 m_PrevValue; - UInt64 m_CurValue; - UInt64 m_Total; - int m_NumExtraChars; -public: - CStdOutStream *OutStream; - - CPercentPrinter(UInt64 minStepSize = 1): m_MinStepSize(minStepSize), - m_PrevValue(0), m_CurValue(0), m_Total(1), m_NumExtraChars(0) {} - void SetTotal(UInt64 total) { m_Total = total; m_PrevValue = 0; } - void SetRatio(UInt64 doneValue) { m_CurValue = doneValue; } - void PrintString(const char *s); - void PrintString(const wchar_t *s); - void PrintNewLine(); - void ClosePrint(); - void RePrintRatio(); - void PrintRatio(); -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/StdAfx.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/StdAfx.cpp deleted file mode 100644 index c6d3b1fa6231..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/StdAfx.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/StdAfx.h deleted file mode 100644 index a4e6173121b1..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" -#include "../../../Common/NewHandler.h" - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp deleted file mode 100644 index 4e3e2b66b036..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp +++ /dev/null @@ -1,261 +0,0 @@ -// UpdateCallbackConsole.cpp - -#include "StdAfx.h" - -#include "UpdateCallbackConsole.h" - -#include "Windows/Error.h" -#ifdef COMPRESS_MT -#include "Windows/Synchronization.h" -#endif - -#include "ConsoleClose.h" -#include "UserInputUtils.h" - -using namespace NWindows; - -#ifdef COMPRESS_MT -static NSynchronization::CCriticalSection g_CriticalSection; -#define MT_LOCK NSynchronization::CCriticalSectionLock lock(g_CriticalSection); -#else -#define MT_LOCK -#endif - -static const wchar_t *kEmptyFileAlias = L"[Content]"; - -static const char *kCreatingArchiveMessage = "Creating archive "; -static const char *kUpdatingArchiveMessage = "Updating archive "; -static const char *kScanningMessage = "Scanning"; - - -HRESULT CUpdateCallbackConsole::OpenResult(const wchar_t *name, HRESULT result) -{ - (*OutStream) << endl; - if (result != S_OK) - (*OutStream) << "Error: " << name << " is not supported archive" << endl; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::StartScanning() -{ - (*OutStream) << kScanningMessage; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::ScanProgress(UInt64 /* numFolders */, UInt64 /* numFiles */, const wchar_t * /* path */) -{ - return CheckBreak(); -} - -HRESULT CUpdateCallbackConsole::CanNotFindError(const wchar_t *name, DWORD systemError) -{ - CantFindFiles.Add(name); - CantFindCodes.Add(systemError); - // m_PercentPrinter.ClosePrint(); - if (!m_WarningsMode) - { - (*OutStream) << endl << endl; - m_PercentPrinter.PrintNewLine(); - m_WarningsMode = true; - } - m_PercentPrinter.PrintString(name); - m_PercentPrinter.PrintString(": WARNING: "); - m_PercentPrinter.PrintString(NError::MyFormatMessageW(systemError)); - m_PercentPrinter.PrintNewLine(); - return S_OK; -} - -HRESULT CUpdateCallbackConsole::FinishScanning() -{ - (*OutStream) << endl << endl; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::StartArchive(const wchar_t *name, bool updating) -{ - if(updating) - (*OutStream) << kUpdatingArchiveMessage; - else - (*OutStream) << kCreatingArchiveMessage; - if (name != 0) - (*OutStream) << name; - else - (*OutStream) << "StdOut"; - (*OutStream) << endl << endl; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::FinishArchive() -{ - (*OutStream) << endl; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::CheckBreak() -{ - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::Finilize() -{ - MT_LOCK - if (m_NeedBeClosed) - { - if (EnablePercents) - { - m_PercentPrinter.ClosePrint(); - } - if (!StdOutMode && m_NeedNewLine) - { - m_PercentPrinter.PrintNewLine(); - m_NeedNewLine = false; - } - m_NeedBeClosed = false; - } - return S_OK; -} - -HRESULT CUpdateCallbackConsole::SetNumFiles(UInt64 /* numFiles */) -{ - return S_OK; -} - -HRESULT CUpdateCallbackConsole::SetTotal(UInt64 size) -{ - MT_LOCK - if (EnablePercents) - m_PercentPrinter.SetTotal(size); - return S_OK; -} - -HRESULT CUpdateCallbackConsole::SetCompleted(const UInt64 *completeValue) -{ - MT_LOCK - if (completeValue != NULL) - { - if (EnablePercents) - { - m_PercentPrinter.SetRatio(*completeValue); - m_PercentPrinter.PrintRatio(); - m_NeedBeClosed = true; - } - } - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::SetRatioInfo(const UInt64 * /* inSize */, const UInt64 * /* outSize */) -{ - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::GetStream(const wchar_t *name, bool isAnti) -{ - MT_LOCK - if (StdOutMode) - return S_OK; - if(isAnti) - m_PercentPrinter.PrintString("Anti item "); - else - m_PercentPrinter.PrintString("Compressing "); - if (name[0] == 0) - name = kEmptyFileAlias; - m_PercentPrinter.PrintString(name); - if (EnablePercents) - m_PercentPrinter.RePrintRatio(); - return S_OK; -} - -HRESULT CUpdateCallbackConsole::OpenFileError(const wchar_t *name, DWORD systemError) -{ - MT_LOCK - FailedCodes.Add(systemError); - FailedFiles.Add(name); - // if (systemError == ERROR_SHARING_VIOLATION) - { - m_PercentPrinter.ClosePrint(); - m_PercentPrinter.PrintNewLine(); - m_PercentPrinter.PrintString("WARNING: "); - m_PercentPrinter.PrintString(NError::MyFormatMessageW(systemError)); - return S_FALSE; - } - // return systemError; -} - -HRESULT CUpdateCallbackConsole::SetOperationResult(Int32 ) -{ - m_NeedBeClosed = true; - m_NeedNewLine = true; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) -{ - *password = NULL; - - #ifdef _NO_CRYPTO - - *passwordIsDefined = false; - return S_OK; - - #else - - if (!PasswordIsDefined) - { - if (AskPassword) - { - Password = GetPassword(OutStream); - PasswordIsDefined = true; - } - } - *passwordIsDefined = BoolToInt(PasswordIsDefined); - return StringToBstr(Password, password); - - #endif -} - -HRESULT CUpdateCallbackConsole::CryptoGetTextPassword(BSTR *password) -{ - *password = NULL; - - #ifdef _NO_CRYPTO - - return E_NOTIMPL; - - #else - - if (!PasswordIsDefined) - { - { - Password = GetPassword(OutStream); - PasswordIsDefined = true; - } - } - return StringToBstr(Password, password); - - #endif -} - -/* -HRESULT CUpdateCallbackConsole::ShowDeleteFile(const wchar_t *name) -{ - // MT_LOCK - if (StdOutMode) - return S_OK; - RINOK(Finilize()); - m_PercentPrinter.PrintString("Deleting "); - if (name[0] == 0) - name = kEmptyFileAlias; - m_PercentPrinter.PrintString(name); - if (EnablePercents) - m_PercentPrinter.RePrintRatio(); - m_NeedBeClosed = true; - m_NeedNewLine = true; - return S_OK; -} -*/ diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UpdateCallbackConsole.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UpdateCallbackConsole.h deleted file mode 100644 index 59581f307146..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UpdateCallbackConsole.h +++ /dev/null @@ -1,62 +0,0 @@ -// UpdateCallbackConsole.h - -#ifndef __UPDATE_CALLBACK_CONSOLE_H -#define __UPDATE_CALLBACK_CONSOLE_H - -#include "Common/StdOutStream.h" - -#include "../Common/Update.h" - -#include "PercentPrinter.h" - -class CUpdateCallbackConsole: public IUpdateCallbackUI2 -{ - CPercentPrinter m_PercentPrinter; - bool m_NeedBeClosed; - bool m_NeedNewLine; - - bool m_WarningsMode; - - CStdOutStream *OutStream; -public: - bool EnablePercents; - bool StdOutMode; - - #ifndef _NO_CRYPTO - bool PasswordIsDefined; - UString Password; - bool AskPassword; - #endif - - CUpdateCallbackConsole(): - m_PercentPrinter(1 << 16), - #ifndef _NO_CRYPTO - PasswordIsDefined(false), - AskPassword(false), - #endif - StdOutMode(false), - EnablePercents(true), - m_WarningsMode(false) - {} - - ~CUpdateCallbackConsole() { Finilize(); } - void Init(CStdOutStream *outStream) - { - m_NeedBeClosed = false; - m_NeedNewLine = false; - FailedFiles.Clear(); - FailedCodes.Clear(); - OutStream = outStream; - m_PercentPrinter.OutStream = outStream; - } - - INTERFACE_IUpdateCallbackUI2(;) - - UStringVector FailedFiles; - CRecordVector FailedCodes; - - UStringVector CantFindFiles; - CRecordVector CantFindCodes; -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UserInputUtils.cpp b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UserInputUtils.cpp deleted file mode 100644 index c5695553ac8d..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UserInputUtils.cpp +++ /dev/null @@ -1,60 +0,0 @@ -// UserInputUtils.cpp - -#include "StdAfx.h" - -#include "Common/StdInStream.h" -#include "Common/StringConvert.h" - -#include "UserInputUtils.h" - -static const char kYes = 'Y'; -static const char kNo = 'N'; -static const char kYesAll = 'A'; -static const char kNoAll = 'S'; -static const char kAutoRenameAll = 'U'; -static const char kQuit = 'Q'; - -static const char *kFirstQuestionMessage = "?\n"; -static const char *kHelpQuestionMessage = - "(Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename all / (Q)uit? "; - -// return true if pressed Quite; - -NUserAnswerMode::EEnum ScanUserYesNoAllQuit(CStdOutStream *outStream) -{ - (*outStream) << kFirstQuestionMessage; - for (;;) - { - (*outStream) << kHelpQuestionMessage; - AString scannedString = g_StdIn.ScanStringUntilNewLine(); - scannedString.Trim(); - if (!scannedString.IsEmpty()) - switch( - ::MyCharUpper( - #ifdef UNDER_CE - (wchar_t) - #endif - scannedString[0])) - { - case kYes: - return NUserAnswerMode::kYes; - case kNo: - return NUserAnswerMode::kNo; - case kYesAll: - return NUserAnswerMode::kYesAll; - case kNoAll: - return NUserAnswerMode::kNoAll; - case kAutoRenameAll: - return NUserAnswerMode::kAutoRenameAll; - case kQuit: - return NUserAnswerMode::kQuit; - } - } -} - -UString GetPassword(CStdOutStream *outStream) -{ - (*outStream) << "\nEnter password:"; - outStream->Flush(); - return g_StdIn.ScanUStringUntilNewLine(); -} diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UserInputUtils.h b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UserInputUtils.h deleted file mode 100644 index 3740ad724dc1..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/UserInputUtils.h +++ /dev/null @@ -1,24 +0,0 @@ -// UserInputUtils.h - -#ifndef __USERINPUTUTILS_H -#define __USERINPUTUTILS_H - -#include "Common/StdOutStream.h" - -namespace NUserAnswerMode { - -enum EEnum -{ - kYes, - kNo, - kYesAll, - kNoAll, - kAutoRenameAll, - kQuit -}; -} - -NUserAnswerMode::EEnum ScanUserYesNoAllQuit(CStdOutStream *outStream); -UString GetPassword(CStdOutStream *outStream); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/makefile b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/makefile deleted file mode 100644 index 3e90216fcedf..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/makefile +++ /dev/null @@ -1,129 +0,0 @@ -PROG = 7z.exe -MY_CONSOLE = 1 -CFLAGS = $(CFLAGS) -I ../../../ \ - -DCOMPRESS_MT \ - -DEXTERNAL_LZMA \ - -DEXTERNAL_CODECS \ - -DBREAK_HANDLER \ - -DBENCH_MT \ - -!IFNDEF UNDER_CE -CFLAGS = $(CFLAGS) -DWIN_LONG_PATH -D_7ZIP_LARGE_PAGES -DSUPPORT_DEVICE_FILE -!ENDIF - - -CONSOLE_OBJS = \ - $O\ConsoleClose.obj \ - $O\ExtractCallbackConsole.obj \ - $O\List.obj \ - $O\Main.obj \ - $O\MainAr.obj \ - $O\OpenCallbackConsole.obj \ - $O\PercentPrinter.obj \ - $O\UpdateCallbackConsole.obj \ - $O\UserInputUtils.obj \ - -COMMON_OBJS = \ - $O\CommandLineParser.obj \ - $O\CRC.obj \ - $O\IntToString.obj \ - $O\ListFileUtils.obj \ - $O\NewHandler.obj \ - $O\StdInStream.obj \ - $O\StdOutStream.obj \ - $O\MyString.obj \ - $O\StringConvert.obj \ - $O\StringToInt.obj \ - $O\UTFConvert.obj \ - $O\MyVector.obj \ - $O\Wildcard.obj \ - -WIN_OBJS = \ - $O\DLL.obj \ - $O\Error.obj \ - $O\FileDir.obj \ - $O\FileFind.obj \ - $O\FileIO.obj \ - $O\FileName.obj \ - $O\MemoryLock.obj \ - $O\PropVariant.obj \ - $O\PropVariantConversions.obj \ - $O\Registry.obj \ - $O\System.obj \ - $O\Time.obj \ - -7ZIP_COMMON_OBJS = \ - $O\FilePathAutoRename.obj \ - $O\FileStreams.obj \ - $O\ProgressUtils.obj \ - $O\StreamUtils.obj \ - -UI_COMMON_OBJS = \ - $O\ArchiveCommandLine.obj \ - $O\ArchiveExtractCallback.obj \ - $O\ArchiveOpenCallback.obj \ - $O\DefaultName.obj \ - $O\EnumDirItems.obj \ - $O\Extract.obj \ - $O\ExtractingFilePath.obj \ - $O\LoadCodecs.obj \ - $O\OpenArchive.obj \ - $O\PropIDUtils.obj \ - $O\SetProperties.obj \ - $O\SortUtils.obj \ - $O\TempFiles.obj \ - $O\Update.obj \ - $O\UpdateAction.obj \ - $O\UpdateCallback.obj \ - $O\UpdatePair.obj \ - $O\UpdateProduce.obj \ - $O\WorkDir.obj \ - -AR_COMMON_OBJS = \ - $O\OutStreamWithCRC.obj \ - -LZMA_BENCH_OBJS = \ - $O\LzmaBench.obj \ - $O\LzmaBenchCon.obj \ - -C_OBJS = \ - $O\Alloc.obj \ - $O\Threads.obj \ - -!include "../../Crc2.mak" - -OBJS = \ - $O\StdAfx.obj \ - $(CONSOLE_OBJS) \ - $(COMMON_OBJS) \ - $(WIN_OBJS) \ - $(7ZIP_COMMON_OBJS) \ - $(UI_COMMON_OBJS) \ - $(AR_COMMON_OBJS) \ - $O\CopyCoder.obj \ - $(LZMA_BENCH_OBJS) \ - $(C_OBJS) \ - $(CRC_OBJS) \ - $O\resource.res - -!include "../../../Build.mak" - -$(CONSOLE_OBJS): $(*B).cpp - $(COMPL) -$(COMMON_OBJS): ../../../Common/$(*B).cpp - $(COMPL) -$(WIN_OBJS): ../../../Windows/$(*B).cpp - $(COMPL) -$(7ZIP_COMMON_OBJS): ../../Common/$(*B).cpp - $(COMPL) -$(UI_COMMON_OBJS): ../Common/$(*B).cpp - $(COMPL) -$(AR_COMMON_OBJS): ../../Archive/Common/$(*B).cpp - $(COMPL) -$O\CopyCoder.obj: ../../Compress/$(*B).cpp - $(COMPL) -$(LZMA_BENCH_OBJS): ../../Compress/LZMA_Alone/$(*B).cpp - $(COMPL) -$(C_OBJS): ../../../../C/$(*B).c - $(COMPL_O2) -!include "../../Crc.mak" diff --git a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/resource.rc b/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/resource.rc deleted file mode 100644 index 20dfee13e519..000000000000 --- a/modules/lib7z/LZMASDK/CPP/7zip/UI/Console/resource.rc +++ /dev/null @@ -1,3 +0,0 @@ -#include "../../MyVersionInfo.rc" - -MY_VERSION_INFO_APP("7-Zip Console", "7z") diff --git a/modules/lib7z/LZMASDK/CPP/Build.mak b/modules/lib7z/LZMASDK/CPP/Build.mak deleted file mode 100644 index 20b7c7e97f14..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Build.mak +++ /dev/null @@ -1,89 +0,0 @@ -LIBS = $(LIBS) oleaut32.lib ole32.lib - -!IFDEF CPU -!IFNDEF NO_BUFFEROVERFLOWU -LIBS = $(LIBS) bufferoverflowU.lib -!ENDIF -!ENDIF - - -!IFNDEF O -!IFDEF CPU -O=$(CPU) -!ELSE -O=O -!ENDIF -!ENDIF - -!IF "$(CPU)" != "IA64" -!IF "$(CPU)" != "AMD64" -MY_ML = ml -!ELSE -MY_ML = ml64 -!ENDIF -!ENDIF - - -!IFDEF UNDER_CE -RFLAGS = $(RFLAGS) -dUNDER_CE -!IFDEF MY_CONSOLE -LFLAGS = $(LFLAGS) /ENTRY:mainACRTStartup -!ENDIF -!ELSE -LFLAGS = $(LFLAGS) -OPT:NOWIN98 -CFLAGS = $(CFLAGS) -Gr -LIBS = $(LIBS) user32.lib advapi32.lib shell32.lib -!ENDIF - - -COMPL_ASM = $(MY_ML) -c -Fo$O/ $** - -CFLAGS = $(CFLAGS) -nologo -c -Fo$O/ -WX -EHsc -Gy -GR- - -!IFDEF MY_STATIC_LINK -!IFNDEF MY_SINGLE_THREAD -CFLAGS = $(CFLAGS) -MT -!ENDIF -!ELSE -CFLAGS = $(CFLAGS) -MD -!ENDIF - -!IFDEF NEW_COMPILER -CFLAGS = $(CFLAGS) -W4 -GS- -Zc:forScope -!ELSE -CFLAGS = $(CFLAGS) -W3 -!ENDIF - -CFLAGS_O1 = $(CFLAGS) -O1 -CFLAGS_O2 = $(CFLAGS) -O2 - -LFLAGS = $(LFLAGS) -nologo -OPT:REF -OPT:ICF - -!IFDEF DEF_FILE -LFLAGS = $(LFLAGS) -DLL -DEF:$(DEF_FILE) -!ENDIF - -PROGPATH = $O\$(PROG) - -COMPL_O1 = $(CC) $(CFLAGS_O1) $** -COMPL_O2 = $(CC) $(CFLAGS_O2) $** -COMPL_PCH = $(CC) $(CFLAGS_O1) -Yc"StdAfx.h" -Fp$O/a.pch $** -COMPL = $(CC) $(CFLAGS_O1) -Yu"StdAfx.h" -Fp$O/a.pch $** - -all: $(PROGPATH) - -clean: - -del /Q $(PROGPATH) $O\*.exe $O\*.dll $O\*.obj $O\*.lib $O\*.exp $O\*.res $O\*.pch - -$O: - if not exist "$O" mkdir "$O" - -$(PROGPATH): $O $(OBJS) $(DEF_FILE) - link $(LFLAGS) -out:$(PROGPATH) $(OBJS) $(LIBS) - -!IFNDEF NO_DEFAULT_RES -$O\resource.res: $(*B).rc - rc $(RFLAGS) -fo$@ $** -!ENDIF -$O\StdAfx.obj: $(*B).cpp - $(COMPL_PCH) diff --git a/modules/lib7z/LZMASDK/CPP/Common/AutoPtr.h b/modules/lib7z/LZMASDK/CPP/Common/AutoPtr.h deleted file mode 100644 index e53fb7f5d5cf..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/AutoPtr.h +++ /dev/null @@ -1,35 +0,0 @@ -// Common/AutoPtr.h - -#ifndef __COMMON_AUTOPTR_H -#define __COMMON_AUTOPTR_H - -template class CMyAutoPtr -{ - T *_p; -public: - CMyAutoPtr(T *p = 0) : _p(p) {} - CMyAutoPtr(CMyAutoPtr& p): _p(p.release()) {} - CMyAutoPtr& operator=(CMyAutoPtr& p) - { - reset(p.release()); - return (*this); - } - ~CMyAutoPtr() { delete _p; } - T& operator*() const { return *_p; } - // T* operator->() const { return (&**this); } - T* get() const { return _p; } - T* release() - { - T *tmp = _p; - _p = 0; - return tmp; - } - void reset(T* p = 0) - { - if (p != _p) - delete _p; - _p = p; - } -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/Buffer.h b/modules/lib7z/LZMASDK/CPP/Common/Buffer.h deleted file mode 100644 index defe9433587c..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/Buffer.h +++ /dev/null @@ -1,77 +0,0 @@ -// Common/Buffer.h - -#ifndef __COMMON_BUFFER_H -#define __COMMON_BUFFER_H - -#include "Defs.h" - -template class CBuffer -{ -protected: - size_t _capacity; - T *_items; -public: - void Free() - { - delete []_items; - _items = 0; - _capacity = 0; - } - CBuffer(): _capacity(0), _items(0) {}; - CBuffer(const CBuffer &buffer): _capacity(0), _items(0) { *this = buffer; } - CBuffer(size_t size): _items(0), _capacity(0) { SetCapacity(size); } - virtual ~CBuffer() { delete []_items; } - operator T *() { return _items; }; - operator const T *() const { return _items; }; - size_t GetCapacity() const { return _capacity; } - void SetCapacity(size_t newCapacity) - { - if (newCapacity == _capacity) - return; - T *newBuffer; - if (newCapacity > 0) - { - newBuffer = new T[newCapacity]; - if (_capacity > 0) - memmove(newBuffer, _items, MyMin(_capacity, newCapacity) * sizeof(T)); - } - else - newBuffer = 0; - delete []_items; - _items = newBuffer; - _capacity = newCapacity; - } - CBuffer& operator=(const CBuffer &buffer) - { - Free(); - if (buffer._capacity > 0) - { - SetCapacity(buffer._capacity); - memmove(_items, buffer._items, buffer._capacity * sizeof(T)); - } - return *this; - } -}; - -template -bool operator==(const CBuffer& b1, const CBuffer& b2) -{ - if (b1.GetCapacity() != b2.GetCapacity()) - return false; - for (size_t i = 0; i < b1.GetCapacity(); i++) - if (b1[i] != b2[i]) - return false; - return true; -} - -template -bool operator!=(const CBuffer& b1, const CBuffer& b2) -{ - return !(b1 == b2); -} - -typedef CBuffer CCharBuffer; -typedef CBuffer CWCharBuffer; -typedef CBuffer CByteBuffer; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/CRC.cpp b/modules/lib7z/LZMASDK/CPP/Common/CRC.cpp deleted file mode 100644 index 6ac52c4c1241..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/CRC.cpp +++ /dev/null @@ -1,7 +0,0 @@ -// Common/CRC.cpp - -#include "StdAfx.h" - -#include "../../C/7zCrc.h" - -struct CCRCTableInit { CCRCTableInit() { CrcGenerateTable(); } } g_CRCTableInit; diff --git a/modules/lib7z/LZMASDK/CPP/Common/C_FileIO.cpp b/modules/lib7z/LZMASDK/CPP/Common/C_FileIO.cpp deleted file mode 100644 index 0e5647f0087a..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/C_FileIO.cpp +++ /dev/null @@ -1,88 +0,0 @@ -// Common/C_FileIO.h - -#include "C_FileIO.h" - -#include -#include - -namespace NC { -namespace NFile { -namespace NIO { - -bool CFileBase::OpenBinary(const char *name, int flags) -{ - #ifdef O_BINARY - flags |= O_BINARY; - #endif - Close(); - _handle = ::open(name, flags, 0666); - return _handle != -1; -} - -bool CFileBase::Close() -{ - if (_handle == -1) - return true; - if (close(_handle) != 0) - return false; - _handle = -1; - return true; -} - -bool CFileBase::GetLength(UInt64 &length) const -{ - off_t curPos = Seek(0, SEEK_CUR); - off_t lengthTemp = Seek(0, SEEK_END); - Seek(curPos, SEEK_SET); - length = (UInt64)lengthTemp; - return true; -} - -off_t CFileBase::Seek(off_t distanceToMove, int moveMethod) const -{ - return ::lseek(_handle, distanceToMove, moveMethod); -} - -///////////////////////// -// CInFile - -bool CInFile::Open(const char *name) -{ - return CFileBase::OpenBinary(name, O_RDONLY); -} - -bool CInFile::OpenShared(const char *name, bool) -{ - return Open(name); -} - -ssize_t CInFile::Read(void *data, size_t size) -{ - return read(_handle, data, size); -} - -///////////////////////// -// COutFile - -bool COutFile::Create(const char *name, bool createAlways) -{ - if (createAlways) - { - Close(); - _handle = ::creat(name, 0666); - return _handle != -1; - } - return OpenBinary(name, O_CREAT | O_EXCL | O_WRONLY); -} - -bool COutFile::Open(const char *name, DWORD creationDisposition) -{ - return Create(name, false); -} - -ssize_t COutFile::Write(const void *data, size_t size) -{ - return write(_handle, data, size); -} - -}}} diff --git a/modules/lib7z/LZMASDK/CPP/Common/C_FileIO.h b/modules/lib7z/LZMASDK/CPP/Common/C_FileIO.h deleted file mode 100644 index 3f8cbca96550..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/C_FileIO.h +++ /dev/null @@ -1,47 +0,0 @@ -// Common/C_FileIO.h - -#ifndef __COMMON_C_FILEIO_H -#define __COMMON_C_FILEIO_H - -#include -#include - -#include "Types.h" -#include "MyWindows.h" - -namespace NC { -namespace NFile { -namespace NIO { - -class CFileBase -{ -protected: - int _handle; - bool OpenBinary(const char *name, int flags); -public: - CFileBase(): _handle(-1) {}; - ~CFileBase() { Close(); } - bool Close(); - bool GetLength(UInt64 &length) const; - off_t Seek(off_t distanceToMove, int moveMethod) const; -}; - -class CInFile: public CFileBase -{ -public: - bool Open(const char *name); - bool OpenShared(const char *name, bool shareForWrite); - ssize_t Read(void *data, size_t size); -}; - -class COutFile: public CFileBase -{ -public: - bool Create(const char *name, bool createAlways); - bool Open(const char *name, DWORD creationDisposition); - ssize_t Write(const void *data, size_t size); -}; - -}}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/ComTry.h b/modules/lib7z/LZMASDK/CPP/Common/ComTry.h deleted file mode 100644 index 98e592766348..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/ComTry.h +++ /dev/null @@ -1,17 +0,0 @@ -// ComTry.h - -#ifndef __COM_TRY_H -#define __COM_TRY_H - -#include "MyWindows.h" -// #include "Exception.h" -// #include "NewHandler.h" - -#define COM_TRY_BEGIN try { -#define COM_TRY_END } catch(...) { return E_OUTOFMEMORY; } - - // catch(const CNewException &) { return E_OUTOFMEMORY; }\ - // catch(const CSystemException &e) { return e.ErrorCode; }\ - // catch(...) { return E_FAIL; } - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/CommandLineParser.cpp b/modules/lib7z/LZMASDK/CPP/Common/CommandLineParser.cpp deleted file mode 100644 index 24c3603db778..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/CommandLineParser.cpp +++ /dev/null @@ -1,232 +0,0 @@ -// CommandLineParser.cpp - -#include "StdAfx.h" - -#include "CommandLineParser.h" - -namespace NCommandLineParser { - -void SplitCommandLine(const UString &src, UString &dest1, UString &dest2) -{ - dest1.Empty(); - dest2.Empty(); - bool quoteMode = false; - int i; - for (i = 0; i < src.Length(); i++) - { - wchar_t c = src[i]; - if (c == L'\"') - quoteMode = !quoteMode; - else if (c == L' ' && !quoteMode) - { - i++; - break; - } - else - dest1 += c; - } - dest2 = src.Mid(i); -} - -void SplitCommandLine(const UString &s, UStringVector &parts) -{ - UString sTemp = s; - sTemp.Trim(); - parts.Clear(); - for (;;) - { - UString s1, s2; - SplitCommandLine(sTemp, s1, s2); - // s1.Trim(); - // s2.Trim(); - if (!s1.IsEmpty()) - parts.Add(s1); - if (s2.IsEmpty()) - break; - sTemp = s2; - } -} - - -static const wchar_t kSwitchID1 = '-'; -// static const wchar_t kSwitchID2 = '/'; - -static const wchar_t kSwitchMinus = '-'; -static const wchar_t *kStopSwitchParsing = L"--"; - -static bool IsItSwitchChar(wchar_t c) -{ - return (c == kSwitchID1 /*|| c == kSwitchID2 */); -} - -CParser::CParser(int numSwitches): - _numSwitches(numSwitches) -{ - _switches = new CSwitchResult[_numSwitches]; -} - -CParser::~CParser() -{ - delete []_switches; -} - -void CParser::ParseStrings(const CSwitchForm *switchForms, - const UStringVector &commandStrings) -{ - int numCommandStrings = commandStrings.Size(); - bool stopSwitch = false; - for (int i = 0; i < numCommandStrings; i++) - { - const UString &s = commandStrings[i]; - if (stopSwitch) - NonSwitchStrings.Add(s); - else - if (s == kStopSwitchParsing) - stopSwitch = true; - else - if (!ParseString(s, switchForms)) - NonSwitchStrings.Add(s); - } -} - -// if string contains switch then function updates switch structures -// out: (string is a switch) -bool CParser::ParseString(const UString &s, const CSwitchForm *switchForms) -{ - int len = s.Length(); - if (len == 0) - return false; - int pos = 0; - if (!IsItSwitchChar(s[pos])) - return false; - while (pos < len) - { - if (IsItSwitchChar(s[pos])) - pos++; - const int kNoLen = -1; - int matchedSwitchIndex = 0; // GCC Warning - int maxLen = kNoLen; - for (int switchIndex = 0; switchIndex < _numSwitches; switchIndex++) - { - int switchLen = MyStringLen(switchForms[switchIndex].IDString); - if (switchLen <= maxLen || pos + switchLen > len) - continue; - - UString temp = s + pos; - temp = temp.Left(switchLen); - if (temp.CompareNoCase(switchForms[switchIndex].IDString) == 0) - // if (_strnicmp(switchForms[switchIndex].IDString, LPCSTR(s) + pos, switchLen) == 0) - { - matchedSwitchIndex = switchIndex; - maxLen = switchLen; - } - } - if (maxLen == kNoLen) - throw "maxLen == kNoLen"; - CSwitchResult &matchedSwitch = _switches[matchedSwitchIndex]; - const CSwitchForm &switchForm = switchForms[matchedSwitchIndex]; - if ((!switchForm.Multi) && matchedSwitch.ThereIs) - throw "switch must be single"; - matchedSwitch.ThereIs = true; - pos += maxLen; - int tailSize = len - pos; - NSwitchType::EEnum type = switchForm.Type; - switch(type) - { - case NSwitchType::kPostMinus: - { - if (tailSize == 0) - matchedSwitch.WithMinus = false; - else - { - matchedSwitch.WithMinus = (s[pos] == kSwitchMinus); - if (matchedSwitch.WithMinus) - pos++; - } - break; - } - case NSwitchType::kPostChar: - { - if (tailSize < switchForm.MinLen) - throw "switch is not full"; - UString set = switchForm.PostCharSet; - const int kEmptyCharValue = -1; - if (tailSize == 0) - matchedSwitch.PostCharIndex = kEmptyCharValue; - else - { - int index = set.Find(s[pos]); - if (index < 0) - matchedSwitch.PostCharIndex = kEmptyCharValue; - else - { - matchedSwitch.PostCharIndex = index; - pos++; - } - } - break; - } - case NSwitchType::kLimitedPostString: - case NSwitchType::kUnLimitedPostString: - { - int minLen = switchForm.MinLen; - if (tailSize < minLen) - throw "switch is not full"; - if (type == NSwitchType::kUnLimitedPostString) - { - matchedSwitch.PostStrings.Add(s.Mid(pos)); - return true; - } - int maxLen = switchForm.MaxLen; - UString stringSwitch = s.Mid(pos, minLen); - pos += minLen; - for (int i = minLen; i < maxLen && pos < len; i++, pos++) - { - wchar_t c = s[pos]; - if (IsItSwitchChar(c)) - break; - stringSwitch += c; - } - matchedSwitch.PostStrings.Add(stringSwitch); - break; - } - case NSwitchType::kSimple: - break; - } - } - return true; -} - -const CSwitchResult& CParser::operator[](size_t index) const -{ - return _switches[index]; -} - -///////////////////////////////// -// Command parsing procedures - -int ParseCommand(int numCommandForms, const CCommandForm *commandForms, - const UString &commandString, UString &postString) -{ - for (int i = 0; i < numCommandForms; i++) - { - const UString id = commandForms[i].IDString; - if (commandForms[i].PostStringMode) - { - if (commandString.Find(id) == 0) - { - postString = commandString.Mid(id.Length()); - return i; - } - } - else - if (commandString == id) - { - postString.Empty(); - return i; - } - } - return -1; -} - -} diff --git a/modules/lib7z/LZMASDK/CPP/Common/CommandLineParser.h b/modules/lib7z/LZMASDK/CPP/Common/CommandLineParser.h deleted file mode 100644 index 1a1ef81c2307..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/CommandLineParser.h +++ /dev/null @@ -1,72 +0,0 @@ -// Common/CommandLineParser.h - -#ifndef __COMMON_COMMANDLINEPARSER_H -#define __COMMON_COMMANDLINEPARSER_H - -#include "MyString.h" - -namespace NCommandLineParser { - -void SplitCommandLine(const UString &src, UString &dest1, UString &dest2); -void SplitCommandLine(const UString &s, UStringVector &parts); - -namespace NSwitchType { - enum EEnum - { - kSimple, - kPostMinus, - kLimitedPostString, - kUnLimitedPostString, - kPostChar - }; -} - -struct CSwitchForm -{ - const wchar_t *IDString; - NSwitchType::EEnum Type; - bool Multi; - int MinLen; - int MaxLen; - const wchar_t *PostCharSet; -}; - -struct CSwitchResult -{ - bool ThereIs; - bool WithMinus; - UStringVector PostStrings; - int PostCharIndex; - CSwitchResult(): ThereIs(false) {}; -}; - -class CParser -{ - int _numSwitches; - CSwitchResult *_switches; - bool ParseString(const UString &s, const CSwitchForm *switchForms); -public: - UStringVector NonSwitchStrings; - CParser(int numSwitches); - ~CParser(); - void ParseStrings(const CSwitchForm *switchForms, - const UStringVector &commandStrings); - const CSwitchResult& operator[](size_t index) const; -}; - -///////////////////////////////// -// Command parsing procedures - -struct CCommandForm -{ - wchar_t *IDString; - bool PostStringMode; -}; - -// Returns: Index of form and postString; -1, if there is no match -int ParseCommand(int numCommandForms, const CCommandForm *commandForms, - const UString &commandString, UString &postString); - -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/Defs.h b/modules/lib7z/LZMASDK/CPP/Common/Defs.h deleted file mode 100644 index 69b8ecea821c..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/Defs.h +++ /dev/null @@ -1,20 +0,0 @@ -// Common/Defs.h - -#ifndef __COMMON_DEFS_H -#define __COMMON_DEFS_H - -template inline T MyMin(T a, T b) - { return a < b ? a : b; } -template inline T MyMax(T a, T b) - { return a > b ? a : b; } - -template inline int MyCompare(T a, T b) - { return a < b ? -1 : (a == b ? 0 : 1); } - -inline int BoolToInt(bool value) - { return (value ? 1: 0); } - -inline bool IntToBool(int value) - { return (value != 0); } - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/DynamicBuffer.h b/modules/lib7z/LZMASDK/CPP/Common/DynamicBuffer.h deleted file mode 100644 index 83ef0ea2cafd..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/DynamicBuffer.h +++ /dev/null @@ -1,47 +0,0 @@ -// Common/DynamicBuffer.h - -#ifndef __COMMON_DYNAMICBUFFER_H -#define __COMMON_DYNAMICBUFFER_H - -#include "Buffer.h" - -template class CDynamicBuffer: public CBuffer -{ - void GrowLength(size_t size) - { - size_t delta; - if (this->_capacity > 64) - delta = this->_capacity / 4; - else if (this->_capacity > 8) - delta = 16; - else - delta = 4; - delta = MyMax(delta, size); - SetCapacity(this->_capacity + delta); - } -public: - CDynamicBuffer(): CBuffer() {}; - CDynamicBuffer(const CDynamicBuffer &buffer): CBuffer(buffer) {}; - CDynamicBuffer(size_t size): CBuffer(size) {}; - CDynamicBuffer& operator=(const CDynamicBuffer &buffer) - { - this->Free(); - if (buffer._capacity > 0) - { - SetCapacity(buffer._capacity); - memmove(this->_items, buffer._items, buffer._capacity * sizeof(T)); - } - return *this; - } - void EnsureCapacity(size_t capacity) - { - if (this->_capacity < capacity) - GrowLength(capacity - this->_capacity); - } -}; - -typedef CDynamicBuffer CCharDynamicBuffer; -typedef CDynamicBuffer CWCharDynamicBuffer; -typedef CDynamicBuffer CByteDynamicBuffer; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/IntToString.cpp b/modules/lib7z/LZMASDK/CPP/Common/IntToString.cpp deleted file mode 100644 index a2fac29c9965..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/IntToString.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// Common/IntToString.cpp - -#include "StdAfx.h" - -#include "IntToString.h" - -void ConvertUInt64ToString(UInt64 value, char *s, UInt32 base) -{ - if (base < 2 || base > 36) - { - *s = '\0'; - return; - } - char temp[72]; - int pos = 0; - do - { - int delta = (int)(value % base); - temp[pos++] = (char)((delta < 10) ? ('0' + delta) : ('a' + (delta - 10))); - value /= base; - } - while (value != 0); - do - *s++ = temp[--pos]; - while (pos > 0); - *s = '\0'; -} - -void ConvertUInt64ToString(UInt64 value, wchar_t *s) -{ - wchar_t temp[32]; - int pos = 0; - do - { - temp[pos++] = (wchar_t)(L'0' + (int)(value % 10)); - value /= 10; - } - while (value != 0); - do - *s++ = temp[--pos]; - while (pos > 0); - *s = L'\0'; -} - -void ConvertUInt32ToString(UInt32 value, char *s) { ConvertUInt64ToString(value, s); } -void ConvertUInt32ToString(UInt32 value, wchar_t *s) { ConvertUInt64ToString(value, s); } - -void ConvertInt64ToString(Int64 value, char *s) -{ - if (value < 0) - { - *s++ = '-'; - value = -value; - } - ConvertUInt64ToString(value, s); -} - -void ConvertInt64ToString(Int64 value, wchar_t *s) -{ - if (value < 0) - { - *s++ = L'-'; - value = -value; - } - ConvertUInt64ToString(value, s); -} diff --git a/modules/lib7z/LZMASDK/CPP/Common/IntToString.h b/modules/lib7z/LZMASDK/CPP/Common/IntToString.h deleted file mode 100644 index 94a37329d449..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/IntToString.h +++ /dev/null @@ -1,17 +0,0 @@ -// Common/IntToString.h - -#ifndef __COMMON_INT_TO_STRING_H -#define __COMMON_INT_TO_STRING_H - -#include -#include "Types.h" - -void ConvertUInt64ToString(UInt64 value, char *s, UInt32 base = 10); -void ConvertUInt64ToString(UInt64 value, wchar_t *s); -void ConvertInt64ToString(Int64 value, char *s); -void ConvertInt64ToString(Int64 value, wchar_t *s); - -void ConvertUInt32ToString(UInt32 value, char *s); -void ConvertUInt32ToString(UInt32 value, wchar_t *s); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/ListFileUtils.cpp b/modules/lib7z/LZMASDK/CPP/Common/ListFileUtils.cpp deleted file mode 100644 index ff61b0259846..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/ListFileUtils.cpp +++ /dev/null @@ -1,75 +0,0 @@ -// Common/ListFileUtils.cpp - -#include "StdAfx.h" - -#include "MyWindows.h" -#include "../Windows/FileIO.h" - -#include "ListFileUtils.h" -#include "StringConvert.h" -#include "UTFConvert.h" - -static const char kQuoteChar = '\"'; -static void RemoveQuote(UString &s) -{ - if (s.Length() >= 2) - if (s[0] == kQuoteChar && s[s.Length() - 1] == kQuoteChar) - s = s.Mid(1, s.Length() - 2); -} - -bool ReadNamesFromListFile(LPCWSTR fileName, UStringVector &resultStrings, UINT codePage) -{ - NWindows::NFile::NIO::CInFile file; - if (!file.Open(fileName)) - return false; - UInt64 length; - if (!file.GetLength(length)) - return false; - if (length > ((UInt32)1 << 31)) - return false; - AString s; - char *p = s.GetBuffer((int)length + 1); - UInt32 processed; - if (!file.Read(p, (UInt32)length, processed)) - return false; - p[(UInt32)length] = 0; - s.ReleaseBuffer(); - file.Close(); - - UString u; - #ifdef CP_UTF8 - if (codePage == CP_UTF8) - { - if (!ConvertUTF8ToUnicode(s, u)) - return false; - } - else - #endif - u = MultiByteToUnicodeString(s, codePage); - if (!u.IsEmpty()) - { - if (u[0] == 0xFEFF) - u.Delete(0); - } - - UString t; - for (int i = 0; i < u.Length(); i++) - { - wchar_t c = u[i]; - if (c == L'\n' || c == 0xD) - { - t.Trim(); - RemoveQuote(t); - if (!t.IsEmpty()) - resultStrings.Add(t); - t.Empty(); - } - else - t += c; - } - t.Trim(); - RemoveQuote(t); - if (!t.IsEmpty()) - resultStrings.Add(t); - return true; -} diff --git a/modules/lib7z/LZMASDK/CPP/Common/ListFileUtils.h b/modules/lib7z/LZMASDK/CPP/Common/ListFileUtils.h deleted file mode 100644 index 64f2199dd80e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/ListFileUtils.h +++ /dev/null @@ -1,11 +0,0 @@ -// Common/ListFileUtils.h - -#ifndef __COMMON_LISTFILEUTILS_H -#define __COMMON_LISTFILEUTILS_H - -#include "MyString.h" -#include "Types.h" - -bool ReadNamesFromListFile(LPCWSTR fileName, UStringVector &strings, UINT codePage = CP_OEMCP); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/MyCom.h b/modules/lib7z/LZMASDK/CPP/Common/MyCom.h deleted file mode 100644 index d04fa4c3d438..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/MyCom.h +++ /dev/null @@ -1,225 +0,0 @@ -// MyCom.h - -#ifndef __MYCOM_H -#define __MYCOM_H - -#include "MyWindows.h" - -#ifndef RINOK -#define RINOK(x) { HRESULT __result_ = (x); if (__result_ != S_OK) return __result_; } -#endif - -template -class CMyComPtr -{ - T* _p; -public: - // typedef T _PtrClass; - CMyComPtr() { _p = NULL;} - CMyComPtr(T* p) {if ((_p = p) != NULL) p->AddRef(); } - CMyComPtr(const CMyComPtr& lp) - { - if ((_p = lp._p) != NULL) - _p->AddRef(); - } - ~CMyComPtr() { if (_p) _p->Release(); } - void Release() { if (_p) { _p->Release(); _p = NULL; } } - operator T*() const { return (T*)_p; } - // T& operator*() const { return *_p; } - T** operator&() { return &_p; } - T* operator->() const { return _p; } - T* operator=(T* p) - { - if (p != 0) - p->AddRef(); - if (_p) - _p->Release(); - _p = p; - return p; - } - T* operator=(const CMyComPtr& lp) { return (*this = lp._p); } - bool operator!() const { return (_p == NULL); } - // bool operator==(T* pT) const { return _p == pT; } - // Compare two objects for equivalence - void Attach(T* p2) - { - Release(); - _p = p2; - } - T* Detach() - { - T* pt = _p; - _p = NULL; - return pt; - } - #ifdef _WIN32 - HRESULT CoCreateInstance(REFCLSID rclsid, REFIID iid, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) - { - return ::CoCreateInstance(rclsid, pUnkOuter, dwClsContext, iid, (void**)&_p); - } - #endif - /* - HRESULT CoCreateInstance(LPCOLESTR szProgID, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) - { - CLSID clsid; - HRESULT hr = CLSIDFromProgID(szProgID, &clsid); - ATLASSERT(_p == NULL); - if (SUCCEEDED(hr)) - hr = ::CoCreateInstance(clsid, pUnkOuter, dwClsContext, __uuidof(T), (void**)&_p); - return hr; - } - */ - template - HRESULT QueryInterface(REFGUID iid, Q** pp) const - { - return _p->QueryInterface(iid, (void**)pp); - } -}; - -////////////////////////////////////////////////////////// - -inline HRESULT StringToBstr(LPCOLESTR src, BSTR *bstr) -{ - *bstr = ::SysAllocString(src); - return (*bstr != 0) ? S_OK : E_OUTOFMEMORY; -} - -class CMyComBSTR -{ -public: - BSTR m_str; - CMyComBSTR(): m_str(NULL) {} - CMyComBSTR(LPCOLESTR src) { m_str = ::SysAllocString(src); } - // CMyComBSTR(int nSize) { m_str = ::SysAllocStringLen(NULL, nSize); } - // CMyComBSTR(int nSize, LPCOLESTR sz) { m_str = ::SysAllocStringLen(sz, nSize); } - CMyComBSTR(const CMyComBSTR& src) { m_str = src.MyCopy(); } - /* - CMyComBSTR(REFGUID src) - { - LPOLESTR szGuid; - StringFromCLSID(src, &szGuid); - m_str = ::SysAllocString(szGuid); - CoTaskMemFree(szGuid); - } - */ - ~CMyComBSTR() { ::SysFreeString(m_str); } - CMyComBSTR& operator=(const CMyComBSTR& src) - { - if (m_str != src.m_str) - { - if (m_str) - ::SysFreeString(m_str); - m_str = src.MyCopy(); - } - return *this; - } - CMyComBSTR& operator=(LPCOLESTR src) - { - ::SysFreeString(m_str); - m_str = ::SysAllocString(src); - return *this; - } - unsigned int Length() const { return ::SysStringLen(m_str); } - operator BSTR() const { return m_str; } - BSTR* operator&() { return &m_str; } - BSTR MyCopy() const - { - int byteLen = ::SysStringByteLen(m_str); - BSTR res = ::SysAllocStringByteLen(NULL, byteLen); - memcpy(res, m_str, byteLen); - return res; - } - /* - void Attach(BSTR src) { m_str = src; } - BSTR Detach() - { - BSTR s = m_str; - m_str = NULL; - return s; - } - */ - void Empty() - { - ::SysFreeString(m_str); - m_str = NULL; - } - bool operator!() const { return (m_str == NULL); } -}; - -////////////////////////////////////////////////////////// - -class CMyUnknownImp -{ -public: - ULONG __m_RefCount; - CMyUnknownImp(): __m_RefCount(0) {} -}; - -#define MY_QUERYINTERFACE_BEGIN STDMETHOD(QueryInterface) \ - (REFGUID iid, void **outObject) { - -#define MY_QUERYINTERFACE_ENTRY(i) if (iid == IID_ ## i) \ - { *outObject = (void *)(i *)this; AddRef(); return S_OK; } - -#define MY_QUERYINTERFACE_ENTRY_UNKNOWN(i) if (iid == IID_IUnknown) \ - { *outObject = (void *)(IUnknown *)(i *)this; AddRef(); return S_OK; } - -#define MY_QUERYINTERFACE_BEGIN2(i) MY_QUERYINTERFACE_BEGIN \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(i) \ - MY_QUERYINTERFACE_ENTRY(i) - -#define MY_QUERYINTERFACE_END return E_NOINTERFACE; } - -#define MY_ADDREF_RELEASE \ -STDMETHOD_(ULONG, AddRef)() { return ++__m_RefCount; } \ -STDMETHOD_(ULONG, Release)() { if (--__m_RefCount != 0) \ - return __m_RefCount; delete this; return 0; } - -#define MY_UNKNOWN_IMP_SPEC(i) \ - MY_QUERYINTERFACE_BEGIN \ - i \ - MY_QUERYINTERFACE_END \ - MY_ADDREF_RELEASE - - -#define MY_UNKNOWN_IMP MY_QUERYINTERFACE_BEGIN \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(IUnknown) \ - MY_QUERYINTERFACE_END \ - MY_ADDREF_RELEASE - -#define MY_UNKNOWN_IMP1(i) MY_UNKNOWN_IMP_SPEC( \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(i) \ - MY_QUERYINTERFACE_ENTRY(i) \ - ) - -#define MY_UNKNOWN_IMP2(i1, i2) MY_UNKNOWN_IMP_SPEC( \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \ - MY_QUERYINTERFACE_ENTRY(i1) \ - MY_QUERYINTERFACE_ENTRY(i2) \ - ) - -#define MY_UNKNOWN_IMP3(i1, i2, i3) MY_UNKNOWN_IMP_SPEC( \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \ - MY_QUERYINTERFACE_ENTRY(i1) \ - MY_QUERYINTERFACE_ENTRY(i2) \ - MY_QUERYINTERFACE_ENTRY(i3) \ - ) - -#define MY_UNKNOWN_IMP4(i1, i2, i3, i4) MY_UNKNOWN_IMP_SPEC( \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \ - MY_QUERYINTERFACE_ENTRY(i1) \ - MY_QUERYINTERFACE_ENTRY(i2) \ - MY_QUERYINTERFACE_ENTRY(i3) \ - MY_QUERYINTERFACE_ENTRY(i4) \ - ) - -#define MY_UNKNOWN_IMP5(i1, i2, i3, i4, i5) MY_UNKNOWN_IMP_SPEC( \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \ - MY_QUERYINTERFACE_ENTRY(i1) \ - MY_QUERYINTERFACE_ENTRY(i2) \ - MY_QUERYINTERFACE_ENTRY(i3) \ - MY_QUERYINTERFACE_ENTRY(i4) \ - MY_QUERYINTERFACE_ENTRY(i5) \ - ) - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/MyException.h b/modules/lib7z/LZMASDK/CPP/Common/MyException.h deleted file mode 100644 index cd9fe6948b0a..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/MyException.h +++ /dev/null @@ -1,14 +0,0 @@ -// Common/Exception.h - -#ifndef __COMMON_EXCEPTION_H -#define __COMMON_EXCEPTION_H - -#include "MyWindows.h" - -struct CSystemException -{ - HRESULT ErrorCode; - CSystemException(HRESULT errorCode): ErrorCode(errorCode) {} -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/MyGuidDef.h b/modules/lib7z/LZMASDK/CPP/Common/MyGuidDef.h deleted file mode 100644 index 06d17930c0e2..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/MyGuidDef.h +++ /dev/null @@ -1,54 +0,0 @@ -// Common/MyGuidDef.h - -#ifndef GUID_DEFINED -#define GUID_DEFINED - -#include "Types.h" - -typedef struct { - UInt32 Data1; - UInt16 Data2; - UInt16 Data3; - unsigned char Data4[8]; -} GUID; - -#ifdef __cplusplus -#define REFGUID const GUID & -#else -#define REFGUID const GUID * -#endif - -#define REFCLSID REFGUID -#define REFIID REFGUID - -#ifdef __cplusplus -inline int operator==(REFGUID g1, REFGUID g2) -{ - for (int i = 0; i < (int)sizeof(g1); i++) - if (((unsigned char *)&g1)[i] != ((unsigned char *)&g2)[i]) - return 0; - return 1; -} -inline int operator!=(REFGUID g1, REFGUID g2) { return !(g1 == g2); } -#endif - -#ifdef __cplusplus - #define MY_EXTERN_C extern "C" -#else - #define MY_EXTERN_C extern -#endif - -#endif // GUID_DEFINED - - -#ifdef DEFINE_GUID -#undef DEFINE_GUID -#endif - -#ifdef INITGUID - #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - MY_EXTERN_C const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } -#else - #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - MY_EXTERN_C const GUID name -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/MyInitGuid.h b/modules/lib7z/LZMASDK/CPP/Common/MyInitGuid.h deleted file mode 100644 index 98d17053f46e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/MyInitGuid.h +++ /dev/null @@ -1,22 +0,0 @@ -// Common/MyInitGuid.h - -#ifndef __COMMON_MY_INITGUID_H -#define __COMMON_MY_INITGUID_H - -#ifdef _WIN32 -#ifdef UNDER_CE -#include -#endif -#include -#ifdef UNDER_CE -DEFINE_GUID(IID_IUnknown, -0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46); -#endif -#else -#define INITGUID -#include "MyGuidDef.h" -DEFINE_GUID(IID_IUnknown, -0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46); -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/MyString.cpp b/modules/lib7z/LZMASDK/CPP/Common/MyString.cpp deleted file mode 100644 index 1a25c9e76032..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/MyString.cpp +++ /dev/null @@ -1,200 +0,0 @@ -// Common/MyString.cpp - -#include "StdAfx.h" - -#ifndef _WIN32 -#include -#endif - -#ifndef _UNICODE -#include "StringConvert.h" -#endif - -#include "MyString.h" - - -#ifdef _WIN32 - -#ifndef _UNICODE - -wchar_t MyCharUpper(wchar_t c) -{ - if (c == 0) - return 0; - wchar_t *res = CharUpperW((LPWSTR)(UINT_PTR)(unsigned int)c); - if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return (wchar_t)(unsigned int)(UINT_PTR)res; - const int kBufferSize = 4; - char s[kBufferSize + 1]; - int numChars = ::WideCharToMultiByte(CP_ACP, 0, &c, 1, s, kBufferSize, 0, 0); - if (numChars == 0 || numChars > kBufferSize) - return c; - s[numChars] = 0; - ::CharUpperA(s); - ::MultiByteToWideChar(CP_ACP, 0, s, numChars, &c, 1); - return c; -} - -wchar_t MyCharLower(wchar_t c) -{ - if (c == 0) - return 0; - wchar_t *res = CharLowerW((LPWSTR)(UINT_PTR)(unsigned int)c); - if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return (wchar_t)(unsigned int)(UINT_PTR)res; - const int kBufferSize = 4; - char s[kBufferSize + 1]; - int numChars = ::WideCharToMultiByte(CP_ACP, 0, &c, 1, s, kBufferSize, 0, 0); - if (numChars == 0 || numChars > kBufferSize) - return c; - s[numChars] = 0; - ::CharLowerA(s); - ::MultiByteToWideChar(CP_ACP, 0, s, numChars, &c, 1); - return c; -} - -wchar_t * MyStringUpper(wchar_t *s) -{ - if (s == 0) - return 0; - wchar_t *res = CharUpperW(s); - if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return res; - AString a = UnicodeStringToMultiByte(s); - a.MakeUpper(); - return MyStringCopy(s, (const wchar_t *)MultiByteToUnicodeString(a)); -} - -wchar_t * MyStringLower(wchar_t *s) -{ - if (s == 0) - return 0; - wchar_t *res = CharLowerW(s); - if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return res; - AString a = UnicodeStringToMultiByte(s); - a.MakeLower(); - return MyStringCopy(s, (const wchar_t *)MultiByteToUnicodeString(a)); -} - -#endif - -/* -inline int ConvertCompareResult(int r) { return r - 2; } - -int MyStringCollate(const wchar_t *s1, const wchar_t *s2) -{ - int res = CompareStringW( - LOCALE_USER_DEFAULT, SORT_STRINGSORT, s1, -1, s2, -1); - #ifdef _UNICODE - return ConvertCompareResult(res); - #else - if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return ConvertCompareResult(res); - return MyStringCollate(UnicodeStringToMultiByte(s1), - UnicodeStringToMultiByte(s2)); - #endif -} - -#ifndef UNDER_CE -int MyStringCollate(const char *s1, const char *s2) -{ - return ConvertCompareResult(CompareStringA( - LOCALE_USER_DEFAULT, SORT_STRINGSORT, s1, -1, s2, -1)); -} - -int MyStringCollateNoCase(const char *s1, const char *s2) -{ - return ConvertCompareResult(CompareStringA( - LOCALE_USER_DEFAULT, NORM_IGNORECASE | SORT_STRINGSORT, s1, -1, s2, -1)); -} -#endif - -int MyStringCollateNoCase(const wchar_t *s1, const wchar_t *s2) -{ - int res = CompareStringW( - LOCALE_USER_DEFAULT, NORM_IGNORECASE | SORT_STRINGSORT, s1, -1, s2, -1); - #ifdef _UNICODE - return ConvertCompareResult(res); - #else - if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return ConvertCompareResult(res); - return MyStringCollateNoCase(UnicodeStringToMultiByte(s1), - UnicodeStringToMultiByte(s2)); - #endif -} -*/ - -#else - -wchar_t MyCharUpper(wchar_t c) -{ - return toupper(c); -} - -/* -int MyStringCollateNoCase(const wchar_t *s1, const wchar_t *s2) -{ - for (;;) - { - wchar_t c1 = *s1++; - wchar_t c2 = *s2++; - wchar_t u1 = MyCharUpper(c1); - wchar_t u2 = MyCharUpper(c2); - - if (u1 < u2) return -1; - if (u1 > u2) return 1; - if (u1 == 0) return 0; - } -} -*/ - -#endif - -int MyStringCompare(const char *s1, const char *s2) -{ - for (;;) - { - unsigned char c1 = (unsigned char)*s1++; - unsigned char c2 = (unsigned char)*s2++; - if (c1 < c2) return -1; - if (c1 > c2) return 1; - if (c1 == 0) return 0; - } -} - -int MyStringCompare(const wchar_t *s1, const wchar_t *s2) -{ - for (;;) - { - wchar_t c1 = *s1++; - wchar_t c2 = *s2++; - if (c1 < c2) return -1; - if (c1 > c2) return 1; - if (c1 == 0) return 0; - } -} - -int MyStringCompareNoCase(const wchar_t *s1, const wchar_t *s2) -{ - for (;;) - { - wchar_t c1 = *s1++; - wchar_t c2 = *s2++; - if (c1 != c2) - { - wchar_t u1 = MyCharUpper(c1); - wchar_t u2 = MyCharUpper(c2); - if (u1 < u2) return -1; - if (u1 > u2) return 1; - } - if (c1 == 0) return 0; - } -} - -/* -int MyStringCompareNoCase(const char *s1, const char *s2) -{ - return MyStringCompareNoCase(MultiByteToUnicodeString(s1), MultiByteToUnicodeString(s2)); -} -*/ diff --git a/modules/lib7z/LZMASDK/CPP/Common/MyString.h b/modules/lib7z/LZMASDK/CPP/Common/MyString.h deleted file mode 100644 index 3692fa51ae7e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/MyString.h +++ /dev/null @@ -1,629 +0,0 @@ -// Common/String.h - -#ifndef __COMMON_STRING_H -#define __COMMON_STRING_H - -#include - -#include "MyVector.h" - -#ifdef _WIN32 -#include "MyWindows.h" -#endif - -template -inline int MyStringLen(const T *s) -{ - int i; - for (i = 0; s[i] != '\0'; i++); - return i; -} - -template -inline T * MyStringCopy(T *dest, const T *src) -{ - T *destStart = dest; - while ((*dest++ = *src++) != 0); - return destStart; -} - -inline wchar_t* MyStringGetNextCharPointer(wchar_t *p) - { return (p + 1); } -inline const wchar_t* MyStringGetNextCharPointer(const wchar_t *p) - { return (p + 1); } -inline wchar_t* MyStringGetPrevCharPointer(const wchar_t *, wchar_t *p) - { return (p - 1); } -inline const wchar_t* MyStringGetPrevCharPointer(const wchar_t *, const wchar_t *p) - { return (p - 1); } - -#ifdef _WIN32 - -inline const char* MyStringGetNextCharPointer(const char *p) -{ - #ifdef UNDER_CE - return p + 1; - #else - return CharNextA(p); - #endif -} - -inline const char* MyStringGetPrevCharPointer(const char *base, const char *p) - { return CharPrevA(base, p); } - -inline char MyCharUpper(char c) - { return (char)(unsigned int)(UINT_PTR)CharUpperA((LPSTR)(UINT_PTR)(unsigned int)(unsigned char)c); } -#ifdef _UNICODE -inline wchar_t MyCharUpper(wchar_t c) - { return (wchar_t)(unsigned int)(UINT_PTR)CharUpperW((LPWSTR)(UINT_PTR)(unsigned int)c); } -#else -wchar_t MyCharUpper(wchar_t c); -#endif - -#ifdef _UNICODE -inline wchar_t MyCharLower(wchar_t c) - { return (wchar_t)(unsigned int)(UINT_PTR)CharLowerW((LPWSTR)(UINT_PTR)(unsigned int)c); } -#else -wchar_t MyCharLower(wchar_t c); -#endif - -inline char MyCharLower(char c) -#ifdef UNDER_CE - { return (char)MyCharLower((wchar_t)c); } -#else - { return (char)(unsigned int)(UINT_PTR)CharLowerA((LPSTR)(UINT_PTR)(unsigned int)(unsigned char)c); } -#endif - -inline char * MyStringUpper(char *s) { return CharUpperA(s); } -#ifdef _UNICODE -inline wchar_t * MyStringUpper(wchar_t *s) { return CharUpperW(s); } -#else -wchar_t * MyStringUpper(wchar_t *s); -#endif - -inline char * MyStringLower(char *s) { return CharLowerA(s); } -#ifdef _UNICODE -inline wchar_t * MyStringLower(wchar_t *s) { return CharLowerW(s); } -#else -wchar_t * MyStringLower(wchar_t *s); -#endif - -#else // Standard-C -wchar_t MyCharUpper(wchar_t c); -#endif - -////////////////////////////////////// -// Compare - -/* -#ifndef UNDER_CE -int MyStringCollate(const char *s1, const char *s2); -int MyStringCollateNoCase(const char *s1, const char *s2); -#endif -int MyStringCollate(const wchar_t *s1, const wchar_t *s2); -int MyStringCollateNoCase(const wchar_t *s1, const wchar_t *s2); -*/ - -int MyStringCompare(const char *s1, const char *s2); -int MyStringCompare(const wchar_t *s1, const wchar_t *s2); - -// int MyStringCompareNoCase(const char *s1, const char *s2); -int MyStringCompareNoCase(const wchar_t *s1, const wchar_t *s2); - -template -class CStringBase -{ - void TrimLeftWithCharSet(const CStringBase &charSet) - { - const T *p = _chars; - while (charSet.Find(*p) >= 0 && (*p != 0)) - p = GetNextCharPointer(p); - Delete(0, (int)(p - _chars)); - } - void TrimRightWithCharSet(const CStringBase &charSet) - { - const T *p = _chars; - const T *pLast = NULL; - while (*p != 0) - { - if (charSet.Find(*p) >= 0) - { - if (pLast == NULL) - pLast = p; - } - else - pLast = NULL; - p = GetNextCharPointer(p); - } - if (pLast != NULL) - { - int i = (int)(pLast - _chars); - Delete(i, _length - i); - } - - } - void MoveItems(int destIndex, int srcIndex) - { - memmove(_chars + destIndex, _chars + srcIndex, - sizeof(T) * (_length - srcIndex + 1)); - } - - void InsertSpace(int &index, int size) - { - CorrectIndex(index); - GrowLength(size); - MoveItems(index + size, index); - } - - static const T *GetNextCharPointer(const T *p) - { return MyStringGetNextCharPointer(p); } - static const T *GetPrevCharPointer(const T *base, const T *p) - { return MyStringGetPrevCharPointer(base, p); } -protected: - T *_chars; - int _length; - int _capacity; - - void SetCapacity(int newCapacity) - { - int realCapacity = newCapacity + 1; - if (realCapacity == _capacity) - return; - /* - const int kMaxStringSize = 0x20000000; - if (newCapacity > kMaxStringSize || newCapacity < _length) - throw 1052337; - */ - T *newBuffer = new T[realCapacity]; - if (_capacity > 0) - { - for (int i = 0; i < _length; i++) - newBuffer[i] = _chars[i]; - delete []_chars; - } - _chars = newBuffer; - _chars[_length] = 0; - _capacity = realCapacity; - } - - void GrowLength(int n) - { - int freeSize = _capacity - _length - 1; - if (n <= freeSize) - return; - int delta; - if (_capacity > 64) - delta = _capacity / 2; - else if (_capacity > 8) - delta = 16; - else - delta = 4; - if (freeSize + delta < n) - delta = n - freeSize; - SetCapacity(_capacity + delta); - } - - void CorrectIndex(int &index) const - { - if (index > _length) - index = _length; - } - -public: - CStringBase(): _chars(0), _length(0), _capacity(0) { SetCapacity(3); } - CStringBase(T c): _chars(0), _length(0), _capacity(0) - { - SetCapacity(1); - _chars[0] = c; - _chars[1] = 0; - _length = 1; - } - CStringBase(const T *chars): _chars(0), _length(0), _capacity(0) - { - int length = MyStringLen(chars); - SetCapacity(length); - MyStringCopy(_chars, chars); // can be optimized by memove() - _length = length; - } - CStringBase(const CStringBase &s): _chars(0), _length(0), _capacity(0) - { - SetCapacity(s._length); - MyStringCopy(_chars, s._chars); - _length = s._length; - } - ~CStringBase() { delete []_chars; } - - operator const T*() const { return _chars;} - - T Back() const { return _chars[_length - 1]; } - - // The minimum size of the character buffer in characters. - // This value does not include space for a null terminator. - T* GetBuffer(int minBufLength) - { - if (minBufLength >= _capacity) - SetCapacity(minBufLength); - return _chars; - } - void ReleaseBuffer() { ReleaseBuffer(MyStringLen(_chars)); } - void ReleaseBuffer(int newLength) - { - /* - if (newLength >= _capacity) - throw 282217; - */ - _chars[newLength] = 0; - _length = newLength; - } - - CStringBase& operator=(T c) - { - Empty(); - SetCapacity(1); - _chars[0] = c; - _chars[1] = 0; - _length = 1; - return *this; - } - CStringBase& operator=(const T *chars) - { - Empty(); - int length = MyStringLen(chars); - SetCapacity(length); - MyStringCopy(_chars, chars); - _length = length; - return *this; - } - CStringBase& operator=(const CStringBase& s) - { - if (&s == this) - return *this; - Empty(); - SetCapacity(s._length); - MyStringCopy(_chars, s._chars); - _length = s._length; - return *this; - } - - CStringBase& operator+=(T c) - { - GrowLength(1); - _chars[_length] = c; - _chars[++_length] = 0; - return *this; - } - CStringBase& operator+=(const T *s) - { - int len = MyStringLen(s); - GrowLength(len); - MyStringCopy(_chars + _length, s); - _length += len; - return *this; - } - CStringBase& operator+=(const CStringBase &s) - { - GrowLength(s._length); - MyStringCopy(_chars + _length, s._chars); - _length += s._length; - return *this; - } - void Empty() - { - _length = 0; - _chars[0] = 0; - } - int Length() const { return _length; } - bool IsEmpty() const { return (_length == 0); } - - CStringBase Mid(int startIndex) const - { return Mid(startIndex, _length - startIndex); } - CStringBase Mid(int startIndex, int count) const - { - if (startIndex + count > _length) - count = _length - startIndex; - - if (startIndex == 0 && startIndex + count == _length) - return *this; - - CStringBase result; - result.SetCapacity(count); - // MyStringNCopy(result._chars, _chars + startIndex, count); - for (int i = 0; i < count; i++) - result._chars[i] = _chars[startIndex + i]; - result._chars[count] = 0; - result._length = count; - return result; - } - CStringBase Left(int count) const - { return Mid(0, count); } - CStringBase Right(int count) const - { - if (count > _length) - count = _length; - return Mid(_length - count, count); - } - - void MakeUpper() - { MyStringUpper(_chars); } - void MakeLower() - { MyStringLower(_chars); } - - int Compare(const CStringBase& s) const - { return MyStringCompare(_chars, s._chars); } - - int Compare(const T *s) const - { return MyStringCompare(_chars, s); } - - int CompareNoCase(const CStringBase& s) const - { return MyStringCompareNoCase(_chars, s._chars); } - - int CompareNoCase(const T *s) const - { return MyStringCompareNoCase(_chars, s); } - - /* - int Collate(const CStringBase& s) const - { return MyStringCollate(_chars, s._chars); } - int CollateNoCase(const CStringBase& s) const - { return MyStringCollateNoCase(_chars, s._chars); } - */ - - int Find(T c) const { return Find(c, 0); } - int Find(T c, int startIndex) const - { - const T *p = _chars + startIndex; - for (;;) - { - if (*p == c) - return (int)(p - _chars); - if (*p == 0) - return -1; - p = GetNextCharPointer(p); - } - } - int Find(const CStringBase &s) const { return Find(s, 0); } - int Find(const CStringBase &s, int startIndex) const - { - if (s.IsEmpty()) - return startIndex; - for (; startIndex < _length; startIndex++) - { - int j; - for (j = 0; j < s._length && startIndex + j < _length; j++) - if (_chars[startIndex+j] != s._chars[j]) - break; - if (j == s._length) - return startIndex; - } - return -1; - } - int ReverseFind(T c) const - { - if (_length == 0) - return -1; - const T *p = _chars + _length - 1; - for (;;) - { - if (*p == c) - return (int)(p - _chars); - if (p == _chars) - return -1; - p = GetPrevCharPointer(_chars, p); - } - } - int FindOneOf(const CStringBase &s) const - { - for (int i = 0; i < _length; i++) - if (s.Find(_chars[i]) >= 0) - return i; - return -1; - } - - void TrimLeft(T c) - { - const T *p = _chars; - while (c == *p) - p = GetNextCharPointer(p); - Delete(0, p - _chars); - } - private: - CStringBase GetTrimDefaultCharSet() - { - CStringBase charSet; - charSet += (T)' '; - charSet += (T)'\n'; - charSet += (T)'\t'; - return charSet; - } - public: - - void TrimLeft() - { - TrimLeftWithCharSet(GetTrimDefaultCharSet()); - } - void TrimRight() - { - TrimRightWithCharSet(GetTrimDefaultCharSet()); - } - void TrimRight(T c) - { - const T *p = _chars; - const T *pLast = NULL; - while (*p != 0) - { - if (*p == c) - { - if (pLast == NULL) - pLast = p; - } - else - pLast = NULL; - p = GetNextCharPointer(p); - } - if (pLast != NULL) - { - int i = pLast - _chars; - Delete(i, _length - i); - } - } - void Trim() - { - TrimRight(); - TrimLeft(); - } - - int Insert(int index, T c) - { - InsertSpace(index, 1); - _chars[index] = c; - _length++; - return _length; - } - int Insert(int index, const CStringBase &s) - { - CorrectIndex(index); - if (s.IsEmpty()) - return _length; - int numInsertChars = s.Length(); - InsertSpace(index, numInsertChars); - for (int i = 0; i < numInsertChars; i++) - _chars[index + i] = s[i]; - _length += numInsertChars; - return _length; - } - - // !!!!!!!!!!!!!!! test it if newChar = '\0' - int Replace(T oldChar, T newChar) - { - if (oldChar == newChar) - return 0; - int number = 0; - int pos = 0; - while (pos < Length()) - { - pos = Find(oldChar, pos); - if (pos < 0) - break; - _chars[pos] = newChar; - pos++; - number++; - } - return number; - } - int Replace(const CStringBase &oldString, const CStringBase &newString) - { - if (oldString.IsEmpty()) - return 0; - if (oldString == newString) - return 0; - int oldStringLength = oldString.Length(); - int newStringLength = newString.Length(); - int number = 0; - int pos = 0; - while (pos < _length) - { - pos = Find(oldString, pos); - if (pos < 0) - break; - Delete(pos, oldStringLength); - Insert(pos, newString); - pos += newStringLength; - number++; - } - return number; - } - int Delete(int index, int count = 1) - { - if (index + count > _length) - count = _length - index; - if (count > 0) - { - MoveItems(index, index + count); - _length -= count; - } - return _length; - } - void DeleteBack() { Delete(_length - 1); } -}; - -template -CStringBase operator+(const CStringBase& s1, const CStringBase& s2) -{ - CStringBase result(s1); - result += s2; - return result; -} - -template -CStringBase operator+(const CStringBase& s, T c) -{ - CStringBase result(s); - result += c; - return result; -} - -template -CStringBase operator+(T c, const CStringBase& s) -{ - CStringBase result(c); - result += s; - return result; -} - -template -CStringBase operator+(const CStringBase& s, const T * chars) -{ - CStringBase result(s); - result += chars; - return result; -} - -template -CStringBase operator+(const T * chars, const CStringBase& s) -{ - CStringBase result(chars); - result += s; - return result; -} - -template -bool operator==(const CStringBase& s1, const CStringBase& s2) - { return (s1.Compare(s2) == 0); } - -template -bool operator<(const CStringBase& s1, const CStringBase& s2) - { return (s1.Compare(s2) < 0); } - -template -bool operator==(const T *s1, const CStringBase& s2) - { return (s2.Compare(s1) == 0); } - -template -bool operator==(const CStringBase& s1, const T *s2) - { return (s1.Compare(s2) == 0); } - -template -bool operator!=(const CStringBase& s1, const CStringBase& s2) - { return (s1.Compare(s2) != 0); } - -template -bool operator!=(const T *s1, const CStringBase& s2) - { return (s2.Compare(s1) != 0); } - -template -bool operator!=(const CStringBase& s1, const T *s2) - { return (s1.Compare(s2) != 0); } - -typedef CStringBase AString; -typedef CStringBase UString; - -typedef CObjectVector AStringVector; -typedef CObjectVector UStringVector; - -#ifdef _UNICODE - typedef UString CSysString; -#else - typedef AString CSysString; -#endif - -typedef CObjectVector CSysStringVector; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/MyUnknown.h b/modules/lib7z/LZMASDK/CPP/Common/MyUnknown.h deleted file mode 100644 index 79351246acd4..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/MyUnknown.h +++ /dev/null @@ -1,13 +0,0 @@ -// MyUnknown.h - -#ifndef __MY_UNKNOWN_H -#define __MY_UNKNOWN_H - -#ifdef _WIN32 -#include -#include -#else -#include "MyWindows.h" -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/MyVector.cpp b/modules/lib7z/LZMASDK/CPP/Common/MyVector.cpp deleted file mode 100644 index ac62028a9a7a..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/MyVector.cpp +++ /dev/null @@ -1,87 +0,0 @@ -// Common/MyVector.cpp - -#include "StdAfx.h" - -#include - -#include "MyVector.h" - -CBaseRecordVector::~CBaseRecordVector() { ClearAndFree(); } - -void CBaseRecordVector::ClearAndFree() -{ - Clear(); - delete []((unsigned char *)_items); - _capacity = 0; - _size = 0; - _items = 0; -} - -void CBaseRecordVector::Clear() { DeleteFrom(0); } -void CBaseRecordVector::DeleteBack() { Delete(_size - 1); } -void CBaseRecordVector::DeleteFrom(int index) { Delete(index, _size - index); } - -void CBaseRecordVector::ReserveOnePosition() -{ - if (_size != _capacity) - return; - int delta = 1; - if (_capacity >= 64) - delta = _capacity / 4; - else if (_capacity >= 8) - delta = 8; - Reserve(_capacity + delta); -} - -void CBaseRecordVector::Reserve(int newCapacity) -{ - // if (newCapacity <= _capacity) - if (newCapacity == _capacity) - return; - if ((unsigned)newCapacity >= ((unsigned)1 << (sizeof(unsigned) * 8 - 1))) - throw 1052353; - size_t newSize = (size_t)(unsigned)newCapacity * _itemSize; - if (newSize / _itemSize != (size_t)(unsigned)newCapacity) - throw 1052354; - unsigned char *p = NULL; - if (newSize > 0) - { - p = new unsigned char[newSize]; - if (p == 0) - throw 1052355; - int numRecordsToMove = (_size < newCapacity ? _size : newCapacity); - memcpy(p, _items, _itemSize * numRecordsToMove); - } - delete [](unsigned char *)_items; - _items = p; - _capacity = newCapacity; -} - -void CBaseRecordVector::ReserveDown() -{ - Reserve(_size); -} - -void CBaseRecordVector::MoveItems(int destIndex, int srcIndex) -{ - memmove(((unsigned char *)_items) + destIndex * _itemSize, - ((unsigned char *)_items) + srcIndex * _itemSize, - _itemSize * (_size - srcIndex)); -} - -void CBaseRecordVector::InsertOneItem(int index) -{ - ReserveOnePosition(); - MoveItems(index + 1, index); - _size++; -} - -void CBaseRecordVector::Delete(int index, int num) -{ - TestIndexAndCorrectNum(index, num); - if (num > 0) - { - MoveItems(index, index + num); - _size -= num; - } -} diff --git a/modules/lib7z/LZMASDK/CPP/Common/MyVector.h b/modules/lib7z/LZMASDK/CPP/Common/MyVector.h deleted file mode 100644 index 304178de331a..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/MyVector.h +++ /dev/null @@ -1,250 +0,0 @@ -// Common/Vector.h - -#ifndef __COMMON_VECTOR_H -#define __COMMON_VECTOR_H - -#include "Defs.h" - -class CBaseRecordVector -{ - void MoveItems(int destIndex, int srcIndex); -protected: - int _capacity; - int _size; - void *_items; - size_t _itemSize; - - void ReserveOnePosition(); - void InsertOneItem(int index); - void TestIndexAndCorrectNum(int index, int &num) const - { if (index + num > _size) num = _size - index; } -public: - CBaseRecordVector(size_t itemSize): _capacity(0), _size(0), _items(0), _itemSize(itemSize) {} - virtual ~CBaseRecordVector(); - void ClearAndFree(); - int Size() const { return _size; } - bool IsEmpty() const { return (_size == 0); } - void Reserve(int newCapacity); - void ReserveDown(); - virtual void Delete(int index, int num = 1); - void Clear(); - void DeleteFrom(int index); - void DeleteBack(); -}; - -template -class CRecordVector: public CBaseRecordVector -{ -public: - CRecordVector(): CBaseRecordVector(sizeof(T)){}; - CRecordVector(const CRecordVector &v): CBaseRecordVector(sizeof(T)) { *this = v; } - CRecordVector& operator=(const CRecordVector &v) - { - Clear(); - return (*this += v); - } - CRecordVector& operator+=(const CRecordVector &v) - { - int size = v.Size(); - Reserve(Size() + size); - for (int i = 0; i < size; i++) - Add(v[i]); - return *this; - } - int Add(T item) - { - ReserveOnePosition(); - ((T *)_items)[_size] = item; - return _size++; - } - void Insert(int index, T item) - { - InsertOneItem(index); - ((T *)_items)[index] = item; - } - // T* GetPointer() const { return (T*)_items; } - // operator const T *() const { return _items; }; - const T& operator[](int index) const { return ((T *)_items)[index]; } - T& operator[](int index) { return ((T *)_items)[index]; } - const T& Front() const { return operator[](0); } - T& Front() { return operator[](0); } - const T& Back() const { return operator[](_size - 1); } - T& Back() { return operator[](_size - 1); } - - void Swap(int i, int j) - { - T temp = operator[](i); - operator[](i) = operator[](j); - operator[](j) = temp; - } - - int FindInSorted(const T& item) const - { - int left = 0, right = Size(); - while (left != right) - { - int mid = (left + right) / 2; - const T& midValue = (*this)[mid]; - if (item == midValue) - return mid; - if (item < midValue) - right = mid; - else - left = mid + 1; - } - return -1; - } - - int AddToUniqueSorted(const T& item) - { - int left = 0, right = Size(); - while (left != right) - { - int mid = (left + right) / 2; - const T& midValue = (*this)[mid]; - if (item == midValue) - return mid; - if (item < midValue) - right = mid; - else - left = mid + 1; - } - Insert(right, item); - return right; - } - - static void SortRefDown(T* p, int k, int size, int (*compare)(const T*, const T*, void *), void *param) - { - T temp = p[k]; - for (;;) - { - int s = (k << 1); - if (s > size) - break; - if (s < size && compare(p + s + 1, p + s, param) > 0) - s++; - if (compare(&temp, p + s, param) >= 0) - break; - p[k] = p[s]; - k = s; - } - p[k] = temp; - } - - void Sort(int (*compare)(const T*, const T*, void *), void *param) - { - int size = _size; - if (size <= 1) - return; - T* p = (&Front()) - 1; - { - int i = size / 2; - do - SortRefDown(p, i, size, compare, param); - while (--i != 0); - } - do - { - T temp = p[size]; - p[size--] = p[1]; - p[1] = temp; - SortRefDown(p, 1, size, compare, param); - } - while (size > 1); - } -}; - -typedef CRecordVector CIntVector; -typedef CRecordVector CUIntVector; -typedef CRecordVector CBoolVector; -typedef CRecordVector CByteVector; -typedef CRecordVector CPointerVector; - -template -class CObjectVector: public CPointerVector -{ -public: - CObjectVector() {}; - ~CObjectVector() { Clear(); }; - CObjectVector(const CObjectVector &v) { *this = v; } - CObjectVector& operator=(const CObjectVector &v) - { - Clear(); - return (*this += v); - } - CObjectVector& operator+=(const CObjectVector &v) - { - int size = v.Size(); - Reserve(Size() + size); - for (int i = 0; i < size; i++) - Add(v[i]); - return *this; - } - const T& operator[](int index) const { return *((T *)CPointerVector::operator[](index)); } - T& operator[](int index) { return *((T *)CPointerVector::operator[](index)); } - T& Front() { return operator[](0); } - const T& Front() const { return operator[](0); } - T& Back() { return operator[](_size - 1); } - const T& Back() const { return operator[](_size - 1); } - int Add(const T& item) { return CPointerVector::Add(new T(item)); } - void Insert(int index, const T& item) { CPointerVector::Insert(index, new T(item)); } - virtual void Delete(int index, int num = 1) - { - TestIndexAndCorrectNum(index, num); - for (int i = 0; i < num; i++) - delete (T *)(((void **)_items)[index + i]); - CPointerVector::Delete(index, num); - } - int Find(const T& item) const - { - for (int i = 0; i < Size(); i++) - if (item == (*this)[i]) - return i; - return -1; - } - int FindInSorted(const T& item) const - { - int left = 0, right = Size(); - while (left != right) - { - int mid = (left + right) / 2; - const T& midValue = (*this)[mid]; - if (item == midValue) - return mid; - if (item < midValue) - right = mid; - else - left = mid + 1; - } - return -1; - } - int AddToSorted(const T& item) - { - int left = 0, right = Size(); - while (left != right) - { - int mid = (left + right) / 2; - const T& midValue = (*this)[mid]; - if (item == midValue) - { - right = mid + 1; - break; - } - if (item < midValue) - right = mid; - else - left = mid + 1; - } - Insert(right, item); - return right; - } - - void Sort(int (*compare)(void *const *, void *const *, void *), void *param) - { CPointerVector::Sort(compare, param); } - - static int CompareObjectItems(void *const *a1, void *const *a2, void * /* param */) - { return MyCompare(*(*((const T **)a1)), *(*((const T **)a2))); } - void Sort() { CPointerVector::Sort(CompareObjectItems, 0); } -}; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/MyWindows.h b/modules/lib7z/LZMASDK/CPP/Common/MyWindows.h deleted file mode 100644 index 0329ff70920d..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/MyWindows.h +++ /dev/null @@ -1,214 +0,0 @@ -// MyWindows.h - -#ifndef __MYWINDOWS_H -#define __MYWINDOWS_H - -#ifdef _WIN32 - -#include - -#define CHAR_PATH_SEPARATOR '\\' -#define WCHAR_PATH_SEPARATOR L'\\' -#define STRING_PATH_SEPARATOR "\\" -#define WSTRING_PATH_SEPARATOR L"\\" - -#else - -#define CHAR_PATH_SEPARATOR '/' -#define WCHAR_PATH_SEPARATOR L'/' -#define STRING_PATH_SEPARATOR "/" -#define WSTRING_PATH_SEPARATOR L"/" - -#include // for wchar_t -#include - -#include "MyGuidDef.h" - -typedef char CHAR; -typedef unsigned char UCHAR; - -#undef BYTE -typedef unsigned char BYTE; - -typedef short SHORT; -typedef unsigned short USHORT; - -#undef WORD -typedef unsigned short WORD; -typedef short VARIANT_BOOL; - -typedef int INT; -typedef Int32 INT32; -typedef unsigned int UINT; -typedef UInt32 UINT32; -typedef INT32 LONG; // LONG, ULONG and DWORD must be 32-bit -typedef UINT32 ULONG; - -#undef DWORD -typedef UINT32 DWORD; - -typedef Int64 LONGLONG; -typedef UInt64 ULONGLONG; - -typedef struct LARGE_INTEGER { LONGLONG QuadPart; }LARGE_INTEGER; -typedef struct _ULARGE_INTEGER { ULONGLONG QuadPart;} ULARGE_INTEGER; - -typedef const CHAR *LPCSTR; -typedef CHAR TCHAR; -typedef const TCHAR *LPCTSTR; -typedef wchar_t WCHAR; -typedef WCHAR OLECHAR; -typedef const WCHAR *LPCWSTR; -typedef OLECHAR *BSTR; -typedef const OLECHAR *LPCOLESTR; -typedef OLECHAR *LPOLESTR; - -typedef struct _FILETIME -{ - DWORD dwLowDateTime; - DWORD dwHighDateTime; -}FILETIME; - -#define HRESULT LONG -#define FAILED(Status) ((HRESULT)(Status)<0) -typedef ULONG PROPID; -typedef LONG SCODE; - -#define S_OK ((HRESULT)0x00000000L) -#define S_FALSE ((HRESULT)0x00000001L) -#define E_NOTIMPL ((HRESULT)0x80004001L) -#define E_NOINTERFACE ((HRESULT)0x80004002L) -#define E_ABORT ((HRESULT)0x80004004L) -#define E_FAIL ((HRESULT)0x80004005L) -#define STG_E_INVALIDFUNCTION ((HRESULT)0x80030001L) -#define E_OUTOFMEMORY ((HRESULT)0x8007000EL) -#define E_INVALIDARG ((HRESULT)0x80070057L) - -#ifdef _MSC_VER -#define STDMETHODCALLTYPE __stdcall -#else -#define STDMETHODCALLTYPE -#endif - -#define STDMETHOD_(t, f) virtual t STDMETHODCALLTYPE f -#define STDMETHOD(f) STDMETHOD_(HRESULT, f) -#define STDMETHODIMP_(type) type STDMETHODCALLTYPE -#define STDMETHODIMP STDMETHODIMP_(HRESULT) - -#define PURE = 0 - -#define MIDL_INTERFACE(x) struct - -#ifdef __cplusplus - -DEFINE_GUID(IID_IUnknown, -0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46); -struct IUnknown -{ - STDMETHOD(QueryInterface) (REFIID iid, void **outObject) PURE; - STDMETHOD_(ULONG, AddRef)() PURE; - STDMETHOD_(ULONG, Release)() PURE; - #ifndef _WIN32 - virtual ~IUnknown() {} - #endif -}; - -typedef IUnknown *LPUNKNOWN; - -#endif - -#define VARIANT_TRUE ((VARIANT_BOOL)-1) -#define VARIANT_FALSE ((VARIANT_BOOL)0) - -enum VARENUM -{ - VT_EMPTY = 0, - VT_NULL = 1, - VT_I2 = 2, - VT_I4 = 3, - VT_R4 = 4, - VT_R8 = 5, - VT_CY = 6, - VT_DATE = 7, - VT_BSTR = 8, - VT_DISPATCH = 9, - VT_ERROR = 10, - VT_BOOL = 11, - VT_VARIANT = 12, - VT_UNKNOWN = 13, - VT_DECIMAL = 14, - VT_I1 = 16, - VT_UI1 = 17, - VT_UI2 = 18, - VT_UI4 = 19, - VT_I8 = 20, - VT_UI8 = 21, - VT_INT = 22, - VT_UINT = 23, - VT_VOID = 24, - VT_HRESULT = 25, - VT_FILETIME = 64 -}; - -typedef unsigned short VARTYPE; -typedef WORD PROPVAR_PAD1; -typedef WORD PROPVAR_PAD2; -typedef WORD PROPVAR_PAD3; - -#ifdef __cplusplus - -typedef struct tagPROPVARIANT -{ - VARTYPE vt; - PROPVAR_PAD1 wReserved1; - PROPVAR_PAD2 wReserved2; - PROPVAR_PAD3 wReserved3; - union - { - CHAR cVal; - UCHAR bVal; - SHORT iVal; - USHORT uiVal; - LONG lVal; - ULONG ulVal; - INT intVal; - UINT uintVal; - LARGE_INTEGER hVal; - ULARGE_INTEGER uhVal; - VARIANT_BOOL boolVal; - SCODE scode; - FILETIME filetime; - BSTR bstrVal; - }; -} PROPVARIANT; - -typedef PROPVARIANT tagVARIANT; -typedef tagVARIANT VARIANT; -typedef VARIANT VARIANTARG; - -MY_EXTERN_C HRESULT VariantClear(VARIANTARG *prop); -MY_EXTERN_C HRESULT VariantCopy(VARIANTARG *dest, VARIANTARG *src); - -#endif - -MY_EXTERN_C BSTR SysAllocStringByteLen(LPCSTR psz, UINT len); -MY_EXTERN_C BSTR SysAllocString(const OLECHAR *sz); -MY_EXTERN_C void SysFreeString(BSTR bstr); -MY_EXTERN_C UINT SysStringByteLen(BSTR bstr); -MY_EXTERN_C UINT SysStringLen(BSTR bstr); - -MY_EXTERN_C DWORD GetLastError(); -MY_EXTERN_C LONG CompareFileTime(const FILETIME* ft1, const FILETIME* ft2); - -#define CP_ACP 0 -#define CP_OEMCP 1 - -typedef enum tagSTREAM_SEEK -{ - STREAM_SEEK_SET = 0, - STREAM_SEEK_CUR = 1, - STREAM_SEEK_END = 2 -} STREAM_SEEK; - -#endif -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/NewHandler.cpp b/modules/lib7z/LZMASDK/CPP/Common/NewHandler.cpp deleted file mode 100644 index 611bbd8f5960..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/NewHandler.cpp +++ /dev/null @@ -1,116 +0,0 @@ -// NewHandler.cpp - -#include "StdAfx.h" - -#include - -#include "NewHandler.h" - -// #define DEBUG_MEMORY_LEAK - -#ifndef DEBUG_MEMORY_LEAK - -#ifdef _WIN32 -void * -#ifdef _MSC_VER -__cdecl -#endif -operator new(size_t size) -{ - // void *p = ::HeapAlloc(::GetProcessHeap(), 0, size); - void *p = ::malloc(size); - if (p == 0) - throw CNewException(); - return p; -} - -void -#ifdef _MSC_VER -__cdecl -#endif -operator delete(void *p) throw() -{ - /* - if (p == 0) - return; - ::HeapFree(::GetProcessHeap(), 0, p); - */ - ::free(p); -} -#endif - -#else - -#pragma init_seg(lib) -const int kDebugSize = 1000000; -static void *a[kDebugSize]; -static int index = 0; - -static int numAllocs = 0; -void * __cdecl operator new(size_t size) -{ - numAllocs++; - void *p = HeapAlloc(GetProcessHeap(), 0, size); - if (index == 40) - { - int t = 1; - } - if (index < kDebugSize) - { - a[index] = p; - index++; - } - if (p == 0) - throw CNewException(); - printf("Alloc %6d, size = %8d\n", numAllocs, size); - return p; -} - -class CC -{ -public: - CC() - { - for (int i = 0; i < kDebugSize; i++) - a[i] = 0; - } - ~CC() - { - for (int i = 0; i < kDebugSize; i++) - if (a[i] != 0) - return; - } -} g_CC; - - -void __cdecl operator delete(void *p) -{ - if (p == 0) - return; - /* - for (int i = 0; i < index; i++) - if (a[i] == p) - a[i] = 0; - */ - HeapFree(GetProcessHeap(), 0, p); - numAllocs--; - printf("Free %d\n", numAllocs); -} - -#endif - -/* -int MemErrorVC(size_t) -{ - throw CNewException(); - // return 1; -} -CNewHandlerSetter::CNewHandlerSetter() -{ - // MemErrorOldVCFunction = _set_new_handler(MemErrorVC); -} -CNewHandlerSetter::~CNewHandlerSetter() -{ - // _set_new_handler(MemErrorOldVCFunction); -} -*/ diff --git a/modules/lib7z/LZMASDK/CPP/Common/NewHandler.h b/modules/lib7z/LZMASDK/CPP/Common/NewHandler.h deleted file mode 100644 index 6f710cda11f7..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/NewHandler.h +++ /dev/null @@ -1,16 +0,0 @@ -// Common/NewHandler.h - -#ifndef __COMMON_NEWHANDLER_H -#define __COMMON_NEWHANDLER_H - -class CNewException {}; - -#ifdef _WIN32 -void -#ifdef _MSC_VER -__cdecl -#endif -operator delete(void *p) throw(); -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/StdAfx.h b/modules/lib7z/LZMASDK/CPP/Common/StdAfx.h deleted file mode 100644 index 9b4357242c55..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -// #include "MyWindows.h" -#include "NewHandler.h" - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/StdInStream.cpp b/modules/lib7z/LZMASDK/CPP/Common/StdInStream.cpp deleted file mode 100644 index 442191ec5b74..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/StdInStream.cpp +++ /dev/null @@ -1,107 +0,0 @@ -// Common/StdInStream.cpp - -#include "StdAfx.h" - -#include - -#include "StdInStream.h" -#include "StringConvert.h" -#include "UTFConvert.h" - -#ifdef _MSC_VER -// "was declared deprecated" disabling -#pragma warning(disable : 4996 ) -#endif - -static const char kIllegalChar = '\0'; -static const char kNewLineChar = '\n'; - -static const char *kEOFMessage = "Unexpected end of input stream"; -static const char *kReadErrorMessage ="Error reading input stream"; -static const char *kIllegalCharMessage = "Illegal character in input stream"; - -static LPCTSTR kFileOpenMode = TEXT("r"); - -extern int g_CodePage; - -CStdInStream g_StdIn(stdin); - -bool CStdInStream::Open(LPCTSTR fileName) -{ - Close(); - _stream = _tfopen(fileName, kFileOpenMode); - _streamIsOpen = (_stream != 0); - return _streamIsOpen; -} - -bool CStdInStream::Close() -{ - if (!_streamIsOpen) - return true; - _streamIsOpen = (fclose(_stream) != 0); - return !_streamIsOpen; -} - -CStdInStream::~CStdInStream() -{ - Close(); -} - -AString CStdInStream::ScanStringUntilNewLine(bool allowEOF) -{ - AString s; - for (;;) - { - int intChar = GetChar(); - if (intChar == EOF) - { - if (allowEOF) - break; - throw kEOFMessage; - } - char c = char(intChar); - if (c == kIllegalChar) - throw kIllegalCharMessage; - if (c == kNewLineChar) - break; - s += c; - } - return s; -} - -UString CStdInStream::ScanUStringUntilNewLine() -{ - AString s = ScanStringUntilNewLine(true); - int codePage = g_CodePage; - if (codePage == -1) - codePage = CP_OEMCP; - UString dest; - if (codePage == CP_UTF8) - ConvertUTF8ToUnicode(s, dest); - else - dest = MultiByteToUnicodeString(s, (UINT)codePage); - return dest; -} - -void CStdInStream::ReadToString(AString &resultString) -{ - resultString.Empty(); - int c; - while ((c = GetChar()) != EOF) - resultString += char(c); -} - -bool CStdInStream::Eof() -{ - return (feof(_stream) != 0); -} - -int CStdInStream::GetChar() -{ - int c = fgetc(_stream); // getc() doesn't work in BeOS? - if (c == EOF && !Eof()) - throw kReadErrorMessage; - return c; -} - - diff --git a/modules/lib7z/LZMASDK/CPP/Common/StdInStream.h b/modules/lib7z/LZMASDK/CPP/Common/StdInStream.h deleted file mode 100644 index 67ef82bf3d28..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/StdInStream.h +++ /dev/null @@ -1,32 +0,0 @@ -// Common/StdInStream.h - -#ifndef __COMMON_STDINSTREAM_H -#define __COMMON_STDINSTREAM_H - -#include - -#include "MyString.h" -#include "Types.h" - -class CStdInStream -{ - bool _streamIsOpen; - FILE *_stream; -public: - CStdInStream(): _streamIsOpen(false) {}; - CStdInStream(FILE *stream): _streamIsOpen(false), _stream(stream) {}; - ~CStdInStream(); - bool Open(LPCTSTR fileName); - bool Close(); - - AString ScanStringUntilNewLine(bool allowEOF = false); - void ReadToString(AString &resultString); - UString ScanUStringUntilNewLine(); - - bool Eof(); - int GetChar(); -}; - -extern CStdInStream g_StdIn; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/StdOutStream.cpp b/modules/lib7z/LZMASDK/CPP/Common/StdOutStream.cpp deleted file mode 100644 index f7ec2a60ef1a..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/StdOutStream.cpp +++ /dev/null @@ -1,104 +0,0 @@ -// Common/StdOutStream.cpp - -#include "StdAfx.h" - -#include - -#include "IntToString.h" -#include "StdOutStream.h" -#include "StringConvert.h" -#include "UTFConvert.h" - -#ifdef _MSC_VER -// "was declared deprecated" disabling -#pragma warning(disable : 4996 ) -#endif - -static const char kNewLineChar = '\n'; - -static const char *kFileOpenMode = "wt"; - -extern int g_CodePage; - -CStdOutStream g_StdOut(stdout); -CStdOutStream g_StdErr(stderr); - -bool CStdOutStream::Open(const char *fileName) -{ - Close(); - _stream = fopen(fileName, kFileOpenMode); - _streamIsOpen = (_stream != 0); - return _streamIsOpen; -} - -bool CStdOutStream::Close() -{ - if (!_streamIsOpen) - return true; - if (fclose(_stream) != 0) - return false; - _stream = 0; - _streamIsOpen = false; - return true; -} - -bool CStdOutStream::Flush() -{ - return (fflush(_stream) == 0); -} - -CStdOutStream::~CStdOutStream () -{ - Close(); -} - -CStdOutStream & CStdOutStream::operator<<(CStdOutStream & (*aFunction)(CStdOutStream &)) -{ - (*aFunction)(*this); - return *this; -} - -CStdOutStream & endl(CStdOutStream & outStream) -{ - return outStream << kNewLineChar; -} - -CStdOutStream & CStdOutStream::operator<<(const char *s) -{ - fputs(s, _stream); - return *this; -} - -CStdOutStream & CStdOutStream::operator<<(const wchar_t *s) -{ - int codePage = g_CodePage; - if (codePage == -1) - codePage = CP_OEMCP; - AString dest; - if (codePage == CP_UTF8) - ConvertUnicodeToUTF8(s, dest); - else - dest = UnicodeStringToMultiByte(s, (UINT)codePage); - *this << (const char *)dest; - return *this; -} - -CStdOutStream & CStdOutStream::operator<<(char c) -{ - fputc(c, _stream); - return *this; -} - -CStdOutStream & CStdOutStream::operator<<(int number) -{ - char textString[32]; - ConvertInt64ToString(number, textString); - return operator<<(textString); -} - -CStdOutStream & CStdOutStream::operator<<(UInt64 number) -{ - char textString[32]; - ConvertUInt64ToString(number, textString); - return operator<<(textString); -} diff --git a/modules/lib7z/LZMASDK/CPP/Common/StdOutStream.h b/modules/lib7z/LZMASDK/CPP/Common/StdOutStream.h deleted file mode 100644 index c2fcd9d991b9..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/StdOutStream.h +++ /dev/null @@ -1,35 +0,0 @@ -// Common/StdOutStream.h - -#ifndef __COMMON_STDOUTSTREAM_H -#define __COMMON_STDOUTSTREAM_H - -#include - -#include "Types.h" - -class CStdOutStream -{ - bool _streamIsOpen; - FILE *_stream; -public: - CStdOutStream (): _streamIsOpen(false), _stream(0) {}; - CStdOutStream (FILE *stream): _streamIsOpen(false), _stream(stream) {}; - ~CStdOutStream (); - operator FILE *() { return _stream; } - bool Open(const char *fileName); - bool Close(); - bool Flush(); - CStdOutStream & operator<<(CStdOutStream & (* aFunction)(CStdOutStream &)); - CStdOutStream & operator<<(const char *string); - CStdOutStream & operator<<(const wchar_t *string); - CStdOutStream & operator<<(char c); - CStdOutStream & operator<<(int number); - CStdOutStream & operator<<(UInt64 number); -}; - -CStdOutStream & endl(CStdOutStream & outStream); - -extern CStdOutStream g_StdOut; -extern CStdOutStream g_StdErr; - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/StringConvert.cpp b/modules/lib7z/LZMASDK/CPP/Common/StringConvert.cpp deleted file mode 100644 index 7f9999cabb0f..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/StringConvert.cpp +++ /dev/null @@ -1,97 +0,0 @@ -// Common/StringConvert.cpp - -#include "StdAfx.h" - -#include "StringConvert.h" - -#ifndef _WIN32 -#include -#endif - -#ifdef _WIN32 -UString MultiByteToUnicodeString(const AString &srcString, UINT codePage) -{ - UString resultString; - if (!srcString.IsEmpty()) - { - int numChars = MultiByteToWideChar(codePage, 0, srcString, - srcString.Length(), resultString.GetBuffer(srcString.Length()), - srcString.Length() + 1); - if (numChars == 0) - throw 282228; - resultString.ReleaseBuffer(numChars); - } - return resultString; -} - -AString UnicodeStringToMultiByte(const UString &s, UINT codePage, char defaultChar, bool &defaultCharWasUsed) -{ - AString dest; - defaultCharWasUsed = false; - if (!s.IsEmpty()) - { - int numRequiredBytes = s.Length() * 2; - BOOL defUsed; - int numChars = WideCharToMultiByte(codePage, 0, s, s.Length(), - dest.GetBuffer(numRequiredBytes), numRequiredBytes + 1, - &defaultChar, &defUsed); - defaultCharWasUsed = (defUsed != FALSE); - if (numChars == 0) - throw 282229; - dest.ReleaseBuffer(numChars); - } - return dest; -} - -AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage) -{ - bool defaultCharWasUsed; - return UnicodeStringToMultiByte(srcString, codePage, '_', defaultCharWasUsed); -} - -#ifndef UNDER_CE -AString SystemStringToOemString(const CSysString &srcString) -{ - AString result; - CharToOem(srcString, result.GetBuffer(srcString.Length() * 2)); - result.ReleaseBuffer(); - return result; -} -#endif - -#else - -UString MultiByteToUnicodeString(const AString &srcString, UINT codePage) -{ - UString resultString; - for (int i = 0; i < srcString.Length(); i++) - resultString += wchar_t(srcString[i]); - /* - if (!srcString.IsEmpty()) - { - int numChars = mbstowcs(resultString.GetBuffer(srcString.Length()), srcString, srcString.Length() + 1); - if (numChars < 0) throw "Your environment does not support UNICODE"; - resultString.ReleaseBuffer(numChars); - } - */ - return resultString; -} - -AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage) -{ - AString resultString; - for (int i = 0; i < srcString.Length(); i++) - resultString += char(srcString[i]); - /* - if (!srcString.IsEmpty()) - { - int numRequiredBytes = srcString.Length() * 6 + 1; - int numChars = wcstombs(resultString.GetBuffer(numRequiredBytes), srcString, numRequiredBytes); - if (numChars < 0) throw "Your environment does not support UNICODE"; - resultString.ReleaseBuffer(numChars); - } - */ - return resultString; -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/StringConvert.h b/modules/lib7z/LZMASDK/CPP/Common/StringConvert.h deleted file mode 100644 index 1c7a9510723b..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/StringConvert.h +++ /dev/null @@ -1,73 +0,0 @@ -// Common/StringConvert.h - -#ifndef __COMMON_STRING_CONVERT_H -#define __COMMON_STRING_CONVERT_H - -#include "MyWindows.h" -#include "MyString.h" -#include "Types.h" - -UString MultiByteToUnicodeString(const AString &srcString, UINT codePage = CP_ACP); -AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage, char defaultChar, bool &defaultCharWasUsed); -AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage = CP_ACP); - - -inline const wchar_t* GetUnicodeString(const wchar_t* unicodeString) - { return unicodeString; } -inline const UString& GetUnicodeString(const UString &unicodeString) - { return unicodeString; } -inline UString GetUnicodeString(const AString &ansiString) - { return MultiByteToUnicodeString(ansiString); } -inline UString GetUnicodeString(const AString &multiByteString, UINT codePage) - { return MultiByteToUnicodeString(multiByteString, codePage); } -inline const wchar_t* GetUnicodeString(const wchar_t* unicodeString, UINT) - { return unicodeString; } -inline const UString& GetUnicodeString(const UString &unicodeString, UINT) - { return unicodeString; } - -inline const char* GetAnsiString(const char* ansiString) - { return ansiString; } -inline const AString& GetAnsiString(const AString &ansiString) - { return ansiString; } -inline AString GetAnsiString(const UString &unicodeString) - { return UnicodeStringToMultiByte(unicodeString); } - -inline const char* GetOemString(const char* oemString) - { return oemString; } -inline const AString& GetOemString(const AString &oemString) - { return oemString; } -inline AString GetOemString(const UString &unicodeString) - { return UnicodeStringToMultiByte(unicodeString, CP_OEMCP); } - - -#ifdef _UNICODE - inline const wchar_t* GetSystemString(const wchar_t* unicodeString) - { return unicodeString;} - inline const UString& GetSystemString(const UString &unicodeString) - { return unicodeString;} - inline const wchar_t* GetSystemString(const wchar_t* unicodeString, UINT /* codePage */) - { return unicodeString;} - inline const UString& GetSystemString(const UString &unicodeString, UINT /* codePage */) - { return unicodeString;} - inline UString GetSystemString(const AString &multiByteString, UINT codePage) - { return MultiByteToUnicodeString(multiByteString, codePage);} - inline UString GetSystemString(const AString &multiByteString) - { return MultiByteToUnicodeString(multiByteString);} -#else - inline const char* GetSystemString(const char *ansiString) - { return ansiString; } - inline const AString& GetSystemString(const AString &multiByteString, UINT) - { return multiByteString; } - inline const char * GetSystemString(const char *multiByteString, UINT) - { return multiByteString; } - inline AString GetSystemString(const UString &unicodeString) - { return UnicodeStringToMultiByte(unicodeString); } - inline AString GetSystemString(const UString &unicodeString, UINT codePage) - { return UnicodeStringToMultiByte(unicodeString, codePage); } -#endif - -#ifndef UNDER_CE -AString SystemStringToOemString(const CSysString &srcString); -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/StringToInt.cpp b/modules/lib7z/LZMASDK/CPP/Common/StringToInt.cpp deleted file mode 100644 index 77ce7c50b75a..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/StringToInt.cpp +++ /dev/null @@ -1,90 +0,0 @@ -// Common/StringToInt.cpp - -#include "StdAfx.h" - -#include "StringToInt.h" - -UInt64 ConvertStringToUInt64(const char *s, const char **end) -{ - UInt64 result = 0; - for (;;) - { - char c = *s; - if (c < '0' || c > '9') - { - if (end != NULL) - *end = s; - return result; - } - result *= 10; - result += (c - '0'); - s++; - } -} - -UInt64 ConvertOctStringToUInt64(const char *s, const char **end) -{ - UInt64 result = 0; - for (;;) - { - char c = *s; - if (c < '0' || c > '7') - { - if (end != NULL) - *end = s; - return result; - } - result <<= 3; - result += (c - '0'); - s++; - } -} - -UInt64 ConvertHexStringToUInt64(const char *s, const char **end) -{ - UInt64 result = 0; - for (;;) - { - char c = *s; - UInt32 v; - if (c >= '0' && c <= '9') v = (c - '0'); - else if (c >= 'A' && c <= 'F') v = 10 + (c - 'A'); - else if (c >= 'a' && c <= 'f') v = 10 + (c - 'a'); - else - { - if (end != NULL) - *end = s; - return result; - } - result <<= 4; - result |= v; - s++; - } -} - - -UInt64 ConvertStringToUInt64(const wchar_t *s, const wchar_t **end) -{ - UInt64 result = 0; - for (;;) - { - wchar_t c = *s; - if (c < '0' || c > '9') - { - if (end != NULL) - *end = s; - return result; - } - result *= 10; - result += (c - '0'); - s++; - } -} - - -Int64 ConvertStringToInt64(const char *s, const char **end) -{ - if (*s == '-') - return -(Int64)ConvertStringToUInt64(s + 1, end); - return ConvertStringToUInt64(s, end); -} diff --git a/modules/lib7z/LZMASDK/CPP/Common/StringToInt.h b/modules/lib7z/LZMASDK/CPP/Common/StringToInt.h deleted file mode 100644 index 16a1a4fc8d14..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/StringToInt.h +++ /dev/null @@ -1,18 +0,0 @@ -// Common/StringToInt.h - -#ifndef __COMMON_STRINGTOINT_H -#define __COMMON_STRINGTOINT_H - -#include -#include "Types.h" - -UInt64 ConvertStringToUInt64(const char *s, const char **end); -UInt64 ConvertOctStringToUInt64(const char *s, const char **end); -UInt64 ConvertHexStringToUInt64(const char *s, const char **end); -UInt64 ConvertStringToUInt64(const wchar_t *s, const wchar_t **end); - -Int64 ConvertStringToInt64(const char *s, const char **end); - -#endif - - diff --git a/modules/lib7z/LZMASDK/CPP/Common/Types.h b/modules/lib7z/LZMASDK/CPP/Common/Types.h deleted file mode 100644 index fd00237a1519..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/Types.h +++ /dev/null @@ -1,11 +0,0 @@ -// Common/Types.h - -#ifndef __COMMON_TYPES_H -#define __COMMON_TYPES_H - -#include "../../C/Types.h" - -typedef int HRes; - -#endif - diff --git a/modules/lib7z/LZMASDK/CPP/Common/UTFConvert.cpp b/modules/lib7z/LZMASDK/CPP/Common/UTFConvert.cpp deleted file mode 100644 index dae8f551b361..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/UTFConvert.cpp +++ /dev/null @@ -1,145 +0,0 @@ -// UTFConvert.cpp - -#include "StdAfx.h" - -#include "UTFConvert.h" -#include "Types.h" - -static const Byte kUtf8Limits[5] = { 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; - -static Bool Utf8_To_Utf16(wchar_t *dest, size_t *destLen, const char *src, size_t srcLen) -{ - size_t destPos = 0, srcPos = 0; - for (;;) - { - Byte c; - int numAdds; - if (srcPos == srcLen) - { - *destLen = destPos; - return True; - } - c = (Byte)src[srcPos++]; - - if (c < 0x80) - { - if (dest) - dest[destPos] = (wchar_t)c; - destPos++; - continue; - } - if (c < 0xC0) - break; - for (numAdds = 1; numAdds < 5; numAdds++) - if (c < kUtf8Limits[numAdds]) - break; - UInt32 value = (c - kUtf8Limits[numAdds - 1]); - - do - { - Byte c2; - if (srcPos == srcLen) - break; - c2 = (Byte)src[srcPos++]; - if (c2 < 0x80 || c2 >= 0xC0) - break; - value <<= 6; - value |= (c2 - 0x80); - } - while (--numAdds != 0); - - if (value < 0x10000) - { - if (dest) - dest[destPos] = (wchar_t)value; - destPos++; - } - else - { - value -= 0x10000; - if (value >= 0x100000) - break; - if (dest) - { - dest[destPos + 0] = (wchar_t)(0xD800 + (value >> 10)); - dest[destPos + 1] = (wchar_t)(0xDC00 + (value & 0x3FF)); - } - destPos += 2; - } - } - *destLen = destPos; - return False; -} - -static Bool Utf16_To_Utf8(char *dest, size_t *destLen, const wchar_t *src, size_t srcLen) -{ - size_t destPos = 0, srcPos = 0; - for (;;) - { - unsigned numAdds; - UInt32 value; - if (srcPos == srcLen) - { - *destLen = destPos; - return True; - } - value = src[srcPos++]; - if (value < 0x80) - { - if (dest) - dest[destPos] = (char)value; - destPos++; - continue; - } - if (value >= 0xD800 && value < 0xE000) - { - UInt32 c2; - if (value >= 0xDC00 || srcPos == srcLen) - break; - c2 = src[srcPos++]; - if (c2 < 0xDC00 || c2 >= 0xE000) - break; - value = ((value - 0xD800) << 10) | (c2 - 0xDC00); - } - for (numAdds = 1; numAdds < 5; numAdds++) - if (value < (((UInt32)1) << (numAdds * 5 + 6))) - break; - if (dest) - dest[destPos] = (char)(kUtf8Limits[numAdds - 1] + (value >> (6 * numAdds))); - destPos++; - do - { - numAdds--; - if (dest) - dest[destPos] = (char)(0x80 + ((value >> (6 * numAdds)) & 0x3F)); - destPos++; - } - while (numAdds != 0); - } - *destLen = destPos; - return False; -} - -bool ConvertUTF8ToUnicode(const AString &src, UString &dest) -{ - dest.Empty(); - size_t destLen = 0; - Utf8_To_Utf16(NULL, &destLen, src, src.Length()); - wchar_t *p = dest.GetBuffer((int)destLen); - Bool res = Utf8_To_Utf16(p, &destLen, src, src.Length()); - p[destLen] = 0; - dest.ReleaseBuffer(); - return res ? true : false; -} - -bool ConvertUnicodeToUTF8(const UString &src, AString &dest) -{ - dest.Empty(); - size_t destLen = 0; - Utf16_To_Utf8(NULL, &destLen, src, src.Length()); - char *p = dest.GetBuffer((int)destLen); - Bool res = Utf16_To_Utf8(p, &destLen, src, src.Length()); - p[destLen] = 0; - dest.ReleaseBuffer(); - return res ? true : false; -} diff --git a/modules/lib7z/LZMASDK/CPP/Common/UTFConvert.h b/modules/lib7z/LZMASDK/CPP/Common/UTFConvert.h deleted file mode 100644 index d55310144ddb..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/UTFConvert.h +++ /dev/null @@ -1,11 +0,0 @@ -// Common/UTFConvert.h - -#ifndef __COMMON_UTFCONVERT_H -#define __COMMON_UTFCONVERT_H - -#include "MyString.h" - -bool ConvertUTF8ToUnicode(const AString &utfString, UString &resultString); -bool ConvertUnicodeToUTF8(const UString &unicodeString, AString &resultString); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Common/Wildcard.cpp b/modules/lib7z/LZMASDK/CPP/Common/Wildcard.cpp deleted file mode 100644 index b4a86cadbcd0..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/Wildcard.cpp +++ /dev/null @@ -1,458 +0,0 @@ -// Common/Wildcard.cpp - -#include "StdAfx.h" - -#include "Wildcard.h" - -bool g_CaseSensitive = - #ifdef _WIN32 - false; - #else - true; - #endif - -static const wchar_t kAnyCharsChar = L'*'; -static const wchar_t kAnyCharChar = L'?'; - -#ifdef _WIN32 -static const wchar_t kDirDelimiter1 = L'\\'; -#endif -static const wchar_t kDirDelimiter2 = L'/'; - -static const UString kWildCardCharSet = L"?*"; - -static const UString kIllegalWildCardFileNameChars= - L"\x1\x2\x3\x4\x5\x6\x7\x8\x9\xA\xB\xC\xD\xE\xF" - L"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F" - L"\"/:<>\\|"; - - -static inline bool IsCharDirLimiter(wchar_t c) -{ - return ( - #ifdef _WIN32 - c == kDirDelimiter1 || - #endif - c == kDirDelimiter2); -} - -int CompareFileNames(const UString &s1, const UString &s2) -{ - if (g_CaseSensitive) - return s1.Compare(s2); - return s1.CompareNoCase(s2); -} - -// ----------------------------------------- -// this function compares name with mask -// ? - any char -// * - any char or empty - -static bool EnhancedMaskTest(const wchar_t *mask, const wchar_t *name) -{ - for (;;) - { - wchar_t m = *mask; - wchar_t c = *name; - if (m == 0) - return (c == 0); - if (m == kAnyCharsChar) - { - if (EnhancedMaskTest(mask + 1, name)) - return true; - if (c == 0) - return false; - } - else - { - if (m == kAnyCharChar) - { - if (c == 0) - return false; - } - else if (m != c) - if (g_CaseSensitive || MyCharUpper(m) != MyCharUpper(c)) - return false; - mask++; - } - name++; - } -} - -// -------------------------------------------------- -// Splits path to strings - -void SplitPathToParts(const UString &path, UStringVector &pathParts) -{ - pathParts.Clear(); - UString name; - int len = path.Length(); - if (len == 0) - return; - for (int i = 0; i < len; i++) - { - wchar_t c = path[i]; - if (IsCharDirLimiter(c)) - { - pathParts.Add(name); - name.Empty(); - } - else - name += c; - } - pathParts.Add(name); -} - -void SplitPathToParts(const UString &path, UString &dirPrefix, UString &name) -{ - int i; - for (i = path.Length() - 1; i >= 0; i--) - if (IsCharDirLimiter(path[i])) - break; - dirPrefix = path.Left(i + 1); - name = path.Mid(i + 1); -} - -UString ExtractDirPrefixFromPath(const UString &path) -{ - int i; - for (i = path.Length() - 1; i >= 0; i--) - if (IsCharDirLimiter(path[i])) - break; - return path.Left(i + 1); -} - -UString ExtractFileNameFromPath(const UString &path) -{ - int i; - for (i = path.Length() - 1; i >= 0; i--) - if (IsCharDirLimiter(path[i])) - break; - return path.Mid(i + 1); -} - - -bool CompareWildCardWithName(const UString &mask, const UString &name) -{ - return EnhancedMaskTest(mask, name); -} - -bool DoesNameContainWildCard(const UString &path) -{ - return (path.FindOneOf(kWildCardCharSet) >= 0); -} - - -// ----------------------------------------------------------' -// NWildcard - -namespace NWildcard { - - -/* -M = MaskParts.Size(); -N = TestNameParts.Size(); - - File Dir -ForFile req M<=N [N-M, N) - - nonreq M=N [0, M) - - -ForDir req M 1) - return true; - } - return false; -} - -bool CCensorNode::AreThereIncludeItems() const -{ - if (IncludeItems.Size() > 0) - return true; - for (int i = 0; i < SubNodes.Size(); i++) - if (SubNodes[i].AreThereIncludeItems()) - return true; - return false; -} - -bool CCensorNode::CheckPathCurrent(bool include, const UStringVector &pathParts, bool isFile) const -{ - const CObjectVector &items = include ? IncludeItems : ExcludeItems; - for (int i = 0; i < items.Size(); i++) - if (items[i].CheckPath(pathParts, isFile)) - return true; - return false; -} - -bool CCensorNode::CheckPath(UStringVector &pathParts, bool isFile, bool &include) const -{ - if (CheckPathCurrent(false, pathParts, isFile)) - { - include = false; - return true; - } - include = true; - bool finded = CheckPathCurrent(true, pathParts, isFile); - if (pathParts.Size() == 1) - return finded; - int index = FindSubNode(pathParts.Front()); - if (index >= 0) - { - UStringVector pathParts2 = pathParts; - pathParts2.Delete(0); - if (SubNodes[index].CheckPath(pathParts2, isFile, include)) - return true; - } - return finded; -} - -bool CCensorNode::CheckPath(const UString &path, bool isFile, bool &include) const -{ - UStringVector pathParts; - SplitPathToParts(path, pathParts); - return CheckPath(pathParts, isFile, include); -} - -bool CCensorNode::CheckPath(const UString &path, bool isFile) const -{ - bool include; - if (CheckPath(path, isFile, include)) - return include; - return false; -} - -bool CCensorNode::CheckPathToRoot(bool include, UStringVector &pathParts, bool isFile) const -{ - if (CheckPathCurrent(include, pathParts, isFile)) - return true; - if (Parent == 0) - return false; - pathParts.Insert(0, Name); - return Parent->CheckPathToRoot(include, pathParts, isFile); -} - -/* -bool CCensorNode::CheckPathToRoot(bool include, const UString &path, bool isFile) const -{ - UStringVector pathParts; - SplitPathToParts(path, pathParts); - return CheckPathToRoot(include, pathParts, isFile); -} -*/ - -void CCensorNode::AddItem2(bool include, const UString &path, bool recursive) -{ - if (path.IsEmpty()) - return; - bool forFile = true; - bool forFolder = true; - UString path2 = path; - if (IsCharDirLimiter(path[path.Length() - 1])) - { - path2.Delete(path.Length() - 1); - forFile = false; - } - AddItem(include, path2, recursive, forFile, forFolder); -} - -void CCensorNode::ExtendExclude(const CCensorNode &fromNodes) -{ - ExcludeItems += fromNodes.ExcludeItems; - for (int i = 0; i < fromNodes.SubNodes.Size(); i++) - { - const CCensorNode &node = fromNodes.SubNodes[i]; - int subNodeIndex = FindSubNode(node.Name); - if (subNodeIndex < 0) - subNodeIndex = SubNodes.Add(CCensorNode(node.Name, this)); - SubNodes[subNodeIndex].ExtendExclude(node); - } -} - -int CCensor::FindPrefix(const UString &prefix) const -{ - for (int i = 0; i < Pairs.Size(); i++) - if (CompareFileNames(Pairs[i].Prefix, prefix) == 0) - return i; - return -1; -} - -void CCensor::AddItem(bool include, const UString &path, bool recursive) -{ - UStringVector pathParts; - SplitPathToParts(path, pathParts); - bool forFile = true; - if (pathParts.Back().IsEmpty()) - { - forFile = false; - pathParts.DeleteBack(); - } - const UString &front = pathParts.Front(); - bool isAbs = false; - if (front.IsEmpty()) - isAbs = true; - else if (front.Length() == 2 && front[1] == L':') - isAbs = true; - else - { - for (int i = 0; i < pathParts.Size(); i++) - { - const UString &part = pathParts[i]; - if (part == L".." || part == L".") - { - isAbs = true; - break; - } - } - } - int numAbsParts = 0; - if (isAbs) - if (pathParts.Size() > 1) - numAbsParts = pathParts.Size() - 1; - else - numAbsParts = 1; - UString prefix; - for (int i = 0; i < numAbsParts; i++) - { - const UString &front = pathParts.Front(); - if (DoesNameContainWildCard(front)) - break; - prefix += front; - prefix += WCHAR_PATH_SEPARATOR; - pathParts.Delete(0); - } - int index = FindPrefix(prefix); - if (index < 0) - index = Pairs.Add(CPair(prefix)); - - CItem item; - item.PathParts = pathParts; - item.ForDir = true; - item.ForFile = forFile; - item.Recursive = recursive; - Pairs[index].Head.AddItem(include, item); -} - -bool CCensor::CheckPath(const UString &path, bool isFile) const -{ - bool finded = false; - for (int i = 0; i < Pairs.Size(); i++) - { - bool include; - if (Pairs[i].Head.CheckPath(path, isFile, include)) - { - if (!include) - return false; - finded = true; - } - } - return finded; -} - -void CCensor::ExtendExclude() -{ - int i; - for (i = 0; i < Pairs.Size(); i++) - if (Pairs[i].Prefix.IsEmpty()) - break; - if (i == Pairs.Size()) - return; - int index = i; - for (i = 0; i < Pairs.Size(); i++) - if (index != i) - Pairs[i].Head.ExtendExclude(Pairs[index].Head); -} - -} diff --git a/modules/lib7z/LZMASDK/CPP/Common/Wildcard.h b/modules/lib7z/LZMASDK/CPP/Common/Wildcard.h deleted file mode 100644 index e2a42c831503..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Common/Wildcard.h +++ /dev/null @@ -1,80 +0,0 @@ -// Common/Wildcard.h - -#ifndef __COMMON_WILDCARD_H -#define __COMMON_WILDCARD_H - -#include "MyString.h" - -int CompareFileNames(const UString &s1, const UString &s2); - -void SplitPathToParts(const UString &path, UStringVector &pathParts); -void SplitPathToParts(const UString &path, UString &dirPrefix, UString &name); -UString ExtractDirPrefixFromPath(const UString &path); -UString ExtractFileNameFromPath(const UString &path); -bool DoesNameContainWildCard(const UString &path); -bool CompareWildCardWithName(const UString &mask, const UString &name); - -namespace NWildcard { - -struct CItem -{ - UStringVector PathParts; - bool Recursive; - bool ForFile; - bool ForDir; - bool CheckPath(const UStringVector &pathParts, bool isFile) const; -}; - -class CCensorNode -{ - CCensorNode *Parent; - bool CheckPathCurrent(bool include, const UStringVector &pathParts, bool isFile) const; - void AddItemSimple(bool include, CItem &item); - bool CheckPath(UStringVector &pathParts, bool isFile, bool &include) const; -public: - CCensorNode(): Parent(0) { }; - CCensorNode(const UString &name, CCensorNode *parent): Name(name), Parent(parent) { }; - UString Name; - CObjectVector SubNodes; - CObjectVector IncludeItems; - CObjectVector ExcludeItems; - - int FindSubNode(const UString &path) const; - - void AddItem(bool include, CItem &item); - void AddItem(bool include, const UString &path, bool recursive, bool forFile, bool forDir); - void AddItem2(bool include, const UString &path, bool recursive); - - bool NeedCheckSubDirs() const; - bool AreThereIncludeItems() const; - - bool CheckPath(const UString &path, bool isFile, bool &include) const; - bool CheckPath(const UString &path, bool isFile) const; - - bool CheckPathToRoot(bool include, UStringVector &pathParts, bool isFile) const; - // bool CheckPathToRoot(const UString &path, bool isFile, bool include) const; - void ExtendExclude(const CCensorNode &fromNodes); -}; - -struct CPair -{ - UString Prefix; - CCensorNode Head; - CPair(const UString &prefix): Prefix(prefix) { }; -}; - -class CCensor -{ - int FindPrefix(const UString &prefix) const; -public: - CObjectVector Pairs; - bool AllAreRelative() const - { return (Pairs.Size() == 1 && Pairs.Front().Prefix.IsEmpty()); } - void AddItem(bool include, const UString &path, bool recursive); - bool CheckPath(const UString &path, bool isFile) const; - void ExtendExclude(); -}; - -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/DLL.cpp b/modules/lib7z/LZMASDK/CPP/Windows/DLL.cpp deleted file mode 100644 index 6aaedb03536a..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/DLL.cpp +++ /dev/null @@ -1,110 +0,0 @@ -// Windows/DLL.cpp - -#include "StdAfx.h" - -#ifndef _UNICODE -#include "../Common/StringConvert.h" -#endif - -#include "DLL.h" - -#ifndef _UNICODE -extern bool g_IsNT; -#endif - -namespace NWindows { -namespace NDLL { - -bool CLibrary::Free() -{ - if (_module == 0) - return true; - // MessageBox(0, TEXT(""), TEXT("Free"), 0); - // Sleep(5000); - if (!::FreeLibrary(_module)) - return false; - _module = 0; - return true; -} - -bool CLibrary::LoadOperations(HMODULE newModule) -{ - if (newModule == NULL) - return false; - if (!Free()) - return false; - _module = newModule; - return true; -} - -bool CLibrary::LoadEx(LPCTSTR fileName, DWORD flags) -{ - // MessageBox(0, fileName, TEXT("LoadEx"), 0); - return LoadOperations(::LoadLibraryEx(fileName, NULL, flags)); -} - -bool CLibrary::Load(LPCTSTR fileName) -{ - // MessageBox(0, fileName, TEXT("Load"), 0); - // Sleep(5000); - // OutputDebugString(fileName); - // OutputDebugString(TEXT("\n")); - return LoadOperations(::LoadLibrary(fileName)); -} - -#ifndef _UNICODE -static inline UINT GetCurrentCodePage() { return ::AreFileApisANSI() ? CP_ACP : CP_OEMCP; } -CSysString GetSysPath(LPCWSTR sysPath) - { return UnicodeStringToMultiByte(sysPath, GetCurrentCodePage()); } - -bool CLibrary::LoadEx(LPCWSTR fileName, DWORD flags) -{ - if (g_IsNT) - return LoadOperations(::LoadLibraryExW(fileName, NULL, flags)); - return LoadEx(GetSysPath(fileName), flags); -} -bool CLibrary::Load(LPCWSTR fileName) -{ - if (g_IsNT) - return LoadOperations(::LoadLibraryW(fileName)); - return Load(GetSysPath(fileName)); -} -#endif - -bool MyGetModuleFileName(HMODULE hModule, CSysString &result) -{ - result.Empty(); - TCHAR fullPath[MAX_PATH + 2]; - DWORD size = ::GetModuleFileName(hModule, fullPath, MAX_PATH + 1); - if (size <= MAX_PATH && size != 0) - { - result = fullPath; - return true; - } - return false; -} - -#ifndef _UNICODE -bool MyGetModuleFileName(HMODULE hModule, UString &result) -{ - result.Empty(); - if (g_IsNT) - { - wchar_t fullPath[MAX_PATH + 2]; - DWORD size = ::GetModuleFileNameW(hModule, fullPath, MAX_PATH + 1); - if (size <= MAX_PATH && size != 0) - { - result = fullPath; - return true; - } - return false; - } - CSysString resultSys; - if (!MyGetModuleFileName(hModule, resultSys)) - return false; - result = MultiByteToUnicodeString(resultSys, GetCurrentCodePage()); - return true; -} -#endif - -}} diff --git a/modules/lib7z/LZMASDK/CPP/Windows/DLL.h b/modules/lib7z/LZMASDK/CPP/Windows/DLL.h deleted file mode 100644 index 7d02887d91b5..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/DLL.h +++ /dev/null @@ -1,59 +0,0 @@ -// Windows/DLL.h - -#ifndef __WINDOWS_DLL_H -#define __WINDOWS_DLL_H - -#include "../Common/MyString.h" - -namespace NWindows { -namespace NDLL { - -#ifdef UNDER_CE -#define My_GetProcAddress(module, proceName) GetProcAddressA(module, proceName) -#else -#define My_GetProcAddress(module, proceName) ::GetProcAddress(module, proceName) -#endif - -class CLibrary -{ - bool LoadOperations(HMODULE newModule); -protected: - HMODULE _module; -public: - CLibrary(): _module(NULL) {}; - ~CLibrary() { Free(); } - - operator HMODULE() const { return _module; } - HMODULE* operator&() { return &_module; } - bool IsLoaded() const { return (_module != NULL); }; - - void Attach(HMODULE m) - { - Free(); - _module = m; - } - HMODULE Detach() - { - HMODULE m = _module; - _module = NULL; - return m; - } - - bool Free(); - bool LoadEx(LPCTSTR fileName, DWORD flags = LOAD_LIBRARY_AS_DATAFILE); - bool Load(LPCTSTR fileName); - #ifndef _UNICODE - bool LoadEx(LPCWSTR fileName, DWORD flags = LOAD_LIBRARY_AS_DATAFILE); - bool Load(LPCWSTR fileName); - #endif - FARPROC GetProc(LPCSTR procName) const { return My_GetProcAddress(_module, procName); } -}; - -bool MyGetModuleFileName(HMODULE hModule, CSysString &result); -#ifndef _UNICODE -bool MyGetModuleFileName(HMODULE hModule, UString &result); -#endif - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/Defs.h b/modules/lib7z/LZMASDK/CPP/Windows/Defs.h deleted file mode 100644 index e8a655a4b287..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/Defs.h +++ /dev/null @@ -1,23 +0,0 @@ -// Windows/Defs.h - -#ifndef __WINDOWS_DEFS_H -#define __WINDOWS_DEFS_H - -inline bool BOOLToBool(BOOL value) - { return (value != FALSE); } - -#ifdef _WIN32 -inline bool LRESULTToBool(LRESULT value) - { return (value != FALSE); } -#endif - -inline BOOL BoolToBOOL(bool value) - { return (value ? TRUE: FALSE); } - -inline VARIANT_BOOL BoolToVARIANT_BOOL(bool value) - { return (value ? VARIANT_TRUE: VARIANT_FALSE); } - -inline bool VARIANT_BOOLToBool(VARIANT_BOOL value) - { return (value != VARIANT_FALSE); } - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/Error.cpp b/modules/lib7z/LZMASDK/CPP/Windows/Error.cpp deleted file mode 100644 index fcba1e645978..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/Error.cpp +++ /dev/null @@ -1,50 +0,0 @@ -// Windows/Error.h - -#include "StdAfx.h" - -#include "Windows/Error.h" -#ifndef _UNICODE -#include "Common/StringConvert.h" -#endif - -#ifndef _UNICODE -extern bool g_IsNT; -#endif - -namespace NWindows { -namespace NError { - -bool MyFormatMessage(DWORD messageID, CSysString &message) -{ - LPVOID msgBuf; - if (::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL,messageID, 0, (LPTSTR) &msgBuf,0, NULL) == 0) - return false; - message = (LPCTSTR)msgBuf; - ::LocalFree(msgBuf); - return true; -} - -#ifndef _UNICODE -bool MyFormatMessage(DWORD messageID, UString &message) -{ - if (g_IsNT) - { - LPVOID msgBuf; - if (::FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, messageID, 0, (LPWSTR) &msgBuf, 0, NULL) == 0) - return false; - message = (LPCWSTR)msgBuf; - ::LocalFree(msgBuf); - return true; - } - CSysString messageSys; - bool result = MyFormatMessage(messageID, messageSys); - message = GetUnicodeString(messageSys); - return result; -} -#endif - -}} diff --git a/modules/lib7z/LZMASDK/CPP/Windows/Error.h b/modules/lib7z/LZMASDK/CPP/Windows/Error.h deleted file mode 100644 index d916e8e15b8a..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/Error.h +++ /dev/null @@ -1,33 +0,0 @@ -// Windows/Error.h - -#ifndef __WINDOWS_ERROR_H -#define __WINDOWS_ERROR_H - -#include "Common/MyString.h" - -namespace NWindows { -namespace NError { - -bool MyFormatMessage(DWORD messageID, CSysString &message); -inline CSysString MyFormatMessage(DWORD messageID) -{ - CSysString message; - MyFormatMessage(messageID, message); - return message; -} -#ifdef _UNICODE -inline UString MyFormatMessageW(DWORD messageID) - { return MyFormatMessage(messageID); } -#else -bool MyFormatMessage(DWORD messageID, UString &message); -inline UString MyFormatMessageW(DWORD messageID) -{ - UString message; - MyFormatMessage(messageID, message); - return message; -} -#endif - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/FileDir.cpp b/modules/lib7z/LZMASDK/CPP/Windows/FileDir.cpp deleted file mode 100644 index 915fa204eca8..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/FileDir.cpp +++ /dev/null @@ -1,869 +0,0 @@ -// Windows/FileDir.cpp - -#include "StdAfx.h" - -#ifndef _UNICODE -#include "../Common/StringConvert.h" -#endif - -#include "FileDir.h" -#include "FileFind.h" -#include "FileName.h" - -#ifndef _UNICODE -extern bool g_IsNT; -#endif - -namespace NWindows { -namespace NFile { - -#if defined(WIN_LONG_PATH) && defined(_UNICODE) -#define WIN_LONG_PATH2 -#endif - -// SetCurrentDirectory doesn't support \\?\ prefix - -#ifdef WIN_LONG_PATH -bool GetLongPathBase(LPCWSTR fileName, UString &res); -bool GetLongPath(LPCWSTR fileName, UString &res); -#endif - -namespace NDirectory { - -#ifndef _UNICODE -static inline UINT GetCurrentCodePage() { return ::AreFileApisANSI() ? CP_ACP : CP_OEMCP; } -static UString GetUnicodePath(const CSysString &sysPath) - { return MultiByteToUnicodeString(sysPath, GetCurrentCodePage()); } -static CSysString GetSysPath(LPCWSTR sysPath) - { return UnicodeStringToMultiByte(sysPath, GetCurrentCodePage()); } -#endif - -#ifndef UNDER_CE - -bool MyGetWindowsDirectory(CSysString &path) -{ - UINT needLength = ::GetWindowsDirectory(path.GetBuffer(MAX_PATH + 1), MAX_PATH + 1); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); -} - -bool MyGetSystemDirectory(CSysString &path) -{ - UINT needLength = ::GetSystemDirectory(path.GetBuffer(MAX_PATH + 1), MAX_PATH + 1); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); -} - -#endif - -#ifndef _UNICODE -bool MyGetWindowsDirectory(UString &path) -{ - if (g_IsNT) - { - UINT needLength = ::GetWindowsDirectoryW(path.GetBuffer(MAX_PATH + 1), MAX_PATH + 1); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); - } - CSysString sysPath; - if (!MyGetWindowsDirectory(sysPath)) - return false; - path = GetUnicodePath(sysPath); - return true; -} - -bool MyGetSystemDirectory(UString &path) -{ - if (g_IsNT) - { - UINT needLength = ::GetSystemDirectoryW(path.GetBuffer(MAX_PATH + 1), MAX_PATH + 1); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); - } - CSysString sysPath; - if (!MyGetSystemDirectory(sysPath)) - return false; - path = GetUnicodePath(sysPath); - return true; -} -#endif - -bool SetDirTime(LPCWSTR fileName, const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime) -{ - #ifndef _UNICODE - if (!g_IsNT) - { - ::SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return false; - } - #endif - HANDLE hDir = ::CreateFileW(fileName, GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); - #ifdef WIN_LONG_PATH - if (hDir == INVALID_HANDLE_VALUE) - { - UString longPath; - if (GetLongPath(fileName, longPath)) - hDir = ::CreateFileW(longPath, GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); - } - #endif - - bool res = false; - if (hDir != INVALID_HANDLE_VALUE) - { - res = BOOLToBool(::SetFileTime(hDir, cTime, aTime, mTime)); - ::CloseHandle(hDir); - } - return res; -} - -bool MySetFileAttributes(LPCTSTR fileName, DWORD fileAttributes) -{ - if (::SetFileAttributes(fileName, fileAttributes)) - return true; - #ifdef WIN_LONG_PATH2 - UString longPath; - if (GetLongPath(fileName, longPath)) - return BOOLToBool(::SetFileAttributesW(longPath, fileAttributes)); - #endif - return false; -} - -bool MyRemoveDirectory(LPCTSTR pathName) -{ - if (::RemoveDirectory(pathName)) - return true; - #ifdef WIN_LONG_PATH2 - UString longPath; - if (GetLongPath(pathName, longPath)) - return BOOLToBool(::RemoveDirectoryW(longPath)); - #endif - return false; -} - -#ifdef WIN_LONG_PATH -bool GetLongPaths(LPCWSTR s1, LPCWSTR s2, UString &d1, UString &d2) -{ - if (!GetLongPathBase(s1, d1) || !GetLongPathBase(s2, d2)) - return false; - if (d1.IsEmpty() && d2.IsEmpty()) return false; - if (d1.IsEmpty()) d1 = s1; - if (d2.IsEmpty()) d2 = s2; - return true; -} -#endif - -bool MyMoveFile(LPCTSTR existFileName, LPCTSTR newFileName) -{ - if (::MoveFile(existFileName, newFileName)) - return true; - #ifdef WIN_LONG_PATH2 - UString d1, d2; - if (GetLongPaths(existFileName, newFileName, d1, d2)) - return BOOLToBool(::MoveFileW(d1, d2)); - #endif - return false; -} - -#ifndef _UNICODE -bool MySetFileAttributes(LPCWSTR fileName, DWORD fileAttributes) -{ - if (!g_IsNT) - return MySetFileAttributes(GetSysPath(fileName), fileAttributes); - if (::SetFileAttributesW(fileName, fileAttributes)) - return true; - #ifdef WIN_LONG_PATH - UString longPath; - if (GetLongPath(fileName, longPath)) - return BOOLToBool(::SetFileAttributesW(longPath, fileAttributes)); - #endif - return false; -} - - -bool MyRemoveDirectory(LPCWSTR pathName) -{ - if (!g_IsNT) - return MyRemoveDirectory(GetSysPath(pathName)); - if (::RemoveDirectoryW(pathName)) - return true; - #ifdef WIN_LONG_PATH - UString longPath; - if (GetLongPath(pathName, longPath)) - return BOOLToBool(::RemoveDirectoryW(longPath)); - #endif - return false; -} - -bool MyMoveFile(LPCWSTR existFileName, LPCWSTR newFileName) -{ - if (!g_IsNT) - return MyMoveFile(GetSysPath(existFileName), GetSysPath(newFileName)); - if (::MoveFileW(existFileName, newFileName)) - return true; - #ifdef WIN_LONG_PATH - UString d1, d2; - if (GetLongPaths(existFileName, newFileName, d1, d2)) - return BOOLToBool(::MoveFileW(d1, d2)); - #endif - return false; -} -#endif - -bool MyCreateDirectory(LPCTSTR pathName) -{ - if (::CreateDirectory(pathName, NULL)) - return true; - #ifdef WIN_LONG_PATH2 - if (::GetLastError() != ERROR_ALREADY_EXISTS) - { - UString longPath; - if (GetLongPath(pathName, longPath)) - return BOOLToBool(::CreateDirectoryW(longPath, NULL)); - } - #endif - return false; -} - -#ifndef _UNICODE -bool MyCreateDirectory(LPCWSTR pathName) -{ - if (!g_IsNT) - return MyCreateDirectory(GetSysPath(pathName)); - if (::CreateDirectoryW(pathName, NULL)) - return true; - #ifdef WIN_LONG_PATH - if (::GetLastError() != ERROR_ALREADY_EXISTS) - { - UString longPath; - if (GetLongPath(pathName, longPath)) - return BOOLToBool(::CreateDirectoryW(longPath, NULL)); - } - #endif - return false; -} -#endif - -/* -bool CreateComplexDirectory(LPCTSTR pathName) -{ - NName::CParsedPath path; - path.ParsePath(pathName); - CSysString fullPath = path.Prefix; - DWORD errorCode = ERROR_SUCCESS; - for (int i = 0; i < path.PathParts.Size(); i++) - { - const CSysString &string = path.PathParts[i]; - if (string.IsEmpty()) - { - if (i != path.PathParts.Size() - 1) - return false; - return true; - } - fullPath += path.PathParts[i]; - if (!MyCreateDirectory(fullPath)) - { - DWORD errorCode = GetLastError(); - if (errorCode != ERROR_ALREADY_EXISTS) - return false; - } - fullPath += NName::kDirDelimiter; - } - return true; -} -*/ - -bool CreateComplexDirectory(LPCTSTR _aPathName) -{ - CSysString pathName = _aPathName; - int pos = pathName.ReverseFind(TEXT(CHAR_PATH_SEPARATOR)); - if (pos > 0 && pos == pathName.Length() - 1) - { - if (pathName.Length() == 3 && pathName[1] == ':') - return true; // Disk folder; - pathName.Delete(pos); - } - CSysString pathName2 = pathName; - pos = pathName.Length(); - for (;;) - { - if (MyCreateDirectory(pathName)) - break; - if (::GetLastError() == ERROR_ALREADY_EXISTS) - { - NFind::CFileInfo fileInfo; - if (!fileInfo.Find(pathName)) // For network folders - return true; - if (!fileInfo.IsDir()) - return false; - break; - } - pos = pathName.ReverseFind(TEXT(CHAR_PATH_SEPARATOR)); - if (pos < 0 || pos == 0) - return false; - if (pathName[pos - 1] == ':') - return false; - pathName = pathName.Left(pos); - } - pathName = pathName2; - while (pos < pathName.Length()) - { - pos = pathName.Find(TEXT(CHAR_PATH_SEPARATOR), pos + 1); - if (pos < 0) - pos = pathName.Length(); - if (!MyCreateDirectory(pathName.Left(pos))) - return false; - } - return true; -} - -#ifndef _UNICODE - -bool CreateComplexDirectory(LPCWSTR _aPathName) -{ - UString pathName = _aPathName; - int pos = pathName.ReverseFind(WCHAR_PATH_SEPARATOR); - if (pos > 0 && pos == pathName.Length() - 1) - { - if (pathName.Length() == 3 && pathName[1] == L':') - return true; // Disk folder; - pathName.Delete(pos); - } - UString pathName2 = pathName; - pos = pathName.Length(); - for (;;) - { - if (MyCreateDirectory(pathName)) - break; - if (::GetLastError() == ERROR_ALREADY_EXISTS) - { - NFind::CFileInfoW fileInfo; - if (!fileInfo.Find(pathName)) // For network folders - return true; - if (!fileInfo.IsDir()) - return false; - break; - } - pos = pathName.ReverseFind(WCHAR_PATH_SEPARATOR); - if (pos < 0 || pos == 0) - return false; - if (pathName[pos - 1] == L':') - return false; - pathName = pathName.Left(pos); - } - pathName = pathName2; - while (pos < pathName.Length()) - { - pos = pathName.Find(WCHAR_PATH_SEPARATOR, pos + 1); - if (pos < 0) - pos = pathName.Length(); - if (!MyCreateDirectory(pathName.Left(pos))) - return false; - } - return true; -} - -#endif - -bool DeleteFileAlways(LPCTSTR name) -{ - if (!MySetFileAttributes(name, 0)) - return false; - if (::DeleteFile(name)) - return true; - #ifdef WIN_LONG_PATH2 - UString longPath; - if (GetLongPath(name, longPath)) - return BOOLToBool(::DeleteFileW(longPath)); - #endif - return false; -} - -#ifndef _UNICODE -bool DeleteFileAlways(LPCWSTR name) -{ - if (!g_IsNT) - return DeleteFileAlways(GetSysPath(name)); - if (!MySetFileAttributes(name, 0)) - return false; - if (::DeleteFileW(name)) - return true; - #ifdef WIN_LONG_PATH - UString longPath; - if (GetLongPath(name, longPath)) - return BOOLToBool(::DeleteFileW(longPath)); - #endif - return false; -} -#endif - -static bool RemoveDirectorySubItems2(const CSysString pathPrefix, const NFind::CFileInfo &fileInfo) -{ - if (fileInfo.IsDir()) - return RemoveDirectoryWithSubItems(pathPrefix + fileInfo.Name); - return DeleteFileAlways(pathPrefix + fileInfo.Name); -} - -bool RemoveDirectoryWithSubItems(const CSysString &path) -{ - NFind::CFileInfo fileInfo; - CSysString pathPrefix = path + NName::kDirDelimiter; - { - NFind::CEnumerator enumerator(pathPrefix + TCHAR(NName::kAnyStringWildcard)); - while (enumerator.Next(fileInfo)) - if (!RemoveDirectorySubItems2(pathPrefix, fileInfo)) - return false; - } - if (!MySetFileAttributes(path, 0)) - return false; - return MyRemoveDirectory(path); -} - -#ifndef _UNICODE -static bool RemoveDirectorySubItems2(const UString pathPrefix, const NFind::CFileInfoW &fileInfo) -{ - if (fileInfo.IsDir()) - return RemoveDirectoryWithSubItems(pathPrefix + fileInfo.Name); - return DeleteFileAlways(pathPrefix + fileInfo.Name); -} -bool RemoveDirectoryWithSubItems(const UString &path) -{ - NFind::CFileInfoW fileInfo; - UString pathPrefix = path + UString(NName::kDirDelimiter); - { - NFind::CEnumeratorW enumerator(pathPrefix + UString(NName::kAnyStringWildcard)); - while (enumerator.Next(fileInfo)) - if (!RemoveDirectorySubItems2(pathPrefix, fileInfo)) - return false; - } - if (!MySetFileAttributes(path, 0)) - return false; - return MyRemoveDirectory(path); -} -#endif - -bool GetOnlyDirPrefix(LPCTSTR fileName, CSysString &resultName) -{ - int index; - if (!MyGetFullPathName(fileName, resultName, index)) - return false; - resultName = resultName.Left(index); - return true; -} - -bool GetOnlyName(LPCTSTR fileName, CSysString &resultName) -{ - int index; - if (!MyGetFullPathName(fileName, resultName, index)) - return false; - resultName = resultName.Mid(index); - return true; -} - -#ifdef UNDER_CE -bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath) -{ - resultPath = fileName; - return true; -} - -bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath, int &fileNamePartStartIndex) -{ - resultPath = fileName; - // change it - fileNamePartStartIndex = resultPath.ReverseFind('\\'); - fileNamePartStartIndex++; - return true; -} - -#else - -bool MyGetShortPathName(LPCTSTR longPath, CSysString &shortPath) -{ - DWORD needLength = ::GetShortPathName(longPath, shortPath.GetBuffer(MAX_PATH + 1), MAX_PATH + 1); - shortPath.ReleaseBuffer(); - return (needLength > 0 && needLength < MAX_PATH); -} - -bool MyGetFullPathName(LPCTSTR fileName, CSysString &resultPath, int &fileNamePartStartIndex) -{ - resultPath.Empty(); - LPTSTR fileNamePointer = 0; - LPTSTR buffer = resultPath.GetBuffer(MAX_PATH); - DWORD needLength = ::GetFullPathName(fileName, MAX_PATH + 1, buffer, &fileNamePointer); - resultPath.ReleaseBuffer(); - if (needLength == 0) - return false; - if (needLength >= MAX_PATH) - { - #ifdef WIN_LONG_PATH2 - needLength++; - buffer = resultPath.GetBuffer(needLength + 1); - DWORD needLength2 = ::GetFullPathNameW(fileName, needLength, buffer, &fileNamePointer); - resultPath.ReleaseBuffer(); - if (needLength2 == 0 || needLength2 > needLength) - #endif - return false; - } - if (fileNamePointer == 0) - fileNamePartStartIndex = lstrlen(fileName); - else - fileNamePartStartIndex = (int)(fileNamePointer - buffer); - return true; -} - -#ifndef _UNICODE -bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath, int &fileNamePartStartIndex) -{ - resultPath.Empty(); - if (g_IsNT) - { - LPWSTR fileNamePointer = 0; - LPWSTR buffer = resultPath.GetBuffer(MAX_PATH); - DWORD needLength = ::GetFullPathNameW(fileName, MAX_PATH + 1, buffer, &fileNamePointer); - resultPath.ReleaseBuffer(); - if (needLength == 0) - return false; - if (needLength >= MAX_PATH) - { - #ifdef WIN_LONG_PATH - needLength++; - buffer = resultPath.GetBuffer(needLength + 1); - DWORD needLength2 = ::GetFullPathNameW(fileName, needLength, buffer, &fileNamePointer); - resultPath.ReleaseBuffer(); - if (needLength2 == 0 || needLength2 > needLength) - #endif - return false; - } - if (fileNamePointer == 0) - fileNamePartStartIndex = MyStringLen(fileName); - else - fileNamePartStartIndex = (int)(fileNamePointer - buffer); - } - else - { - CSysString sysPath; - if (!MyGetFullPathName(GetSysPath(fileName), sysPath, fileNamePartStartIndex)) - return false; - UString resultPath1 = GetUnicodePath(sysPath.Left(fileNamePartStartIndex)); - UString resultPath2 = GetUnicodePath(sysPath.Mid(fileNamePartStartIndex)); - fileNamePartStartIndex = resultPath1.Length(); - resultPath = resultPath1 + resultPath2; - } - return true; -} -#endif - - -bool MyGetFullPathName(LPCTSTR fileName, CSysString &path) -{ - int index; - return MyGetFullPathName(fileName, path, index); -} - -#ifndef _UNICODE -bool MyGetFullPathName(LPCWSTR fileName, UString &path) -{ - int index; - return MyGetFullPathName(fileName, path, index); -} -#endif - -#ifndef _UNICODE -bool GetOnlyName(LPCWSTR fileName, UString &resultName) -{ - int index; - if (!MyGetFullPathName(fileName, resultName, index)) - return false; - resultName = resultName.Mid(index); - return true; -} -#endif - -#ifndef _UNICODE -bool GetOnlyDirPrefix(LPCWSTR fileName, UString &resultName) -{ - int index; - if (!MyGetFullPathName(fileName, resultName, index)) - return false; - resultName = resultName.Left(index); - return true; -} -#endif - -bool MyGetCurrentDirectory(CSysString &path) -{ - DWORD needLength = ::GetCurrentDirectory(MAX_PATH + 1, path.GetBuffer(MAX_PATH + 1)); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); -} - -#ifndef _UNICODE -bool MySetCurrentDirectory(LPCWSTR path) -{ - if (g_IsNT) - return BOOLToBool(::SetCurrentDirectoryW(path)); - return MySetCurrentDirectory(GetSysPath(path)); -} -bool MyGetCurrentDirectory(UString &path) -{ - if (g_IsNT) - { - DWORD needLength = ::GetCurrentDirectoryW(MAX_PATH + 1, path.GetBuffer(MAX_PATH + 1)); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); - } - CSysString sysPath; - if (!MyGetCurrentDirectory(sysPath)) - return false; - path = GetUnicodePath(sysPath); - return true; -} -#endif - -bool MySearchPath(LPCTSTR path, LPCTSTR fileName, LPCTSTR extension, - CSysString &resultPath, UINT32 &filePart) -{ - LPTSTR filePartPointer; - DWORD value = ::SearchPath(path, fileName, extension, - MAX_PATH, resultPath.GetBuffer(MAX_PATH + 1), &filePartPointer); - filePart = (UINT32)(filePartPointer - (LPCTSTR)resultPath); - resultPath.ReleaseBuffer(); - return (value > 0 && value <= MAX_PATH); -} -#endif - -#ifndef _UNICODE -bool MySearchPath(LPCWSTR path, LPCWSTR fileName, LPCWSTR extension, - UString &resultPath, UINT32 &filePart) -{ - if (g_IsNT) - { - LPWSTR filePartPointer = 0; - DWORD value = ::SearchPathW(path, fileName, extension, - MAX_PATH, resultPath.GetBuffer(MAX_PATH + 1), &filePartPointer); - filePart = (UINT32)(filePartPointer - (LPCWSTR)resultPath); - resultPath.ReleaseBuffer(); - return (value > 0 && value <= MAX_PATH); - } - - CSysString sysPath; - if (!MySearchPath( - path != 0 ? (LPCTSTR)GetSysPath(path): 0, - fileName != 0 ? (LPCTSTR)GetSysPath(fileName): 0, - extension != 0 ? (LPCTSTR)GetSysPath(extension): 0, - sysPath, filePart)) - return false; - UString resultPath1 = GetUnicodePath(sysPath.Left(filePart)); - UString resultPath2 = GetUnicodePath(sysPath.Mid(filePart)); - filePart = resultPath1.Length(); - resultPath = resultPath1 + resultPath2; - return true; -} -#endif - -bool MyGetTempPath(CSysString &path) -{ - DWORD needLength = ::GetTempPath(MAX_PATH + 1, path.GetBuffer(MAX_PATH + 1)); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); -} - -#ifndef _UNICODE -bool MyGetTempPath(UString &path) -{ - path.Empty(); - if (g_IsNT) - { - DWORD needLength = ::GetTempPathW(MAX_PATH + 1, path.GetBuffer(MAX_PATH + 1)); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); - } - CSysString sysPath; - if (!MyGetTempPath(sysPath)) - return false; - path = GetUnicodePath(sysPath); - return true; -} -#endif - -UINT MyGetTempFileName(LPCTSTR dirPath, LPCTSTR prefix, CSysString &path) -{ - UINT number = ::GetTempFileName(dirPath, prefix, 0, path.GetBuffer(MAX_PATH + 1)); - path.ReleaseBuffer(); - return number; -} - -#ifndef _UNICODE -UINT MyGetTempFileName(LPCWSTR dirPath, LPCWSTR prefix, UString &path) -{ - if (g_IsNT) - { - UINT number = ::GetTempFileNameW(dirPath, prefix, 0, path.GetBuffer(MAX_PATH)); - path.ReleaseBuffer(); - return number; - } - CSysString sysPath; - UINT number = MyGetTempFileName( - dirPath ? (LPCTSTR)GetSysPath(dirPath): 0, - prefix ? (LPCTSTR)GetSysPath(prefix): 0, - sysPath); - path = GetUnicodePath(sysPath); - return number; -} -#endif - -UINT CTempFile::Create(LPCTSTR dirPath, LPCTSTR prefix, CSysString &resultPath) -{ - Remove(); - UINT number = MyGetTempFileName(dirPath, prefix, resultPath); - if (number != 0) - { - _fileName = resultPath; - _mustBeDeleted = true; - } - return number; -} - -bool CTempFile::Create(LPCTSTR prefix, CSysString &resultPath) -{ - CSysString tempPath; - if (!MyGetTempPath(tempPath)) - return false; - if (Create(tempPath, prefix, resultPath) != 0) - return true; - #ifdef UNDER_CE - return false; - #else - if (!MyGetWindowsDirectory(tempPath)) - return false; - return (Create(tempPath, prefix, resultPath) != 0); - #endif -} - -bool CTempFile::Remove() -{ - if (!_mustBeDeleted) - return true; - _mustBeDeleted = !DeleteFileAlways(_fileName); - return !_mustBeDeleted; -} - -#ifndef _UNICODE - -UINT CTempFileW::Create(LPCWSTR dirPath, LPCWSTR prefix, UString &resultPath) -{ - Remove(); - UINT number = MyGetTempFileName(dirPath, prefix, resultPath); - if (number != 0) - { - _fileName = resultPath; - _mustBeDeleted = true; - } - return number; -} - -bool CTempFileW::Create(LPCWSTR prefix, UString &resultPath) -{ - UString tempPath; - if (!MyGetTempPath(tempPath)) - return false; - if (Create(tempPath, prefix, resultPath) != 0) - return true; - if (!MyGetWindowsDirectory(tempPath)) - return false; - return (Create(tempPath, prefix, resultPath) != 0); -} - -bool CTempFileW::Remove() -{ - if (!_mustBeDeleted) - return true; - _mustBeDeleted = !DeleteFileAlways(_fileName); - return !_mustBeDeleted; -} - -#endif - -bool CreateTempDirectory(LPCTSTR prefix, CSysString &dirName) -{ - /* - CSysString prefix = tempPath + prefixChars; - CRandom random; - random.Init(); - */ - for (;;) - { - { - CTempFile tempFile; - if (!tempFile.Create(prefix, dirName)) - return false; - if (!tempFile.Remove()) - return false; - } - /* - UINT32 randomNumber = random.Generate(); - TCHAR randomNumberString[32]; - _stprintf(randomNumberString, _T("%04X"), randomNumber); - dirName = prefix + randomNumberString; - */ - if (NFind::DoesFileOrDirExist(dirName)) - continue; - if (MyCreateDirectory(dirName)) - return true; - if (::GetLastError() != ERROR_ALREADY_EXISTS) - return false; - } -} - -bool CTempDirectory::Create(LPCTSTR prefix) -{ - Remove(); - return (_mustBeDeleted = CreateTempDirectory(prefix, _tempDir)); -} - -#ifndef _UNICODE - -bool CreateTempDirectory(LPCWSTR prefix, UString &dirName) -{ - /* - CSysString prefix = tempPath + prefixChars; - CRandom random; - random.Init(); - */ - for (;;) - { - { - CTempFileW tempFile; - if (!tempFile.Create(prefix, dirName)) - return false; - if (!tempFile.Remove()) - return false; - } - /* - UINT32 randomNumber = random.Generate(); - TCHAR randomNumberString[32]; - _stprintf(randomNumberString, _T("%04X"), randomNumber); - dirName = prefix + randomNumberString; - */ - if (NFind::DoesFileOrDirExist(dirName)) - continue; - if (MyCreateDirectory(dirName)) - return true; - if (::GetLastError() != ERROR_ALREADY_EXISTS) - return false; - } -} - -bool CTempDirectoryW::Create(LPCWSTR prefix) -{ - Remove(); - return (_mustBeDeleted = CreateTempDirectory(prefix, _tempDir)); -} - -#endif - -}}} diff --git a/modules/lib7z/LZMASDK/CPP/Windows/FileDir.h b/modules/lib7z/LZMASDK/CPP/Windows/FileDir.h deleted file mode 100644 index 2c1507133ef0..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/FileDir.h +++ /dev/null @@ -1,177 +0,0 @@ -// Windows/FileDir.h - -#ifndef __WINDOWS_FILEDIR_H -#define __WINDOWS_FILEDIR_H - -#include "../Common/MyString.h" -#include "Defs.h" - -namespace NWindows { -namespace NFile { -namespace NDirectory { - -#ifdef WIN_LONG_PATH -bool GetLongPaths(LPCWSTR s1, LPCWSTR s2, UString &d1, UString &d2); -#endif - -bool MyGetWindowsDirectory(CSysString &path); -bool MyGetSystemDirectory(CSysString &path); -#ifndef _UNICODE -bool MyGetWindowsDirectory(UString &path); -bool MyGetSystemDirectory(UString &path); -#endif - -bool SetDirTime(LPCWSTR fileName, const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime); - -bool MySetFileAttributes(LPCTSTR fileName, DWORD fileAttributes); -bool MyMoveFile(LPCTSTR existFileName, LPCTSTR newFileName); -bool MyRemoveDirectory(LPCTSTR pathName); -bool MyCreateDirectory(LPCTSTR pathName); -bool CreateComplexDirectory(LPCTSTR pathName); -bool DeleteFileAlways(LPCTSTR name); -bool RemoveDirectoryWithSubItems(const CSysString &path); - -#ifndef _UNICODE -bool MySetFileAttributes(LPCWSTR fileName, DWORD fileAttributes); -bool MyMoveFile(LPCWSTR existFileName, LPCWSTR newFileName); -bool MyRemoveDirectory(LPCWSTR pathName); -bool MyCreateDirectory(LPCWSTR pathName); -bool CreateComplexDirectory(LPCWSTR pathName); -bool DeleteFileAlways(LPCWSTR name); -bool RemoveDirectoryWithSubItems(const UString &path); -#endif - -bool GetOnlyDirPrefix(LPCTSTR fileName, CSysString &resultName); -bool GetOnlyName(LPCTSTR fileName, CSysString &resultName); -#ifdef UNDER_CE -bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath); -bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath, int &fileNamePartStartIndex); -#else -bool MyGetShortPathName(LPCTSTR longPath, CSysString &shortPath); - -bool MyGetFullPathName(LPCTSTR fileName, CSysString &resultPath, int &fileNamePartStartIndex); -bool MyGetFullPathName(LPCTSTR fileName, CSysString &resultPath); -#ifndef _UNICODE -bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath, - int &fileNamePartStartIndex); -bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath); -bool GetOnlyName(LPCWSTR fileName, UString &resultName); -bool GetOnlyDirPrefix(LPCWSTR fileName, UString &resultName); -#endif - -inline bool MySetCurrentDirectory(LPCTSTR path) - { return BOOLToBool(::SetCurrentDirectory(path)); } -bool MyGetCurrentDirectory(CSysString &resultPath); -#ifndef _UNICODE -bool MySetCurrentDirectory(LPCWSTR path); -bool MyGetCurrentDirectory(UString &resultPath); -#endif - -bool MySearchPath(LPCTSTR path, LPCTSTR fileName, LPCTSTR extension, CSysString &resultPath, UINT32 &filePart); -#ifndef _UNICODE -bool MySearchPath(LPCWSTR path, LPCWSTR fileName, LPCWSTR extension, UString &resultPath, UINT32 &filePart); -#endif - -inline bool MySearchPath(LPCTSTR path, LPCTSTR fileName, LPCTSTR extension, CSysString &resultPath) -{ - UINT32 value; - return MySearchPath(path, fileName, extension, resultPath, value); -} - -#ifndef _UNICODE -inline bool MySearchPath(LPCWSTR path, LPCWSTR fileName, LPCWSTR extension, UString &resultPath) -{ - UINT32 value; - return MySearchPath(path, fileName, extension, resultPath, value); -} -#endif - -#endif - -bool MyGetTempPath(CSysString &resultPath); -#ifndef _UNICODE -bool MyGetTempPath(UString &resultPath); -#endif - -UINT MyGetTempFileName(LPCTSTR dirPath, LPCTSTR prefix, CSysString &resultPath); -#ifndef _UNICODE -UINT MyGetTempFileName(LPCWSTR dirPath, LPCWSTR prefix, UString &resultPath); -#endif - -class CTempFile -{ - bool _mustBeDeleted; - CSysString _fileName; -public: - CTempFile(): _mustBeDeleted(false) {} - ~CTempFile() { Remove(); } - void DisableDeleting() { _mustBeDeleted = false; } - UINT Create(LPCTSTR dirPath, LPCTSTR prefix, CSysString &resultPath); - bool Create(LPCTSTR prefix, CSysString &resultPath); - bool Remove(); -}; - -#ifdef _UNICODE -typedef CTempFile CTempFileW; -#else -class CTempFileW -{ - bool _mustBeDeleted; - UString _fileName; -public: - CTempFileW(): _mustBeDeleted(false) {} - ~CTempFileW() { Remove(); } - void DisableDeleting() { _mustBeDeleted = false; } - UINT Create(LPCWSTR dirPath, LPCWSTR prefix, UString &resultPath); - bool Create(LPCWSTR prefix, UString &resultPath); - bool Remove(); -}; -#endif - -bool CreateTempDirectory(LPCTSTR prefixChars, CSysString &dirName); - -class CTempDirectory -{ - bool _mustBeDeleted; - CSysString _tempDir; -public: - const CSysString &GetPath() const { return _tempDir; } - CTempDirectory(): _mustBeDeleted(false) {} - ~CTempDirectory() { Remove(); } - bool Create(LPCTSTR prefix) ; - bool Remove() - { - if (!_mustBeDeleted) - return true; - _mustBeDeleted = !RemoveDirectoryWithSubItems(_tempDir); - return (!_mustBeDeleted); - } - void DisableDeleting() { _mustBeDeleted = false; } -}; - -#ifdef _UNICODE -typedef CTempDirectory CTempDirectoryW; -#else -class CTempDirectoryW -{ - bool _mustBeDeleted; - UString _tempDir; -public: - const UString &GetPath() const { return _tempDir; } - CTempDirectoryW(): _mustBeDeleted(false) {} - ~CTempDirectoryW() { Remove(); } - bool Create(LPCWSTR prefix) ; - bool Remove() - { - if (!_mustBeDeleted) - return true; - _mustBeDeleted = !RemoveDirectoryWithSubItems(_tempDir); - return (!_mustBeDeleted); - } - void DisableDeleting() { _mustBeDeleted = false; } -}; -#endif - -}}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/FileFind.cpp b/modules/lib7z/LZMASDK/CPP/Windows/FileFind.cpp deleted file mode 100644 index 99fb706e27f6..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/FileFind.cpp +++ /dev/null @@ -1,462 +0,0 @@ -// Windows/FileFind.cpp - -#include "StdAfx.h" - -#include "FileFind.h" -#include "FileIO.h" -#ifndef _UNICODE -#include "../Common/StringConvert.h" -#endif - -#ifndef _UNICODE -extern bool g_IsNT; -#endif - -namespace NWindows { -namespace NFile { - -#ifdef SUPPORT_DEVICE_FILE -bool IsDeviceName(LPCTSTR n); -#ifndef _UNICODE -bool IsDeviceName(LPCWSTR n); -#endif -#endif - -#if defined(WIN_LONG_PATH) && defined(_UNICODE) -#define WIN_LONG_PATH2 -#endif - -bool GetLongPath(LPCWSTR fileName, UString &res); - -namespace NFind { - -static const TCHAR kDot = TEXT('.'); - -bool CFileInfo::IsDots() const -{ - if (!IsDir() || Name.IsEmpty()) - return false; - if (Name[0] != kDot) - return false; - return Name.Length() == 1 || (Name[1] == kDot && Name.Length() == 2); -} - -#ifndef _UNICODE -bool CFileInfoW::IsDots() const -{ - if (!IsDir() || Name.IsEmpty()) - return false; - if (Name[0] != kDot) - return false; - return Name.Length() == 1 || (Name[1] == kDot && Name.Length() == 2); -} -#endif - -#define WIN_FD_TO_MY_FI(fi, fd) \ - fi.Attrib = fd.dwFileAttributes; \ - fi.CTime = fd.ftCreationTime; \ - fi.ATime = fd.ftLastAccessTime; \ - fi.MTime = fd.ftLastWriteTime; \ - fi.Size = (((UInt64)fd.nFileSizeHigh) << 32) + fd.nFileSizeLow; \ - fi.IsDevice = false; - - /* - #ifdef UNDER_CE - fi.ObjectID = fd.dwOID; - #else - fi.ReparseTag = fd.dwReserved0; - #endif - */ - -static void ConvertWIN32_FIND_DATA_To_FileInfo(const WIN32_FIND_DATA &fd, CFileInfo &fi) -{ - WIN_FD_TO_MY_FI(fi, fd); - fi.Name = fd.cFileName; -} - -#ifndef _UNICODE - -static inline UINT GetCurrentCodePage() { return ::AreFileApisANSI() ? CP_ACP : CP_OEMCP; } - -static void ConvertWIN32_FIND_DATA_To_FileInfo(const WIN32_FIND_DATAW &fd, CFileInfoW &fi) -{ - WIN_FD_TO_MY_FI(fi, fd); - fi.Name = fd.cFileName; -} - -static void ConvertWIN32_FIND_DATA_To_FileInfo(const WIN32_FIND_DATA &fd, CFileInfoW &fi) -{ - WIN_FD_TO_MY_FI(fi, fd); - fi.Name = GetUnicodeString(fd.cFileName, GetCurrentCodePage()); -} -#endif - -//////////////////////////////// -// CFindFile - -bool CFindFile::Close() -{ - if (_handle == INVALID_HANDLE_VALUE) - return true; - if (!::FindClose(_handle)) - return false; - _handle = INVALID_HANDLE_VALUE; - return true; -} - - -bool CFindFile::FindFirst(LPCTSTR wildcard, CFileInfo &fi) -{ - if (!Close()) - return false; - WIN32_FIND_DATA fd; - _handle = ::FindFirstFile(wildcard, &fd); - #ifdef WIN_LONG_PATH2 - if (_handle == INVALID_HANDLE_VALUE) - { - UString longPath; - if (GetLongPath(wildcard, longPath)) - _handle = ::FindFirstFileW(longPath, &fd); - } - #endif - if (_handle == INVALID_HANDLE_VALUE) - return false; - ConvertWIN32_FIND_DATA_To_FileInfo(fd, fi); - return true; -} - -#ifndef _UNICODE -bool CFindFile::FindFirst(LPCWSTR wildcard, CFileInfoW &fi) -{ - if (!Close()) - return false; - if (g_IsNT) - { - WIN32_FIND_DATAW fd; - _handle = ::FindFirstFileW(wildcard, &fd); - #ifdef WIN_LONG_PATH - if (_handle == INVALID_HANDLE_VALUE) - { - UString longPath; - if (GetLongPath(wildcard, longPath)) - _handle = ::FindFirstFileW(longPath, &fd); - } - #endif - if (_handle != INVALID_HANDLE_VALUE) - ConvertWIN32_FIND_DATA_To_FileInfo(fd, fi); - } - else - { - WIN32_FIND_DATAA fd; - _handle = ::FindFirstFileA(UnicodeStringToMultiByte(wildcard, - GetCurrentCodePage()), &fd); - if (_handle != INVALID_HANDLE_VALUE) - ConvertWIN32_FIND_DATA_To_FileInfo(fd, fi); - } - return (_handle != INVALID_HANDLE_VALUE); -} -#endif - -bool CFindFile::FindNext(CFileInfo &fi) -{ - WIN32_FIND_DATA fd; - bool result = BOOLToBool(::FindNextFile(_handle, &fd)); - if (result) - ConvertWIN32_FIND_DATA_To_FileInfo(fd, fi); - return result; -} - -#ifndef _UNICODE -bool CFindFile::FindNext(CFileInfoW &fi) -{ - if (g_IsNT) - { - WIN32_FIND_DATAW fd; - if (!::FindNextFileW(_handle, &fd)) - return false; - ConvertWIN32_FIND_DATA_To_FileInfo(fd, fi); - } - else - { - WIN32_FIND_DATAA fd; - if (!::FindNextFileA(_handle, &fd)) - return false; - ConvertWIN32_FIND_DATA_To_FileInfo(fd, fi); - } - return true; -} -#endif - -#define MY_CLEAR_FILETIME(ft) ft.dwLowDateTime = ft.dwHighDateTime = 0; - -void CFileInfoBase::Clear() -{ - Size = 0; - MY_CLEAR_FILETIME(CTime); - MY_CLEAR_FILETIME(ATime); - MY_CLEAR_FILETIME(MTime); - Attrib = 0; -} - -bool CFileInfo::Find(LPCTSTR wildcard) -{ - #ifdef SUPPORT_DEVICE_FILE - if (IsDeviceName(wildcard)) - { - Clear(); - IsDevice = true; - NIO::CInFile inFile; - if (!inFile.Open(wildcard)) - return false; - Name = wildcard + 4; - if (inFile.LengthDefined) - Size = inFile.Length; - return true; - } - #endif - CFindFile finder; - return finder.FindFirst(wildcard, *this); -} - - -#ifndef _UNICODE -bool CFileInfoW::Find(LPCWSTR wildcard) -{ - #ifdef SUPPORT_DEVICE_FILE - if (IsDeviceName(wildcard)) - { - Clear(); - IsDevice = true; - NIO::CInFile inFile; - if (!inFile.Open(wildcard)) - return false; - Name = wildcard + 4; - if (inFile.LengthDefined) - Size = inFile.Length; - return true; - } - #endif - CFindFile finder; - return finder.FindFirst(wildcard, *this); -} -#endif - -bool DoesFileExist(LPCTSTR name) -{ - CFileInfo fi; - return fi.Find(name) && !fi.IsDir(); -} - -bool DoesDirExist(LPCTSTR name) -{ - CFileInfo fi; - return fi.Find(name) && fi.IsDir(); -} - -bool DoesFileOrDirExist(LPCTSTR name) -{ - CFileInfo fi; - return fi.Find(name); -} - -#ifndef _UNICODE -bool DoesFileExist(LPCWSTR name) -{ - CFileInfoW fi; - return fi.Find(name) && !fi.IsDir(); -} - -bool DoesDirExist(LPCWSTR name) -{ - CFileInfoW fi; - return fi.Find(name) && fi.IsDir(); -} -bool DoesFileOrDirExist(LPCWSTR name) -{ - CFileInfoW fi; - return fi.Find(name); -} -#endif - -///////////////////////////////////// -// CEnumerator - -bool CEnumerator::NextAny(CFileInfo &fi) -{ - if (_findFile.IsHandleAllocated()) - return _findFile.FindNext(fi); - else - return _findFile.FindFirst(_wildcard, fi); -} - -bool CEnumerator::Next(CFileInfo &fi) -{ - for (;;) - { - if (!NextAny(fi)) - return false; - if (!fi.IsDots()) - return true; - } -} - -bool CEnumerator::Next(CFileInfo &fi, bool &found) -{ - if (Next(fi)) - { - found = true; - return true; - } - found = false; - return (::GetLastError() == ERROR_NO_MORE_FILES); -} - -#ifndef _UNICODE -bool CEnumeratorW::NextAny(CFileInfoW &fi) -{ - if (_findFile.IsHandleAllocated()) - return _findFile.FindNext(fi); - else - return _findFile.FindFirst(_wildcard, fi); -} - -bool CEnumeratorW::Next(CFileInfoW &fi) -{ - for (;;) - { - if (!NextAny(fi)) - return false; - if (!fi.IsDots()) - return true; - } -} - -bool CEnumeratorW::Next(CFileInfoW &fi, bool &found) -{ - if (Next(fi)) - { - found = true; - return true; - } - found = false; - return (::GetLastError() == ERROR_NO_MORE_FILES); -} - -#endif - -//////////////////////////////// -// CFindChangeNotification -// FindFirstChangeNotification can return 0. MSDN doesn't tell about it. - -bool CFindChangeNotification::Close() -{ - if (!IsHandleAllocated()) - return true; - if (!::FindCloseChangeNotification(_handle)) - return false; - _handle = INVALID_HANDLE_VALUE; - return true; -} - -HANDLE CFindChangeNotification::FindFirst(LPCTSTR pathName, bool watchSubtree, DWORD notifyFilter) -{ - _handle = ::FindFirstChangeNotification(pathName, BoolToBOOL(watchSubtree), notifyFilter); - #ifdef WIN_LONG_PATH2 - if (!IsHandleAllocated()) - { - UString longPath; - if (GetLongPath(pathName, longPath)) - _handle = ::FindFirstChangeNotificationW(longPath, BoolToBOOL(watchSubtree), notifyFilter); - } - #endif - return _handle; -} - -#ifndef _UNICODE -HANDLE CFindChangeNotification::FindFirst(LPCWSTR pathName, bool watchSubtree, DWORD notifyFilter) -{ - if (!g_IsNT) - return FindFirst(UnicodeStringToMultiByte(pathName, GetCurrentCodePage()), watchSubtree, notifyFilter); - _handle = ::FindFirstChangeNotificationW(pathName, BoolToBOOL(watchSubtree), notifyFilter); - #ifdef WIN_LONG_PATH - if (!IsHandleAllocated()) - { - UString longPath; - if (GetLongPath(pathName, longPath)) - _handle = ::FindFirstChangeNotificationW(longPath, BoolToBOOL(watchSubtree), notifyFilter); - } - #endif - return _handle; -} -#endif - -#ifndef UNDER_CE -bool MyGetLogicalDriveStrings(CSysStringVector &driveStrings) -{ - driveStrings.Clear(); - UINT32 size = GetLogicalDriveStrings(0, NULL); - if (size == 0) - return false; - CSysString buffer; - UINT32 newSize = GetLogicalDriveStrings(size, buffer.GetBuffer(size)); - if (newSize == 0) - return false; - if (newSize > size) - return false; - CSysString string; - for (UINT32 i = 0; i < newSize; i++) - { - TCHAR c = buffer[i]; - if (c == TEXT('\0')) - { - driveStrings.Add(string); - string.Empty(); - } - else - string += c; - } - if (!string.IsEmpty()) - return false; - return true; -} - -#ifndef _UNICODE -bool MyGetLogicalDriveStrings(UStringVector &driveStrings) -{ - driveStrings.Clear(); - if (g_IsNT) - { - UINT32 size = GetLogicalDriveStringsW(0, NULL); - if (size == 0) - return false; - UString buffer; - UINT32 newSize = GetLogicalDriveStringsW(size, buffer.GetBuffer(size)); - if (newSize == 0) - return false; - if (newSize > size) - return false; - UString string; - for (UINT32 i = 0; i < newSize; i++) - { - WCHAR c = buffer[i]; - if (c == L'\0') - { - driveStrings.Add(string); - string.Empty(); - } - else - string += c; - } - return string.IsEmpty(); - } - CSysStringVector driveStringsA; - bool res = MyGetLogicalDriveStrings(driveStringsA); - for (int i = 0; i < driveStringsA.Size(); i++) - driveStrings.Add(GetUnicodeString(driveStringsA[i])); - return res; -} -#endif - -#endif - -}}} diff --git a/modules/lib7z/LZMASDK/CPP/Windows/FileFind.h b/modules/lib7z/LZMASDK/CPP/Windows/FileFind.h deleted file mode 100644 index 5affd8398a4d..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/FileFind.h +++ /dev/null @@ -1,161 +0,0 @@ -// Windows/FileFind.h - -#ifndef __WINDOWS_FILEFIND_H -#define __WINDOWS_FILEFIND_H - -#include "../Common/MyString.h" -#include "../Common/Types.h" -#include "Defs.h" -#include "FileName.h" - -namespace NWindows { -namespace NFile { -namespace NFind { - -namespace NAttributes -{ - inline bool IsReadOnly(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_READONLY) != 0; } - inline bool IsHidden(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_HIDDEN) != 0; } - inline bool IsSystem(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_SYSTEM) != 0; } - inline bool IsDir(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_DIRECTORY) != 0; } - inline bool IsArchived(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_ARCHIVE) != 0; } - inline bool IsCompressed(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_COMPRESSED) != 0; } - inline bool IsEncrypted(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_ENCRYPTED) != 0; } -} - -class CFileInfoBase -{ - bool MatchesMask(UINT32 mask) const { return ((Attrib & mask) != 0); } -protected: - void Clear(); -public: - UInt64 Size; - FILETIME CTime; - FILETIME ATime; - FILETIME MTime; - DWORD Attrib; - bool IsDevice; - - /* - #ifdef UNDER_CE - DWORD ObjectID; - #else - UINT32 ReparseTag; - #endif - */ - - bool IsArchived() const { return MatchesMask(FILE_ATTRIBUTE_ARCHIVE); } - bool IsCompressed() const { return MatchesMask(FILE_ATTRIBUTE_COMPRESSED); } - bool IsDir() const { return MatchesMask(FILE_ATTRIBUTE_DIRECTORY); } - bool IsEncrypted() const { return MatchesMask(FILE_ATTRIBUTE_ENCRYPTED); } - bool IsHidden() const { return MatchesMask(FILE_ATTRIBUTE_HIDDEN); } - bool IsNormal() const { return MatchesMask(FILE_ATTRIBUTE_NORMAL); } - bool IsOffline() const { return MatchesMask(FILE_ATTRIBUTE_OFFLINE); } - bool IsReadOnly() const { return MatchesMask(FILE_ATTRIBUTE_READONLY); } - bool HasReparsePoint() const { return MatchesMask(FILE_ATTRIBUTE_REPARSE_POINT); } - bool IsSparse() const { return MatchesMask(FILE_ATTRIBUTE_SPARSE_FILE); } - bool IsSystem() const { return MatchesMask(FILE_ATTRIBUTE_SYSTEM); } - bool IsTemporary() const { return MatchesMask(FILE_ATTRIBUTE_TEMPORARY); } -}; - -struct CFileInfo: public CFileInfoBase -{ - CSysString Name; - - bool IsDots() const; - bool Find(LPCTSTR wildcard); -}; - -#ifdef _UNICODE -typedef CFileInfo CFileInfoW; -#else -struct CFileInfoW: public CFileInfoBase -{ - UString Name; - - bool IsDots() const; - bool Find(LPCWSTR wildcard); -}; -#endif - -class CFindFile -{ - friend class CEnumerator; - HANDLE _handle; -public: - bool IsHandleAllocated() const { return _handle != INVALID_HANDLE_VALUE; } - CFindFile(): _handle(INVALID_HANDLE_VALUE) {} - ~CFindFile() { Close(); } - bool FindFirst(LPCTSTR wildcard, CFileInfo &fileInfo); - bool FindNext(CFileInfo &fileInfo); - #ifndef _UNICODE - bool FindFirst(LPCWSTR wildcard, CFileInfoW &fileInfo); - bool FindNext(CFileInfoW &fileInfo); - #endif - bool Close(); -}; - -bool DoesFileExist(LPCTSTR name); -bool DoesDirExist(LPCTSTR name); -bool DoesFileOrDirExist(LPCTSTR name); -#ifndef _UNICODE -bool DoesFileExist(LPCWSTR name); -bool DoesDirExist(LPCWSTR name); -bool DoesFileOrDirExist(LPCWSTR name); -#endif - -class CEnumerator -{ - CFindFile _findFile; - CSysString _wildcard; - bool NextAny(CFileInfo &fileInfo); -public: - CEnumerator(): _wildcard(NName::kAnyStringWildcard) {} - CEnumerator(const CSysString &wildcard): _wildcard(wildcard) {} - bool Next(CFileInfo &fileInfo); - bool Next(CFileInfo &fileInfo, bool &found); -}; - -#ifdef _UNICODE -typedef CEnumerator CEnumeratorW; -#else -class CEnumeratorW -{ - CFindFile _findFile; - UString _wildcard; - bool NextAny(CFileInfoW &fileInfo); -public: - CEnumeratorW(): _wildcard(NName::kAnyStringWildcard) {} - CEnumeratorW(const UString &wildcard): _wildcard(wildcard) {} - bool Next(CFileInfoW &fileInfo); - bool Next(CFileInfoW &fileInfo, bool &found); -}; -#endif - -class CFindChangeNotification -{ - HANDLE _handle; -public: - operator HANDLE () { return _handle; } - bool IsHandleAllocated() const { return _handle != INVALID_HANDLE_VALUE && _handle != 0; } - CFindChangeNotification(): _handle(INVALID_HANDLE_VALUE) {} - ~CFindChangeNotification() { Close(); } - bool Close(); - HANDLE FindFirst(LPCTSTR pathName, bool watchSubtree, DWORD notifyFilter); - #ifndef _UNICODE - HANDLE FindFirst(LPCWSTR pathName, bool watchSubtree, DWORD notifyFilter); - #endif - bool FindNext() { return BOOLToBool(::FindNextChangeNotification(_handle)); } -}; - -#ifndef UNDER_CE -bool MyGetLogicalDriveStrings(CSysStringVector &driveStrings); -#ifndef _UNICODE -bool MyGetLogicalDriveStrings(UStringVector &driveStrings); -#endif -#endif - -}}} - -#endif - diff --git a/modules/lib7z/LZMASDK/CPP/Windows/FileIO.cpp b/modules/lib7z/LZMASDK/CPP/Windows/FileIO.cpp deleted file mode 100644 index a1a1bcc7087c..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/FileIO.cpp +++ /dev/null @@ -1,434 +0,0 @@ -// Windows/FileIO.cpp - -#include "StdAfx.h" - -#include "FileIO.h" - -#if defined(WIN_LONG_PATH) || defined(SUPPORT_DEVICE_FILE) -#include "../Common/MyString.h" -#endif -#ifndef _UNICODE -#include "../Common/StringConvert.h" -#endif - -#ifndef _UNICODE -extern bool g_IsNT; -#endif - -namespace NWindows { -namespace NFile { - -#ifdef SUPPORT_DEVICE_FILE -bool IsDeviceName(LPCTSTR n) -{ - #ifdef UNDER_CE - int len = (int)MyStringLen(n); - if (len < 5 || len > 5 || memcmp(n, TEXT("DSK"), 3 * sizeof(TCHAR)) != 0) - return false; - if (n[4] != ':') - return false; - // for reading use SG_REQ sg; if (DeviceIoControl(dsk, IOCTL_DISK_READ)); - #else - if (n[0] != '\\' || n[1] != '\\' || n[2] != '.' || n[3] != '\\') - return false; - int len = (int)MyStringLen(n); - if (len == 6 && n[5] == ':') - return true; - if (len < 18 || len > 22 || memcmp(n + 4, TEXT("PhysicalDrive"), 13 * sizeof(TCHAR)) != 0) - return false; - for (int i = 17; i < len; i++) - if (n[i] < '0' || n[i] > '9') - return false; - #endif - return true; -} - -#ifndef _UNICODE -bool IsDeviceName(LPCWSTR n) -{ - if (n[0] != '\\' || n[1] != '\\' || n[2] != '.' || n[3] != '\\') - return false; - int len = (int)wcslen(n); - if (len == 6 && n[5] == ':') - return true; - if (len < 18 || len > 22 || wcsncmp(n + 4, L"PhysicalDrive", 13) != 0) - return false; - for (int i = 17; i < len; i++) - if (n[i] < '0' || n[i] > '9') - return false; - return true; -} -#endif -#endif - -#if defined(WIN_LONG_PATH) && defined(_UNICODE) -#define WIN_LONG_PATH2 -#endif - -#ifdef WIN_LONG_PATH -bool GetLongPathBase(LPCWSTR s, UString &res) -{ - res.Empty(); - int len = MyStringLen(s); - wchar_t c = s[0]; - if (len < 1 || c == L'\\' || c == L'.' && (len == 1 || len == 2 && s[1] == L'.')) - return true; - UString curDir; - bool isAbs = false; - if (len > 3) - isAbs = (s[1] == L':' && s[2] == L'\\' && (c >= L'a' && c <= L'z' || c >= L'A' && c <= L'Z')); - - if (!isAbs) - { - DWORD needLength = ::GetCurrentDirectoryW(MAX_PATH + 1, curDir.GetBuffer(MAX_PATH + 1)); - curDir.ReleaseBuffer(); - if (needLength == 0 || needLength > MAX_PATH) - return false; - if (curDir[curDir.Length() - 1] != L'\\') - curDir += L'\\'; - } - res = UString(L"\\\\?\\") + curDir + s; - return true; -} - -bool GetLongPath(LPCWSTR path, UString &longPath) -{ - if (GetLongPathBase(path, longPath)) - return !longPath.IsEmpty(); - return false; -} -#endif - -namespace NIO { - -CFileBase::~CFileBase() { Close(); } - -bool CFileBase::Create(LPCTSTR fileName, DWORD desiredAccess, - DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) -{ - if (!Close()) - return false; - _handle = ::CreateFile(fileName, desiredAccess, shareMode, - (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, - flagsAndAttributes, (HANDLE)NULL); - #ifdef WIN_LONG_PATH2 - if (_handle == INVALID_HANDLE_VALUE) - { - UString longPath; - if (GetLongPath(fileName, longPath)) - _handle = ::CreateFileW(longPath, desiredAccess, shareMode, - (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, - flagsAndAttributes, (HANDLE)NULL); - } - #endif - #ifdef SUPPORT_DEVICE_FILE - IsDeviceFile = false; - #endif - return (_handle != INVALID_HANDLE_VALUE); -} - -#ifndef _UNICODE -bool CFileBase::Create(LPCWSTR fileName, DWORD desiredAccess, - DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) -{ - if (!g_IsNT) - return Create(UnicodeStringToMultiByte(fileName, ::AreFileApisANSI() ? CP_ACP : CP_OEMCP), - desiredAccess, shareMode, creationDisposition, flagsAndAttributes); - if (!Close()) - return false; - _handle = ::CreateFileW(fileName, desiredAccess, shareMode, - (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, - flagsAndAttributes, (HANDLE)NULL); - #ifdef WIN_LONG_PATH - if (_handle == INVALID_HANDLE_VALUE) - { - UString longPath; - if (GetLongPath(fileName, longPath)) - _handle = ::CreateFileW(longPath, desiredAccess, shareMode, - (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, - flagsAndAttributes, (HANDLE)NULL); - } - #endif - #ifdef SUPPORT_DEVICE_FILE - IsDeviceFile = false; - #endif - return (_handle != INVALID_HANDLE_VALUE); -} -#endif - -bool CFileBase::Close() -{ - if (_handle == INVALID_HANDLE_VALUE) - return true; - if (!::CloseHandle(_handle)) - return false; - _handle = INVALID_HANDLE_VALUE; - return true; -} - -bool CFileBase::GetPosition(UInt64 &position) const -{ - return Seek(0, FILE_CURRENT, position); -} - -bool CFileBase::GetLength(UInt64 &length) const -{ - #ifdef SUPPORT_DEVICE_FILE - if (IsDeviceFile && LengthDefined) - { - length = Length; - return true; - } - #endif - - DWORD sizeHigh; - DWORD sizeLow = ::GetFileSize(_handle, &sizeHigh); - if (sizeLow == 0xFFFFFFFF) - if (::GetLastError() != NO_ERROR) - return false; - length = (((UInt64)sizeHigh) << 32) + sizeLow; - return true; -} - -bool CFileBase::Seek(Int64 distanceToMove, DWORD moveMethod, UInt64 &newPosition) const -{ - #ifdef SUPPORT_DEVICE_FILE - if (IsDeviceFile && LengthDefined && moveMethod == FILE_END) - { - distanceToMove += Length; - moveMethod = FILE_BEGIN; - } - #endif - - LARGE_INTEGER value; - value.QuadPart = distanceToMove; - value.LowPart = ::SetFilePointer(_handle, value.LowPart, &value.HighPart, moveMethod); - if (value.LowPart == 0xFFFFFFFF) - if (::GetLastError() != NO_ERROR) - return false; - newPosition = value.QuadPart; - return true; -} - -bool CFileBase::Seek(UInt64 position, UInt64 &newPosition) -{ - return Seek(position, FILE_BEGIN, newPosition); -} - -bool CFileBase::SeekToBegin() -{ - UInt64 newPosition; - return Seek(0, newPosition); -} - -bool CFileBase::SeekToEnd(UInt64 &newPosition) -{ - return Seek(0, FILE_END, newPosition); -} - -bool CFileBase::GetFileInformation(CByHandleFileInfo &fileInfo) const -{ - BY_HANDLE_FILE_INFORMATION winFileInfo; - if (!::GetFileInformationByHandle(_handle, &winFileInfo)) - return false; - fileInfo.Attrib = winFileInfo.dwFileAttributes; - fileInfo.CTime = winFileInfo.ftCreationTime; - fileInfo.ATime = winFileInfo.ftLastAccessTime; - fileInfo.MTime = winFileInfo.ftLastWriteTime; - fileInfo.VolumeSerialNumber = winFileInfo.dwFileAttributes; - fileInfo.Size = (((UInt64)winFileInfo.nFileSizeHigh) << 32) + winFileInfo.nFileSizeLow; - fileInfo.NumberOfLinks = winFileInfo.nNumberOfLinks; - fileInfo.FileIndex = (((UInt64)winFileInfo.nFileIndexHigh) << 32) + winFileInfo.nFileIndexLow; - return true; -} - -///////////////////////// -// CInFile - -#ifdef SUPPORT_DEVICE_FILE -void CInFile::GetDeviceLength() -{ - if (_handle != INVALID_HANDLE_VALUE && IsDeviceFile) - { - #ifdef UNDER_CE - LengthDefined = true; - Length = 128 << 20; - - #else - PARTITION_INFORMATION partInfo; - LengthDefined = true; - Length = 0; - - if (GetPartitionInfo(&partInfo)) - Length = partInfo.PartitionLength.QuadPart; - else - { - DISK_GEOMETRY geom; - if (!GetGeometry(&geom)) - if (!GetCdRomGeometry(&geom)) - LengthDefined = false; - if (LengthDefined) - Length = geom.Cylinders.QuadPart * geom.TracksPerCylinder * geom.SectorsPerTrack * geom.BytesPerSector; - } - // SeekToBegin(); - #endif - } -} - -// ((desiredAccess & (FILE_WRITE_DATA | FILE_APPEND_DATA | GENERIC_WRITE)) == 0 && - -#define MY_DEVICE_EXTRA_CODE \ - IsDeviceFile = IsDeviceName(fileName); \ - GetDeviceLength(); -#else -#define MY_DEVICE_EXTRA_CODE -#endif - -bool CInFile::Open(LPCTSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) -{ - bool res = Create(fileName, GENERIC_READ, shareMode, creationDisposition, flagsAndAttributes); - MY_DEVICE_EXTRA_CODE - return res; -} - -bool CInFile::OpenShared(LPCTSTR fileName, bool shareForWrite) -{ return Open(fileName, FILE_SHARE_READ | (shareForWrite ? FILE_SHARE_WRITE : 0), OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL); } - -bool CInFile::Open(LPCTSTR fileName) - { return OpenShared(fileName, false); } - -#ifndef _UNICODE -bool CInFile::Open(LPCWSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) -{ - bool res = Create(fileName, GENERIC_READ, shareMode, creationDisposition, flagsAndAttributes); - MY_DEVICE_EXTRA_CODE - return res; -} - -bool CInFile::OpenShared(LPCWSTR fileName, bool shareForWrite) -{ return Open(fileName, FILE_SHARE_READ | (shareForWrite ? FILE_SHARE_WRITE : 0), OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL); } - -bool CInFile::Open(LPCWSTR fileName) - { return OpenShared(fileName, false); } -#endif - -// ReadFile and WriteFile functions in Windows have BUG: -// If you Read or Write 64MB or more (probably min_failure_size = 64MB - 32KB + 1) -// from/to Network file, it returns ERROR_NO_SYSTEM_RESOURCES -// (Insufficient system resources exist to complete the requested service). - -// Probably in some version of Windows there are problems with other sizes: -// for 32 MB (maybe also for 16 MB). -// And message can be "Network connection was lost" - -static UInt32 kChunkSizeMax = (1 << 22); - -bool CInFile::Read1(void *data, UInt32 size, UInt32 &processedSize) -{ - DWORD processedLoc = 0; - bool res = BOOLToBool(::ReadFile(_handle, data, size, &processedLoc, NULL)); - processedSize = (UInt32)processedLoc; - return res; -} - -bool CInFile::ReadPart(void *data, UInt32 size, UInt32 &processedSize) -{ - if (size > kChunkSizeMax) - size = kChunkSizeMax; - return Read1(data, size, processedSize); -} - -bool CInFile::Read(void *data, UInt32 size, UInt32 &processedSize) -{ - processedSize = 0; - do - { - UInt32 processedLoc = 0; - bool res = ReadPart(data, size, processedLoc); - processedSize += processedLoc; - if (!res) - return false; - if (processedLoc == 0) - return true; - data = (void *)((unsigned char *)data + processedLoc); - size -= processedLoc; - } - while (size > 0); - return true; -} - -///////////////////////// -// COutFile - -bool COutFile::Open(LPCTSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) - { return CFileBase::Create(fileName, GENERIC_WRITE, shareMode, creationDisposition, flagsAndAttributes); } - -static inline DWORD GetCreationDisposition(bool createAlways) - { return createAlways? CREATE_ALWAYS: CREATE_NEW; } - -bool COutFile::Open(LPCTSTR fileName, DWORD creationDisposition) - { return Open(fileName, FILE_SHARE_READ, creationDisposition, FILE_ATTRIBUTE_NORMAL); } - -bool COutFile::Create(LPCTSTR fileName, bool createAlways) - { return Open(fileName, GetCreationDisposition(createAlways)); } - -#ifndef _UNICODE - -bool COutFile::Open(LPCWSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) - { return CFileBase::Create(fileName, GENERIC_WRITE, shareMode, creationDisposition, flagsAndAttributes); } - -bool COutFile::Open(LPCWSTR fileName, DWORD creationDisposition) - { return Open(fileName, FILE_SHARE_READ, creationDisposition, FILE_ATTRIBUTE_NORMAL); } - -bool COutFile::Create(LPCWSTR fileName, bool createAlways) - { return Open(fileName, GetCreationDisposition(createAlways)); } - -#endif - -bool COutFile::SetTime(const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime) - { return BOOLToBool(::SetFileTime(_handle, cTime, aTime, mTime)); } - -bool COutFile::SetMTime(const FILETIME *mTime) { return SetTime(NULL, NULL, mTime); } - -bool COutFile::WritePart(const void *data, UInt32 size, UInt32 &processedSize) -{ - if (size > kChunkSizeMax) - size = kChunkSizeMax; - DWORD processedLoc = 0; - bool res = BOOLToBool(::WriteFile(_handle, data, size, &processedLoc, NULL)); - processedSize = (UInt32)processedLoc; - return res; -} - -bool COutFile::Write(const void *data, UInt32 size, UInt32 &processedSize) -{ - processedSize = 0; - do - { - UInt32 processedLoc = 0; - bool res = WritePart(data, size, processedLoc); - processedSize += processedLoc; - if (!res) - return false; - if (processedLoc == 0) - return true; - data = (const void *)((const unsigned char *)data + processedLoc); - size -= processedLoc; - } - while (size > 0); - return true; -} - -bool COutFile::SetEndOfFile() { return BOOLToBool(::SetEndOfFile(_handle)); } - -bool COutFile::SetLength(UInt64 length) -{ - UInt64 newPosition; - if (!Seek(length, newPosition)) - return false; - if (newPosition != length) - return false; - return SetEndOfFile(); -} - -}}} diff --git a/modules/lib7z/LZMASDK/CPP/Windows/FileIO.h b/modules/lib7z/LZMASDK/CPP/Windows/FileIO.h deleted file mode 100644 index 6f1481710ef2..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/FileIO.h +++ /dev/null @@ -1,136 +0,0 @@ -// Windows/FileIO.h - -#ifndef __WINDOWS_FILEIO_H -#define __WINDOWS_FILEIO_H - -#include "../Common/Types.h" - -#include "Defs.h" - -namespace NWindows { -namespace NFile { -namespace NIO { - -struct CByHandleFileInfo -{ - DWORD Attrib; - FILETIME CTime; - FILETIME ATime; - FILETIME MTime; - DWORD VolumeSerialNumber; - UInt64 Size; - DWORD NumberOfLinks; - UInt64 FileIndex; -}; - -class CFileBase -{ -protected: - HANDLE _handle; - - bool Create(LPCTSTR fileName, DWORD desiredAccess, - DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); - #ifndef _UNICODE - bool Create(LPCWSTR fileName, DWORD desiredAccess, - DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); - #endif - -public: - #ifdef SUPPORT_DEVICE_FILE - bool IsDeviceFile; - bool LengthDefined; - UInt64 Length; - #endif - - CFileBase(): _handle(INVALID_HANDLE_VALUE) {}; - ~CFileBase(); - - bool Close(); - - bool GetPosition(UInt64 &position) const; - bool GetLength(UInt64 &length) const; - - bool Seek(Int64 distanceToMove, DWORD moveMethod, UInt64 &newPosition) const; - bool Seek(UInt64 position, UInt64 &newPosition); - bool SeekToBegin(); - bool SeekToEnd(UInt64 &newPosition); - - bool GetFileInformation(CByHandleFileInfo &fileInfo) const; -}; - -#define IOCTL_CDROM_BASE FILE_DEVICE_CD_ROM -#define IOCTL_CDROM_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS) -#define IOCTL_CDROM_MEDIA_REMOVAL CTL_CODE(IOCTL_CDROM_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) - -class CInFile: public CFileBase -{ - #ifdef SUPPORT_DEVICE_FILE - bool DeviceIoControl(DWORD controlCode, LPVOID inBuffer, DWORD inSize, - LPVOID outBuffer, DWORD outSize, LPDWORD bytesReturned, LPOVERLAPPED overlapped) const - { - return BOOLToBool(::DeviceIoControl(_handle, controlCode, inBuffer, inSize, - outBuffer, outSize, bytesReturned, overlapped)); - } - - bool DeviceIoControl(DWORD controlCode, LPVOID inBuffer, - DWORD inSize, LPVOID outBuffer, DWORD outSize) const - { - DWORD ret; - return DeviceIoControl(controlCode, inBuffer, inSize, outBuffer, outSize, &ret, 0); - } - - bool DeviceIoControlOut(DWORD controlCode, LPVOID outBuffer, DWORD outSize) const - { return DeviceIoControl(controlCode, NULL, 0, outBuffer, outSize); } - - #ifndef UNDER_CE - bool GetGeometry(DISK_GEOMETRY *res) const - { return DeviceIoControlOut(IOCTL_DISK_GET_DRIVE_GEOMETRY, res, sizeof(*res)); } - - bool GetCdRomGeometry(DISK_GEOMETRY *res) const - { return DeviceIoControlOut(IOCTL_CDROM_GET_DRIVE_GEOMETRY, res, sizeof(*res)); } - - bool GetPartitionInfo(PARTITION_INFORMATION *res) - { return DeviceIoControlOut(IOCTL_DISK_GET_PARTITION_INFO, LPVOID(res), sizeof(*res)); } - #endif - - void GetDeviceLength(); - #endif - -public: - bool Open(LPCTSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); - bool OpenShared(LPCTSTR fileName, bool shareForWrite); - bool Open(LPCTSTR fileName); - #ifndef _UNICODE - bool Open(LPCWSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); - bool OpenShared(LPCWSTR fileName, bool shareForWrite); - bool Open(LPCWSTR fileName); - #endif - bool Read1(void *data, UInt32 size, UInt32 &processedSize); - bool ReadPart(void *data, UInt32 size, UInt32 &processedSize); - bool Read(void *data, UInt32 size, UInt32 &processedSize); -}; - -class COutFile: public CFileBase -{ -public: - bool Open(LPCTSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); - bool Open(LPCTSTR fileName, DWORD creationDisposition); - bool Create(LPCTSTR fileName, bool createAlways); - - #ifndef _UNICODE - bool Open(LPCWSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); - bool Open(LPCWSTR fileName, DWORD creationDisposition); - bool Create(LPCWSTR fileName, bool createAlways); - #endif - - bool SetTime(const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime); - bool SetMTime(const FILETIME *mTime); - bool WritePart(const void *data, UInt32 size, UInt32 &processedSize); - bool Write(const void *data, UInt32 size, UInt32 &processedSize); - bool SetEndOfFile(); - bool SetLength(UInt64 length); -}; - -}}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/FileMapping.cpp b/modules/lib7z/LZMASDK/CPP/Windows/FileMapping.cpp deleted file mode 100644 index 9d228b111326..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/FileMapping.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// Windows/FileMapping.cpp - -#include "StdAfx.h" - -#include "Windows/FileMapping.h" - -namespace NWindows { -namespace NFile { -namespace NMapping { - - - - -}}} \ No newline at end of file diff --git a/modules/lib7z/LZMASDK/CPP/Windows/FileMapping.h b/modules/lib7z/LZMASDK/CPP/Windows/FileMapping.h deleted file mode 100644 index 138a175b4050..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/FileMapping.h +++ /dev/null @@ -1,62 +0,0 @@ -// Windows/FileMapping.h - -#ifndef __WINDOWS_FILEMAPPING_H -#define __WINDOWS_FILEMAPPING_H - -#include "Common/Types.h" - -#include "Handle.h" - -namespace NWindows { - -class CFileMapping: public CHandle -{ -public: - WRes Create(DWORD protect, UInt64 maxSize, LPCTSTR name) - { - _handle = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, protect, (DWORD)(maxSize >> 32), (DWORD)maxSize, name); - return ::GetLastError(); - } - - WRes Open(DWORD desiredAccess, LPCTSTR name) - { - #ifdef UNDER_CE - WRes res = Create(PAGE_READONLY, 0, name); - if (res == ERROR_ALREADY_EXISTS) - return 0; - Close(); - if (res == 0) - res = ERROR_FILE_NOT_FOUND; - return res; - #else - _handle = ::OpenFileMapping(desiredAccess, FALSE, name); - if (_handle != 0) - return 0; - return ::GetLastError(); - #endif - } - - LPVOID Map(DWORD desiredAccess, UInt64 fileOffset, SIZE_T numberOfBytesToMap) - { - return ::MapViewOfFile(_handle, desiredAccess, (DWORD)(fileOffset >> 32), (DWORD)fileOffset, numberOfBytesToMap); - } - - #ifndef UNDER_CE - LPVOID Map(DWORD desiredAccess, UInt64 fileOffset, SIZE_T numberOfBytesToMap, LPVOID baseAddress) - { - return ::MapViewOfFileEx(_handle, desiredAccess, (DWORD)(fileOffset >> 32), (DWORD)fileOffset, numberOfBytesToMap, baseAddress); - } - #endif -}; - -class CFileUnmapper -{ - const void *_data; -public: - CFileUnmapper(const void *data) : _data(data) {} - ~CFileUnmapper() { ::UnmapViewOfFile(_data); } -}; - -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/FileName.cpp b/modules/lib7z/LZMASDK/CPP/Windows/FileName.cpp deleted file mode 100644 index 4e55a5308562..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/FileName.cpp +++ /dev/null @@ -1,50 +0,0 @@ -// Windows/FileName.cpp - -#include "StdAfx.h" - -#include "Windows/FileName.h" -#include "Common/Wildcard.h" - -namespace NWindows { -namespace NFile { -namespace NName { - -void NormalizeDirPathPrefix(CSysString &dirPath) -{ - if (dirPath.IsEmpty()) - return; - if (dirPath.ReverseFind(kDirDelimiter) != dirPath.Length() - 1) - dirPath += kDirDelimiter; -} - -#ifndef _UNICODE -void NormalizeDirPathPrefix(UString &dirPath) -{ - if (dirPath.IsEmpty()) - return; - if (dirPath.ReverseFind(wchar_t(kDirDelimiter)) != dirPath.Length() - 1) - dirPath += wchar_t(kDirDelimiter); -} -#endif - -const wchar_t kExtensionDelimiter = L'.'; - -void SplitNameToPureNameAndExtension(const UString &fullName, - UString &pureName, UString &extensionDelimiter, UString &extension) -{ - int index = fullName.ReverseFind(kExtensionDelimiter); - if (index < 0) - { - pureName = fullName; - extensionDelimiter.Empty(); - extension.Empty(); - } - else - { - pureName = fullName.Left(index); - extensionDelimiter = kExtensionDelimiter; - extension = fullName.Mid(index + 1); - } -} - -}}} diff --git a/modules/lib7z/LZMASDK/CPP/Windows/FileName.h b/modules/lib7z/LZMASDK/CPP/Windows/FileName.h deleted file mode 100644 index 02dba3b69d1f..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/FileName.h +++ /dev/null @@ -1,25 +0,0 @@ -// Windows/FileName.h - -#ifndef __WINDOWS_FILENAME_H -#define __WINDOWS_FILENAME_H - -#include "../Common/MyString.h" - -namespace NWindows { -namespace NFile { -namespace NName { - -const TCHAR kDirDelimiter = CHAR_PATH_SEPARATOR; -const TCHAR kAnyStringWildcard = '*'; - -void NormalizeDirPathPrefix(CSysString &dirPath); // ensures that it ended with '\\' -#ifndef _UNICODE -void NormalizeDirPathPrefix(UString &dirPath); // ensures that it ended with '\\' -#endif - -void SplitNameToPureNameAndExtension(const UString &fullName, - UString &pureName, UString &extensionDelimiter, UString &extension); - -}}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/Handle.h b/modules/lib7z/LZMASDK/CPP/Windows/Handle.h deleted file mode 100644 index 755eeb8c5f05..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/Handle.h +++ /dev/null @@ -1,37 +0,0 @@ -// Windows/Handle.h - -#ifndef __WINDOWS_HANDLE_H -#define __WINDOWS_HANDLE_H - -namespace NWindows { - -class CHandle -{ -protected: - HANDLE _handle; -public: - operator HANDLE() { return _handle; } - CHandle(): _handle(NULL) {} - ~CHandle() { Close(); } - bool IsCreated() const { return (_handle != NULL); } - bool Close() - { - if (_handle == NULL) - return true; - if (!::CloseHandle(_handle)) - return false; - _handle = NULL; - return true; - } - void Attach(HANDLE handle) { _handle = handle; } - HANDLE Detach() - { - HANDLE handle = _handle; - _handle = NULL; - return handle; - } -}; - -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/MemoryLock.cpp b/modules/lib7z/LZMASDK/CPP/Windows/MemoryLock.cpp deleted file mode 100644 index 9b2ffb81ebd3..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/MemoryLock.cpp +++ /dev/null @@ -1,82 +0,0 @@ -// Common/MemoryLock.cpp - -#include "StdAfx.h" - -namespace NWindows { -namespace NSecurity { - -#ifndef UNDER_CE - -#ifndef _UNICODE -typedef BOOL (WINAPI * OpenProcessTokenP)(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle); -typedef BOOL (WINAPI * LookupPrivilegeValueP)(LPCTSTR lpSystemName, LPCTSTR lpName, PLUID lpLuid); -typedef BOOL (WINAPI * AdjustTokenPrivilegesP)(HANDLE TokenHandle, BOOL DisableAllPrivileges, - PTOKEN_PRIVILEGES NewState, DWORD BufferLength, PTOKEN_PRIVILEGES PreviousState,PDWORD ReturnLength); -#endif - -#ifdef _UNICODE -bool EnableLockMemoryPrivilege( -#else -static bool EnableLockMemoryPrivilege2(HMODULE hModule, -#endif -bool enable) -{ - #ifndef _UNICODE - if (hModule == NULL) - return false; - OpenProcessTokenP openProcessToken = (OpenProcessTokenP)GetProcAddress(hModule, "OpenProcessToken"); - LookupPrivilegeValueP lookupPrivilegeValue = (LookupPrivilegeValueP)GetProcAddress(hModule, "LookupPrivilegeValueA" ); - AdjustTokenPrivilegesP adjustTokenPrivileges = (AdjustTokenPrivilegesP)GetProcAddress(hModule, "AdjustTokenPrivileges"); - if (openProcessToken == NULL || adjustTokenPrivileges == NULL || lookupPrivilegeValue == NULL) - return false; - #endif - - HANDLE token; - if (! - #ifdef _UNICODE - ::OpenProcessToken - #else - openProcessToken - #endif - (::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token)) - return false; - TOKEN_PRIVILEGES tp; - bool res = false; - if ( - #ifdef _UNICODE - ::LookupPrivilegeValue - #else - lookupPrivilegeValue - #endif - (NULL, SE_LOCK_MEMORY_NAME, &(tp.Privileges[0].Luid))) - { - tp.PrivilegeCount = 1; - tp.Privileges[0].Attributes = enable ? SE_PRIVILEGE_ENABLED: 0; - if ( - #ifdef _UNICODE - ::AdjustTokenPrivileges - #else - adjustTokenPrivileges - #endif - (token, FALSE, &tp, 0, NULL, NULL)) - res = (GetLastError() == ERROR_SUCCESS); - } - ::CloseHandle(token); - return res; -} - -#ifndef _UNICODE -bool EnableLockMemoryPrivilege(bool enable) -{ - HMODULE hModule = LoadLibrary(TEXT("Advapi32.dll")); - if (hModule == NULL) - return false; - bool res = EnableLockMemoryPrivilege2(hModule, enable); - ::FreeLibrary(hModule); - return res; -} -#endif - -#endif - -}} diff --git a/modules/lib7z/LZMASDK/CPP/Windows/MemoryLock.h b/modules/lib7z/LZMASDK/CPP/Windows/MemoryLock.h deleted file mode 100644 index f2e574bc96fe..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/MemoryLock.h +++ /dev/null @@ -1,15 +0,0 @@ -// Windows/MemoryLock.h - -#ifndef __WINDOWS_MEMORYLOCK_H -#define __WINDOWS_MEMORYLOCK_H - -namespace NWindows { -namespace NSecurity { - -#ifndef UNDER_CE -bool EnableLockMemoryPrivilege(bool enable = true); -#endif - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/NtCheck.h b/modules/lib7z/LZMASDK/CPP/Windows/NtCheck.h deleted file mode 100644 index b8fa99bb807c..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/NtCheck.h +++ /dev/null @@ -1,44 +0,0 @@ -// Windows/NtCheck.h - -#ifndef __WINDOWS_NT_CHECK_H -#define __WINDOWS_NT_CHECK_H - -#ifdef _WIN32 - -#if !defined(_WIN64) && !defined(UNDER_CE) -static inline bool IsItWindowsNT() -{ - OSVERSIONINFO vi; - vi.dwOSVersionInfoSize = sizeof(vi); - return (::GetVersionEx(&vi) && vi.dwPlatformId == VER_PLATFORM_WIN32_NT); -} -#endif - -#ifndef _UNICODE - #if defined(_WIN64) || defined(UNDER_CE) - bool g_IsNT = true; - #define SET_IS_NT - #else - bool g_IsNT = false; - #define SET_IS_NT g_IsNT = IsItWindowsNT(); - #endif - #define NT_CHECK_ACTION - // #define NT_CHECK_ACTION { NT_CHECK_FAIL_ACTION } -#else - #if !defined(_WIN64) && !defined(UNDER_CE) - #define NT_CHECK_ACTION if (!IsItWindowsNT()) { NT_CHECK_FAIL_ACTION } - #else - #define NT_CHECK_ACTION - #endif - #define SET_IS_NT -#endif - -#define NT_CHECK NT_CHECK_ACTION SET_IS_NT - -#else - -#define NT_CHECK - -#endif - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/PropVariant.cpp b/modules/lib7z/LZMASDK/CPP/Windows/PropVariant.cpp deleted file mode 100644 index 41a7ff963ef5..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/PropVariant.cpp +++ /dev/null @@ -1,332 +0,0 @@ -// Windows/PropVariant.cpp - -#include "StdAfx.h" - -#include "PropVariant.h" - -#include "../Common/Defs.h" - -namespace NWindows { -namespace NCOM { - -CPropVariant::CPropVariant(const PROPVARIANT& varSrc) -{ - vt = VT_EMPTY; - InternalCopy(&varSrc); -} - -CPropVariant::CPropVariant(const CPropVariant& varSrc) -{ - vt = VT_EMPTY; - InternalCopy(&varSrc); -} - -CPropVariant::CPropVariant(BSTR bstrSrc) -{ - vt = VT_EMPTY; - *this = bstrSrc; -} - -CPropVariant::CPropVariant(LPCOLESTR lpszSrc) -{ - vt = VT_EMPTY; - *this = lpszSrc; -} - -CPropVariant& CPropVariant::operator=(const CPropVariant& varSrc) -{ - InternalCopy(&varSrc); - return *this; -} -CPropVariant& CPropVariant::operator=(const PROPVARIANT& varSrc) -{ - InternalCopy(&varSrc); - return *this; -} - -CPropVariant& CPropVariant::operator=(BSTR bstrSrc) -{ - *this = (LPCOLESTR)bstrSrc; - return *this; -} - -CPropVariant& CPropVariant::operator=(LPCOLESTR lpszSrc) -{ - InternalClear(); - vt = VT_BSTR; - wReserved1 = 0; - bstrVal = ::SysAllocString(lpszSrc); - if (bstrVal == NULL && lpszSrc != NULL) - { - vt = VT_ERROR; - scode = E_OUTOFMEMORY; - } - return *this; -} - - -CPropVariant& CPropVariant::operator=(const char *s) -{ - InternalClear(); - vt = VT_BSTR; - wReserved1 = 0; - UINT len = (UINT)strlen(s); - bstrVal = ::SysAllocStringByteLen(0, (UINT)len * sizeof(OLECHAR)); - if (bstrVal == NULL) - { - vt = VT_ERROR; - scode = E_OUTOFMEMORY; - } - else - { - for (UINT i = 0; i <= len; i++) - bstrVal[i] = s[i]; - } - return *this; -} - -CPropVariant& CPropVariant::operator=(bool bSrc) -{ - if (vt != VT_BOOL) - { - InternalClear(); - vt = VT_BOOL; - } - boolVal = bSrc ? VARIANT_TRUE : VARIANT_FALSE; - return *this; -} - -CPropVariant& CPropVariant::operator=(UInt32 value) -{ - if (vt != VT_UI4) - { - InternalClear(); - vt = VT_UI4; - } - ulVal = value; - return *this; -} - -CPropVariant& CPropVariant::operator=(UInt64 value) -{ - if (vt != VT_UI8) - { - InternalClear(); - vt = VT_UI8; - } - uhVal.QuadPart = value; - return *this; -} - -CPropVariant& CPropVariant::operator=(const FILETIME &value) -{ - if (vt != VT_FILETIME) - { - InternalClear(); - vt = VT_FILETIME; - } - filetime = value; - return *this; -} - -CPropVariant& CPropVariant::operator=(Int32 value) -{ - if (vt != VT_I4) - { - InternalClear(); - vt = VT_I4; - } - lVal = value; - - return *this; -} - -CPropVariant& CPropVariant::operator=(Byte value) -{ - if (vt != VT_UI1) - { - InternalClear(); - vt = VT_UI1; - } - bVal = value; - return *this; -} - -CPropVariant& CPropVariant::operator=(Int16 value) -{ - if (vt != VT_I2) - { - InternalClear(); - vt = VT_I2; - } - iVal = value; - return *this; -} - -/* -CPropVariant& CPropVariant::operator=(LONG value) -{ - if (vt != VT_I4) - { - InternalClear(); - vt = VT_I4; - } - lVal = value; - return *this; -} -*/ - -static HRESULT MyPropVariantClear(PROPVARIANT *propVariant) -{ - switch(propVariant->vt) - { - case VT_UI1: - case VT_I1: - case VT_I2: - case VT_UI2: - case VT_BOOL: - case VT_I4: - case VT_UI4: - case VT_R4: - case VT_INT: - case VT_UINT: - case VT_ERROR: - case VT_FILETIME: - case VT_UI8: - case VT_R8: - case VT_CY: - case VT_DATE: - propVariant->vt = VT_EMPTY; - propVariant->wReserved1 = 0; - return S_OK; - } - return ::VariantClear((VARIANTARG *)propVariant); -} - -HRESULT CPropVariant::Clear() -{ - return MyPropVariantClear(this); -} - -HRESULT CPropVariant::Copy(const PROPVARIANT* pSrc) -{ - ::VariantClear((tagVARIANT *)this); - switch(pSrc->vt) - { - case VT_UI1: - case VT_I1: - case VT_I2: - case VT_UI2: - case VT_BOOL: - case VT_I4: - case VT_UI4: - case VT_R4: - case VT_INT: - case VT_UINT: - case VT_ERROR: - case VT_FILETIME: - case VT_UI8: - case VT_R8: - case VT_CY: - case VT_DATE: - memmove((PROPVARIANT*)this, pSrc, sizeof(PROPVARIANT)); - return S_OK; - } - return ::VariantCopy((tagVARIANT *)this, (tagVARIANT *)(pSrc)); -} - - -HRESULT CPropVariant::Attach(PROPVARIANT* pSrc) -{ - HRESULT hr = Clear(); - if (FAILED(hr)) - return hr; - memcpy(this, pSrc, sizeof(PROPVARIANT)); - pSrc->vt = VT_EMPTY; - return S_OK; -} - -HRESULT CPropVariant::Detach(PROPVARIANT* pDest) -{ - HRESULT hr = MyPropVariantClear(pDest); - if (FAILED(hr)) - return hr; - memcpy(pDest, this, sizeof(PROPVARIANT)); - vt = VT_EMPTY; - return S_OK; -} - -HRESULT CPropVariant::InternalClear() -{ - HRESULT hr = Clear(); - if (FAILED(hr)) - { - vt = VT_ERROR; - scode = hr; - } - return hr; -} - -void CPropVariant::InternalCopy(const PROPVARIANT* pSrc) -{ - HRESULT hr = Copy(pSrc); - if (FAILED(hr)) - { - vt = VT_ERROR; - scode = hr; - } -} - -int CPropVariant::Compare(const CPropVariant &a) -{ - if (vt != a.vt) - return 0; // it's mean some bug - switch (vt) - { - case VT_EMPTY: - return 0; - - /* - case VT_I1: - return MyCompare(cVal, a.cVal); - */ - case VT_UI1: - return MyCompare(bVal, a.bVal); - - case VT_I2: - return MyCompare(iVal, a.iVal); - case VT_UI2: - return MyCompare(uiVal, a.uiVal); - - case VT_I4: - return MyCompare(lVal, a.lVal); - /* - case VT_INT: - return MyCompare(intVal, a.intVal); - */ - case VT_UI4: - return MyCompare(ulVal, a.ulVal); - /* - case VT_UINT: - return MyCompare(uintVal, a.uintVal); - */ - case VT_I8: - return MyCompare(hVal.QuadPart, a.hVal.QuadPart); - case VT_UI8: - return MyCompare(uhVal.QuadPart, a.uhVal.QuadPart); - - case VT_BOOL: - return -MyCompare(boolVal, a.boolVal); - - case VT_FILETIME: - return ::CompareFileTime(&filetime, &a.filetime); - case VT_BSTR: - return 0; // Not implemented - // return MyCompare(aPropVarint.cVal); - - default: - return 0; - } -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/Windows/PropVariant.h b/modules/lib7z/LZMASDK/CPP/Windows/PropVariant.h deleted file mode 100644 index 60dce5b53024..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/PropVariant.h +++ /dev/null @@ -1,58 +0,0 @@ -// Windows/PropVariant.h - -#ifndef __WINDOWS_PROPVARIANT_H -#define __WINDOWS_PROPVARIANT_H - -#include "../Common/MyWindows.h" -#include "../Common/Types.h" - -namespace NWindows { -namespace NCOM { - -class CPropVariant : public tagPROPVARIANT -{ -public: - CPropVariant() { vt = VT_EMPTY; wReserved1 = 0; } - ~CPropVariant() { Clear(); } - CPropVariant(const PROPVARIANT& varSrc); - CPropVariant(const CPropVariant& varSrc); - CPropVariant(BSTR bstrSrc); - CPropVariant(LPCOLESTR lpszSrc); - CPropVariant(bool bSrc) { vt = VT_BOOL; wReserved1 = 0; boolVal = (bSrc ? VARIANT_TRUE : VARIANT_FALSE); }; - CPropVariant(UInt32 value) { vt = VT_UI4; wReserved1 = 0; ulVal = value; } - CPropVariant(UInt64 value) { vt = VT_UI8; wReserved1 = 0; uhVal = *(ULARGE_INTEGER*)&value; } - CPropVariant(const FILETIME &value) { vt = VT_FILETIME; wReserved1 = 0; filetime = value; } - CPropVariant(Int32 value) { vt = VT_I4; wReserved1 = 0; lVal = value; } - CPropVariant(Byte value) { vt = VT_UI1; wReserved1 = 0; bVal = value; } - CPropVariant(Int16 value) { vt = VT_I2; wReserved1 = 0; iVal = value; } - // CPropVariant(LONG value, VARTYPE vtSrc = VT_I4) { vt = vtSrc; lVal = value; } - - CPropVariant& operator=(const CPropVariant& varSrc); - CPropVariant& operator=(const PROPVARIANT& varSrc); - CPropVariant& operator=(BSTR bstrSrc); - CPropVariant& operator=(LPCOLESTR lpszSrc); - CPropVariant& operator=(const char *s); - CPropVariant& operator=(bool bSrc); - CPropVariant& operator=(UInt32 value); - CPropVariant& operator=(UInt64 value); - CPropVariant& operator=(const FILETIME &value); - - CPropVariant& operator=(Int32 value); - CPropVariant& operator=(Byte value); - CPropVariant& operator=(Int16 value); - // CPropVariant& operator=(LONG value); - - HRESULT Clear(); - HRESULT Copy(const PROPVARIANT* pSrc); - HRESULT Attach(PROPVARIANT* pSrc); - HRESULT Detach(PROPVARIANT* pDest); - - HRESULT InternalClear(); - void InternalCopy(const PROPVARIANT* pSrc); - - int Compare(const CPropVariant &a1); -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/PropVariantConversions.cpp b/modules/lib7z/LZMASDK/CPP/Windows/PropVariantConversions.cpp deleted file mode 100644 index 9d7c2a276bca..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/PropVariantConversions.cpp +++ /dev/null @@ -1,105 +0,0 @@ -// PropVariantConversions.cpp - -#include "StdAfx.h" - -#include "Common/IntToString.h" -#include "Common/StringConvert.h" - -#include "Windows/Defs.h" - -#include "PropVariantConversions.h" - -static UString ConvertUInt64ToString(UInt64 value) -{ - wchar_t buffer[32]; - ConvertUInt64ToString(value, buffer); - return buffer; -} - -static UString ConvertInt64ToString(Int64 value) -{ - wchar_t buffer[32]; - ConvertInt64ToString(value, buffer); - return buffer; -} - -static char *UIntToStringSpec(char c, UInt32 value, char *s, int numPos) -{ - if (c != 0) - *s++ = c; - char temp[16]; - int pos = 0; - do - { - temp[pos++] = (char)('0' + value % 10); - value /= 10; - } - while (value != 0); - int i; - for (i = 0; i < numPos - pos; i++) - *s++ = '0'; - do - *s++ = temp[--pos]; - while (pos > 0); - *s = '\0'; - return s; -} - -bool ConvertFileTimeToString(const FILETIME &ft, char *s, bool includeTime, bool includeSeconds) -{ - s[0] = '\0'; - SYSTEMTIME st; - if (!BOOLToBool(FileTimeToSystemTime(&ft, &st))) - return false; - s = UIntToStringSpec(0, st.wYear, s, 4); - s = UIntToStringSpec('-', st.wMonth, s, 2); - s = UIntToStringSpec('-', st.wDay, s, 2); - if (includeTime) - { - s = UIntToStringSpec(' ', st.wHour, s, 2); - s = UIntToStringSpec(':', st.wMinute, s, 2); - if (includeSeconds) - UIntToStringSpec(':', st.wSecond, s, 2); - } - return true; -} - -UString ConvertFileTimeToString(const FILETIME &ft, bool includeTime, bool includeSeconds) -{ - char s[32]; - ConvertFileTimeToString(ft, s, includeTime, includeSeconds); - return GetUnicodeString(s); -} - - -UString ConvertPropVariantToString(const PROPVARIANT &prop) -{ - switch (prop.vt) - { - case VT_EMPTY: return UString(); - case VT_BSTR: return prop.bstrVal; - case VT_UI1: return ConvertUInt64ToString(prop.bVal); - case VT_UI2: return ConvertUInt64ToString(prop.uiVal); - case VT_UI4: return ConvertUInt64ToString(prop.ulVal); - case VT_UI8: return ConvertUInt64ToString(prop.uhVal.QuadPart); - case VT_FILETIME: return ConvertFileTimeToString(prop.filetime, true, true); - // case VT_I1: return ConvertInt64ToString(prop.cVal); - case VT_I2: return ConvertInt64ToString(prop.iVal); - case VT_I4: return ConvertInt64ToString(prop.lVal); - case VT_I8: return ConvertInt64ToString(prop.hVal.QuadPart); - case VT_BOOL: return VARIANT_BOOLToBool(prop.boolVal) ? L"+" : L"-"; - default: throw 150245; - } -} - -UInt64 ConvertPropVariantToUInt64(const PROPVARIANT &prop) -{ - switch (prop.vt) - { - case VT_UI1: return prop.bVal; - case VT_UI2: return prop.uiVal; - case VT_UI4: return prop.ulVal; - case VT_UI8: return (UInt64)prop.uhVal.QuadPart; - default: throw 151199; - } -} diff --git a/modules/lib7z/LZMASDK/CPP/Windows/PropVariantConversions.h b/modules/lib7z/LZMASDK/CPP/Windows/PropVariantConversions.h deleted file mode 100644 index 74139a49fd59..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/PropVariantConversions.h +++ /dev/null @@ -1,14 +0,0 @@ -// Windows/PropVariantConversions.h - -#ifndef __PROP_VARIANT_CONVERSIONS_H -#define __PROP_VARIANT_CONVERSIONS_H - -#include "Common/MyString.h" -#include "Common/Types.h" - -bool ConvertFileTimeToString(const FILETIME &ft, char *s, bool includeTime = true, bool includeSeconds = true); -UString ConvertFileTimeToString(const FILETIME &ft, bool includeTime = true, bool includeSeconds = true); -UString ConvertPropVariantToString(const PROPVARIANT &prop); -UInt64 ConvertPropVariantToUInt64(const PROPVARIANT &prop); - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/Registry.cpp b/modules/lib7z/LZMASDK/CPP/Windows/Registry.cpp deleted file mode 100644 index 3db00ea2cad2..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/Registry.cpp +++ /dev/null @@ -1,369 +0,0 @@ -// Windows/Registry.cpp - -#include "StdAfx.h" - -#ifndef _UNICODE -#include "Common/StringConvert.h" -#endif -#include "Windows/Registry.h" - -#ifndef _UNICODE -extern bool g_IsNT; -#endif - -namespace NWindows { -namespace NRegistry { - -#define MYASSERT(expr) // _ASSERTE(expr) - -LONG CKey::Create(HKEY parentKey, LPCTSTR keyName, - LPTSTR keyClass, DWORD options, REGSAM accessMask, - LPSECURITY_ATTRIBUTES securityAttributes, LPDWORD disposition) -{ - MYASSERT(parentKey != NULL); - DWORD dispositionReal; - HKEY key = NULL; - LONG res = RegCreateKeyEx(parentKey, keyName, 0, keyClass, - options, accessMask, securityAttributes, &key, &dispositionReal); - if (disposition != NULL) - *disposition = dispositionReal; - if (res == ERROR_SUCCESS) - { - res = Close(); - _object = key; - } - return res; -} - -LONG CKey::Open(HKEY parentKey, LPCTSTR keyName, REGSAM accessMask) -{ - MYASSERT(parentKey != NULL); - HKEY key = NULL; - LONG res = RegOpenKeyEx(parentKey, keyName, 0, accessMask, &key); - if (res == ERROR_SUCCESS) - { - res = Close(); - MYASSERT(res == ERROR_SUCCESS); - _object = key; - } - return res; -} - -LONG CKey::Close() -{ - LONG res = ERROR_SUCCESS; - if (_object != NULL) - { - res = RegCloseKey(_object); - _object = NULL; - } - return res; -} - -// win95, win98: deletes sunkey and all its subkeys -// winNT to be deleted must not have subkeys -LONG CKey::DeleteSubKey(LPCTSTR subKeyName) -{ - MYASSERT(_object != NULL); - return RegDeleteKey(_object, subKeyName); -} - -LONG CKey::RecurseDeleteKey(LPCTSTR subKeyName) -{ - CKey key; - LONG res = key.Open(_object, subKeyName, KEY_READ | KEY_WRITE); - if (res != ERROR_SUCCESS) - return res; - FILETIME fileTime; - const UInt32 kBufferSize = MAX_PATH + 1; // 256 in ATL - DWORD size = kBufferSize; - TCHAR buffer[kBufferSize]; - while (RegEnumKeyEx(key._object, 0, buffer, &size, NULL, NULL, NULL, &fileTime) == ERROR_SUCCESS) - { - res = key.RecurseDeleteKey(buffer); - if (res != ERROR_SUCCESS) - return res; - size = kBufferSize; - } - key.Close(); - return DeleteSubKey(subKeyName); -} - - -///////////////////////// -// Value Functions - -static inline UInt32 BoolToUINT32(bool value) { return (value ? 1: 0); } -static inline bool UINT32ToBool(UInt32 value) { return (value != 0); } - - -LONG CKey::DeleteValue(LPCTSTR name) -{ - MYASSERT(_object != NULL); - return ::RegDeleteValue(_object, name); -} - -#ifndef _UNICODE -LONG CKey::DeleteValue(LPCWSTR name) -{ - MYASSERT(_object != NULL); - if (g_IsNT) - return ::RegDeleteValueW(_object, name); - return DeleteValue(name == 0 ? 0 : (LPCSTR)GetSystemString(name)); -} -#endif - -LONG CKey::SetValue(LPCTSTR name, UInt32 value) -{ - MYASSERT(_object != NULL); - return RegSetValueEx(_object, name, NULL, REG_DWORD, - (BYTE * const)&value, sizeof(UInt32)); -} - -LONG CKey::SetValue(LPCTSTR name, bool value) -{ - return SetValue(name, BoolToUINT32(value)); -} - -LONG CKey::SetValue(LPCTSTR name, LPCTSTR value) -{ - MYASSERT(value != NULL); - MYASSERT(_object != NULL); - return RegSetValueEx(_object, name, NULL, REG_SZ, - (const BYTE * )value, (lstrlen(value) + 1) * sizeof(TCHAR)); -} - -/* -LONG CKey::SetValue(LPCTSTR name, const CSysString &value) -{ - MYASSERT(value != NULL); - MYASSERT(_object != NULL); - return RegSetValueEx(_object, name, NULL, REG_SZ, - (const BYTE *)(const TCHAR *)value, (value.Length() + 1) * sizeof(TCHAR)); -} -*/ - -#ifndef _UNICODE - -LONG CKey::SetValue(LPCWSTR name, LPCWSTR value) -{ - MYASSERT(value != NULL); - MYASSERT(_object != NULL); - if (g_IsNT) - return RegSetValueExW(_object, name, NULL, REG_SZ, - (const BYTE * )value, (DWORD)((wcslen(value) + 1) * sizeof(wchar_t))); - return SetValue(name == 0 ? 0 : (LPCSTR)GetSystemString(name), - value == 0 ? 0 : (LPCSTR)GetSystemString(value)); -} - -#endif - - -LONG CKey::SetValue(LPCTSTR name, const void *value, UInt32 size) -{ - MYASSERT(value != NULL); - MYASSERT(_object != NULL); - return RegSetValueEx(_object, name, NULL, REG_BINARY, - (const BYTE *)value, size); -} - -LONG SetValue(HKEY parentKey, LPCTSTR keyName, LPCTSTR valueName, LPCTSTR value) -{ - MYASSERT(value != NULL); - CKey key; - LONG res = key.Create(parentKey, keyName); - if (res == ERROR_SUCCESS) - res = key.SetValue(valueName, value); - return res; -} - -LONG CKey::SetKeyValue(LPCTSTR keyName, LPCTSTR valueName, LPCTSTR value) -{ - MYASSERT(value != NULL); - CKey key; - LONG res = key.Create(_object, keyName); - if (res == ERROR_SUCCESS) - res = key.SetValue(valueName, value); - return res; -} - -LONG CKey::QueryValue(LPCTSTR name, UInt32 &value) -{ - DWORD type = NULL; - DWORD count = sizeof(DWORD); - LONG res = RegQueryValueEx(_object, (LPTSTR)name, NULL, &type, - (LPBYTE)&value, &count); - MYASSERT((res!=ERROR_SUCCESS) || (type == REG_DWORD)); - MYASSERT((res!=ERROR_SUCCESS) || (count == sizeof(UInt32))); - return res; -} - -LONG CKey::QueryValue(LPCTSTR name, bool &value) -{ - UInt32 uintValue = BoolToUINT32(value); - LONG res = QueryValue(name, uintValue); - value = UINT32ToBool(uintValue); - return res; -} - -LONG CKey::GetValue_IfOk(LPCTSTR name, UInt32 &value) -{ - UInt32 newVal; - LONG res = QueryValue(name, newVal); - if (res == ERROR_SUCCESS) - value = newVal; - return res; -} - -LONG CKey::GetValue_IfOk(LPCTSTR name, bool &value) -{ - bool newVal; - LONG res = QueryValue(name, newVal); - if (res == ERROR_SUCCESS) - value = newVal; - return res; -} - -LONG CKey::QueryValue(LPCTSTR name, LPTSTR value, UInt32 &count) -{ - MYASSERT(count != NULL); - DWORD type = NULL; - LONG res = RegQueryValueEx(_object, (LPTSTR)name, NULL, &type, (LPBYTE)value, (DWORD *)&count); - MYASSERT((res!=ERROR_SUCCESS) || (type == REG_SZ) || (type == REG_MULTI_SZ) || (type == REG_EXPAND_SZ)); - return res; -} - -LONG CKey::QueryValue(LPCTSTR name, CSysString &value) -{ - value.Empty(); - DWORD type = NULL; - UInt32 currentSize = 0; - LONG res = RegQueryValueEx(_object, (LPTSTR)name, NULL, &type, NULL, (DWORD *)¤tSize); - if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) - return res; - res = QueryValue(name, value.GetBuffer(currentSize), currentSize); - value.ReleaseBuffer(); - return res; -} - -#ifndef _UNICODE -LONG CKey::QueryValue(LPCWSTR name, LPWSTR value, UInt32 &count) -{ - MYASSERT(count != NULL); - DWORD type = NULL; - LONG res = RegQueryValueExW(_object, name, NULL, &type, (LPBYTE)value, (DWORD *)&count); - MYASSERT((res!=ERROR_SUCCESS) || (type == REG_SZ) || (type == REG_MULTI_SZ) || (type == REG_EXPAND_SZ)); - return res; -} -LONG CKey::QueryValue(LPCWSTR name, UString &value) -{ - value.Empty(); - DWORD type = NULL; - UInt32 currentSize = 0; - - LONG res; - if (g_IsNT) - { - res = RegQueryValueExW(_object, name, NULL, &type, NULL, (DWORD *)¤tSize); - if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) - return res; - res = QueryValue(name, value.GetBuffer(currentSize), currentSize); - value.ReleaseBuffer(); - } - else - { - AString vTemp; - res = QueryValue(name == 0 ? 0 : (LPCSTR)GetSystemString(name), vTemp); - value = GetUnicodeString(vTemp); - } - return res; -} -#endif - -LONG CKey::QueryValue(LPCTSTR name, void *value, UInt32 &count) -{ - DWORD type = NULL; - LONG res = RegQueryValueEx(_object, (LPTSTR)name, NULL, &type, (LPBYTE)value, (DWORD *)&count); - MYASSERT((res!=ERROR_SUCCESS) || (type == REG_BINARY)); - return res; -} - - -LONG CKey::QueryValue(LPCTSTR name, CByteBuffer &value, UInt32 &dataSize) -{ - DWORD type = NULL; - dataSize = 0; - LONG res = RegQueryValueEx(_object, (LPTSTR)name, NULL, &type, NULL, (DWORD *)&dataSize); - if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) - return res; - value.SetCapacity(dataSize); - return QueryValue(name, (BYTE *)value, dataSize); -} - -LONG CKey::EnumKeys(CSysStringVector &keyNames) -{ - keyNames.Clear(); - CSysString keyName; - for (UInt32 index = 0; ; index++) - { - const UInt32 kBufferSize = MAX_PATH + 1; // 256 in ATL - FILETIME lastWriteTime; - UInt32 nameSize = kBufferSize; - LONG result = ::RegEnumKeyEx(_object, index, keyName.GetBuffer(kBufferSize), - (DWORD *)&nameSize, NULL, NULL, NULL, &lastWriteTime); - keyName.ReleaseBuffer(); - if (result == ERROR_NO_MORE_ITEMS) - break; - if (result != ERROR_SUCCESS) - return result; - keyNames.Add(keyName); - } - return ERROR_SUCCESS; -} - -LONG CKey::SetValue_Strings(LPCTSTR valueName, const UStringVector &strings) -{ - UInt32 numChars = 0; - int i; - for (i = 0; i < strings.Size(); i++) - numChars += strings[i].Length() + 1; - CBuffer buffer; - buffer.SetCapacity(numChars); - int pos = 0; - for (i = 0; i < strings.Size(); i++) - { - const UString &s = strings[i]; - MyStringCopy((wchar_t *)buffer + pos, (const wchar_t *)s); - pos += s.Length() + 1; - } - return SetValue(valueName, buffer, numChars * sizeof(wchar_t)); -} - -LONG CKey::GetValue_Strings(LPCTSTR valueName, UStringVector &strings) -{ - strings.Clear(); - CByteBuffer buffer; - UInt32 dataSize; - LONG res = QueryValue(valueName, buffer, dataSize); - if (res != ERROR_SUCCESS) - return res; - if (dataSize % sizeof(wchar_t) != 0) - return E_FAIL; - const wchar_t *data = (const wchar_t *)(const Byte *)buffer; - int numChars = dataSize / sizeof(wchar_t); - UString s; - for (int i = 0; i < numChars; i++) - { - wchar_t c = data[i]; - if (c == 0) - { - strings.Add(s); - s.Empty(); - } - else - s += c; - } - return res; -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/Windows/Registry.h b/modules/lib7z/LZMASDK/CPP/Windows/Registry.h deleted file mode 100644 index 8f4ede374f33..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/Registry.h +++ /dev/null @@ -1,85 +0,0 @@ -// Windows/Registry.h - -#ifndef __WINDOWS_REGISTRY_H -#define __WINDOWS_REGISTRY_H - -#include "Common/Buffer.h" -#include "Common/MyString.h" -#include "Common/Types.h" - -namespace NWindows { -namespace NRegistry { - -LONG SetValue(HKEY parentKey, LPCTSTR keyName, LPCTSTR valueName, LPCTSTR value); - -class CKey -{ - HKEY _object; -public: - CKey(): _object(NULL) {} - ~CKey() { Close(); } - - operator HKEY() const { return _object; } - void Attach(HKEY key) { _object = key; } - HKEY Detach() - { - HKEY key = _object; - _object = NULL; - return key; - } - - LONG Create(HKEY parentKey, LPCTSTR keyName, - LPTSTR keyClass = REG_NONE, DWORD options = REG_OPTION_NON_VOLATILE, - REGSAM accessMask = KEY_ALL_ACCESS, - LPSECURITY_ATTRIBUTES securityAttributes = NULL, - LPDWORD disposition = NULL); - LONG Open(HKEY parentKey, LPCTSTR keyName, REGSAM accessMask = KEY_ALL_ACCESS); - - LONG Close(); - - LONG DeleteSubKey(LPCTSTR subKeyName); - LONG RecurseDeleteKey(LPCTSTR subKeyName); - - LONG DeleteValue(LPCTSTR name); - #ifndef _UNICODE - LONG DeleteValue(LPCWSTR name); - #endif - - LONG SetValue(LPCTSTR valueName, UInt32 value); - LONG SetValue(LPCTSTR valueName, bool value); - LONG SetValue(LPCTSTR valueName, LPCTSTR value); - // LONG SetValue(LPCTSTR valueName, const CSysString &value); - #ifndef _UNICODE - LONG SetValue(LPCWSTR name, LPCWSTR value); - // LONG SetValue(LPCWSTR name, const UString &value); - #endif - - LONG SetValue(LPCTSTR name, const void *value, UInt32 size); - - LONG SetValue_Strings(LPCTSTR valueName, const UStringVector &strings); - LONG GetValue_Strings(LPCTSTR valueName, UStringVector &strings); - - LONG SetKeyValue(LPCTSTR keyName, LPCTSTR valueName, LPCTSTR value); - - LONG QueryValue(LPCTSTR name, UInt32 &value); - LONG QueryValue(LPCTSTR name, bool &value); - LONG QueryValue(LPCTSTR name, LPTSTR value, UInt32 &dataSize); - LONG QueryValue(LPCTSTR name, CSysString &value); - - LONG GetValue_IfOk(LPCTSTR name, UInt32 &value); - LONG GetValue_IfOk(LPCTSTR name, bool &value); - - #ifndef _UNICODE - LONG QueryValue(LPCWSTR name, LPWSTR value, UInt32 &dataSize); - LONG QueryValue(LPCWSTR name, UString &value); - #endif - - LONG QueryValue(LPCTSTR name, void *value, UInt32 &dataSize); - LONG QueryValue(LPCTSTR name, CByteBuffer &value, UInt32 &dataSize); - - LONG EnumKeys(CSysStringVector &keyNames); -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/StdAfx.h b/modules/lib7z/LZMASDK/CPP/Windows/StdAfx.h deleted file mode 100644 index 5308d632dc5c..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../Common/MyWindows.h" -#include "../Common/NewHandler.h" - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/Synchronization.cpp b/modules/lib7z/LZMASDK/CPP/Windows/Synchronization.cpp deleted file mode 100644 index 01f1ad90f6e1..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/Synchronization.cpp +++ /dev/null @@ -1,10 +0,0 @@ -// Windows/Synchronization.cpp - -#include "StdAfx.h" - -#include "Synchronization.h" - -namespace NWindows { -namespace NSynchronization { - -}} diff --git a/modules/lib7z/LZMASDK/CPP/Windows/Synchronization.h b/modules/lib7z/LZMASDK/CPP/Windows/Synchronization.h deleted file mode 100644 index 786da00c6f55..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/Synchronization.h +++ /dev/null @@ -1,164 +0,0 @@ -// Windows/Synchronization.h - -#ifndef __WINDOWS_SYNCHRONIZATION_H -#define __WINDOWS_SYNCHRONIZATION_H - -#include "../../C/Threads.h" - -#include "Defs.h" - -#ifdef _WIN32 -#include "Handle.h" -#endif - -namespace NWindows { -namespace NSynchronization { - -class CBaseEvent -{ -protected: - ::CEvent _object; -public: - bool IsCreated() { return Event_IsCreated(&_object) != 0; } - operator HANDLE() { return _object; } - CBaseEvent() { Event_Construct(&_object); } - ~CBaseEvent() { Close(); } - WRes Close() { return Event_Close(&_object); } - #ifdef _WIN32 - WRes Create(bool manualReset, bool initiallyOwn, LPCTSTR name = NULL, LPSECURITY_ATTRIBUTES sa = NULL) - { - _object = ::CreateEvent(sa, BoolToBOOL(manualReset), BoolToBOOL(initiallyOwn), name); - if (name == NULL && _object != 0) - return 0; - return ::GetLastError(); - } - WRes Open(DWORD desiredAccess, bool inheritHandle, LPCTSTR name) - { - _object = ::OpenEvent(desiredAccess, BoolToBOOL(inheritHandle), name); - if (_object != 0) - return 0; - return ::GetLastError(); - } - #endif - - WRes Set() { return Event_Set(&_object); } - // bool Pulse() { return BOOLToBool(::PulseEvent(_handle)); } - WRes Reset() { return Event_Reset(&_object); } - WRes Lock() { return Event_Wait(&_object); } -}; - -class CManualResetEvent: public CBaseEvent -{ -public: - WRes Create(bool initiallyOwn = false) - { - return ManualResetEvent_Create(&_object, initiallyOwn ? 1: 0); - } - WRes CreateIfNotCreated() - { - if (IsCreated()) - return 0; - return ManualResetEvent_CreateNotSignaled(&_object); - } - #ifdef _WIN32 - WRes CreateWithName(bool initiallyOwn, LPCTSTR name) - { - return CBaseEvent::Create(true, initiallyOwn, name); - } - #endif -}; - -class CAutoResetEvent: public CBaseEvent -{ -public: - WRes Create() - { - return AutoResetEvent_CreateNotSignaled(&_object); - } - WRes CreateIfNotCreated() - { - if (IsCreated()) - return 0; - return AutoResetEvent_CreateNotSignaled(&_object); - } -}; - -#ifdef _WIN32 -class CObject: public CHandle -{ -public: - WRes Lock(DWORD timeoutInterval = INFINITE) - { return (::WaitForSingleObject(_handle, timeoutInterval) == WAIT_OBJECT_0 ? 0 : ::GetLastError()); } -}; -class CMutex: public CObject -{ -public: - WRes Create(bool initiallyOwn, LPCTSTR name = NULL, LPSECURITY_ATTRIBUTES sa = NULL) - { - _handle = ::CreateMutex(sa, BoolToBOOL(initiallyOwn), name); - if (name == NULL && _handle != 0) - return 0; - return ::GetLastError(); - } - #ifndef UNDER_CE - WRes Open(DWORD desiredAccess, bool inheritHandle, LPCTSTR name) - { - _handle = ::OpenMutex(desiredAccess, BoolToBOOL(inheritHandle), name); - if (_handle != 0) - return 0; - return ::GetLastError(); - } - #endif - WRes Release() - { - return ::ReleaseMutex(_handle) ? 0 : ::GetLastError(); - } -}; -class CMutexLock -{ - CMutex *_object; -public: - CMutexLock(CMutex &object): _object(&object) { _object->Lock(); } - ~CMutexLock() { _object->Release(); } -}; -#endif - -class CSemaphore -{ - ::CSemaphore _object; -public: - CSemaphore() { Semaphore_Construct(&_object); } - ~CSemaphore() { Close(); } - WRes Close() { return Semaphore_Close(&_object); } - operator HANDLE() { return _object; } - WRes Create(UInt32 initiallyCount, UInt32 maxCount) - { - return Semaphore_Create(&_object, initiallyCount, maxCount); - } - WRes Release() { return Semaphore_Release1(&_object); } - WRes Release(UInt32 releaseCount) { return Semaphore_ReleaseN(&_object, releaseCount); } - WRes Lock() { return Semaphore_Wait(&_object); } -}; - -class CCriticalSection -{ - ::CCriticalSection _object; -public: - CCriticalSection() { CriticalSection_Init(&_object); } - ~CCriticalSection() { CriticalSection_Delete(&_object); } - void Enter() { CriticalSection_Enter(&_object); } - void Leave() { CriticalSection_Leave(&_object); } -}; - -class CCriticalSectionLock -{ - CCriticalSection *_object; - void Unlock() { _object->Leave(); } -public: - CCriticalSectionLock(CCriticalSection &object): _object(&object) {_object->Enter(); } - ~CCriticalSectionLock() { Unlock(); } -}; - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/System.cpp b/modules/lib7z/LZMASDK/CPP/Windows/System.cpp deleted file mode 100644 index 545ea0e37ec1..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/System.cpp +++ /dev/null @@ -1,72 +0,0 @@ -// Windows/System.cpp - -#include "StdAfx.h" - -#include "../Common/Defs.h" - -#include "System.h" - -namespace NWindows { -namespace NSystem { - -UInt32 GetNumberOfProcessors() -{ - SYSTEM_INFO systemInfo; - GetSystemInfo(&systemInfo); - return (UInt32)systemInfo.dwNumberOfProcessors; -} - -#ifndef UNDER_CE - -#if !defined(_WIN64) && defined(__GNUC__) - -typedef struct _MY_MEMORYSTATUSEX { - DWORD dwLength; - DWORD dwMemoryLoad; - DWORDLONG ullTotalPhys; - DWORDLONG ullAvailPhys; - DWORDLONG ullTotalPageFile; - DWORDLONG ullAvailPageFile; - DWORDLONG ullTotalVirtual; - DWORDLONG ullAvailVirtual; - DWORDLONG ullAvailExtendedVirtual; -} MY_MEMORYSTATUSEX, *MY_LPMEMORYSTATUSEX; - -#else - -#define MY_MEMORYSTATUSEX MEMORYSTATUSEX -#define MY_LPMEMORYSTATUSEX LPMEMORYSTATUSEX - -#endif - -typedef BOOL (WINAPI *GlobalMemoryStatusExP)(MY_LPMEMORYSTATUSEX lpBuffer); - -#endif - -UInt64 GetRamSize() -{ - #ifndef UNDER_CE - MY_MEMORYSTATUSEX stat; - stat.dwLength = sizeof(stat); - #endif - #ifdef _WIN64 - if (!::GlobalMemoryStatusEx(&stat)) - return 0; - return MyMin(stat.ullTotalVirtual, stat.ullTotalPhys); - #else - #ifndef UNDER_CE - GlobalMemoryStatusExP globalMemoryStatusEx = (GlobalMemoryStatusExP) - ::GetProcAddress(::GetModuleHandle(TEXT("kernel32.dll")), "GlobalMemoryStatusEx"); - if (globalMemoryStatusEx != 0 && globalMemoryStatusEx(&stat)) - return MyMin(stat.ullTotalVirtual, stat.ullTotalPhys); - #endif - { - MEMORYSTATUS stat; - stat.dwLength = sizeof(stat); - ::GlobalMemoryStatus(&stat); - return MyMin(stat.dwTotalVirtual, stat.dwTotalPhys); - } - #endif -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/Windows/System.h b/modules/lib7z/LZMASDK/CPP/Windows/System.h deleted file mode 100644 index 49a4fe793bb3..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/System.h +++ /dev/null @@ -1,16 +0,0 @@ -// Windows/System.h - -#ifndef __WINDOWS_SYSTEM_H -#define __WINDOWS_SYSTEM_H - -#include "../Common/Types.h" - -namespace NWindows { -namespace NSystem { - -UInt32 GetNumberOfProcessors(); -UInt64 GetRamSize(); - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/Thread.h b/modules/lib7z/LZMASDK/CPP/Windows/Thread.h deleted file mode 100644 index 1b5863ce4c9e..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/Thread.h +++ /dev/null @@ -1,38 +0,0 @@ -// Windows/Thread.h - -#ifndef __WINDOWS_THREAD_H -#define __WINDOWS_THREAD_H - -#include "../../C/Threads.h" - -#include "Defs.h" - -namespace NWindows { - -class CThread -{ - ::CThread thread; -public: - CThread() { Thread_Construct(&thread); } - ~CThread() { Close(); } - bool IsCreated() { return Thread_WasCreated(&thread) != 0; } - WRes Close() { return Thread_Close(&thread); } - WRes Create(THREAD_FUNC_RET_TYPE (THREAD_FUNC_CALL_TYPE *startAddress)(void *), LPVOID parameter) - { return Thread_Create(&thread, startAddress, parameter); } - WRes Wait() { return Thread_Wait(&thread); } - - #ifdef _WIN32 - operator HANDLE() { return thread; } - void Attach(HANDLE handle) { thread = handle; } - HANDLE Detach() { HANDLE h = thread; thread = NULL; return h; } - DWORD Resume() { return ::ResumeThread(thread); } - DWORD Suspend() { return ::SuspendThread(thread); } - bool Terminate(DWORD exitCode) { return BOOLToBool(::TerminateThread(thread, exitCode)); } - int GetPriority() { return ::GetThreadPriority(thread); } - bool SetPriority(int priority) { return BOOLToBool(::SetThreadPriority(thread, priority)); } - #endif -}; - -} - -#endif diff --git a/modules/lib7z/LZMASDK/CPP/Windows/Time.cpp b/modules/lib7z/LZMASDK/CPP/Windows/Time.cpp deleted file mode 100644 index 0504cdf48df3..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/Time.cpp +++ /dev/null @@ -1,170 +0,0 @@ -// Windows/Time.cpp - -#include "StdAfx.h" - -#include "Windows/Defs.h" - -#include "Time.h" - -namespace NWindows { -namespace NTime { - -static const UInt32 kNumTimeQuantumsInSecond = 10000000; -static const UInt32 kFileTimeStartYear = 1601; -static const UInt32 kDosTimeStartYear = 1980; -static const UInt32 kUnixTimeStartYear = 1970; -static const UInt64 kUnixTimeStartValue = ((UInt64)kNumTimeQuantumsInSecond) * - 60 * 60 * 24 * (89 + 365 * (kUnixTimeStartYear - kFileTimeStartYear)); - -bool DosTimeToFileTime(UInt32 dosTime, FILETIME &ft) -{ - #if defined(_WIN32) && !defined(UNDER_CE) - return BOOLToBool(::DosDateTimeToFileTime((UInt16)(dosTime >> 16), (UInt16)(dosTime & 0xFFFF), &ft)); - #else - ft.dwLowDateTime = 0; - ft.dwHighDateTime = 0; - UInt64 res; - if (!GetSecondsSince1601(kDosTimeStartYear + (dosTime >> 25), (dosTime >> 21) & 0xF, (dosTime >> 16) & 0x1F, - (dosTime >> 11) & 0x1F, (dosTime >> 5) & 0x3F, (dosTime & 0x1F) * 2, res)) - return false; - res *= kNumTimeQuantumsInSecond; - ft.dwLowDateTime = (UInt32)res; - ft.dwHighDateTime = (UInt32)(res >> 32); - return true; - #endif -} - -static const UInt32 kHighDosTime = 0xFF9FBF7D; -static const UInt32 kLowDosTime = 0x210000; - -#define PERIOD_4 (4 * 365 + 1) -#define PERIOD_100 (PERIOD_4 * 25 - 1) -#define PERIOD_400 (PERIOD_100 * 4 + 1) - -bool FileTimeToDosTime(const FILETIME &ft, UInt32 &dosTime) -{ - #if defined(_WIN32) && !defined(UNDER_CE) - - WORD datePart, timePart; - if (!::FileTimeToDosDateTime(&ft, &datePart, &timePart)) - { - dosTime = (ft.dwHighDateTime >= 0x01C00000) ? kHighDosTime : kLowDosTime; - return false; - } - dosTime = (((UInt32)datePart) << 16) + timePart; - - #else - - unsigned year, mon, day, hour, min, sec; - UInt64 v64 = ft.dwLowDateTime | ((UInt64)ft.dwHighDateTime << 32); - Byte ms[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - unsigned temp; - UInt32 v; - v64 += (kNumTimeQuantumsInSecond * 2 - 1); - v64 /= kNumTimeQuantumsInSecond; - sec = (unsigned)(v64 % 60); - v64 /= 60; - min = (unsigned)(v64 % 60); - v64 /= 60; - hour = (unsigned)(v64 % 24); - v64 /= 24; - - v = (UInt32)v64; - - year = (unsigned)(kFileTimeStartYear + v / PERIOD_400 * 400); - v %= PERIOD_400; - - temp = (unsigned)(v / PERIOD_100); - if (temp == 4) - temp = 3; - year += temp * 100; - v -= temp * PERIOD_100; - - temp = v / PERIOD_4; - if (temp == 25) - temp = 24; - year += temp * 4; - v -= temp * PERIOD_4; - - temp = v / 365; - if (temp == 4) - temp = 3; - year += temp; - v -= temp * 365; - - if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) - ms[1] = 29; - for (mon = 1; mon <= 12; mon++) - { - unsigned s = ms[mon - 1]; - if (v < s) - break; - v -= s; - } - day = (unsigned)v + 1; - - dosTime = kLowDosTime; - if (year < kDosTimeStartYear) - return false; - year -= kDosTimeStartYear; - dosTime = kHighDosTime; - if (year >= 128) - return false; - dosTime = (year << 25) | (mon << 21) | (day << 16) | (hour << 11) | (min << 5) | (sec >> 1); - #endif - return true; -} - -void UnixTimeToFileTime(UInt32 unixTime, FILETIME &ft) -{ - UInt64 v = kUnixTimeStartValue + ((UInt64)unixTime) * kNumTimeQuantumsInSecond; - ft.dwLowDateTime = (DWORD)v; - ft.dwHighDateTime = (DWORD)(v >> 32); -} - -bool FileTimeToUnixTime(const FILETIME &ft, UInt32 &unixTime) -{ - UInt64 winTime = (((UInt64)ft.dwHighDateTime) << 32) + ft.dwLowDateTime; - if (winTime < kUnixTimeStartValue) - { - unixTime = 0; - return false; - } - winTime = (winTime - kUnixTimeStartValue) / kNumTimeQuantumsInSecond; - if (winTime > 0xFFFFFFFF) - { - unixTime = 0xFFFFFFFF; - return false; - } - unixTime = (UInt32)winTime; - return true; -} - -bool GetSecondsSince1601(unsigned year, unsigned month, unsigned day, - unsigned hour, unsigned min, unsigned sec, UInt64 &resSeconds) -{ - resSeconds = 0; - if (year < kFileTimeStartYear || year >= 10000 || month < 1 || month > 12 || - day < 1 || day > 31 || hour > 23 || min > 59 || sec > 59) - return false; - UInt32 numYears = year - kFileTimeStartYear; - UInt32 numDays = numYears * 365 + numYears / 4 - numYears / 100 + numYears / 400; - Byte ms[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) - ms[1] = 29; - month--; - for (unsigned i = 0; i < month; i++) - numDays += ms[i]; - numDays += day - 1; - resSeconds = ((UInt64)(numDays * 24 + hour) * 60 + min) * 60 + sec; - return true; -} - -void GetCurUtcFileTime(FILETIME &ft) -{ - SYSTEMTIME st; - GetSystemTime(&st); - SystemTimeToFileTime(&st, &ft); -} - -}} diff --git a/modules/lib7z/LZMASDK/CPP/Windows/Time.h b/modules/lib7z/LZMASDK/CPP/Windows/Time.h deleted file mode 100644 index 7ecb204b21d8..000000000000 --- a/modules/lib7z/LZMASDK/CPP/Windows/Time.h +++ /dev/null @@ -1,21 +0,0 @@ -// Windows/Time.h - -#ifndef __WINDOWS_TIME_H -#define __WINDOWS_TIME_H - -#include "Common/Types.h" - -namespace NWindows { -namespace NTime { - -bool DosTimeToFileTime(UInt32 dosTime, FILETIME &fileTime); -bool FileTimeToDosTime(const FILETIME &fileTime, UInt32 &dosTime); -void UnixTimeToFileTime(UInt32 unixTime, FILETIME &fileTime); -bool FileTimeToUnixTime(const FILETIME &fileTime, UInt32 &unixTime); -bool GetSecondsSince1601(unsigned year, unsigned month, unsigned day, - unsigned hour, unsigned min, unsigned sec, UInt64 &resSeconds); -void GetCurUtcFileTime(FILETIME &ft); - -}} - -#endif diff --git a/modules/lib7z/LZMASDK/CS/7zip/Common/CRC.cs b/modules/lib7z/LZMASDK/CS/7zip/Common/CRC.cs deleted file mode 100644 index 62bb8478ba9a..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Common/CRC.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Common/CRC.cs - -namespace SevenZip -{ - class CRC - { - public static readonly uint[] Table; - - static CRC() - { - Table = new uint[256]; - const uint kPoly = 0xEDB88320; - for (uint i = 0; i < 256; i++) - { - uint r = i; - for (int j = 0; j < 8; j++) - if ((r & 1) != 0) - r = (r >> 1) ^ kPoly; - else - r >>= 1; - Table[i] = r; - } - } - - uint _value = 0xFFFFFFFF; - - public void Init() { _value = 0xFFFFFFFF; } - - public void UpdateByte(byte b) - { - _value = Table[(((byte)(_value)) ^ b)] ^ (_value >> 8); - } - - public void Update(byte[] data, uint offset, uint size) - { - for (uint i = 0; i < size; i++) - _value = Table[(((byte)(_value)) ^ data[offset + i])] ^ (_value >> 8); - } - - public uint GetDigest() { return _value ^ 0xFFFFFFFF; } - - static uint CalculateDigest(byte[] data, uint offset, uint size) - { - CRC crc = new CRC(); - // crc.Init(); - crc.Update(data, offset, size); - return crc.GetDigest(); - } - - static bool VerifyDigest(uint digest, byte[] data, uint offset, uint size) - { - return (CalculateDigest(data, offset, size) == digest); - } - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Common/CommandLineParser.cs b/modules/lib7z/LZMASDK/CS/7zip/Common/CommandLineParser.cs deleted file mode 100644 index b46f6f2095ff..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Common/CommandLineParser.cs +++ /dev/null @@ -1,274 +0,0 @@ -// CommandLineParser.cs - -using System; -using System.Collections; - -namespace SevenZip.CommandLineParser -{ - public enum SwitchType - { - Simple, - PostMinus, - LimitedPostString, - UnLimitedPostString, - PostChar - } - - public class SwitchForm - { - public string IDString; - public SwitchType Type; - public bool Multi; - public int MinLen; - public int MaxLen; - public string PostCharSet; - - public SwitchForm(string idString, SwitchType type, bool multi, - int minLen, int maxLen, string postCharSet) - { - IDString = idString; - Type = type; - Multi = multi; - MinLen = minLen; - MaxLen = maxLen; - PostCharSet = postCharSet; - } - public SwitchForm(string idString, SwitchType type, bool multi, int minLen): - this(idString, type, multi, minLen, 0, "") - { - } - public SwitchForm(string idString, SwitchType type, bool multi): - this(idString, type, multi, 0) - { - } - } - - public class SwitchResult - { - public bool ThereIs; - public bool WithMinus; - public ArrayList PostStrings = new ArrayList(); - public int PostCharIndex; - public SwitchResult() - { - ThereIs = false; - } - } - - public class Parser - { - public ArrayList NonSwitchStrings = new ArrayList(); - SwitchResult[] _switches; - - public Parser(int numSwitches) - { - _switches = new SwitchResult[numSwitches]; - for (int i = 0; i < numSwitches; i++) - _switches[i] = new SwitchResult(); - } - - bool ParseString(string srcString, SwitchForm[] switchForms) - { - int len = srcString.Length; - if (len == 0) - return false; - int pos = 0; - if (!IsItSwitchChar(srcString[pos])) - return false; - while (pos < len) - { - if (IsItSwitchChar(srcString[pos])) - pos++; - const int kNoLen = -1; - int matchedSwitchIndex = 0; - int maxLen = kNoLen; - for (int switchIndex = 0; switchIndex < _switches.Length; switchIndex++) - { - int switchLen = switchForms[switchIndex].IDString.Length; - if (switchLen <= maxLen || pos + switchLen > len) - continue; - if (String.Compare(switchForms[switchIndex].IDString, 0, - srcString, pos, switchLen, true) == 0) - { - matchedSwitchIndex = switchIndex; - maxLen = switchLen; - } - } - if (maxLen == kNoLen) - throw new Exception("maxLen == kNoLen"); - SwitchResult matchedSwitch = _switches[matchedSwitchIndex]; - SwitchForm switchForm = switchForms[matchedSwitchIndex]; - if ((!switchForm.Multi) && matchedSwitch.ThereIs) - throw new Exception("switch must be single"); - matchedSwitch.ThereIs = true; - pos += maxLen; - int tailSize = len - pos; - SwitchType type = switchForm.Type; - switch (type) - { - case SwitchType.PostMinus: - { - if (tailSize == 0) - matchedSwitch.WithMinus = false; - else - { - matchedSwitch.WithMinus = (srcString[pos] == kSwitchMinus); - if (matchedSwitch.WithMinus) - pos++; - } - break; - } - case SwitchType.PostChar: - { - if (tailSize < switchForm.MinLen) - throw new Exception("switch is not full"); - string charSet = switchForm.PostCharSet; - const int kEmptyCharValue = -1; - if (tailSize == 0) - matchedSwitch.PostCharIndex = kEmptyCharValue; - else - { - int index = charSet.IndexOf(srcString[pos]); - if (index < 0) - matchedSwitch.PostCharIndex = kEmptyCharValue; - else - { - matchedSwitch.PostCharIndex = index; - pos++; - } - } - break; - } - case SwitchType.LimitedPostString: - case SwitchType.UnLimitedPostString: - { - int minLen = switchForm.MinLen; - if (tailSize < minLen) - throw new Exception("switch is not full"); - if (type == SwitchType.UnLimitedPostString) - { - matchedSwitch.PostStrings.Add(srcString.Substring(pos)); - return true; - } - String stringSwitch = srcString.Substring(pos, minLen); - pos += minLen; - for (int i = minLen; i < switchForm.MaxLen && pos < len; i++, pos++) - { - char c = srcString[pos]; - if (IsItSwitchChar(c)) - break; - stringSwitch += c; - } - matchedSwitch.PostStrings.Add(stringSwitch); - break; - } - } - } - return true; - - } - - public void ParseStrings(SwitchForm[] switchForms, string[] commandStrings) - { - int numCommandStrings = commandStrings.Length; - bool stopSwitch = false; - for (int i = 0; i < numCommandStrings; i++) - { - string s = commandStrings[i]; - if (stopSwitch) - NonSwitchStrings.Add(s); - else - if (s == kStopSwitchParsing) - stopSwitch = true; - else - if (!ParseString(s, switchForms)) - NonSwitchStrings.Add(s); - } - } - - public SwitchResult this[int index] { get { return _switches[index]; } } - - public static int ParseCommand(CommandForm[] commandForms, string commandString, - out string postString) - { - for (int i = 0; i < commandForms.Length; i++) - { - string id = commandForms[i].IDString; - if (commandForms[i].PostStringMode) - { - if (commandString.IndexOf(id) == 0) - { - postString = commandString.Substring(id.Length); - return i; - } - } - else - if (commandString == id) - { - postString = ""; - return i; - } - } - postString = ""; - return -1; - } - - static bool ParseSubCharsCommand(int numForms, CommandSubCharsSet[] forms, - string commandString, ArrayList indices) - { - indices.Clear(); - int numUsedChars = 0; - for (int i = 0; i < numForms; i++) - { - CommandSubCharsSet charsSet = forms[i]; - int currentIndex = -1; - int len = charsSet.Chars.Length; - for (int j = 0; j < len; j++) - { - char c = charsSet.Chars[j]; - int newIndex = commandString.IndexOf(c); - if (newIndex >= 0) - { - if (currentIndex >= 0) - return false; - if (commandString.IndexOf(c, newIndex + 1) >= 0) - return false; - currentIndex = j; - numUsedChars++; - } - } - if (currentIndex == -1 && !charsSet.EmptyAllowed) - return false; - indices.Add(currentIndex); - } - return (numUsedChars == commandString.Length); - } - const char kSwitchID1 = '-'; - const char kSwitchID2 = '/'; - - const char kSwitchMinus = '-'; - const string kStopSwitchParsing = "--"; - - static bool IsItSwitchChar(char c) - { - return (c == kSwitchID1 || c == kSwitchID2); - } - } - - public class CommandForm - { - public string IDString = ""; - public bool PostStringMode = false; - public CommandForm(string idString, bool postStringMode) - { - IDString = idString; - PostStringMode = postStringMode; - } - } - - class CommandSubCharsSet - { - public string Chars = ""; - public bool EmptyAllowed = false; - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Common/InBuffer.cs b/modules/lib7z/LZMASDK/CS/7zip/Common/InBuffer.cs deleted file mode 100644 index 9c47c73ae3e5..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Common/InBuffer.cs +++ /dev/null @@ -1,72 +0,0 @@ -// InBuffer.cs - -namespace SevenZip.Buffer -{ - public class InBuffer - { - byte[] m_Buffer; - uint m_Pos; - uint m_Limit; - uint m_BufferSize; - System.IO.Stream m_Stream; - bool m_StreamWasExhausted; - ulong m_ProcessedSize; - - public InBuffer(uint bufferSize) - { - m_Buffer = new byte[bufferSize]; - m_BufferSize = bufferSize; - } - - public void Init(System.IO.Stream stream) - { - m_Stream = stream; - m_ProcessedSize = 0; - m_Limit = 0; - m_Pos = 0; - m_StreamWasExhausted = false; - } - - public bool ReadBlock() - { - if (m_StreamWasExhausted) - return false; - m_ProcessedSize += m_Pos; - int aNumProcessedBytes = m_Stream.Read(m_Buffer, 0, (int)m_BufferSize); - m_Pos = 0; - m_Limit = (uint)aNumProcessedBytes; - m_StreamWasExhausted = (aNumProcessedBytes == 0); - return (!m_StreamWasExhausted); - } - - - public void ReleaseStream() - { - // m_Stream.Close(); - m_Stream = null; - } - - public bool ReadByte(byte b) // check it - { - if (m_Pos >= m_Limit) - if (!ReadBlock()) - return false; - b = m_Buffer[m_Pos++]; - return true; - } - - public byte ReadByte() - { - // return (byte)m_Stream.ReadByte(); - if (m_Pos >= m_Limit) - if (!ReadBlock()) - return 0xFF; - return m_Buffer[m_Pos++]; - } - - public ulong GetProcessedSize() - { - return m_ProcessedSize + m_Pos; - } - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Common/OutBuffer.cs b/modules/lib7z/LZMASDK/CS/7zip/Common/OutBuffer.cs deleted file mode 100644 index c205aa634639..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Common/OutBuffer.cs +++ /dev/null @@ -1,47 +0,0 @@ -// OutBuffer.cs - -namespace SevenZip.Buffer -{ - public class OutBuffer - { - byte[] m_Buffer; - uint m_Pos; - uint m_BufferSize; - System.IO.Stream m_Stream; - ulong m_ProcessedSize; - - public OutBuffer(uint bufferSize) - { - m_Buffer = new byte[bufferSize]; - m_BufferSize = bufferSize; - } - - public void SetStream(System.IO.Stream stream) { m_Stream = stream; } - public void FlushStream() { m_Stream.Flush(); } - public void CloseStream() { m_Stream.Close(); } - public void ReleaseStream() { m_Stream = null; } - - public void Init() - { - m_ProcessedSize = 0; - m_Pos = 0; - } - - public void WriteByte(byte b) - { - m_Buffer[m_Pos++] = b; - if (m_Pos >= m_BufferSize) - FlushData(); - } - - public void FlushData() - { - if (m_Pos == 0) - return; - m_Stream.Write(m_Buffer, 0, (int)m_Pos); - m_Pos = 0; - } - - public ulong GetProcessedSize() { return m_ProcessedSize + m_Pos; } - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/IMatchFinder.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/IMatchFinder.cs deleted file mode 100644 index 30fab86501d6..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/IMatchFinder.cs +++ /dev/null @@ -1,24 +0,0 @@ -// IMatchFinder.cs - -using System; - -namespace SevenZip.Compression.LZ -{ - interface IInWindowStream - { - void SetStream(System.IO.Stream inStream); - void Init(); - void ReleaseStream(); - Byte GetIndexByte(Int32 index); - UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit); - UInt32 GetNumAvailableBytes(); - } - - interface IMatchFinder : IInWindowStream - { - void Create(UInt32 historySize, UInt32 keepAddBufferBefore, - UInt32 matchMaxLen, UInt32 keepAddBufferAfter); - UInt32 GetMatches(UInt32[] distances); - void Skip(UInt32 num); - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/LzBinTree.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/LzBinTree.cs deleted file mode 100644 index 7a9ca2092cf4..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/LzBinTree.cs +++ /dev/null @@ -1,367 +0,0 @@ -// LzBinTree.cs - -using System; - -namespace SevenZip.Compression.LZ -{ - public class BinTree : InWindow, IMatchFinder - { - UInt32 _cyclicBufferPos; - UInt32 _cyclicBufferSize = 0; - UInt32 _matchMaxLen; - - UInt32[] _son; - UInt32[] _hash; - - UInt32 _cutValue = 0xFF; - UInt32 _hashMask; - UInt32 _hashSizeSum = 0; - - bool HASH_ARRAY = true; - - const UInt32 kHash2Size = 1 << 10; - const UInt32 kHash3Size = 1 << 16; - const UInt32 kBT2HashSize = 1 << 16; - const UInt32 kStartMaxLen = 1; - const UInt32 kHash3Offset = kHash2Size; - const UInt32 kEmptyHashValue = 0; - const UInt32 kMaxValForNormalize = ((UInt32)1 << 31) - 1; - - UInt32 kNumHashDirectBytes = 0; - UInt32 kMinMatchCheck = 4; - UInt32 kFixHashSize = kHash2Size + kHash3Size; - - public void SetType(int numHashBytes) - { - HASH_ARRAY = (numHashBytes > 2); - if (HASH_ARRAY) - { - kNumHashDirectBytes = 0; - kMinMatchCheck = 4; - kFixHashSize = kHash2Size + kHash3Size; - } - else - { - kNumHashDirectBytes = 2; - kMinMatchCheck = 2 + 1; - kFixHashSize = 0; - } - } - - public new void SetStream(System.IO.Stream stream) { base.SetStream(stream); } - public new void ReleaseStream() { base.ReleaseStream(); } - - public new void Init() - { - base.Init(); - for (UInt32 i = 0; i < _hashSizeSum; i++) - _hash[i] = kEmptyHashValue; - _cyclicBufferPos = 0; - ReduceOffsets(-1); - } - - public new void MovePos() - { - if (++_cyclicBufferPos >= _cyclicBufferSize) - _cyclicBufferPos = 0; - base.MovePos(); - if (_pos == kMaxValForNormalize) - Normalize(); - } - - public new Byte GetIndexByte(Int32 index) { return base.GetIndexByte(index); } - - public new UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit) - { return base.GetMatchLen(index, distance, limit); } - - public new UInt32 GetNumAvailableBytes() { return base.GetNumAvailableBytes(); } - - public void Create(UInt32 historySize, UInt32 keepAddBufferBefore, - UInt32 matchMaxLen, UInt32 keepAddBufferAfter) - { - if (historySize > kMaxValForNormalize - 256) - throw new Exception(); - _cutValue = 16 + (matchMaxLen >> 1); - - UInt32 windowReservSize = (historySize + keepAddBufferBefore + - matchMaxLen + keepAddBufferAfter) / 2 + 256; - - base.Create(historySize + keepAddBufferBefore, matchMaxLen + keepAddBufferAfter, windowReservSize); - - _matchMaxLen = matchMaxLen; - - UInt32 cyclicBufferSize = historySize + 1; - if (_cyclicBufferSize != cyclicBufferSize) - _son = new UInt32[(_cyclicBufferSize = cyclicBufferSize) * 2]; - - UInt32 hs = kBT2HashSize; - - if (HASH_ARRAY) - { - hs = historySize - 1; - hs |= (hs >> 1); - hs |= (hs >> 2); - hs |= (hs >> 4); - hs |= (hs >> 8); - hs >>= 1; - hs |= 0xFFFF; - if (hs > (1 << 24)) - hs >>= 1; - _hashMask = hs; - hs++; - hs += kFixHashSize; - } - if (hs != _hashSizeSum) - _hash = new UInt32[_hashSizeSum = hs]; - } - - public UInt32 GetMatches(UInt32[] distances) - { - UInt32 lenLimit; - if (_pos + _matchMaxLen <= _streamPos) - lenLimit = _matchMaxLen; - else - { - lenLimit = _streamPos - _pos; - if (lenLimit < kMinMatchCheck) - { - MovePos(); - return 0; - } - } - - UInt32 offset = 0; - UInt32 matchMinPos = (_pos > _cyclicBufferSize) ? (_pos - _cyclicBufferSize) : 0; - UInt32 cur = _bufferOffset + _pos; - UInt32 maxLen = kStartMaxLen; // to avoid items for len < hashSize; - UInt32 hashValue, hash2Value = 0, hash3Value = 0; - - if (HASH_ARRAY) - { - UInt32 temp = CRC.Table[_bufferBase[cur]] ^ _bufferBase[cur + 1]; - hash2Value = temp & (kHash2Size - 1); - temp ^= ((UInt32)(_bufferBase[cur + 2]) << 8); - hash3Value = temp & (kHash3Size - 1); - hashValue = (temp ^ (CRC.Table[_bufferBase[cur + 3]] << 5)) & _hashMask; - } - else - hashValue = _bufferBase[cur] ^ ((UInt32)(_bufferBase[cur + 1]) << 8); - - UInt32 curMatch = _hash[kFixHashSize + hashValue]; - if (HASH_ARRAY) - { - UInt32 curMatch2 = _hash[hash2Value]; - UInt32 curMatch3 = _hash[kHash3Offset + hash3Value]; - _hash[hash2Value] = _pos; - _hash[kHash3Offset + hash3Value] = _pos; - if (curMatch2 > matchMinPos) - if (_bufferBase[_bufferOffset + curMatch2] == _bufferBase[cur]) - { - distances[offset++] = maxLen = 2; - distances[offset++] = _pos - curMatch2 - 1; - } - if (curMatch3 > matchMinPos) - if (_bufferBase[_bufferOffset + curMatch3] == _bufferBase[cur]) - { - if (curMatch3 == curMatch2) - offset -= 2; - distances[offset++] = maxLen = 3; - distances[offset++] = _pos - curMatch3 - 1; - curMatch2 = curMatch3; - } - if (offset != 0 && curMatch2 == curMatch) - { - offset -= 2; - maxLen = kStartMaxLen; - } - } - - _hash[kFixHashSize + hashValue] = _pos; - - UInt32 ptr0 = (_cyclicBufferPos << 1) + 1; - UInt32 ptr1 = (_cyclicBufferPos << 1); - - UInt32 len0, len1; - len0 = len1 = kNumHashDirectBytes; - - if (kNumHashDirectBytes != 0) - { - if (curMatch > matchMinPos) - { - if (_bufferBase[_bufferOffset + curMatch + kNumHashDirectBytes] != - _bufferBase[cur + kNumHashDirectBytes]) - { - distances[offset++] = maxLen = kNumHashDirectBytes; - distances[offset++] = _pos - curMatch - 1; - } - } - } - - UInt32 count = _cutValue; - - while(true) - { - if(curMatch <= matchMinPos || count-- == 0) - { - _son[ptr0] = _son[ptr1] = kEmptyHashValue; - break; - } - UInt32 delta = _pos - curMatch; - UInt32 cyclicPos = ((delta <= _cyclicBufferPos) ? - (_cyclicBufferPos - delta) : - (_cyclicBufferPos - delta + _cyclicBufferSize)) << 1; - - UInt32 pby1 = _bufferOffset + curMatch; - UInt32 len = Math.Min(len0, len1); - if (_bufferBase[pby1 + len] == _bufferBase[cur + len]) - { - while(++len != lenLimit) - if (_bufferBase[pby1 + len] != _bufferBase[cur + len]) - break; - if (maxLen < len) - { - distances[offset++] = maxLen = len; - distances[offset++] = delta - 1; - if (len == lenLimit) - { - _son[ptr1] = _son[cyclicPos]; - _son[ptr0] = _son[cyclicPos + 1]; - break; - } - } - } - if (_bufferBase[pby1 + len] < _bufferBase[cur + len]) - { - _son[ptr1] = curMatch; - ptr1 = cyclicPos + 1; - curMatch = _son[ptr1]; - len1 = len; - } - else - { - _son[ptr0] = curMatch; - ptr0 = cyclicPos; - curMatch = _son[ptr0]; - len0 = len; - } - } - MovePos(); - return offset; - } - - public void Skip(UInt32 num) - { - do - { - UInt32 lenLimit; - if (_pos + _matchMaxLen <= _streamPos) - lenLimit = _matchMaxLen; - else - { - lenLimit = _streamPos - _pos; - if (lenLimit < kMinMatchCheck) - { - MovePos(); - continue; - } - } - - UInt32 matchMinPos = (_pos > _cyclicBufferSize) ? (_pos - _cyclicBufferSize) : 0; - UInt32 cur = _bufferOffset + _pos; - - UInt32 hashValue; - - if (HASH_ARRAY) - { - UInt32 temp = CRC.Table[_bufferBase[cur]] ^ _bufferBase[cur + 1]; - UInt32 hash2Value = temp & (kHash2Size - 1); - _hash[hash2Value] = _pos; - temp ^= ((UInt32)(_bufferBase[cur + 2]) << 8); - UInt32 hash3Value = temp & (kHash3Size - 1); - _hash[kHash3Offset + hash3Value] = _pos; - hashValue = (temp ^ (CRC.Table[_bufferBase[cur + 3]] << 5)) & _hashMask; - } - else - hashValue = _bufferBase[cur] ^ ((UInt32)(_bufferBase[cur + 1]) << 8); - - UInt32 curMatch = _hash[kFixHashSize + hashValue]; - _hash[kFixHashSize + hashValue] = _pos; - - UInt32 ptr0 = (_cyclicBufferPos << 1) + 1; - UInt32 ptr1 = (_cyclicBufferPos << 1); - - UInt32 len0, len1; - len0 = len1 = kNumHashDirectBytes; - - UInt32 count = _cutValue; - while (true) - { - if (curMatch <= matchMinPos || count-- == 0) - { - _son[ptr0] = _son[ptr1] = kEmptyHashValue; - break; - } - - UInt32 delta = _pos - curMatch; - UInt32 cyclicPos = ((delta <= _cyclicBufferPos) ? - (_cyclicBufferPos - delta) : - (_cyclicBufferPos - delta + _cyclicBufferSize)) << 1; - - UInt32 pby1 = _bufferOffset + curMatch; - UInt32 len = Math.Min(len0, len1); - if (_bufferBase[pby1 + len] == _bufferBase[cur + len]) - { - while (++len != lenLimit) - if (_bufferBase[pby1 + len] != _bufferBase[cur + len]) - break; - if (len == lenLimit) - { - _son[ptr1] = _son[cyclicPos]; - _son[ptr0] = _son[cyclicPos + 1]; - break; - } - } - if (_bufferBase[pby1 + len] < _bufferBase[cur + len]) - { - _son[ptr1] = curMatch; - ptr1 = cyclicPos + 1; - curMatch = _son[ptr1]; - len1 = len; - } - else - { - _son[ptr0] = curMatch; - ptr0 = cyclicPos; - curMatch = _son[ptr0]; - len0 = len; - } - } - MovePos(); - } - while (--num != 0); - } - - void NormalizeLinks(UInt32[] items, UInt32 numItems, UInt32 subValue) - { - for (UInt32 i = 0; i < numItems; i++) - { - UInt32 value = items[i]; - if (value <= subValue) - value = kEmptyHashValue; - else - value -= subValue; - items[i] = value; - } - } - - void Normalize() - { - UInt32 subValue = _pos - _cyclicBufferSize; - NormalizeLinks(_son, _cyclicBufferSize * 2, subValue); - NormalizeLinks(_hash, _hashSizeSum, subValue); - ReduceOffsets((Int32)subValue); - } - - public void SetCutValue(UInt32 cutValue) { _cutValue = cutValue; } - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/LzInWindow.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/LzInWindow.cs deleted file mode 100644 index f1974cef5084..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/LzInWindow.cs +++ /dev/null @@ -1,132 +0,0 @@ -// LzInWindow.cs - -using System; - -namespace SevenZip.Compression.LZ -{ - public class InWindow - { - public Byte[] _bufferBase = null; // pointer to buffer with data - System.IO.Stream _stream; - UInt32 _posLimit; // offset (from _buffer) of first byte when new block reading must be done - bool _streamEndWasReached; // if (true) then _streamPos shows real end of stream - - UInt32 _pointerToLastSafePosition; - - public UInt32 _bufferOffset; - - public UInt32 _blockSize; // Size of Allocated memory block - public UInt32 _pos; // offset (from _buffer) of curent byte - UInt32 _keepSizeBefore; // how many BYTEs must be kept in buffer before _pos - UInt32 _keepSizeAfter; // how many BYTEs must be kept buffer after _pos - public UInt32 _streamPos; // offset (from _buffer) of first not read byte from Stream - - public void MoveBlock() - { - UInt32 offset = (UInt32)(_bufferOffset) + _pos - _keepSizeBefore; - // we need one additional byte, since MovePos moves on 1 byte. - if (offset > 0) - offset--; - - UInt32 numBytes = (UInt32)(_bufferOffset) + _streamPos - offset; - - // check negative offset ???? - for (UInt32 i = 0; i < numBytes; i++) - _bufferBase[i] = _bufferBase[offset + i]; - _bufferOffset -= offset; - } - - public virtual void ReadBlock() - { - if (_streamEndWasReached) - return; - while (true) - { - int size = (int)((0 - _bufferOffset) + _blockSize - _streamPos); - if (size == 0) - return; - int numReadBytes = _stream.Read(_bufferBase, (int)(_bufferOffset + _streamPos), size); - if (numReadBytes == 0) - { - _posLimit = _streamPos; - UInt32 pointerToPostion = _bufferOffset + _posLimit; - if (pointerToPostion > _pointerToLastSafePosition) - _posLimit = (UInt32)(_pointerToLastSafePosition - _bufferOffset); - - _streamEndWasReached = true; - return; - } - _streamPos += (UInt32)numReadBytes; - if (_streamPos >= _pos + _keepSizeAfter) - _posLimit = _streamPos - _keepSizeAfter; - } - } - - void Free() { _bufferBase = null; } - - public void Create(UInt32 keepSizeBefore, UInt32 keepSizeAfter, UInt32 keepSizeReserv) - { - _keepSizeBefore = keepSizeBefore; - _keepSizeAfter = keepSizeAfter; - UInt32 blockSize = keepSizeBefore + keepSizeAfter + keepSizeReserv; - if (_bufferBase == null || _blockSize != blockSize) - { - Free(); - _blockSize = blockSize; - _bufferBase = new Byte[_blockSize]; - } - _pointerToLastSafePosition = _blockSize - keepSizeAfter; - } - - public void SetStream(System.IO.Stream stream) { _stream = stream; } - public void ReleaseStream() { _stream = null; } - - public void Init() - { - _bufferOffset = 0; - _pos = 0; - _streamPos = 0; - _streamEndWasReached = false; - ReadBlock(); - } - - public void MovePos() - { - _pos++; - if (_pos > _posLimit) - { - UInt32 pointerToPostion = _bufferOffset + _pos; - if (pointerToPostion > _pointerToLastSafePosition) - MoveBlock(); - ReadBlock(); - } - } - - public Byte GetIndexByte(Int32 index) { return _bufferBase[_bufferOffset + _pos + index]; } - - // index + limit have not to exceed _keepSizeAfter; - public UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit) - { - if (_streamEndWasReached) - if ((_pos + index) + limit > _streamPos) - limit = _streamPos - (UInt32)(_pos + index); - distance++; - // Byte *pby = _buffer + (size_t)_pos + index; - UInt32 pby = _bufferOffset + _pos + (UInt32)index; - - UInt32 i; - for (i = 0; i < limit && _bufferBase[pby + i] == _bufferBase[pby + i - distance]; i++); - return i; - } - - public UInt32 GetNumAvailableBytes() { return _streamPos - _pos; } - - public void ReduceOffsets(Int32 subValue) - { - _bufferOffset += (UInt32)subValue; - _posLimit -= (UInt32)subValue; - _pos -= (UInt32)subValue; - _streamPos -= (UInt32)subValue; - } - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/LzOutWindow.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/LzOutWindow.cs deleted file mode 100644 index 84914f0d94f9..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZ/LzOutWindow.cs +++ /dev/null @@ -1,110 +0,0 @@ -// LzOutWindow.cs - -namespace SevenZip.Compression.LZ -{ - public class OutWindow - { - byte[] _buffer = null; - uint _pos; - uint _windowSize = 0; - uint _streamPos; - System.IO.Stream _stream; - - public uint TrainSize = 0; - - public void Create(uint windowSize) - { - if (_windowSize != windowSize) - { - // System.GC.Collect(); - _buffer = new byte[windowSize]; - } - _windowSize = windowSize; - _pos = 0; - _streamPos = 0; - } - - public void Init(System.IO.Stream stream, bool solid) - { - ReleaseStream(); - _stream = stream; - if (!solid) - { - _streamPos = 0; - _pos = 0; - TrainSize = 0; - } - } - - public bool Train(System.IO.Stream stream) - { - long len = stream.Length; - uint size = (len < _windowSize) ? (uint)len : _windowSize; - TrainSize = size; - stream.Position = len - size; - _streamPos = _pos = 0; - while (size > 0) - { - uint curSize = _windowSize - _pos; - if (size < curSize) - curSize = size; - int numReadBytes = stream.Read(_buffer, (int)_pos, (int)curSize); - if (numReadBytes == 0) - return false; - size -= (uint)numReadBytes; - _pos += (uint)numReadBytes; - _streamPos += (uint)numReadBytes; - if (_pos == _windowSize) - _streamPos = _pos = 0; - } - return true; - } - - public void ReleaseStream() - { - Flush(); - _stream = null; - } - - public void Flush() - { - uint size = _pos - _streamPos; - if (size == 0) - return; - _stream.Write(_buffer, (int)_streamPos, (int)size); - if (_pos >= _windowSize) - _pos = 0; - _streamPos = _pos; - } - - public void CopyBlock(uint distance, uint len) - { - uint pos = _pos - distance - 1; - if (pos >= _windowSize) - pos += _windowSize; - for (; len > 0; len--) - { - if (pos >= _windowSize) - pos = 0; - _buffer[_pos++] = _buffer[pos++]; - if (_pos >= _windowSize) - Flush(); - } - } - - public void PutByte(byte b) - { - _buffer[_pos++] = b; - if (_pos >= _windowSize) - Flush(); - } - - public byte GetByte(uint distance) - { - uint pos = _pos - distance - 1; - if (pos >= _windowSize) - pos += _windowSize; - return _buffer[pos]; - } - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZMA/LzmaBase.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/LZMA/LzmaBase.cs deleted file mode 100644 index 8447a2a0ffec..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZMA/LzmaBase.cs +++ /dev/null @@ -1,76 +0,0 @@ -// LzmaBase.cs - -namespace SevenZip.Compression.LZMA -{ - internal abstract class Base - { - public const uint kNumRepDistances = 4; - public const uint kNumStates = 12; - - // static byte []kLiteralNextStates = {0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5}; - // static byte []kMatchNextStates = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10}; - // static byte []kRepNextStates = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11}; - // static byte []kShortRepNextStates = {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11}; - - public struct State - { - public uint Index; - public void Init() { Index = 0; } - public void UpdateChar() - { - if (Index < 4) Index = 0; - else if (Index < 10) Index -= 3; - else Index -= 6; - } - public void UpdateMatch() { Index = (uint)(Index < 7 ? 7 : 10); } - public void UpdateRep() { Index = (uint)(Index < 7 ? 8 : 11); } - public void UpdateShortRep() { Index = (uint)(Index < 7 ? 9 : 11); } - public bool IsCharState() { return Index < 7; } - } - - public const int kNumPosSlotBits = 6; - public const int kDicLogSizeMin = 0; - // public const int kDicLogSizeMax = 30; - // public const uint kDistTableSizeMax = kDicLogSizeMax * 2; - - public const int kNumLenToPosStatesBits = 2; // it's for speed optimization - public const uint kNumLenToPosStates = 1 << kNumLenToPosStatesBits; - - public const uint kMatchMinLen = 2; - - public static uint GetLenToPosState(uint len) - { - len -= kMatchMinLen; - if (len < kNumLenToPosStates) - return len; - return (uint)(kNumLenToPosStates - 1); - } - - public const int kNumAlignBits = 4; - public const uint kAlignTableSize = 1 << kNumAlignBits; - public const uint kAlignMask = (kAlignTableSize - 1); - - public const uint kStartPosModelIndex = 4; - public const uint kEndPosModelIndex = 14; - public const uint kNumPosModels = kEndPosModelIndex - kStartPosModelIndex; - - public const uint kNumFullDistances = 1 << ((int)kEndPosModelIndex / 2); - - public const uint kNumLitPosStatesBitsEncodingMax = 4; - public const uint kNumLitContextBitsMax = 8; - - public const int kNumPosStatesBitsMax = 4; - public const uint kNumPosStatesMax = (1 << kNumPosStatesBitsMax); - public const int kNumPosStatesBitsEncodingMax = 4; - public const uint kNumPosStatesEncodingMax = (1 << kNumPosStatesBitsEncodingMax); - - public const int kNumLowLenBits = 3; - public const int kNumMidLenBits = 3; - public const int kNumHighLenBits = 8; - public const uint kNumLowLenSymbols = 1 << kNumLowLenBits; - public const uint kNumMidLenSymbols = 1 << kNumMidLenBits; - public const uint kNumLenSymbols = kNumLowLenSymbols + kNumMidLenSymbols + - (1 << kNumHighLenBits); - public const uint kMatchMaxLen = kMatchMinLen + kNumLenSymbols - 1; - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZMA/LzmaDecoder.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/LZMA/LzmaDecoder.cs deleted file mode 100644 index 00bfe63802b7..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZMA/LzmaDecoder.cs +++ /dev/null @@ -1,398 +0,0 @@ -// LzmaDecoder.cs - -using System; - -namespace SevenZip.Compression.LZMA -{ - using RangeCoder; - - public class Decoder : ICoder, ISetDecoderProperties // ,System.IO.Stream - { - class LenDecoder - { - BitDecoder m_Choice = new BitDecoder(); - BitDecoder m_Choice2 = new BitDecoder(); - BitTreeDecoder[] m_LowCoder = new BitTreeDecoder[Base.kNumPosStatesMax]; - BitTreeDecoder[] m_MidCoder = new BitTreeDecoder[Base.kNumPosStatesMax]; - BitTreeDecoder m_HighCoder = new BitTreeDecoder(Base.kNumHighLenBits); - uint m_NumPosStates = 0; - - public void Create(uint numPosStates) - { - for (uint posState = m_NumPosStates; posState < numPosStates; posState++) - { - m_LowCoder[posState] = new BitTreeDecoder(Base.kNumLowLenBits); - m_MidCoder[posState] = new BitTreeDecoder(Base.kNumMidLenBits); - } - m_NumPosStates = numPosStates; - } - - public void Init() - { - m_Choice.Init(); - for (uint posState = 0; posState < m_NumPosStates; posState++) - { - m_LowCoder[posState].Init(); - m_MidCoder[posState].Init(); - } - m_Choice2.Init(); - m_HighCoder.Init(); - } - - public uint Decode(RangeCoder.Decoder rangeDecoder, uint posState) - { - if (m_Choice.Decode(rangeDecoder) == 0) - return m_LowCoder[posState].Decode(rangeDecoder); - else - { - uint symbol = Base.kNumLowLenSymbols; - if (m_Choice2.Decode(rangeDecoder) == 0) - symbol += m_MidCoder[posState].Decode(rangeDecoder); - else - { - symbol += Base.kNumMidLenSymbols; - symbol += m_HighCoder.Decode(rangeDecoder); - } - return symbol; - } - } - } - - class LiteralDecoder - { - struct Decoder2 - { - BitDecoder[] m_Decoders; - public void Create() { m_Decoders = new BitDecoder[0x300]; } - public void Init() { for (int i = 0; i < 0x300; i++) m_Decoders[i].Init(); } - - public byte DecodeNormal(RangeCoder.Decoder rangeDecoder) - { - uint symbol = 1; - do - symbol = (symbol << 1) | m_Decoders[symbol].Decode(rangeDecoder); - while (symbol < 0x100); - return (byte)symbol; - } - - public byte DecodeWithMatchByte(RangeCoder.Decoder rangeDecoder, byte matchByte) - { - uint symbol = 1; - do - { - uint matchBit = (uint)(matchByte >> 7) & 1; - matchByte <<= 1; - uint bit = m_Decoders[((1 + matchBit) << 8) + symbol].Decode(rangeDecoder); - symbol = (symbol << 1) | bit; - if (matchBit != bit) - { - while (symbol < 0x100) - symbol = (symbol << 1) | m_Decoders[symbol].Decode(rangeDecoder); - break; - } - } - while (symbol < 0x100); - return (byte)symbol; - } - } - - Decoder2[] m_Coders; - int m_NumPrevBits; - int m_NumPosBits; - uint m_PosMask; - - public void Create(int numPosBits, int numPrevBits) - { - if (m_Coders != null && m_NumPrevBits == numPrevBits && - m_NumPosBits == numPosBits) - return; - m_NumPosBits = numPosBits; - m_PosMask = ((uint)1 << numPosBits) - 1; - m_NumPrevBits = numPrevBits; - uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits); - m_Coders = new Decoder2[numStates]; - for (uint i = 0; i < numStates; i++) - m_Coders[i].Create(); - } - - public void Init() - { - uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits); - for (uint i = 0; i < numStates; i++) - m_Coders[i].Init(); - } - - uint GetState(uint pos, byte prevByte) - { return ((pos & m_PosMask) << m_NumPrevBits) + (uint)(prevByte >> (8 - m_NumPrevBits)); } - - public byte DecodeNormal(RangeCoder.Decoder rangeDecoder, uint pos, byte prevByte) - { return m_Coders[GetState(pos, prevByte)].DecodeNormal(rangeDecoder); } - - public byte DecodeWithMatchByte(RangeCoder.Decoder rangeDecoder, uint pos, byte prevByte, byte matchByte) - { return m_Coders[GetState(pos, prevByte)].DecodeWithMatchByte(rangeDecoder, matchByte); } - }; - - LZ.OutWindow m_OutWindow = new LZ.OutWindow(); - RangeCoder.Decoder m_RangeDecoder = new RangeCoder.Decoder(); - - BitDecoder[] m_IsMatchDecoders = new BitDecoder[Base.kNumStates << Base.kNumPosStatesBitsMax]; - BitDecoder[] m_IsRepDecoders = new BitDecoder[Base.kNumStates]; - BitDecoder[] m_IsRepG0Decoders = new BitDecoder[Base.kNumStates]; - BitDecoder[] m_IsRepG1Decoders = new BitDecoder[Base.kNumStates]; - BitDecoder[] m_IsRepG2Decoders = new BitDecoder[Base.kNumStates]; - BitDecoder[] m_IsRep0LongDecoders = new BitDecoder[Base.kNumStates << Base.kNumPosStatesBitsMax]; - - BitTreeDecoder[] m_PosSlotDecoder = new BitTreeDecoder[Base.kNumLenToPosStates]; - BitDecoder[] m_PosDecoders = new BitDecoder[Base.kNumFullDistances - Base.kEndPosModelIndex]; - - BitTreeDecoder m_PosAlignDecoder = new BitTreeDecoder(Base.kNumAlignBits); - - LenDecoder m_LenDecoder = new LenDecoder(); - LenDecoder m_RepLenDecoder = new LenDecoder(); - - LiteralDecoder m_LiteralDecoder = new LiteralDecoder(); - - uint m_DictionarySize; - uint m_DictionarySizeCheck; - - uint m_PosStateMask; - - public Decoder() - { - m_DictionarySize = 0xFFFFFFFF; - for (int i = 0; i < Base.kNumLenToPosStates; i++) - m_PosSlotDecoder[i] = new BitTreeDecoder(Base.kNumPosSlotBits); - } - - void SetDictionarySize(uint dictionarySize) - { - if (m_DictionarySize != dictionarySize) - { - m_DictionarySize = dictionarySize; - m_DictionarySizeCheck = Math.Max(m_DictionarySize, 1); - uint blockSize = Math.Max(m_DictionarySizeCheck, (1 << 12)); - m_OutWindow.Create(blockSize); - } - } - - void SetLiteralProperties(int lp, int lc) - { - if (lp > 8) - throw new InvalidParamException(); - if (lc > 8) - throw new InvalidParamException(); - m_LiteralDecoder.Create(lp, lc); - } - - void SetPosBitsProperties(int pb) - { - if (pb > Base.kNumPosStatesBitsMax) - throw new InvalidParamException(); - uint numPosStates = (uint)1 << pb; - m_LenDecoder.Create(numPosStates); - m_RepLenDecoder.Create(numPosStates); - m_PosStateMask = numPosStates - 1; - } - - bool _solid = false; - void Init(System.IO.Stream inStream, System.IO.Stream outStream) - { - m_RangeDecoder.Init(inStream); - m_OutWindow.Init(outStream, _solid); - - uint i; - for (i = 0; i < Base.kNumStates; i++) - { - for (uint j = 0; j <= m_PosStateMask; j++) - { - uint index = (i << Base.kNumPosStatesBitsMax) + j; - m_IsMatchDecoders[index].Init(); - m_IsRep0LongDecoders[index].Init(); - } - m_IsRepDecoders[i].Init(); - m_IsRepG0Decoders[i].Init(); - m_IsRepG1Decoders[i].Init(); - m_IsRepG2Decoders[i].Init(); - } - - m_LiteralDecoder.Init(); - for (i = 0; i < Base.kNumLenToPosStates; i++) - m_PosSlotDecoder[i].Init(); - // m_PosSpecDecoder.Init(); - for (i = 0; i < Base.kNumFullDistances - Base.kEndPosModelIndex; i++) - m_PosDecoders[i].Init(); - - m_LenDecoder.Init(); - m_RepLenDecoder.Init(); - m_PosAlignDecoder.Init(); - } - - public void Code(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize, ICodeProgress progress) - { - Init(inStream, outStream); - - Base.State state = new Base.State(); - state.Init(); - uint rep0 = 0, rep1 = 0, rep2 = 0, rep3 = 0; - - UInt64 nowPos64 = 0; - UInt64 outSize64 = (UInt64)outSize; - if (nowPos64 < outSize64) - { - if (m_IsMatchDecoders[state.Index << Base.kNumPosStatesBitsMax].Decode(m_RangeDecoder) != 0) - throw new DataErrorException(); - state.UpdateChar(); - byte b = m_LiteralDecoder.DecodeNormal(m_RangeDecoder, 0, 0); - m_OutWindow.PutByte(b); - nowPos64++; - } - while (nowPos64 < outSize64) - { - // UInt64 next = Math.Min(nowPos64 + (1 << 18), outSize64); - // while(nowPos64 < next) - { - uint posState = (uint)nowPos64 & m_PosStateMask; - if (m_IsMatchDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0) - { - byte b; - byte prevByte = m_OutWindow.GetByte(0); - if (!state.IsCharState()) - b = m_LiteralDecoder.DecodeWithMatchByte(m_RangeDecoder, - (uint)nowPos64, prevByte, m_OutWindow.GetByte(rep0)); - else - b = m_LiteralDecoder.DecodeNormal(m_RangeDecoder, (uint)nowPos64, prevByte); - m_OutWindow.PutByte(b); - state.UpdateChar(); - nowPos64++; - } - else - { - uint len; - if (m_IsRepDecoders[state.Index].Decode(m_RangeDecoder) == 1) - { - if (m_IsRepG0Decoders[state.Index].Decode(m_RangeDecoder) == 0) - { - if (m_IsRep0LongDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0) - { - state.UpdateShortRep(); - m_OutWindow.PutByte(m_OutWindow.GetByte(rep0)); - nowPos64++; - continue; - } - } - else - { - UInt32 distance; - if (m_IsRepG1Decoders[state.Index].Decode(m_RangeDecoder) == 0) - { - distance = rep1; - } - else - { - if (m_IsRepG2Decoders[state.Index].Decode(m_RangeDecoder) == 0) - distance = rep2; - else - { - distance = rep3; - rep3 = rep2; - } - rep2 = rep1; - } - rep1 = rep0; - rep0 = distance; - } - len = m_RepLenDecoder.Decode(m_RangeDecoder, posState) + Base.kMatchMinLen; - state.UpdateRep(); - } - else - { - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - len = Base.kMatchMinLen + m_LenDecoder.Decode(m_RangeDecoder, posState); - state.UpdateMatch(); - uint posSlot = m_PosSlotDecoder[Base.GetLenToPosState(len)].Decode(m_RangeDecoder); - if (posSlot >= Base.kStartPosModelIndex) - { - int numDirectBits = (int)((posSlot >> 1) - 1); - rep0 = ((2 | (posSlot & 1)) << numDirectBits); - if (posSlot < Base.kEndPosModelIndex) - rep0 += BitTreeDecoder.ReverseDecode(m_PosDecoders, - rep0 - posSlot - 1, m_RangeDecoder, numDirectBits); - else - { - rep0 += (m_RangeDecoder.DecodeDirectBits( - numDirectBits - Base.kNumAlignBits) << Base.kNumAlignBits); - rep0 += m_PosAlignDecoder.ReverseDecode(m_RangeDecoder); - } - } - else - rep0 = posSlot; - } - if (rep0 >= m_OutWindow.TrainSize + nowPos64 || rep0 >= m_DictionarySizeCheck) - { - if (rep0 == 0xFFFFFFFF) - break; - throw new DataErrorException(); - } - m_OutWindow.CopyBlock(rep0, len); - nowPos64 += len; - } - } - } - m_OutWindow.Flush(); - m_OutWindow.ReleaseStream(); - m_RangeDecoder.ReleaseStream(); - } - - public void SetDecoderProperties(byte[] properties) - { - if (properties.Length < 5) - throw new InvalidParamException(); - int lc = properties[0] % 9; - int remainder = properties[0] / 9; - int lp = remainder % 5; - int pb = remainder / 5; - if (pb > Base.kNumPosStatesBitsMax) - throw new InvalidParamException(); - UInt32 dictionarySize = 0; - for (int i = 0; i < 4; i++) - dictionarySize += ((UInt32)(properties[1 + i])) << (i * 8); - SetDictionarySize(dictionarySize); - SetLiteralProperties(lp, lc); - SetPosBitsProperties(pb); - } - - public bool Train(System.IO.Stream stream) - { - _solid = true; - return m_OutWindow.Train(stream); - } - - /* - public override bool CanRead { get { return true; }} - public override bool CanWrite { get { return true; }} - public override bool CanSeek { get { return true; }} - public override long Length { get { return 0; }} - public override long Position - { - get { return 0; } - set { } - } - public override void Flush() { } - public override int Read(byte[] buffer, int offset, int count) - { - return 0; - } - public override void Write(byte[] buffer, int offset, int count) - { - } - public override long Seek(long offset, System.IO.SeekOrigin origin) - { - return 0; - } - public override void SetLength(long value) {} - */ - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZMA/LzmaEncoder.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/LZMA/LzmaEncoder.cs deleted file mode 100644 index 6dc2708bdfa8..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LZMA/LzmaEncoder.cs +++ /dev/null @@ -1,1480 +0,0 @@ -// LzmaEncoder.cs - -using System; - -namespace SevenZip.Compression.LZMA -{ - using RangeCoder; - - public class Encoder : ICoder, ISetCoderProperties, IWriteCoderProperties - { - enum EMatchFinderType - { - BT2, - BT4, - }; - - const UInt32 kIfinityPrice = 0xFFFFFFF; - - static Byte[] g_FastPos = new Byte[1 << 11]; - - static Encoder() - { - const Byte kFastSlots = 22; - int c = 2; - g_FastPos[0] = 0; - g_FastPos[1] = 1; - for (Byte slotFast = 2; slotFast < kFastSlots; slotFast++) - { - UInt32 k = ((UInt32)1 << ((slotFast >> 1) - 1)); - for (UInt32 j = 0; j < k; j++, c++) - g_FastPos[c] = slotFast; - } - } - - static UInt32 GetPosSlot(UInt32 pos) - { - if (pos < (1 << 11)) - return g_FastPos[pos]; - if (pos < (1 << 21)) - return (UInt32)(g_FastPos[pos >> 10] + 20); - return (UInt32)(g_FastPos[pos >> 20] + 40); - } - - static UInt32 GetPosSlot2(UInt32 pos) - { - if (pos < (1 << 17)) - return (UInt32)(g_FastPos[pos >> 6] + 12); - if (pos < (1 << 27)) - return (UInt32)(g_FastPos[pos >> 16] + 32); - return (UInt32)(g_FastPos[pos >> 26] + 52); - } - - Base.State _state = new Base.State(); - Byte _previousByte; - UInt32[] _repDistances = new UInt32[Base.kNumRepDistances]; - - void BaseInit() - { - _state.Init(); - _previousByte = 0; - for (UInt32 i = 0; i < Base.kNumRepDistances; i++) - _repDistances[i] = 0; - } - - const int kDefaultDictionaryLogSize = 22; - const UInt32 kNumFastBytesDefault = 0x20; - - class LiteralEncoder - { - public struct Encoder2 - { - BitEncoder[] m_Encoders; - - public void Create() { m_Encoders = new BitEncoder[0x300]; } - - public void Init() { for (int i = 0; i < 0x300; i++) m_Encoders[i].Init(); } - - public void Encode(RangeCoder.Encoder rangeEncoder, byte symbol) - { - uint context = 1; - for (int i = 7; i >= 0; i--) - { - uint bit = (uint)((symbol >> i) & 1); - m_Encoders[context].Encode(rangeEncoder, bit); - context = (context << 1) | bit; - } - } - - public void EncodeMatched(RangeCoder.Encoder rangeEncoder, byte matchByte, byte symbol) - { - uint context = 1; - bool same = true; - for (int i = 7; i >= 0; i--) - { - uint bit = (uint)((symbol >> i) & 1); - uint state = context; - if (same) - { - uint matchBit = (uint)((matchByte >> i) & 1); - state += ((1 + matchBit) << 8); - same = (matchBit == bit); - } - m_Encoders[state].Encode(rangeEncoder, bit); - context = (context << 1) | bit; - } - } - - public uint GetPrice(bool matchMode, byte matchByte, byte symbol) - { - uint price = 0; - uint context = 1; - int i = 7; - if (matchMode) - { - for (; i >= 0; i--) - { - uint matchBit = (uint)(matchByte >> i) & 1; - uint bit = (uint)(symbol >> i) & 1; - price += m_Encoders[((1 + matchBit) << 8) + context].GetPrice(bit); - context = (context << 1) | bit; - if (matchBit != bit) - { - i--; - break; - } - } - } - for (; i >= 0; i--) - { - uint bit = (uint)(symbol >> i) & 1; - price += m_Encoders[context].GetPrice(bit); - context = (context << 1) | bit; - } - return price; - } - } - - Encoder2[] m_Coders; - int m_NumPrevBits; - int m_NumPosBits; - uint m_PosMask; - - public void Create(int numPosBits, int numPrevBits) - { - if (m_Coders != null && m_NumPrevBits == numPrevBits && m_NumPosBits == numPosBits) - return; - m_NumPosBits = numPosBits; - m_PosMask = ((uint)1 << numPosBits) - 1; - m_NumPrevBits = numPrevBits; - uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits); - m_Coders = new Encoder2[numStates]; - for (uint i = 0; i < numStates; i++) - m_Coders[i].Create(); - } - - public void Init() - { - uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits); - for (uint i = 0; i < numStates; i++) - m_Coders[i].Init(); - } - - public Encoder2 GetSubCoder(UInt32 pos, Byte prevByte) - { return m_Coders[((pos & m_PosMask) << m_NumPrevBits) + (uint)(prevByte >> (8 - m_NumPrevBits))]; } - } - - class LenEncoder - { - RangeCoder.BitEncoder _choice = new RangeCoder.BitEncoder(); - RangeCoder.BitEncoder _choice2 = new RangeCoder.BitEncoder(); - RangeCoder.BitTreeEncoder[] _lowCoder = new RangeCoder.BitTreeEncoder[Base.kNumPosStatesEncodingMax]; - RangeCoder.BitTreeEncoder[] _midCoder = new RangeCoder.BitTreeEncoder[Base.kNumPosStatesEncodingMax]; - RangeCoder.BitTreeEncoder _highCoder = new RangeCoder.BitTreeEncoder(Base.kNumHighLenBits); - - public LenEncoder() - { - for (UInt32 posState = 0; posState < Base.kNumPosStatesEncodingMax; posState++) - { - _lowCoder[posState] = new RangeCoder.BitTreeEncoder(Base.kNumLowLenBits); - _midCoder[posState] = new RangeCoder.BitTreeEncoder(Base.kNumMidLenBits); - } - } - - public void Init(UInt32 numPosStates) - { - _choice.Init(); - _choice2.Init(); - for (UInt32 posState = 0; posState < numPosStates; posState++) - { - _lowCoder[posState].Init(); - _midCoder[posState].Init(); - } - _highCoder.Init(); - } - - public void Encode(RangeCoder.Encoder rangeEncoder, UInt32 symbol, UInt32 posState) - { - if (symbol < Base.kNumLowLenSymbols) - { - _choice.Encode(rangeEncoder, 0); - _lowCoder[posState].Encode(rangeEncoder, symbol); - } - else - { - symbol -= Base.kNumLowLenSymbols; - _choice.Encode(rangeEncoder, 1); - if (symbol < Base.kNumMidLenSymbols) - { - _choice2.Encode(rangeEncoder, 0); - _midCoder[posState].Encode(rangeEncoder, symbol); - } - else - { - _choice2.Encode(rangeEncoder, 1); - _highCoder.Encode(rangeEncoder, symbol - Base.kNumMidLenSymbols); - } - } - } - - public void SetPrices(UInt32 posState, UInt32 numSymbols, UInt32[] prices, UInt32 st) - { - UInt32 a0 = _choice.GetPrice0(); - UInt32 a1 = _choice.GetPrice1(); - UInt32 b0 = a1 + _choice2.GetPrice0(); - UInt32 b1 = a1 + _choice2.GetPrice1(); - UInt32 i = 0; - for (i = 0; i < Base.kNumLowLenSymbols; i++) - { - if (i >= numSymbols) - return; - prices[st + i] = a0 + _lowCoder[posState].GetPrice(i); - } - for (; i < Base.kNumLowLenSymbols + Base.kNumMidLenSymbols; i++) - { - if (i >= numSymbols) - return; - prices[st + i] = b0 + _midCoder[posState].GetPrice(i - Base.kNumLowLenSymbols); - } - for (; i < numSymbols; i++) - prices[st + i] = b1 + _highCoder.GetPrice(i - Base.kNumLowLenSymbols - Base.kNumMidLenSymbols); - } - }; - - const UInt32 kNumLenSpecSymbols = Base.kNumLowLenSymbols + Base.kNumMidLenSymbols; - - class LenPriceTableEncoder : LenEncoder - { - UInt32[] _prices = new UInt32[Base.kNumLenSymbols << Base.kNumPosStatesBitsEncodingMax]; - UInt32 _tableSize; - UInt32[] _counters = new UInt32[Base.kNumPosStatesEncodingMax]; - - public void SetTableSize(UInt32 tableSize) { _tableSize = tableSize; } - - public UInt32 GetPrice(UInt32 symbol, UInt32 posState) - { - return _prices[posState * Base.kNumLenSymbols + symbol]; - } - - void UpdateTable(UInt32 posState) - { - SetPrices(posState, _tableSize, _prices, posState * Base.kNumLenSymbols); - _counters[posState] = _tableSize; - } - - public void UpdateTables(UInt32 numPosStates) - { - for (UInt32 posState = 0; posState < numPosStates; posState++) - UpdateTable(posState); - } - - public new void Encode(RangeCoder.Encoder rangeEncoder, UInt32 symbol, UInt32 posState) - { - base.Encode(rangeEncoder, symbol, posState); - if (--_counters[posState] == 0) - UpdateTable(posState); - } - } - - const UInt32 kNumOpts = 1 << 12; - class Optimal - { - public Base.State State; - - public bool Prev1IsChar; - public bool Prev2; - - public UInt32 PosPrev2; - public UInt32 BackPrev2; - - public UInt32 Price; - public UInt32 PosPrev; - public UInt32 BackPrev; - - public UInt32 Backs0; - public UInt32 Backs1; - public UInt32 Backs2; - public UInt32 Backs3; - - public void MakeAsChar() { BackPrev = 0xFFFFFFFF; Prev1IsChar = false; } - public void MakeAsShortRep() { BackPrev = 0; ; Prev1IsChar = false; } - public bool IsShortRep() { return (BackPrev == 0); } - }; - Optimal[] _optimum = new Optimal[kNumOpts]; - LZ.IMatchFinder _matchFinder = null; - RangeCoder.Encoder _rangeEncoder = new RangeCoder.Encoder(); - - RangeCoder.BitEncoder[] _isMatch = new RangeCoder.BitEncoder[Base.kNumStates << Base.kNumPosStatesBitsMax]; - RangeCoder.BitEncoder[] _isRep = new RangeCoder.BitEncoder[Base.kNumStates]; - RangeCoder.BitEncoder[] _isRepG0 = new RangeCoder.BitEncoder[Base.kNumStates]; - RangeCoder.BitEncoder[] _isRepG1 = new RangeCoder.BitEncoder[Base.kNumStates]; - RangeCoder.BitEncoder[] _isRepG2 = new RangeCoder.BitEncoder[Base.kNumStates]; - RangeCoder.BitEncoder[] _isRep0Long = new RangeCoder.BitEncoder[Base.kNumStates << Base.kNumPosStatesBitsMax]; - - RangeCoder.BitTreeEncoder[] _posSlotEncoder = new RangeCoder.BitTreeEncoder[Base.kNumLenToPosStates]; - - RangeCoder.BitEncoder[] _posEncoders = new RangeCoder.BitEncoder[Base.kNumFullDistances - Base.kEndPosModelIndex]; - RangeCoder.BitTreeEncoder _posAlignEncoder = new RangeCoder.BitTreeEncoder(Base.kNumAlignBits); - - LenPriceTableEncoder _lenEncoder = new LenPriceTableEncoder(); - LenPriceTableEncoder _repMatchLenEncoder = new LenPriceTableEncoder(); - - LiteralEncoder _literalEncoder = new LiteralEncoder(); - - UInt32[] _matchDistances = new UInt32[Base.kMatchMaxLen * 2 + 2]; - - UInt32 _numFastBytes = kNumFastBytesDefault; - UInt32 _longestMatchLength; - UInt32 _numDistancePairs; - - UInt32 _additionalOffset; - - UInt32 _optimumEndIndex; - UInt32 _optimumCurrentIndex; - - bool _longestMatchWasFound; - - UInt32[] _posSlotPrices = new UInt32[1 << (Base.kNumPosSlotBits + Base.kNumLenToPosStatesBits)]; - UInt32[] _distancesPrices = new UInt32[Base.kNumFullDistances << Base.kNumLenToPosStatesBits]; - UInt32[] _alignPrices = new UInt32[Base.kAlignTableSize]; - UInt32 _alignPriceCount; - - UInt32 _distTableSize = (kDefaultDictionaryLogSize * 2); - - int _posStateBits = 2; - UInt32 _posStateMask = (4 - 1); - int _numLiteralPosStateBits = 0; - int _numLiteralContextBits = 3; - - UInt32 _dictionarySize = (1 << kDefaultDictionaryLogSize); - UInt32 _dictionarySizePrev = 0xFFFFFFFF; - UInt32 _numFastBytesPrev = 0xFFFFFFFF; - - Int64 nowPos64; - bool _finished; - System.IO.Stream _inStream; - - EMatchFinderType _matchFinderType = EMatchFinderType.BT4; - bool _writeEndMark = false; - - bool _needReleaseMFStream; - - void Create() - { - if (_matchFinder == null) - { - LZ.BinTree bt = new LZ.BinTree(); - int numHashBytes = 4; - if (_matchFinderType == EMatchFinderType.BT2) - numHashBytes = 2; - bt.SetType(numHashBytes); - _matchFinder = bt; - } - _literalEncoder.Create(_numLiteralPosStateBits, _numLiteralContextBits); - - if (_dictionarySize == _dictionarySizePrev && _numFastBytesPrev == _numFastBytes) - return; - _matchFinder.Create(_dictionarySize, kNumOpts, _numFastBytes, Base.kMatchMaxLen + 1); - _dictionarySizePrev = _dictionarySize; - _numFastBytesPrev = _numFastBytes; - } - - public Encoder() - { - for (int i = 0; i < kNumOpts; i++) - _optimum[i] = new Optimal(); - for (int i = 0; i < Base.kNumLenToPosStates; i++) - _posSlotEncoder[i] = new RangeCoder.BitTreeEncoder(Base.kNumPosSlotBits); - } - - void SetWriteEndMarkerMode(bool writeEndMarker) - { - _writeEndMark = writeEndMarker; - } - - void Init() - { - BaseInit(); - _rangeEncoder.Init(); - - uint i; - for (i = 0; i < Base.kNumStates; i++) - { - for (uint j = 0; j <= _posStateMask; j++) - { - uint complexState = (i << Base.kNumPosStatesBitsMax) + j; - _isMatch[complexState].Init(); - _isRep0Long[complexState].Init(); - } - _isRep[i].Init(); - _isRepG0[i].Init(); - _isRepG1[i].Init(); - _isRepG2[i].Init(); - } - _literalEncoder.Init(); - for (i = 0; i < Base.kNumLenToPosStates; i++) - _posSlotEncoder[i].Init(); - for (i = 0; i < Base.kNumFullDistances - Base.kEndPosModelIndex; i++) - _posEncoders[i].Init(); - - _lenEncoder.Init((UInt32)1 << _posStateBits); - _repMatchLenEncoder.Init((UInt32)1 << _posStateBits); - - _posAlignEncoder.Init(); - - _longestMatchWasFound = false; - _optimumEndIndex = 0; - _optimumCurrentIndex = 0; - _additionalOffset = 0; - } - - void ReadMatchDistances(out UInt32 lenRes, out UInt32 numDistancePairs) - { - lenRes = 0; - numDistancePairs = _matchFinder.GetMatches(_matchDistances); - if (numDistancePairs > 0) - { - lenRes = _matchDistances[numDistancePairs - 2]; - if (lenRes == _numFastBytes) - lenRes += _matchFinder.GetMatchLen((int)lenRes - 1, _matchDistances[numDistancePairs - 1], - Base.kMatchMaxLen - lenRes); - } - _additionalOffset++; - } - - - void MovePos(UInt32 num) - { - if (num > 0) - { - _matchFinder.Skip(num); - _additionalOffset += num; - } - } - - UInt32 GetRepLen1Price(Base.State state, UInt32 posState) - { - return _isRepG0[state.Index].GetPrice0() + - _isRep0Long[(state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice0(); - } - - UInt32 GetPureRepPrice(UInt32 repIndex, Base.State state, UInt32 posState) - { - UInt32 price; - if (repIndex == 0) - { - price = _isRepG0[state.Index].GetPrice0(); - price += _isRep0Long[(state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice1(); - } - else - { - price = _isRepG0[state.Index].GetPrice1(); - if (repIndex == 1) - price += _isRepG1[state.Index].GetPrice0(); - else - { - price += _isRepG1[state.Index].GetPrice1(); - price += _isRepG2[state.Index].GetPrice(repIndex - 2); - } - } - return price; - } - - UInt32 GetRepPrice(UInt32 repIndex, UInt32 len, Base.State state, UInt32 posState) - { - UInt32 price = _repMatchLenEncoder.GetPrice(len - Base.kMatchMinLen, posState); - return price + GetPureRepPrice(repIndex, state, posState); - } - - UInt32 GetPosLenPrice(UInt32 pos, UInt32 len, UInt32 posState) - { - UInt32 price; - UInt32 lenToPosState = Base.GetLenToPosState(len); - if (pos < Base.kNumFullDistances) - price = _distancesPrices[(lenToPosState * Base.kNumFullDistances) + pos]; - else - price = _posSlotPrices[(lenToPosState << Base.kNumPosSlotBits) + GetPosSlot2(pos)] + - _alignPrices[pos & Base.kAlignMask]; - return price + _lenEncoder.GetPrice(len - Base.kMatchMinLen, posState); - } - - UInt32 Backward(out UInt32 backRes, UInt32 cur) - { - _optimumEndIndex = cur; - UInt32 posMem = _optimum[cur].PosPrev; - UInt32 backMem = _optimum[cur].BackPrev; - do - { - if (_optimum[cur].Prev1IsChar) - { - _optimum[posMem].MakeAsChar(); - _optimum[posMem].PosPrev = posMem - 1; - if (_optimum[cur].Prev2) - { - _optimum[posMem - 1].Prev1IsChar = false; - _optimum[posMem - 1].PosPrev = _optimum[cur].PosPrev2; - _optimum[posMem - 1].BackPrev = _optimum[cur].BackPrev2; - } - } - UInt32 posPrev = posMem; - UInt32 backCur = backMem; - - backMem = _optimum[posPrev].BackPrev; - posMem = _optimum[posPrev].PosPrev; - - _optimum[posPrev].BackPrev = backCur; - _optimum[posPrev].PosPrev = cur; - cur = posPrev; - } - while (cur > 0); - backRes = _optimum[0].BackPrev; - _optimumCurrentIndex = _optimum[0].PosPrev; - return _optimumCurrentIndex; - } - - UInt32[] reps = new UInt32[Base.kNumRepDistances]; - UInt32[] repLens = new UInt32[Base.kNumRepDistances]; - - - UInt32 GetOptimum(UInt32 position, out UInt32 backRes) - { - if (_optimumEndIndex != _optimumCurrentIndex) - { - UInt32 lenRes = _optimum[_optimumCurrentIndex].PosPrev - _optimumCurrentIndex; - backRes = _optimum[_optimumCurrentIndex].BackPrev; - _optimumCurrentIndex = _optimum[_optimumCurrentIndex].PosPrev; - return lenRes; - } - _optimumCurrentIndex = _optimumEndIndex = 0; - - UInt32 lenMain, numDistancePairs; - if (!_longestMatchWasFound) - { - ReadMatchDistances(out lenMain, out numDistancePairs); - } - else - { - lenMain = _longestMatchLength; - numDistancePairs = _numDistancePairs; - _longestMatchWasFound = false; - } - - UInt32 numAvailableBytes = _matchFinder.GetNumAvailableBytes() + 1; - if (numAvailableBytes < 2) - { - backRes = 0xFFFFFFFF; - return 1; - } - if (numAvailableBytes > Base.kMatchMaxLen) - numAvailableBytes = Base.kMatchMaxLen; - - UInt32 repMaxIndex = 0; - UInt32 i; - for (i = 0; i < Base.kNumRepDistances; i++) - { - reps[i] = _repDistances[i]; - repLens[i] = _matchFinder.GetMatchLen(0 - 1, reps[i], Base.kMatchMaxLen); - if (repLens[i] > repLens[repMaxIndex]) - repMaxIndex = i; - } - if (repLens[repMaxIndex] >= _numFastBytes) - { - backRes = repMaxIndex; - UInt32 lenRes = repLens[repMaxIndex]; - MovePos(lenRes - 1); - return lenRes; - } - - if (lenMain >= _numFastBytes) - { - backRes = _matchDistances[numDistancePairs - 1] + Base.kNumRepDistances; - MovePos(lenMain - 1); - return lenMain; - } - - Byte currentByte = _matchFinder.GetIndexByte(0 - 1); - Byte matchByte = _matchFinder.GetIndexByte((Int32)(0 - _repDistances[0] - 1 - 1)); - - if (lenMain < 2 && currentByte != matchByte && repLens[repMaxIndex] < 2) - { - backRes = (UInt32)0xFFFFFFFF; - return 1; - } - - _optimum[0].State = _state; - - UInt32 posState = (position & _posStateMask); - - _optimum[1].Price = _isMatch[(_state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice0() + - _literalEncoder.GetSubCoder(position, _previousByte).GetPrice(!_state.IsCharState(), matchByte, currentByte); - _optimum[1].MakeAsChar(); - - UInt32 matchPrice = _isMatch[(_state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice1(); - UInt32 repMatchPrice = matchPrice + _isRep[_state.Index].GetPrice1(); - - if (matchByte == currentByte) - { - UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(_state, posState); - if (shortRepPrice < _optimum[1].Price) - { - _optimum[1].Price = shortRepPrice; - _optimum[1].MakeAsShortRep(); - } - } - - UInt32 lenEnd = ((lenMain >= repLens[repMaxIndex]) ? lenMain : repLens[repMaxIndex]); - - if(lenEnd < 2) - { - backRes = _optimum[1].BackPrev; - return 1; - } - - _optimum[1].PosPrev = 0; - - _optimum[0].Backs0 = reps[0]; - _optimum[0].Backs1 = reps[1]; - _optimum[0].Backs2 = reps[2]; - _optimum[0].Backs3 = reps[3]; - - UInt32 len = lenEnd; - do - _optimum[len--].Price = kIfinityPrice; - while (len >= 2); - - for (i = 0; i < Base.kNumRepDistances; i++) - { - UInt32 repLen = repLens[i]; - if (repLen < 2) - continue; - UInt32 price = repMatchPrice + GetPureRepPrice(i, _state, posState); - do - { - UInt32 curAndLenPrice = price + _repMatchLenEncoder.GetPrice(repLen - 2, posState); - Optimal optimum = _optimum[repLen]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = 0; - optimum.BackPrev = i; - optimum.Prev1IsChar = false; - } - } - while (--repLen >= 2); - } - - UInt32 normalMatchPrice = matchPrice + _isRep[_state.Index].GetPrice0(); - - len = ((repLens[0] >= 2) ? repLens[0] + 1 : 2); - if (len <= lenMain) - { - UInt32 offs = 0; - while (len > _matchDistances[offs]) - offs += 2; - for (; ; len++) - { - UInt32 distance = _matchDistances[offs + 1]; - UInt32 curAndLenPrice = normalMatchPrice + GetPosLenPrice(distance, len, posState); - Optimal optimum = _optimum[len]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = 0; - optimum.BackPrev = distance + Base.kNumRepDistances; - optimum.Prev1IsChar = false; - } - if (len == _matchDistances[offs]) - { - offs += 2; - if (offs == numDistancePairs) - break; - } - } - } - - UInt32 cur = 0; - - while (true) - { - cur++; - if (cur == lenEnd) - return Backward(out backRes, cur); - UInt32 newLen; - ReadMatchDistances(out newLen, out numDistancePairs); - if (newLen >= _numFastBytes) - { - _numDistancePairs = numDistancePairs; - _longestMatchLength = newLen; - _longestMatchWasFound = true; - return Backward(out backRes, cur); - } - position++; - UInt32 posPrev = _optimum[cur].PosPrev; - Base.State state; - if (_optimum[cur].Prev1IsChar) - { - posPrev--; - if (_optimum[cur].Prev2) - { - state = _optimum[_optimum[cur].PosPrev2].State; - if (_optimum[cur].BackPrev2 < Base.kNumRepDistances) - state.UpdateRep(); - else - state.UpdateMatch(); - } - else - state = _optimum[posPrev].State; - state.UpdateChar(); - } - else - state = _optimum[posPrev].State; - if (posPrev == cur - 1) - { - if (_optimum[cur].IsShortRep()) - state.UpdateShortRep(); - else - state.UpdateChar(); - } - else - { - UInt32 pos; - if (_optimum[cur].Prev1IsChar && _optimum[cur].Prev2) - { - posPrev = _optimum[cur].PosPrev2; - pos = _optimum[cur].BackPrev2; - state.UpdateRep(); - } - else - { - pos = _optimum[cur].BackPrev; - if (pos < Base.kNumRepDistances) - state.UpdateRep(); - else - state.UpdateMatch(); - } - Optimal opt = _optimum[posPrev]; - if (pos < Base.kNumRepDistances) - { - if (pos == 0) - { - reps[0] = opt.Backs0; - reps[1] = opt.Backs1; - reps[2] = opt.Backs2; - reps[3] = opt.Backs3; - } - else if (pos == 1) - { - reps[0] = opt.Backs1; - reps[1] = opt.Backs0; - reps[2] = opt.Backs2; - reps[3] = opt.Backs3; - } - else if (pos == 2) - { - reps[0] = opt.Backs2; - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs3; - } - else - { - reps[0] = opt.Backs3; - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs2; - } - } - else - { - reps[0] = (pos - Base.kNumRepDistances); - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs2; - } - } - _optimum[cur].State = state; - _optimum[cur].Backs0 = reps[0]; - _optimum[cur].Backs1 = reps[1]; - _optimum[cur].Backs2 = reps[2]; - _optimum[cur].Backs3 = reps[3]; - UInt32 curPrice = _optimum[cur].Price; - - currentByte = _matchFinder.GetIndexByte(0 - 1); - matchByte = _matchFinder.GetIndexByte((Int32)(0 - reps[0] - 1 - 1)); - - posState = (position & _posStateMask); - - UInt32 curAnd1Price = curPrice + - _isMatch[(state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice0() + - _literalEncoder.GetSubCoder(position, _matchFinder.GetIndexByte(0 - 2)). - GetPrice(!state.IsCharState(), matchByte, currentByte); - - Optimal nextOptimum = _optimum[cur + 1]; - - bool nextIsChar = false; - if (curAnd1Price < nextOptimum.Price) - { - nextOptimum.Price = curAnd1Price; - nextOptimum.PosPrev = cur; - nextOptimum.MakeAsChar(); - nextIsChar = true; - } - - matchPrice = curPrice + _isMatch[(state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice1(); - repMatchPrice = matchPrice + _isRep[state.Index].GetPrice1(); - - if (matchByte == currentByte && - !(nextOptimum.PosPrev < cur && nextOptimum.BackPrev == 0)) - { - UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(state, posState); - if (shortRepPrice <= nextOptimum.Price) - { - nextOptimum.Price = shortRepPrice; - nextOptimum.PosPrev = cur; - nextOptimum.MakeAsShortRep(); - nextIsChar = true; - } - } - - UInt32 numAvailableBytesFull = _matchFinder.GetNumAvailableBytes() + 1; - numAvailableBytesFull = Math.Min(kNumOpts - 1 - cur, numAvailableBytesFull); - numAvailableBytes = numAvailableBytesFull; - - if (numAvailableBytes < 2) - continue; - if (numAvailableBytes > _numFastBytes) - numAvailableBytes = _numFastBytes; - if (!nextIsChar && matchByte != currentByte) - { - // try Literal + rep0 - UInt32 t = Math.Min(numAvailableBytesFull - 1, _numFastBytes); - UInt32 lenTest2 = _matchFinder.GetMatchLen(0, reps[0], t); - if (lenTest2 >= 2) - { - Base.State state2 = state; - state2.UpdateChar(); - UInt32 posStateNext = (position + 1) & _posStateMask; - UInt32 nextRepMatchPrice = curAnd1Price + - _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice1() + - _isRep[state2.Index].GetPrice1(); - { - UInt32 offset = cur + 1 + lenTest2; - while (lenEnd < offset) - _optimum[++lenEnd].Price = kIfinityPrice; - UInt32 curAndLenPrice = nextRepMatchPrice + GetRepPrice( - 0, lenTest2, state2, posStateNext); - Optimal optimum = _optimum[offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = false; - } - } - } - } - - UInt32 startLen = 2; // speed optimization - - for (UInt32 repIndex = 0; repIndex < Base.kNumRepDistances; repIndex++) - { - UInt32 lenTest = _matchFinder.GetMatchLen(0 - 1, reps[repIndex], numAvailableBytes); - if (lenTest < 2) - continue; - UInt32 lenTestTemp = lenTest; - do - { - while (lenEnd < cur + lenTest) - _optimum[++lenEnd].Price = kIfinityPrice; - UInt32 curAndLenPrice = repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState); - Optimal optimum = _optimum[cur + lenTest]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur; - optimum.BackPrev = repIndex; - optimum.Prev1IsChar = false; - } - } - while(--lenTest >= 2); - lenTest = lenTestTemp; - - if (repIndex == 0) - startLen = lenTest + 1; - - // if (_maxMode) - if (lenTest < numAvailableBytesFull) - { - UInt32 t = Math.Min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); - UInt32 lenTest2 = _matchFinder.GetMatchLen((Int32)lenTest, reps[repIndex], t); - if (lenTest2 >= 2) - { - Base.State state2 = state; - state2.UpdateRep(); - UInt32 posStateNext = (position + lenTest) & _posStateMask; - UInt32 curAndLenCharPrice = - repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState) + - _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice0() + - _literalEncoder.GetSubCoder(position + lenTest, - _matchFinder.GetIndexByte((Int32)lenTest - 1 - 1)).GetPrice(true, - _matchFinder.GetIndexByte((Int32)((Int32)lenTest - 1 - (Int32)(reps[repIndex] + 1))), - _matchFinder.GetIndexByte((Int32)lenTest - 1)); - state2.UpdateChar(); - posStateNext = (position + lenTest + 1) & _posStateMask; - UInt32 nextMatchPrice = curAndLenCharPrice + _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice1(); - UInt32 nextRepMatchPrice = nextMatchPrice + _isRep[state2.Index].GetPrice1(); - - // for(; lenTest2 >= 2; lenTest2--) - { - UInt32 offset = lenTest + 1 + lenTest2; - while(lenEnd < cur + offset) - _optimum[++lenEnd].Price = kIfinityPrice; - UInt32 curAndLenPrice = nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); - Optimal optimum = _optimum[cur + offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + lenTest + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = true; - optimum.PosPrev2 = cur; - optimum.BackPrev2 = repIndex; - } - } - } - } - } - - if (newLen > numAvailableBytes) - { - newLen = numAvailableBytes; - for (numDistancePairs = 0; newLen > _matchDistances[numDistancePairs]; numDistancePairs += 2) ; - _matchDistances[numDistancePairs] = newLen; - numDistancePairs += 2; - } - if (newLen >= startLen) - { - normalMatchPrice = matchPrice + _isRep[state.Index].GetPrice0(); - while (lenEnd < cur + newLen) - _optimum[++lenEnd].Price = kIfinityPrice; - - UInt32 offs = 0; - while (startLen > _matchDistances[offs]) - offs += 2; - - for (UInt32 lenTest = startLen; ; lenTest++) - { - UInt32 curBack = _matchDistances[offs + 1]; - UInt32 curAndLenPrice = normalMatchPrice + GetPosLenPrice(curBack, lenTest, posState); - Optimal optimum = _optimum[cur + lenTest]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur; - optimum.BackPrev = curBack + Base.kNumRepDistances; - optimum.Prev1IsChar = false; - } - - if (lenTest == _matchDistances[offs]) - { - if (lenTest < numAvailableBytesFull) - { - UInt32 t = Math.Min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); - UInt32 lenTest2 = _matchFinder.GetMatchLen((Int32)lenTest, curBack, t); - if (lenTest2 >= 2) - { - Base.State state2 = state; - state2.UpdateMatch(); - UInt32 posStateNext = (position + lenTest) & _posStateMask; - UInt32 curAndLenCharPrice = curAndLenPrice + - _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice0() + - _literalEncoder.GetSubCoder(position + lenTest, - _matchFinder.GetIndexByte((Int32)lenTest - 1 - 1)). - GetPrice(true, - _matchFinder.GetIndexByte((Int32)lenTest - (Int32)(curBack + 1) - 1), - _matchFinder.GetIndexByte((Int32)lenTest - 1)); - state2.UpdateChar(); - posStateNext = (position + lenTest + 1) & _posStateMask; - UInt32 nextMatchPrice = curAndLenCharPrice + _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice1(); - UInt32 nextRepMatchPrice = nextMatchPrice + _isRep[state2.Index].GetPrice1(); - - UInt32 offset = lenTest + 1 + lenTest2; - while (lenEnd < cur + offset) - _optimum[++lenEnd].Price = kIfinityPrice; - curAndLenPrice = nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); - optimum = _optimum[cur + offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + lenTest + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = true; - optimum.PosPrev2 = cur; - optimum.BackPrev2 = curBack + Base.kNumRepDistances; - } - } - } - offs += 2; - if (offs == numDistancePairs) - break; - } - } - } - } - } - - bool ChangePair(UInt32 smallDist, UInt32 bigDist) - { - const int kDif = 7; - return (smallDist < ((UInt32)(1) << (32 - kDif)) && bigDist >= (smallDist << kDif)); - } - - void WriteEndMarker(UInt32 posState) - { - if (!_writeEndMark) - return; - - _isMatch[(_state.Index << Base.kNumPosStatesBitsMax) + posState].Encode(_rangeEncoder, 1); - _isRep[_state.Index].Encode(_rangeEncoder, 0); - _state.UpdateMatch(); - UInt32 len = Base.kMatchMinLen; - _lenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - UInt32 posSlot = (1 << Base.kNumPosSlotBits) - 1; - UInt32 lenToPosState = Base.GetLenToPosState(len); - _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); - int footerBits = 30; - UInt32 posReduced = (((UInt32)1) << footerBits) - 1; - _rangeEncoder.EncodeDirectBits(posReduced >> Base.kNumAlignBits, footerBits - Base.kNumAlignBits); - _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced & Base.kAlignMask); - } - - void Flush(UInt32 nowPos) - { - ReleaseMFStream(); - WriteEndMarker(nowPos & _posStateMask); - _rangeEncoder.FlushData(); - _rangeEncoder.FlushStream(); - } - - public void CodeOneBlock(out Int64 inSize, out Int64 outSize, out bool finished) - { - inSize = 0; - outSize = 0; - finished = true; - - if (_inStream != null) - { - _matchFinder.SetStream(_inStream); - _matchFinder.Init(); - _needReleaseMFStream = true; - _inStream = null; - if (_trainSize > 0) - _matchFinder.Skip(_trainSize); - } - - if (_finished) - return; - _finished = true; - - - Int64 progressPosValuePrev = nowPos64; - if (nowPos64 == 0) - { - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((UInt32)nowPos64); - return; - } - UInt32 len, numDistancePairs; // it's not used - ReadMatchDistances(out len, out numDistancePairs); - UInt32 posState = (UInt32)(nowPos64) & _posStateMask; - _isMatch[(_state.Index << Base.kNumPosStatesBitsMax) + posState].Encode(_rangeEncoder, 0); - _state.UpdateChar(); - Byte curByte = _matchFinder.GetIndexByte((Int32)(0 - _additionalOffset)); - _literalEncoder.GetSubCoder((UInt32)(nowPos64), _previousByte).Encode(_rangeEncoder, curByte); - _previousByte = curByte; - _additionalOffset--; - nowPos64++; - } - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((UInt32)nowPos64); - return; - } - while (true) - { - UInt32 pos; - UInt32 len = GetOptimum((UInt32)nowPos64, out pos); - - UInt32 posState = ((UInt32)nowPos64) & _posStateMask; - UInt32 complexState = (_state.Index << Base.kNumPosStatesBitsMax) + posState; - if (len == 1 && pos == 0xFFFFFFFF) - { - _isMatch[complexState].Encode(_rangeEncoder, 0); - Byte curByte = _matchFinder.GetIndexByte((Int32)(0 - _additionalOffset)); - LiteralEncoder.Encoder2 subCoder = _literalEncoder.GetSubCoder((UInt32)nowPos64, _previousByte); - if (!_state.IsCharState()) - { - Byte matchByte = _matchFinder.GetIndexByte((Int32)(0 - _repDistances[0] - 1 - _additionalOffset)); - subCoder.EncodeMatched(_rangeEncoder, matchByte, curByte); - } - else - subCoder.Encode(_rangeEncoder, curByte); - _previousByte = curByte; - _state.UpdateChar(); - } - else - { - _isMatch[complexState].Encode(_rangeEncoder, 1); - if (pos < Base.kNumRepDistances) - { - _isRep[_state.Index].Encode(_rangeEncoder, 1); - if (pos == 0) - { - _isRepG0[_state.Index].Encode(_rangeEncoder, 0); - if (len == 1) - _isRep0Long[complexState].Encode(_rangeEncoder, 0); - else - _isRep0Long[complexState].Encode(_rangeEncoder, 1); - } - else - { - _isRepG0[_state.Index].Encode(_rangeEncoder, 1); - if (pos == 1) - _isRepG1[_state.Index].Encode(_rangeEncoder, 0); - else - { - _isRepG1[_state.Index].Encode(_rangeEncoder, 1); - _isRepG2[_state.Index].Encode(_rangeEncoder, pos - 2); - } - } - if (len == 1) - _state.UpdateShortRep(); - else - { - _repMatchLenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - _state.UpdateRep(); - } - UInt32 distance = _repDistances[pos]; - if (pos != 0) - { - for (UInt32 i = pos; i >= 1; i--) - _repDistances[i] = _repDistances[i - 1]; - _repDistances[0] = distance; - } - } - else - { - _isRep[_state.Index].Encode(_rangeEncoder, 0); - _state.UpdateMatch(); - _lenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - pos -= Base.kNumRepDistances; - UInt32 posSlot = GetPosSlot(pos); - UInt32 lenToPosState = Base.GetLenToPosState(len); - _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); - - if (posSlot >= Base.kStartPosModelIndex) - { - int footerBits = (int)((posSlot >> 1) - 1); - UInt32 baseVal = ((2 | (posSlot & 1)) << footerBits); - UInt32 posReduced = pos - baseVal; - - if (posSlot < Base.kEndPosModelIndex) - RangeCoder.BitTreeEncoder.ReverseEncode(_posEncoders, - baseVal - posSlot - 1, _rangeEncoder, footerBits, posReduced); - else - { - _rangeEncoder.EncodeDirectBits(posReduced >> Base.kNumAlignBits, footerBits - Base.kNumAlignBits); - _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced & Base.kAlignMask); - _alignPriceCount++; - } - } - UInt32 distance = pos; - for (UInt32 i = Base.kNumRepDistances - 1; i >= 1; i--) - _repDistances[i] = _repDistances[i - 1]; - _repDistances[0] = distance; - _matchPriceCount++; - } - _previousByte = _matchFinder.GetIndexByte((Int32)(len - 1 - _additionalOffset)); - } - _additionalOffset -= len; - nowPos64 += len; - if (_additionalOffset == 0) - { - // if (!_fastMode) - if (_matchPriceCount >= (1 << 7)) - FillDistancesPrices(); - if (_alignPriceCount >= Base.kAlignTableSize) - FillAlignPrices(); - inSize = nowPos64; - outSize = _rangeEncoder.GetProcessedSizeAdd(); - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((UInt32)nowPos64); - return; - } - - if (nowPos64 - progressPosValuePrev >= (1 << 12)) - { - _finished = false; - finished = false; - return; - } - } - } - } - - void ReleaseMFStream() - { - if (_matchFinder != null && _needReleaseMFStream) - { - _matchFinder.ReleaseStream(); - _needReleaseMFStream = false; - } - } - - void SetOutStream(System.IO.Stream outStream) { _rangeEncoder.SetStream(outStream); } - void ReleaseOutStream() { _rangeEncoder.ReleaseStream(); } - - void ReleaseStreams() - { - ReleaseMFStream(); - ReleaseOutStream(); - } - - void SetStreams(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize) - { - _inStream = inStream; - _finished = false; - Create(); - SetOutStream(outStream); - Init(); - - // if (!_fastMode) - { - FillDistancesPrices(); - FillAlignPrices(); - } - - _lenEncoder.SetTableSize(_numFastBytes + 1 - Base.kMatchMinLen); - _lenEncoder.UpdateTables((UInt32)1 << _posStateBits); - _repMatchLenEncoder.SetTableSize(_numFastBytes + 1 - Base.kMatchMinLen); - _repMatchLenEncoder.UpdateTables((UInt32)1 << _posStateBits); - - nowPos64 = 0; - } - - - public void Code(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize, ICodeProgress progress) - { - _needReleaseMFStream = false; - try - { - SetStreams(inStream, outStream, inSize, outSize); - while (true) - { - Int64 processedInSize; - Int64 processedOutSize; - bool finished; - CodeOneBlock(out processedInSize, out processedOutSize, out finished); - if (finished) - return; - if (progress != null) - { - progress.SetProgress(processedInSize, processedOutSize); - } - } - } - finally - { - ReleaseStreams(); - } - } - - const int kPropSize = 5; - Byte[] properties = new Byte[kPropSize]; - - public void WriteCoderProperties(System.IO.Stream outStream) - { - properties[0] = (Byte)((_posStateBits * 5 + _numLiteralPosStateBits) * 9 + _numLiteralContextBits); - for (int i = 0; i < 4; i++) - properties[1 + i] = (Byte)((_dictionarySize >> (8 * i)) & 0xFF); - outStream.Write(properties, 0, kPropSize); - } - - UInt32[] tempPrices = new UInt32[Base.kNumFullDistances]; - UInt32 _matchPriceCount; - - void FillDistancesPrices() - { - for (UInt32 i = Base.kStartPosModelIndex; i < Base.kNumFullDistances; i++) - { - UInt32 posSlot = GetPosSlot(i); - int footerBits = (int)((posSlot >> 1) - 1); - UInt32 baseVal = ((2 | (posSlot & 1)) << footerBits); - tempPrices[i] = BitTreeEncoder.ReverseGetPrice(_posEncoders, - baseVal - posSlot - 1, footerBits, i - baseVal); - } - - for (UInt32 lenToPosState = 0; lenToPosState < Base.kNumLenToPosStates; lenToPosState++) - { - UInt32 posSlot; - RangeCoder.BitTreeEncoder encoder = _posSlotEncoder[lenToPosState]; - - UInt32 st = (lenToPosState << Base.kNumPosSlotBits); - for (posSlot = 0; posSlot < _distTableSize; posSlot++) - _posSlotPrices[st + posSlot] = encoder.GetPrice(posSlot); - for (posSlot = Base.kEndPosModelIndex; posSlot < _distTableSize; posSlot++) - _posSlotPrices[st + posSlot] += ((((posSlot >> 1) - 1) - Base.kNumAlignBits) << RangeCoder.BitEncoder.kNumBitPriceShiftBits); - - UInt32 st2 = lenToPosState * Base.kNumFullDistances; - UInt32 i; - for (i = 0; i < Base.kStartPosModelIndex; i++) - _distancesPrices[st2 + i] = _posSlotPrices[st + i]; - for (; i < Base.kNumFullDistances; i++) - _distancesPrices[st2 + i] = _posSlotPrices[st + GetPosSlot(i)] + tempPrices[i]; - } - _matchPriceCount = 0; - } - - void FillAlignPrices() - { - for (UInt32 i = 0; i < Base.kAlignTableSize; i++) - _alignPrices[i] = _posAlignEncoder.ReverseGetPrice(i); - _alignPriceCount = 0; - } - - - static string[] kMatchFinderIDs = - { - "BT2", - "BT4", - }; - - static int FindMatchFinder(string s) - { - for (int m = 0; m < kMatchFinderIDs.Length; m++) - if (s == kMatchFinderIDs[m]) - return m; - return -1; - } - - public void SetCoderProperties(CoderPropID[] propIDs, object[] properties) - { - for (UInt32 i = 0; i < properties.Length; i++) - { - object prop = properties[i]; - switch (propIDs[i]) - { - case CoderPropID.NumFastBytes: - { - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 numFastBytes = (Int32)prop; - if (numFastBytes < 5 || numFastBytes > Base.kMatchMaxLen) - throw new InvalidParamException(); - _numFastBytes = (UInt32)numFastBytes; - break; - } - case CoderPropID.Algorithm: - { - /* - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 maximize = (Int32)prop; - _fastMode = (maximize == 0); - _maxMode = (maximize >= 2); - */ - break; - } - case CoderPropID.MatchFinder: - { - if (!(prop is String)) - throw new InvalidParamException(); - EMatchFinderType matchFinderIndexPrev = _matchFinderType; - int m = FindMatchFinder(((string)prop).ToUpper()); - if (m < 0) - throw new InvalidParamException(); - _matchFinderType = (EMatchFinderType)m; - if (_matchFinder != null && matchFinderIndexPrev != _matchFinderType) - { - _dictionarySizePrev = 0xFFFFFFFF; - _matchFinder = null; - } - break; - } - case CoderPropID.DictionarySize: - { - const int kDicLogSizeMaxCompress = 30; - if (!(prop is Int32)) - throw new InvalidParamException(); ; - Int32 dictionarySize = (Int32)prop; - if (dictionarySize < (UInt32)(1 << Base.kDicLogSizeMin) || - dictionarySize > (UInt32)(1 << kDicLogSizeMaxCompress)) - throw new InvalidParamException(); - _dictionarySize = (UInt32)dictionarySize; - int dicLogSize; - for (dicLogSize = 0; dicLogSize < (UInt32)kDicLogSizeMaxCompress; dicLogSize++) - if (dictionarySize <= ((UInt32)(1) << dicLogSize)) - break; - _distTableSize = (UInt32)dicLogSize * 2; - break; - } - case CoderPropID.PosStateBits: - { - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 v = (Int32)prop; - if (v < 0 || v > (UInt32)Base.kNumPosStatesBitsEncodingMax) - throw new InvalidParamException(); - _posStateBits = (int)v; - _posStateMask = (((UInt32)1) << (int)_posStateBits) - 1; - break; - } - case CoderPropID.LitPosBits: - { - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 v = (Int32)prop; - if (v < 0 || v > (UInt32)Base.kNumLitPosStatesBitsEncodingMax) - throw new InvalidParamException(); - _numLiteralPosStateBits = (int)v; - break; - } - case CoderPropID.LitContextBits: - { - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 v = (Int32)prop; - if (v < 0 || v > (UInt32)Base.kNumLitContextBitsMax) - throw new InvalidParamException(); ; - _numLiteralContextBits = (int)v; - break; - } - case CoderPropID.EndMarker: - { - if (!(prop is Boolean)) - throw new InvalidParamException(); - SetWriteEndMarkerMode((Boolean)prop); - break; - } - default: - throw new InvalidParamException(); - } - } - } - - uint _trainSize = 0; - public void SetTrainSize(uint trainSize) - { - _trainSize = trainSize; - } - - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs deleted file mode 100644 index 8aa446267ad5..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs +++ /dev/null @@ -1,364 +0,0 @@ -using System; -using System.IO; -namespace SevenZip -{ - using CommandLineParser; - - public class CDoubleStream: Stream - { - public System.IO.Stream s1; - public System.IO.Stream s2; - public int fileIndex; - public long skipSize; - - public override bool CanRead { get { return true; }} - public override bool CanWrite { get { return false; }} - public override bool CanSeek { get { return false; }} - public override long Length { get { return s1.Length + s2.Length - skipSize; } } - public override long Position - { - get { return 0; } - set { } - } - public override void Flush() { } - public override int Read(byte[] buffer, int offset, int count) - { - int numTotal = 0; - while (count > 0) - { - if (fileIndex == 0) - { - int num = s1.Read(buffer, offset, count); - offset += num; - count -= num; - numTotal += num; - if (num == 0) - fileIndex++; - } - if (fileIndex == 1) - { - numTotal += s2.Read(buffer, offset, count); - return numTotal; - } - } - return numTotal; - } - public override void Write(byte[] buffer, int offset, int count) - { - throw (new Exception("can't Write")); - } - public override long Seek(long offset, System.IO.SeekOrigin origin) - { - throw (new Exception("can't Seek")); - } - public override void SetLength(long value) - { - throw (new Exception("can't SetLength")); - } - } - - class LzmaAlone - { - enum Key - { - Help1 = 0, - Help2, - Mode, - Dictionary, - FastBytes, - LitContext, - LitPos, - PosBits, - MatchFinder, - EOS, - StdIn, - StdOut, - Train - }; - - static void PrintHelp() - { - System.Console.WriteLine("\nUsage: LZMA [...] inputFile outputFile\n" + - " e: encode file\n" + - " d: decode file\n" + - " b: Benchmark\n" + - "\n" + - // " -a{N}: set compression mode - [0, 1], default: 1 (max)\n" + - " -d{N}: set dictionary - [0, 29], default: 23 (8MB)\n" + - " -fb{N}: set number of fast bytes - [5, 273], default: 128\n" + - " -lc{N}: set number of literal context bits - [0, 8], default: 3\n" + - " -lp{N}: set number of literal pos bits - [0, 4], default: 0\n" + - " -pb{N}: set number of pos bits - [0, 4], default: 2\n" + - " -mf{MF_ID}: set Match Finder: [bt2, bt4], default: bt4\n" + - " -eos: write End Of Stream marker\n" - // + " -si: read data from stdin\n" - // + " -so: write data to stdout\n" - ); - } - - static bool GetNumber(string s, out Int32 v) - { - v = 0; - for (int i = 0; i < s.Length; i++) - { - char c = s[i]; - if (c < '0' || c > '9') - return false; - v *= 10; - v += (Int32)(c - '0'); - } - return true; - } - - static int IncorrectCommand() - { - throw (new Exception("Command line error")); - // System.Console.WriteLine("\nCommand line error\n"); - // return 1; - } - static int Main2(string[] args) - { - System.Console.WriteLine("\nLZMA# 4.61 2008-11-23\n"); - - if (args.Length == 0) - { - PrintHelp(); - return 0; - } - - SwitchForm[] kSwitchForms = new SwitchForm[13]; - int sw = 0; - kSwitchForms[sw++] = new SwitchForm("?", SwitchType.Simple, false); - kSwitchForms[sw++] = new SwitchForm("H", SwitchType.Simple, false); - kSwitchForms[sw++] = new SwitchForm("A", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("D", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("FB", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("LC", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("LP", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("PB", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("MF", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("EOS", SwitchType.Simple, false); - kSwitchForms[sw++] = new SwitchForm("SI", SwitchType.Simple, false); - kSwitchForms[sw++] = new SwitchForm("SO", SwitchType.Simple, false); - kSwitchForms[sw++] = new SwitchForm("T", SwitchType.UnLimitedPostString, false, 1); - - - Parser parser = new Parser(sw); - try - { - parser.ParseStrings(kSwitchForms, args); - } - catch - { - return IncorrectCommand(); - } - - if (parser[(int)Key.Help1].ThereIs || parser[(int)Key.Help2].ThereIs) - { - PrintHelp(); - return 0; - } - - System.Collections.ArrayList nonSwitchStrings = parser.NonSwitchStrings; - - int paramIndex = 0; - if (paramIndex >= nonSwitchStrings.Count) - return IncorrectCommand(); - string command = (string)nonSwitchStrings[paramIndex++]; - command = command.ToLower(); - - bool dictionaryIsDefined = false; - Int32 dictionary = 1 << 21; - if (parser[(int)Key.Dictionary].ThereIs) - { - Int32 dicLog; - if (!GetNumber((string)parser[(int)Key.Dictionary].PostStrings[0], out dicLog)) - IncorrectCommand(); - dictionary = (Int32)1 << dicLog; - dictionaryIsDefined = true; - } - string mf = "bt4"; - if (parser[(int)Key.MatchFinder].ThereIs) - mf = (string)parser[(int)Key.MatchFinder].PostStrings[0]; - mf = mf.ToLower(); - - if (command == "b") - { - const Int32 kNumDefaultItereations = 10; - Int32 numIterations = kNumDefaultItereations; - if (paramIndex < nonSwitchStrings.Count) - if (!GetNumber((string)nonSwitchStrings[paramIndex++], out numIterations)) - numIterations = kNumDefaultItereations; - return LzmaBench.LzmaBenchmark(numIterations, (UInt32)dictionary); - } - - string train = ""; - if (parser[(int)Key.Train].ThereIs) - train = (string)parser[(int)Key.Train].PostStrings[0]; - - bool encodeMode = false; - if (command == "e") - encodeMode = true; - else if (command == "d") - encodeMode = false; - else - IncorrectCommand(); - - bool stdInMode = parser[(int)Key.StdIn].ThereIs; - bool stdOutMode = parser[(int)Key.StdOut].ThereIs; - - Stream inStream = null; - if (stdInMode) - { - throw (new Exception("Not implemeted")); - } - else - { - if (paramIndex >= nonSwitchStrings.Count) - IncorrectCommand(); - string inputName = (string)nonSwitchStrings[paramIndex++]; - inStream = new FileStream(inputName, FileMode.Open, FileAccess.Read); - } - - FileStream outStream = null; - if (stdOutMode) - { - throw (new Exception("Not implemeted")); - } - else - { - if (paramIndex >= nonSwitchStrings.Count) - IncorrectCommand(); - string outputName = (string)nonSwitchStrings[paramIndex++]; - outStream = new FileStream(outputName, FileMode.Create, FileAccess.Write); - } - - FileStream trainStream = null; - if (train.Length != 0) - trainStream = new FileStream(train, FileMode.Open, FileAccess.Read); - - if (encodeMode) - { - if (!dictionaryIsDefined) - dictionary = 1 << 23; - - Int32 posStateBits = 2; - Int32 litContextBits = 3; // for normal files - // UInt32 litContextBits = 0; // for 32-bit data - Int32 litPosBits = 0; - // UInt32 litPosBits = 2; // for 32-bit data - Int32 algorithm = 2; - Int32 numFastBytes = 128; - - bool eos = parser[(int)Key.EOS].ThereIs || stdInMode; - - if (parser[(int)Key.Mode].ThereIs) - if (!GetNumber((string)parser[(int)Key.Mode].PostStrings[0], out algorithm)) - IncorrectCommand(); - - if (parser[(int)Key.FastBytes].ThereIs) - if (!GetNumber((string)parser[(int)Key.FastBytes].PostStrings[0], out numFastBytes)) - IncorrectCommand(); - if (parser[(int)Key.LitContext].ThereIs) - if (!GetNumber((string)parser[(int)Key.LitContext].PostStrings[0], out litContextBits)) - IncorrectCommand(); - if (parser[(int)Key.LitPos].ThereIs) - if (!GetNumber((string)parser[(int)Key.LitPos].PostStrings[0], out litPosBits)) - IncorrectCommand(); - if (parser[(int)Key.PosBits].ThereIs) - if (!GetNumber((string)parser[(int)Key.PosBits].PostStrings[0], out posStateBits)) - IncorrectCommand(); - - CoderPropID[] propIDs = - { - CoderPropID.DictionarySize, - CoderPropID.PosStateBits, - CoderPropID.LitContextBits, - CoderPropID.LitPosBits, - CoderPropID.Algorithm, - CoderPropID.NumFastBytes, - CoderPropID.MatchFinder, - CoderPropID.EndMarker - }; - object[] properties = - { - (Int32)(dictionary), - (Int32)(posStateBits), - (Int32)(litContextBits), - (Int32)(litPosBits), - (Int32)(algorithm), - (Int32)(numFastBytes), - mf, - eos - }; - - Compression.LZMA.Encoder encoder = new Compression.LZMA.Encoder(); - encoder.SetCoderProperties(propIDs, properties); - encoder.WriteCoderProperties(outStream); - Int64 fileSize; - if (eos || stdInMode) - fileSize = -1; - else - fileSize = inStream.Length; - for (int i = 0; i < 8; i++) - outStream.WriteByte((Byte)(fileSize >> (8 * i))); - if (trainStream != null) - { - CDoubleStream doubleStream = new CDoubleStream(); - doubleStream.s1 = trainStream; - doubleStream.s2 = inStream; - doubleStream.fileIndex = 0; - inStream = doubleStream; - long trainFileSize = trainStream.Length; - doubleStream.skipSize = 0; - if (trainFileSize > dictionary) - doubleStream.skipSize = trainFileSize - dictionary; - trainStream.Seek(doubleStream.skipSize, SeekOrigin.Begin); - encoder.SetTrainSize((uint)(trainFileSize - doubleStream.skipSize)); - } - encoder.Code(inStream, outStream, -1, -1, null); - } - else if (command == "d") - { - byte[] properties = new byte[5]; - if (inStream.Read(properties, 0, 5) != 5) - throw (new Exception("input .lzma is too short")); - Compression.LZMA.Decoder decoder = new Compression.LZMA.Decoder(); - decoder.SetDecoderProperties(properties); - if (trainStream != null) - { - if (!decoder.Train(trainStream)) - throw (new Exception("can't train")); - } - long outSize = 0; - for (int i = 0; i < 8; i++) - { - int v = inStream.ReadByte(); - if (v < 0) - throw (new Exception("Can't Read 1")); - outSize |= ((long)(byte)v) << (8 * i); - } - long compressedSize = inStream.Length - inStream.Position; - decoder.Code(inStream, outStream, compressedSize, outSize, null); - } - else - throw (new Exception("Command Error")); - return 0; - } - - [STAThread] - static int Main(string[] args) - { - try - { - return Main2(args); - } - catch (Exception e) - { - Console.WriteLine("{0} Caught exception #1.", e); - // throw e; - return 1; - } - } - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj b/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj deleted file mode 100644 index ceb707350439..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj +++ /dev/null @@ -1,90 +0,0 @@ - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {CE33DF18-F9C8-4D6F-9057-DBB4DB96E973} - Exe - LzmaAlone - Lzma# - 4 - - - true - full - false - .\bin\Debug\ - DEBUG;TRACE - - - false - true - .\bin\Release\ - TRACE - AnyCPU - - - - - - - - - Common\CommandLineParser.cs - - - Common\CRC.cs - - - ICoder.cs - - - LZ\IMatchFinder.cs - - - LZ\LzBinTree.cs - - - LZ\LzInWindow.cs - - - LZ\LzOutWindow.cs - - - LZMA\LzmaBase.cs - - - LZMA\LzmaDecoder.cs - - - LZMA\LzmaEncoder.cs - - - RangeCoder\RangeCoder.cs - - - RangeCoder\RangeCoderBit.cs - - - RangeCoder\RangeCoderBitTree.cs - - - Code - - - Code - - - - True - Settings.settings - - - SettingsSingleFileGenerator - Settings.cs - - - - - \ No newline at end of file diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln b/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln deleted file mode 100644 index a96ee3e43326..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual C# Express 2005 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LzmaAlone", "LzmaAlone.csproj", "{CE33DF18-F9C8-4D6F-9057-DBB4DB96E973}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {CE33DF18-F9C8-4D6F-9057-DBB4DB96E973}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CE33DF18-F9C8-4D6F-9057-DBB4DB96E973}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE33DF18-F9C8-4D6F-9057-DBB4DB96E973}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CE33DF18-F9C8-4D6F-9057-DBB4DB96E973}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaBench.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaBench.cs deleted file mode 100644 index 6a1ffe246020..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/LzmaBench.cs +++ /dev/null @@ -1,340 +0,0 @@ -// LzmaBench.cs - -using System; -using System.IO; - -namespace SevenZip -{ - /// - /// LZMA Benchmark - /// - internal abstract class LzmaBench - { - const UInt32 kAdditionalSize = (6 << 20); - const UInt32 kCompressedAdditionalSize = (1 << 10); - const UInt32 kMaxLzmaPropSize = 10; - - class CRandomGenerator - { - UInt32 A1; - UInt32 A2; - public CRandomGenerator() { Init(); } - public void Init() { A1 = 362436069; A2 = 521288629; } - public UInt32 GetRnd() - { - return - ((A1 = 36969 * (A1 & 0xffff) + (A1 >> 16)) << 16) ^ - ((A2 = 18000 * (A2 & 0xffff) + (A2 >> 16))); - } - }; - - class CBitRandomGenerator - { - CRandomGenerator RG = new CRandomGenerator(); - UInt32 Value; - int NumBits; - public void Init() - { - Value = 0; - NumBits = 0; - } - public UInt32 GetRnd(int numBits) - { - UInt32 result; - if (NumBits > numBits) - { - result = Value & (((UInt32)1 << numBits) - 1); - Value >>= numBits; - NumBits -= numBits; - return result; - } - numBits -= NumBits; - result = (Value << numBits); - Value = RG.GetRnd(); - result |= Value & (((UInt32)1 << numBits) - 1); - Value >>= numBits; - NumBits = 32 - numBits; - return result; - } - }; - - class CBenchRandomGenerator - { - CBitRandomGenerator RG = new CBitRandomGenerator(); - UInt32 Pos; - UInt32 Rep0; - - public UInt32 BufferSize; - public Byte[] Buffer = null; - - public CBenchRandomGenerator() { } - - public void Set(UInt32 bufferSize) - { - Buffer = new Byte[bufferSize]; - Pos = 0; - BufferSize = bufferSize; - } - UInt32 GetRndBit() { return RG.GetRnd(1); } - UInt32 GetLogRandBits(int numBits) - { - UInt32 len = RG.GetRnd(numBits); - return RG.GetRnd((int)len); - } - UInt32 GetOffset() - { - if (GetRndBit() == 0) - return GetLogRandBits(4); - return (GetLogRandBits(4) << 10) | RG.GetRnd(10); - } - UInt32 GetLen1() { return RG.GetRnd(1 + (int)RG.GetRnd(2)); } - UInt32 GetLen2() { return RG.GetRnd(2 + (int)RG.GetRnd(2)); } - public void Generate() - { - RG.Init(); - Rep0 = 1; - while (Pos < BufferSize) - { - if (GetRndBit() == 0 || Pos < 1) - Buffer[Pos++] = (Byte)RG.GetRnd(8); - else - { - UInt32 len; - if (RG.GetRnd(3) == 0) - len = 1 + GetLen1(); - else - { - do - Rep0 = GetOffset(); - while (Rep0 >= Pos); - Rep0++; - len = 2 + GetLen2(); - } - for (UInt32 i = 0; i < len && Pos < BufferSize; i++, Pos++) - Buffer[Pos] = Buffer[Pos - Rep0]; - } - } - } - }; - - class CrcOutStream : System.IO.Stream - { - public CRC CRC = new CRC(); - public void Init() { CRC.Init(); } - public UInt32 GetDigest() { return CRC.GetDigest(); } - - public override bool CanRead { get { return false; } } - public override bool CanSeek { get { return false; } } - public override bool CanWrite { get { return true; } } - public override Int64 Length { get { return 0; } } - public override Int64 Position { get { return 0; } set { } } - public override void Flush() { } - public override long Seek(long offset, SeekOrigin origin) { return 0; } - public override void SetLength(long value) { } - public override int Read(byte[] buffer, int offset, int count) { return 0; } - - public override void WriteByte(byte b) - { - CRC.UpdateByte(b); - } - public override void Write(byte[] buffer, int offset, int count) - { - CRC.Update(buffer, (uint)offset, (uint)count); - } - }; - - class CProgressInfo : ICodeProgress - { - public Int64 ApprovedStart; - public Int64 InSize; - public System.DateTime Time; - public void Init() { InSize = 0; } - public void SetProgress(Int64 inSize, Int64 outSize) - { - if (inSize >= ApprovedStart && InSize == 0) - { - Time = DateTime.UtcNow; - InSize = inSize; - } - } - } - const int kSubBits = 8; - - static UInt32 GetLogSize(UInt32 size) - { - for (int i = kSubBits; i < 32; i++) - for (UInt32 j = 0; j < (1 << kSubBits); j++) - if (size <= (((UInt32)1) << i) + (j << (i - kSubBits))) - return (UInt32)(i << kSubBits) + j; - return (32 << kSubBits); - } - - static UInt64 MyMultDiv64(UInt64 value, UInt64 elapsedTime) - { - UInt64 freq = TimeSpan.TicksPerSecond; - UInt64 elTime = elapsedTime; - while (freq > 1000000) - { - freq >>= 1; - elTime >>= 1; - } - if (elTime == 0) - elTime = 1; - return value * freq / elTime; - } - - static UInt64 GetCompressRating(UInt32 dictionarySize, UInt64 elapsedTime, UInt64 size) - { - UInt64 t = GetLogSize(dictionarySize) - (18 << kSubBits); - UInt64 numCommandsForOne = 1060 + ((t * t * 10) >> (2 * kSubBits)); - UInt64 numCommands = (UInt64)(size) * numCommandsForOne; - return MyMultDiv64(numCommands, elapsedTime); - } - - static UInt64 GetDecompressRating(UInt64 elapsedTime, UInt64 outSize, UInt64 inSize) - { - UInt64 numCommands = inSize * 220 + outSize * 20; - return MyMultDiv64(numCommands, elapsedTime); - } - - static UInt64 GetTotalRating( - UInt32 dictionarySize, - UInt64 elapsedTimeEn, UInt64 sizeEn, - UInt64 elapsedTimeDe, - UInt64 inSizeDe, UInt64 outSizeDe) - { - return (GetCompressRating(dictionarySize, elapsedTimeEn, sizeEn) + - GetDecompressRating(elapsedTimeDe, inSizeDe, outSizeDe)) / 2; - } - - static void PrintValue(UInt64 v) - { - string s = v.ToString(); - for (int i = 0; i + s.Length < 6; i++) - System.Console.Write(" "); - System.Console.Write(s); - } - - static void PrintRating(UInt64 rating) - { - PrintValue(rating / 1000000); - System.Console.Write(" MIPS"); - } - - static void PrintResults( - UInt32 dictionarySize, - UInt64 elapsedTime, - UInt64 size, - bool decompressMode, UInt64 secondSize) - { - UInt64 speed = MyMultDiv64(size, elapsedTime); - PrintValue(speed / 1024); - System.Console.Write(" KB/s "); - UInt64 rating; - if (decompressMode) - rating = GetDecompressRating(elapsedTime, size, secondSize); - else - rating = GetCompressRating(dictionarySize, elapsedTime, size); - PrintRating(rating); - } - - static public int LzmaBenchmark(Int32 numIterations, UInt32 dictionarySize) - { - if (numIterations <= 0) - return 0; - if (dictionarySize < (1 << 18)) - { - System.Console.WriteLine("\nError: dictionary size for benchmark must be >= 19 (512 KB)"); - return 1; - } - System.Console.Write("\n Compressing Decompressing\n\n"); - - Compression.LZMA.Encoder encoder = new Compression.LZMA.Encoder(); - Compression.LZMA.Decoder decoder = new Compression.LZMA.Decoder(); - - - CoderPropID[] propIDs = - { - CoderPropID.DictionarySize, - }; - object[] properties = - { - (Int32)(dictionarySize), - }; - - UInt32 kBufferSize = dictionarySize + kAdditionalSize; - UInt32 kCompressedBufferSize = (kBufferSize / 2) + kCompressedAdditionalSize; - - encoder.SetCoderProperties(propIDs, properties); - System.IO.MemoryStream propStream = new System.IO.MemoryStream(); - encoder.WriteCoderProperties(propStream); - byte[] propArray = propStream.ToArray(); - - CBenchRandomGenerator rg = new CBenchRandomGenerator(); - - rg.Set(kBufferSize); - rg.Generate(); - CRC crc = new CRC(); - crc.Init(); - crc.Update(rg.Buffer, 0, rg.BufferSize); - - CProgressInfo progressInfo = new CProgressInfo(); - progressInfo.ApprovedStart = dictionarySize; - - UInt64 totalBenchSize = 0; - UInt64 totalEncodeTime = 0; - UInt64 totalDecodeTime = 0; - UInt64 totalCompressedSize = 0; - - MemoryStream inStream = new MemoryStream(rg.Buffer, 0, (int)rg.BufferSize); - MemoryStream compressedStream = new MemoryStream((int)kCompressedBufferSize); - CrcOutStream crcOutStream = new CrcOutStream(); - for (Int32 i = 0; i < numIterations; i++) - { - progressInfo.Init(); - inStream.Seek(0, SeekOrigin.Begin); - compressedStream.Seek(0, SeekOrigin.Begin); - encoder.Code(inStream, compressedStream, -1, -1, progressInfo); - TimeSpan sp2 = DateTime.UtcNow - progressInfo.Time; - UInt64 encodeTime = (UInt64)sp2.Ticks; - - long compressedSize = compressedStream.Position; - if (progressInfo.InSize == 0) - throw (new Exception("Internal ERROR 1282")); - - UInt64 decodeTime = 0; - for (int j = 0; j < 2; j++) - { - compressedStream.Seek(0, SeekOrigin.Begin); - crcOutStream.Init(); - - decoder.SetDecoderProperties(propArray); - UInt64 outSize = kBufferSize; - System.DateTime startTime = DateTime.UtcNow; - decoder.Code(compressedStream, crcOutStream, 0, (Int64)outSize, null); - TimeSpan sp = (DateTime.UtcNow - startTime); - decodeTime = (ulong)sp.Ticks; - if (crcOutStream.GetDigest() != crc.GetDigest()) - throw (new Exception("CRC Error")); - } - UInt64 benchSize = kBufferSize - (UInt64)progressInfo.InSize; - PrintResults(dictionarySize, encodeTime, benchSize, false, 0); - System.Console.Write(" "); - PrintResults(dictionarySize, decodeTime, kBufferSize, true, (ulong)compressedSize); - System.Console.WriteLine(); - - totalBenchSize += benchSize; - totalEncodeTime += encodeTime; - totalDecodeTime += decodeTime; - totalCompressedSize += (ulong)compressedSize; - } - System.Console.WriteLine("---------------------------------------------------"); - PrintResults(dictionarySize, totalEncodeTime, totalBenchSize, false, 0); - System.Console.Write(" "); - PrintResults(dictionarySize, totalDecodeTime, - kBufferSize * (UInt64)numIterations, true, totalCompressedSize); - System.Console.WriteLine(" Average"); - return 0; - } - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs deleted file mode 100644 index a394aee877f3..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,29 +0,0 @@ -#region Using directives - -using System.Reflection; -using System.Runtime.CompilerServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("LZMA#")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Igor Pavlov")] -[assembly: AssemblyProduct("LZMA# SDK")] -[assembly: AssemblyCopyright("Copyright @ Igor Pavlov 1999-2004")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("4.12.*")] diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs deleted file mode 100644 index efe4ee9af8bb..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs +++ /dev/null @@ -1,70 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.40607.42 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace LzmaAlone.Properties -{ - using System; - using System.IO; - using System.Resources; - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the Strongly Typed Resource Builder - // class via a tool like ResGen or Visual Studio.NET. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - class Resources - { - - private static System.Resources.ResourceManager _resMgr; - - private static System.Globalization.CultureInfo _resCulture; - - /*FamANDAssem*/ - internal Resources() - { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - public static System.Resources.ResourceManager ResourceManager - { - get - { - if ((_resMgr == null)) - { - System.Resources.ResourceManager temp = new System.Resources.ResourceManager("Resources", typeof(Resources).Assembly); - _resMgr = temp; - } - return _resMgr; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - public static System.Globalization.CultureInfo Culture - { - get - { - return _resCulture; - } - set - { - _resCulture = value; - } - } - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs deleted file mode 100644 index 1281fd2e09cb..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs +++ /dev/null @@ -1,42 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.40607.42 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace LzmaAlone.Properties -{ - public partial class Settings : System.Configuration.ApplicationSettingsBase - { - private static Settings m_Value; - - private static object m_SyncObject = new object(); - - public static Settings Value - { - get - { - if ((Settings.m_Value == null)) - { - System.Threading.Monitor.Enter(Settings.m_SyncObject); - if ((Settings.m_Value == null)) - { - try - { - Settings.m_Value = new Settings(); - } - finally - { - System.Threading.Monitor.Exit(Settings.m_SyncObject); - } - } - } - return Settings.m_Value; - } - } - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/RangeCoder/RangeCoder.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/RangeCoder/RangeCoder.cs deleted file mode 100644 index 4ced2477e49c..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/RangeCoder/RangeCoder.cs +++ /dev/null @@ -1,234 +0,0 @@ -using System; - -namespace SevenZip.Compression.RangeCoder -{ - class Encoder - { - public const uint kTopValue = (1 << 24); - - System.IO.Stream Stream; - - public UInt64 Low; - public uint Range; - uint _cacheSize; - byte _cache; - - long StartPosition; - - public void SetStream(System.IO.Stream stream) - { - Stream = stream; - } - - public void ReleaseStream() - { - Stream = null; - } - - public void Init() - { - StartPosition = Stream.Position; - - Low = 0; - Range = 0xFFFFFFFF; - _cacheSize = 1; - _cache = 0; - } - - public void FlushData() - { - for (int i = 0; i < 5; i++) - ShiftLow(); - } - - public void FlushStream() - { - Stream.Flush(); - } - - public void CloseStream() - { - Stream.Close(); - } - - public void Encode(uint start, uint size, uint total) - { - Low += start * (Range /= total); - Range *= size; - while (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - - public void ShiftLow() - { - if ((uint)Low < (uint)0xFF000000 || (uint)(Low >> 32) == 1) - { - byte temp = _cache; - do - { - Stream.WriteByte((byte)(temp + (Low >> 32))); - temp = 0xFF; - } - while (--_cacheSize != 0); - _cache = (byte)(((uint)Low) >> 24); - } - _cacheSize++; - Low = ((uint)Low) << 8; - } - - public void EncodeDirectBits(uint v, int numTotalBits) - { - for (int i = numTotalBits - 1; i >= 0; i--) - { - Range >>= 1; - if (((v >> i) & 1) == 1) - Low += Range; - if (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - } - - public void EncodeBit(uint size0, int numTotalBits, uint symbol) - { - uint newBound = (Range >> numTotalBits) * size0; - if (symbol == 0) - Range = newBound; - else - { - Low += newBound; - Range -= newBound; - } - while (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - - public long GetProcessedSizeAdd() - { - return _cacheSize + - Stream.Position - StartPosition + 4; - // (long)Stream.GetProcessedSize(); - } - } - - class Decoder - { - public const uint kTopValue = (1 << 24); - public uint Range; - public uint Code; - // public Buffer.InBuffer Stream = new Buffer.InBuffer(1 << 16); - public System.IO.Stream Stream; - - public void Init(System.IO.Stream stream) - { - // Stream.Init(stream); - Stream = stream; - - Code = 0; - Range = 0xFFFFFFFF; - for (int i = 0; i < 5; i++) - Code = (Code << 8) | (byte)Stream.ReadByte(); - } - - public void ReleaseStream() - { - // Stream.ReleaseStream(); - Stream = null; - } - - public void CloseStream() - { - Stream.Close(); - } - - public void Normalize() - { - while (Range < kTopValue) - { - Code = (Code << 8) | (byte)Stream.ReadByte(); - Range <<= 8; - } - } - - public void Normalize2() - { - if (Range < kTopValue) - { - Code = (Code << 8) | (byte)Stream.ReadByte(); - Range <<= 8; - } - } - - public uint GetThreshold(uint total) - { - return Code / (Range /= total); - } - - public void Decode(uint start, uint size, uint total) - { - Code -= start * Range; - Range *= size; - Normalize(); - } - - public uint DecodeDirectBits(int numTotalBits) - { - uint range = Range; - uint code = Code; - uint result = 0; - for (int i = numTotalBits; i > 0; i--) - { - range >>= 1; - /* - result <<= 1; - if (code >= range) - { - code -= range; - result |= 1; - } - */ - uint t = (code - range) >> 31; - code -= range & (t - 1); - result = (result << 1) | (1 - t); - - if (range < kTopValue) - { - code = (code << 8) | (byte)Stream.ReadByte(); - range <<= 8; - } - } - Range = range; - Code = code; - return result; - } - - public uint DecodeBit(uint size0, int numTotalBits) - { - uint newBound = (Range >> numTotalBits) * size0; - uint symbol; - if (Code < newBound) - { - symbol = 0; - Range = newBound; - } - else - { - symbol = 1; - Code -= newBound; - Range -= newBound; - } - Normalize(); - return symbol; - } - - // ulong GetProcessedSize() {return Stream.GetProcessedSize(); } - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs deleted file mode 100644 index 000a5a0787de..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System; - -namespace SevenZip.Compression.RangeCoder -{ - struct BitEncoder - { - public const int kNumBitModelTotalBits = 11; - public const uint kBitModelTotal = (1 << kNumBitModelTotalBits); - const int kNumMoveBits = 5; - const int kNumMoveReducingBits = 2; - public const int kNumBitPriceShiftBits = 6; - - uint Prob; - - public void Init() { Prob = kBitModelTotal >> 1; } - - public void UpdateModel(uint symbol) - { - if (symbol == 0) - Prob += (kBitModelTotal - Prob) >> kNumMoveBits; - else - Prob -= (Prob) >> kNumMoveBits; - } - - public void Encode(Encoder encoder, uint symbol) - { - // encoder.EncodeBit(Prob, kNumBitModelTotalBits, symbol); - // UpdateModel(symbol); - uint newBound = (encoder.Range >> kNumBitModelTotalBits) * Prob; - if (symbol == 0) - { - encoder.Range = newBound; - Prob += (kBitModelTotal - Prob) >> kNumMoveBits; - } - else - { - encoder.Low += newBound; - encoder.Range -= newBound; - Prob -= (Prob) >> kNumMoveBits; - } - if (encoder.Range < Encoder.kTopValue) - { - encoder.Range <<= 8; - encoder.ShiftLow(); - } - } - - private static UInt32[] ProbPrices = new UInt32[kBitModelTotal >> kNumMoveReducingBits]; - - static BitEncoder() - { - const int kNumBits = (kNumBitModelTotalBits - kNumMoveReducingBits); - for (int i = kNumBits - 1; i >= 0; i--) - { - UInt32 start = (UInt32)1 << (kNumBits - i - 1); - UInt32 end = (UInt32)1 << (kNumBits - i); - for (UInt32 j = start; j < end; j++) - ProbPrices[j] = ((UInt32)i << kNumBitPriceShiftBits) + - (((end - j) << kNumBitPriceShiftBits) >> (kNumBits - i - 1)); - } - } - - public uint GetPrice(uint symbol) - { - return ProbPrices[(((Prob - symbol) ^ ((-(int)symbol))) & (kBitModelTotal - 1)) >> kNumMoveReducingBits]; - } - public uint GetPrice0() { return ProbPrices[Prob >> kNumMoveReducingBits]; } - public uint GetPrice1() { return ProbPrices[(kBitModelTotal - Prob) >> kNumMoveReducingBits]; } - } - - struct BitDecoder - { - public const int kNumBitModelTotalBits = 11; - public const uint kBitModelTotal = (1 << kNumBitModelTotalBits); - const int kNumMoveBits = 5; - - uint Prob; - - public void UpdateModel(int numMoveBits, uint symbol) - { - if (symbol == 0) - Prob += (kBitModelTotal - Prob) >> numMoveBits; - else - Prob -= (Prob) >> numMoveBits; - } - - public void Init() { Prob = kBitModelTotal >> 1; } - - public uint Decode(RangeCoder.Decoder rangeDecoder) - { - uint newBound = (uint)(rangeDecoder.Range >> kNumBitModelTotalBits) * (uint)Prob; - if (rangeDecoder.Code < newBound) - { - rangeDecoder.Range = newBound; - Prob += (kBitModelTotal - Prob) >> kNumMoveBits; - if (rangeDecoder.Range < Decoder.kTopValue) - { - rangeDecoder.Code = (rangeDecoder.Code << 8) | (byte)rangeDecoder.Stream.ReadByte(); - rangeDecoder.Range <<= 8; - } - return 0; - } - else - { - rangeDecoder.Range -= newBound; - rangeDecoder.Code -= newBound; - Prob -= (Prob) >> kNumMoveBits; - if (rangeDecoder.Range < Decoder.kTopValue) - { - rangeDecoder.Code = (rangeDecoder.Code << 8) | (byte)rangeDecoder.Stream.ReadByte(); - rangeDecoder.Range <<= 8; - } - return 1; - } - } - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs b/modules/lib7z/LZMASDK/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs deleted file mode 100644 index 3309c14a50ce..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs +++ /dev/null @@ -1,157 +0,0 @@ -using System; - -namespace SevenZip.Compression.RangeCoder -{ - struct BitTreeEncoder - { - BitEncoder[] Models; - int NumBitLevels; - - public BitTreeEncoder(int numBitLevels) - { - NumBitLevels = numBitLevels; - Models = new BitEncoder[1 << numBitLevels]; - } - - public void Init() - { - for (uint i = 1; i < (1 << NumBitLevels); i++) - Models[i].Init(); - } - - public void Encode(Encoder rangeEncoder, UInt32 symbol) - { - UInt32 m = 1; - for (int bitIndex = NumBitLevels; bitIndex > 0; ) - { - bitIndex--; - UInt32 bit = (symbol >> bitIndex) & 1; - Models[m].Encode(rangeEncoder, bit); - m = (m << 1) | bit; - } - } - - public void ReverseEncode(Encoder rangeEncoder, UInt32 symbol) - { - UInt32 m = 1; - for (UInt32 i = 0; i < NumBitLevels; i++) - { - UInt32 bit = symbol & 1; - Models[m].Encode(rangeEncoder, bit); - m = (m << 1) | bit; - symbol >>= 1; - } - } - - public UInt32 GetPrice(UInt32 symbol) - { - UInt32 price = 0; - UInt32 m = 1; - for (int bitIndex = NumBitLevels; bitIndex > 0; ) - { - bitIndex--; - UInt32 bit = (symbol >> bitIndex) & 1; - price += Models[m].GetPrice(bit); - m = (m << 1) + bit; - } - return price; - } - - public UInt32 ReverseGetPrice(UInt32 symbol) - { - UInt32 price = 0; - UInt32 m = 1; - for (int i = NumBitLevels; i > 0; i--) - { - UInt32 bit = symbol & 1; - symbol >>= 1; - price += Models[m].GetPrice(bit); - m = (m << 1) | bit; - } - return price; - } - - public static UInt32 ReverseGetPrice(BitEncoder[] Models, UInt32 startIndex, - int NumBitLevels, UInt32 symbol) - { - UInt32 price = 0; - UInt32 m = 1; - for (int i = NumBitLevels; i > 0; i--) - { - UInt32 bit = symbol & 1; - symbol >>= 1; - price += Models[startIndex + m].GetPrice(bit); - m = (m << 1) | bit; - } - return price; - } - - public static void ReverseEncode(BitEncoder[] Models, UInt32 startIndex, - Encoder rangeEncoder, int NumBitLevels, UInt32 symbol) - { - UInt32 m = 1; - for (int i = 0; i < NumBitLevels; i++) - { - UInt32 bit = symbol & 1; - Models[startIndex + m].Encode(rangeEncoder, bit); - m = (m << 1) | bit; - symbol >>= 1; - } - } - } - - struct BitTreeDecoder - { - BitDecoder[] Models; - int NumBitLevels; - - public BitTreeDecoder(int numBitLevels) - { - NumBitLevels = numBitLevels; - Models = new BitDecoder[1 << numBitLevels]; - } - - public void Init() - { - for (uint i = 1; i < (1 << NumBitLevels); i++) - Models[i].Init(); - } - - public uint Decode(RangeCoder.Decoder rangeDecoder) - { - uint m = 1; - for (int bitIndex = NumBitLevels; bitIndex > 0; bitIndex--) - m = (m << 1) + Models[m].Decode(rangeDecoder); - return m - ((uint)1 << NumBitLevels); - } - - public uint ReverseDecode(RangeCoder.Decoder rangeDecoder) - { - uint m = 1; - uint symbol = 0; - for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++) - { - uint bit = Models[m].Decode(rangeDecoder); - m <<= 1; - m += bit; - symbol |= (bit << bitIndex); - } - return symbol; - } - - public static uint ReverseDecode(BitDecoder[] Models, UInt32 startIndex, - RangeCoder.Decoder rangeDecoder, int NumBitLevels) - { - uint m = 1; - uint symbol = 0; - for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++) - { - uint bit = Models[startIndex + m].Decode(rangeDecoder); - m <<= 1; - m += bit; - symbol |= (bit << bitIndex); - } - return symbol; - } - } -} diff --git a/modules/lib7z/LZMASDK/CS/7zip/ICoder.cs b/modules/lib7z/LZMASDK/CS/7zip/ICoder.cs deleted file mode 100644 index 875cb2739ef1..000000000000 --- a/modules/lib7z/LZMASDK/CS/7zip/ICoder.cs +++ /dev/null @@ -1,157 +0,0 @@ -// ICoder.h - -using System; - -namespace SevenZip -{ - /// - /// The exception that is thrown when an error in input stream occurs during decoding. - /// - class DataErrorException : ApplicationException - { - public DataErrorException(): base("Data Error") { } - } - - /// - /// The exception that is thrown when the value of an argument is outside the allowable range. - /// - class InvalidParamException : ApplicationException - { - public InvalidParamException(): base("Invalid Parameter") { } - } - - public interface ICodeProgress - { - /// - /// Callback progress. - /// - /// - /// input size. -1 if unknown. - /// - /// - /// output size. -1 if unknown. - /// - void SetProgress(Int64 inSize, Int64 outSize); - }; - - public interface ICoder - { - /// - /// Codes streams. - /// - /// - /// input Stream. - /// - /// - /// output Stream. - /// - /// - /// input Size. -1 if unknown. - /// - /// - /// output Size. -1 if unknown. - /// - /// - /// callback progress reference. - /// - /// - /// if input stream is not valid - /// - void Code(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize, ICodeProgress progress); - }; - - /* - public interface ICoder2 - { - void Code(ISequentialInStream []inStreams, - const UInt64 []inSizes, - ISequentialOutStream []outStreams, - UInt64 []outSizes, - ICodeProgress progress); - }; - */ - - /// - /// Provides the fields that represent properties idenitifiers for compressing. - /// - public enum CoderPropID - { - /// - /// Specifies default property. - /// - DefaultProp = 0, - /// - /// Specifies size of dictionary. - /// - DictionarySize, - /// - /// Specifies size of memory for PPM*. - /// - UsedMemorySize, - /// - /// Specifies order for PPM methods. - /// - Order, - /// - /// Specifies Block Size. - /// - BlockSize, - /// - /// Specifies number of postion state bits for LZMA (0 <= x <= 4). - /// - PosStateBits, - /// - /// Specifies number of literal context bits for LZMA (0 <= x <= 8). - /// - LitContextBits, - /// - /// Specifies number of literal position bits for LZMA (0 <= x <= 4). - /// - LitPosBits, - /// - /// Specifies number of fast bytes for LZ*. - /// - NumFastBytes, - /// - /// Specifies match finder. LZMA: "BT2", "BT4" or "BT4B". - /// - MatchFinder, - /// - /// Specifies the number of match finder cyckes. - /// - MatchFinderCycles, - /// - /// Specifies number of passes. - /// - NumPasses, - /// - /// Specifies number of algorithm. - /// - Algorithm, - /// - /// Specifies the number of threads. - /// - NumThreads, - /// - /// Specifies mode with end marker. - /// - EndMarker - }; - - - public interface ISetCoderProperties - { - void SetCoderProperties(CoderPropID[] propIDs, object[] properties); - }; - - public interface IWriteCoderProperties - { - void WriteCoderProperties(System.IO.Stream outStream); - } - - public interface ISetDecoderProperties - { - void SetDecoderProperties(byte[] properties); - } -} diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/CRC.java b/modules/lib7z/LZMASDK/Java/SevenZip/CRC.java deleted file mode 100644 index f2f791f17ad0..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/CRC.java +++ /dev/null @@ -1,52 +0,0 @@ -// SevenZip/CRC.java - -package SevenZip; - -public class CRC -{ - static public int[] Table = new int[256]; - - static - { - for (int i = 0; i < 256; i++) - { - int r = i; - for (int j = 0; j < 8; j++) - if ((r & 1) != 0) - r = (r >>> 1) ^ 0xEDB88320; - else - r >>>= 1; - Table[i] = r; - } - } - - int _value = -1; - - public void Init() - { - _value = -1; - } - - public void Update(byte[] data, int offset, int size) - { - for (int i = 0; i < size; i++) - _value = Table[(_value ^ data[offset + i]) & 0xFF] ^ (_value >>> 8); - } - - public void Update(byte[] data) - { - int size = data.length; - for (int i = 0; i < size; i++) - _value = Table[(_value ^ data[i]) & 0xFF] ^ (_value >>> 8); - } - - public void UpdateByte(int b) - { - _value = Table[(_value ^ b) & 0xFF] ^ (_value >>> 8); - } - - public int GetDigest() - { - return _value ^ (-1); - } -} diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZ/BinTree.java b/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZ/BinTree.java deleted file mode 100644 index 63d58c05a02b..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZ/BinTree.java +++ /dev/null @@ -1,382 +0,0 @@ -// LZ.BinTree - -package SevenZip.Compression.LZ; -import java.io.IOException; - - -public class BinTree extends InWindow -{ - int _cyclicBufferPos; - int _cyclicBufferSize = 0; - int _matchMaxLen; - - int[] _son; - int[] _hash; - - int _cutValue = 0xFF; - int _hashMask; - int _hashSizeSum = 0; - - boolean HASH_ARRAY = true; - - static final int kHash2Size = 1 << 10; - static final int kHash3Size = 1 << 16; - static final int kBT2HashSize = 1 << 16; - static final int kStartMaxLen = 1; - static final int kHash3Offset = kHash2Size; - static final int kEmptyHashValue = 0; - static final int kMaxValForNormalize = (1 << 30) - 1; - - int kNumHashDirectBytes = 0; - int kMinMatchCheck = 4; - int kFixHashSize = kHash2Size + kHash3Size; - - public void SetType(int numHashBytes) - { - HASH_ARRAY = (numHashBytes > 2); - if (HASH_ARRAY) - { - kNumHashDirectBytes = 0; - kMinMatchCheck = 4; - kFixHashSize = kHash2Size + kHash3Size; - } - else - { - kNumHashDirectBytes = 2; - kMinMatchCheck = 2 + 1; - kFixHashSize = 0; - } - } - - - - - public void Init() throws IOException - { - super.Init(); - for (int i = 0; i < _hashSizeSum; i++) - _hash[i] = kEmptyHashValue; - _cyclicBufferPos = 0; - ReduceOffsets(-1); - } - - public void MovePos() throws IOException - { - if (++_cyclicBufferPos >= _cyclicBufferSize) - _cyclicBufferPos = 0; - super.MovePos(); - if (_pos == kMaxValForNormalize) - Normalize(); - } - - - - - - - - - public boolean Create(int historySize, int keepAddBufferBefore, - int matchMaxLen, int keepAddBufferAfter) - { - if (historySize > kMaxValForNormalize - 256) - return false; - _cutValue = 16 + (matchMaxLen >> 1); - - int windowReservSize = (historySize + keepAddBufferBefore + - matchMaxLen + keepAddBufferAfter) / 2 + 256; - - super.Create(historySize + keepAddBufferBefore, matchMaxLen + keepAddBufferAfter, windowReservSize); - - _matchMaxLen = matchMaxLen; - - int cyclicBufferSize = historySize + 1; - if (_cyclicBufferSize != cyclicBufferSize) - _son = new int[(_cyclicBufferSize = cyclicBufferSize) * 2]; - - int hs = kBT2HashSize; - - if (HASH_ARRAY) - { - hs = historySize - 1; - hs |= (hs >> 1); - hs |= (hs >> 2); - hs |= (hs >> 4); - hs |= (hs >> 8); - hs >>= 1; - hs |= 0xFFFF; - if (hs > (1 << 24)) - hs >>= 1; - _hashMask = hs; - hs++; - hs += kFixHashSize; - } - if (hs != _hashSizeSum) - _hash = new int [_hashSizeSum = hs]; - return true; - } - public int GetMatches(int[] distances) throws IOException - { - int lenLimit; - if (_pos + _matchMaxLen <= _streamPos) - lenLimit = _matchMaxLen; - else - { - lenLimit = _streamPos - _pos; - if (lenLimit < kMinMatchCheck) - { - MovePos(); - return 0; - } - } - - int offset = 0; - int matchMinPos = (_pos > _cyclicBufferSize) ? (_pos - _cyclicBufferSize) : 0; - int cur = _bufferOffset + _pos; - int maxLen = kStartMaxLen; // to avoid items for len < hashSize; - int hashValue, hash2Value = 0, hash3Value = 0; - - if (HASH_ARRAY) - { - int temp = CrcTable[_bufferBase[cur] & 0xFF] ^ (_bufferBase[cur + 1] & 0xFF); - hash2Value = temp & (kHash2Size - 1); - temp ^= ((int)(_bufferBase[cur + 2] & 0xFF) << 8); - hash3Value = temp & (kHash3Size - 1); - hashValue = (temp ^ (CrcTable[_bufferBase[cur + 3] & 0xFF] << 5)) & _hashMask; - } - else - hashValue = ((_bufferBase[cur] & 0xFF) ^ ((int)(_bufferBase[cur + 1] & 0xFF) << 8)); - - int curMatch = _hash[kFixHashSize + hashValue]; - if (HASH_ARRAY) - { - int curMatch2 = _hash[hash2Value]; - int curMatch3 = _hash[kHash3Offset + hash3Value]; - _hash[hash2Value] = _pos; - _hash[kHash3Offset + hash3Value] = _pos; - if (curMatch2 > matchMinPos) - if (_bufferBase[_bufferOffset + curMatch2] == _bufferBase[cur]) - { - distances[offset++] = maxLen = 2; - distances[offset++] = _pos - curMatch2 - 1; - } - if (curMatch3 > matchMinPos) - if (_bufferBase[_bufferOffset + curMatch3] == _bufferBase[cur]) - { - if (curMatch3 == curMatch2) - offset -= 2; - distances[offset++] = maxLen = 3; - distances[offset++] = _pos - curMatch3 - 1; - curMatch2 = curMatch3; - } - if (offset != 0 && curMatch2 == curMatch) - { - offset -= 2; - maxLen = kStartMaxLen; - } - } - - _hash[kFixHashSize + hashValue] = _pos; - - int ptr0 = (_cyclicBufferPos << 1) + 1; - int ptr1 = (_cyclicBufferPos << 1); - - int len0, len1; - len0 = len1 = kNumHashDirectBytes; - - if (kNumHashDirectBytes != 0) - { - if (curMatch > matchMinPos) - { - if (_bufferBase[_bufferOffset + curMatch + kNumHashDirectBytes] != - _bufferBase[cur + kNumHashDirectBytes]) - { - distances[offset++] = maxLen = kNumHashDirectBytes; - distances[offset++] = _pos - curMatch - 1; - } - } - } - - int count = _cutValue; - - while (true) - { - if (curMatch <= matchMinPos || count-- == 0) - { - _son[ptr0] = _son[ptr1] = kEmptyHashValue; - break; - } - int delta = _pos - curMatch; - int cyclicPos = ((delta <= _cyclicBufferPos) ? - (_cyclicBufferPos - delta) : - (_cyclicBufferPos - delta + _cyclicBufferSize)) << 1; - - int pby1 = _bufferOffset + curMatch; - int len = Math.min(len0, len1); - if (_bufferBase[pby1 + len] == _bufferBase[cur + len]) - { - while(++len != lenLimit) - if (_bufferBase[pby1 + len] != _bufferBase[cur + len]) - break; - if (maxLen < len) - { - distances[offset++] = maxLen = len; - distances[offset++] = delta - 1; - if (len == lenLimit) - { - _son[ptr1] = _son[cyclicPos]; - _son[ptr0] = _son[cyclicPos + 1]; - break; - } - } - } - if ((_bufferBase[pby1 + len] & 0xFF) < (_bufferBase[cur + len] & 0xFF)) - { - _son[ptr1] = curMatch; - ptr1 = cyclicPos + 1; - curMatch = _son[ptr1]; - len1 = len; - } - else - { - _son[ptr0] = curMatch; - ptr0 = cyclicPos; - curMatch = _son[ptr0]; - len0 = len; - } - } - MovePos(); - return offset; - } - - public void Skip(int num) throws IOException - { - do - { - int lenLimit; - if (_pos + _matchMaxLen <= _streamPos) - lenLimit = _matchMaxLen; - else - { - lenLimit = _streamPos - _pos; - if (lenLimit < kMinMatchCheck) - { - MovePos(); - continue; - } - } - - int matchMinPos = (_pos > _cyclicBufferSize) ? (_pos - _cyclicBufferSize) : 0; - int cur = _bufferOffset + _pos; - - int hashValue; - - if (HASH_ARRAY) - { - int temp = CrcTable[_bufferBase[cur] & 0xFF] ^ (_bufferBase[cur + 1] & 0xFF); - int hash2Value = temp & (kHash2Size - 1); - _hash[hash2Value] = _pos; - temp ^= ((int)(_bufferBase[cur + 2] & 0xFF) << 8); - int hash3Value = temp & (kHash3Size - 1); - _hash[kHash3Offset + hash3Value] = _pos; - hashValue = (temp ^ (CrcTable[_bufferBase[cur + 3] & 0xFF] << 5)) & _hashMask; - } - else - hashValue = ((_bufferBase[cur] & 0xFF) ^ ((int)(_bufferBase[cur + 1] & 0xFF) << 8)); - - int curMatch = _hash[kFixHashSize + hashValue]; - _hash[kFixHashSize + hashValue] = _pos; - - int ptr0 = (_cyclicBufferPos << 1) + 1; - int ptr1 = (_cyclicBufferPos << 1); - - int len0, len1; - len0 = len1 = kNumHashDirectBytes; - - int count = _cutValue; - while (true) - { - if (curMatch <= matchMinPos || count-- == 0) - { - _son[ptr0] = _son[ptr1] = kEmptyHashValue; - break; - } - - int delta = _pos - curMatch; - int cyclicPos = ((delta <= _cyclicBufferPos) ? - (_cyclicBufferPos - delta) : - (_cyclicBufferPos - delta + _cyclicBufferSize)) << 1; - - int pby1 = _bufferOffset + curMatch; - int len = Math.min(len0, len1); - if (_bufferBase[pby1 + len] == _bufferBase[cur + len]) - { - while (++len != lenLimit) - if (_bufferBase[pby1 + len] != _bufferBase[cur + len]) - break; - if (len == lenLimit) - { - _son[ptr1] = _son[cyclicPos]; - _son[ptr0] = _son[cyclicPos + 1]; - break; - } - } - if ((_bufferBase[pby1 + len] & 0xFF) < (_bufferBase[cur + len] & 0xFF)) - { - _son[ptr1] = curMatch; - ptr1 = cyclicPos + 1; - curMatch = _son[ptr1]; - len1 = len; - } - else - { - _son[ptr0] = curMatch; - ptr0 = cyclicPos; - curMatch = _son[ptr0]; - len0 = len; - } - } - MovePos(); - } - while (--num != 0); - } - - void NormalizeLinks(int[] items, int numItems, int subValue) - { - for (int i = 0; i < numItems; i++) - { - int value = items[i]; - if (value <= subValue) - value = kEmptyHashValue; - else - value -= subValue; - items[i] = value; - } - } - - void Normalize() - { - int subValue = _pos - _cyclicBufferSize; - NormalizeLinks(_son, _cyclicBufferSize * 2, subValue); - NormalizeLinks(_hash, _hashSizeSum, subValue); - ReduceOffsets(subValue); - } - - public void SetCutValue(int cutValue) { _cutValue = cutValue; } - - private static final int[] CrcTable = new int[256]; - - static - { - for (int i = 0; i < 256; i++) - { - int r = i; - for (int j = 0; j < 8; j++) - if ((r & 1) != 0) - r = (r >>> 1) ^ 0xEDB88320; - else - r >>>= 1; - CrcTable[i] = r; - } - } -} diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZ/InWindow.java b/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZ/InWindow.java deleted file mode 100644 index 5f3f0b4d091f..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZ/InWindow.java +++ /dev/null @@ -1,131 +0,0 @@ -// LZ.InWindow - -package SevenZip.Compression.LZ; - -import java.io.IOException; - -public class InWindow -{ - public byte[] _bufferBase; // pointer to buffer with data - java.io.InputStream _stream; - int _posLimit; // offset (from _buffer) of first byte when new block reading must be done - boolean _streamEndWasReached; // if (true) then _streamPos shows real end of stream - - int _pointerToLastSafePosition; - - public int _bufferOffset; - - public int _blockSize; // Size of Allocated memory block - public int _pos; // offset (from _buffer) of curent byte - int _keepSizeBefore; // how many BYTEs must be kept in buffer before _pos - int _keepSizeAfter; // how many BYTEs must be kept buffer after _pos - public int _streamPos; // offset (from _buffer) of first not read byte from Stream - - public void MoveBlock() - { - int offset = _bufferOffset + _pos - _keepSizeBefore; - // we need one additional byte, since MovePos moves on 1 byte. - if (offset > 0) - offset--; - - int numBytes = _bufferOffset + _streamPos - offset; - - // check negative offset ???? - for (int i = 0; i < numBytes; i++) - _bufferBase[i] = _bufferBase[offset + i]; - _bufferOffset -= offset; - } - - public void ReadBlock() throws IOException - { - if (_streamEndWasReached) - return; - while (true) - { - int size = (0 - _bufferOffset) + _blockSize - _streamPos; - if (size == 0) - return; - int numReadBytes = _stream.read(_bufferBase, _bufferOffset + _streamPos, size); - if (numReadBytes == -1) - { - _posLimit = _streamPos; - int pointerToPostion = _bufferOffset + _posLimit; - if (pointerToPostion > _pointerToLastSafePosition) - _posLimit = _pointerToLastSafePosition - _bufferOffset; - - _streamEndWasReached = true; - return; - } - _streamPos += numReadBytes; - if (_streamPos >= _pos + _keepSizeAfter) - _posLimit = _streamPos - _keepSizeAfter; - } - } - - void Free() { _bufferBase = null; } - - public void Create(int keepSizeBefore, int keepSizeAfter, int keepSizeReserv) - { - _keepSizeBefore = keepSizeBefore; - _keepSizeAfter = keepSizeAfter; - int blockSize = keepSizeBefore + keepSizeAfter + keepSizeReserv; - if (_bufferBase == null || _blockSize != blockSize) - { - Free(); - _blockSize = blockSize; - _bufferBase = new byte[_blockSize]; - } - _pointerToLastSafePosition = _blockSize - keepSizeAfter; - } - - public void SetStream(java.io.InputStream stream) { _stream = stream; } - public void ReleaseStream() { _stream = null; } - - public void Init() throws IOException - { - _bufferOffset = 0; - _pos = 0; - _streamPos = 0; - _streamEndWasReached = false; - ReadBlock(); - } - - public void MovePos() throws IOException - { - _pos++; - if (_pos > _posLimit) - { - int pointerToPostion = _bufferOffset + _pos; - if (pointerToPostion > _pointerToLastSafePosition) - MoveBlock(); - ReadBlock(); - } - } - - public byte GetIndexByte(int index) { return _bufferBase[_bufferOffset + _pos + index]; } - - // index + limit have not to exceed _keepSizeAfter; - public int GetMatchLen(int index, int distance, int limit) - { - if (_streamEndWasReached) - if ((_pos + index) + limit > _streamPos) - limit = _streamPos - (_pos + index); - distance++; - // Byte *pby = _buffer + (size_t)_pos + index; - int pby = _bufferOffset + _pos + index; - - int i; - for (i = 0; i < limit && _bufferBase[pby + i] == _bufferBase[pby + i - distance]; i++); - return i; - } - - public int GetNumAvailableBytes() { return _streamPos - _pos; } - - public void ReduceOffsets(int subValue) - { - _bufferOffset += subValue; - _posLimit -= subValue; - _pos -= subValue; - _streamPos -= subValue; - } -} diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZ/OutWindow.java b/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZ/OutWindow.java deleted file mode 100644 index 620cb41b4733..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZ/OutWindow.java +++ /dev/null @@ -1,85 +0,0 @@ -// LZ.OutWindow - -package SevenZip.Compression.LZ; - -import java.io.IOException; - -public class OutWindow -{ - byte[] _buffer; - int _pos; - int _windowSize = 0; - int _streamPos; - java.io.OutputStream _stream; - - public void Create(int windowSize) - { - if (_buffer == null || _windowSize != windowSize) - _buffer = new byte[windowSize]; - _windowSize = windowSize; - _pos = 0; - _streamPos = 0; - } - - public void SetStream(java.io.OutputStream stream) throws IOException - { - ReleaseStream(); - _stream = stream; - } - - public void ReleaseStream() throws IOException - { - Flush(); - _stream = null; - } - - public void Init(boolean solid) - { - if (!solid) - { - _streamPos = 0; - _pos = 0; - } - } - - public void Flush() throws IOException - { - int size = _pos - _streamPos; - if (size == 0) - return; - _stream.write(_buffer, _streamPos, size); - if (_pos >= _windowSize) - _pos = 0; - _streamPos = _pos; - } - - public void CopyBlock(int distance, int len) throws IOException - { - int pos = _pos - distance - 1; - if (pos < 0) - pos += _windowSize; - for (; len != 0; len--) - { - if (pos >= _windowSize) - pos = 0; - _buffer[_pos++] = _buffer[pos++]; - if (_pos >= _windowSize) - Flush(); - } - } - - public void PutByte(byte b) throws IOException - { - _buffer[_pos++] = b; - if (_pos >= _windowSize) - Flush(); - } - - public byte GetByte(int distance) - { - int pos = _pos - distance - 1; - if (pos < 0) - pos += _windowSize; - return _buffer[pos]; - } -} diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZMA/Base.java b/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZMA/Base.java deleted file mode 100644 index 18deed9232a6..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZMA/Base.java +++ /dev/null @@ -1,88 +0,0 @@ -// Base.java - -package SevenZip.Compression.LZMA; - -public class Base -{ - public static final int kNumRepDistances = 4; - public static final int kNumStates = 12; - - public static final int StateInit() - { - return 0; - } - - public static final int StateUpdateChar(int index) - { - if (index < 4) - return 0; - if (index < 10) - return index - 3; - return index - 6; - } - - public static final int StateUpdateMatch(int index) - { - return (index < 7 ? 7 : 10); - } - - public static final int StateUpdateRep(int index) - { - return (index < 7 ? 8 : 11); - } - - public static final int StateUpdateShortRep(int index) - { - return (index < 7 ? 9 : 11); - } - - public static final boolean StateIsCharState(int index) - { - return index < 7; - } - - public static final int kNumPosSlotBits = 6; - public static final int kDicLogSizeMin = 0; - // public static final int kDicLogSizeMax = 28; - // public static final int kDistTableSizeMax = kDicLogSizeMax * 2; - - public static final int kNumLenToPosStatesBits = 2; // it's for speed optimization - public static final int kNumLenToPosStates = 1 << kNumLenToPosStatesBits; - - public static final int kMatchMinLen = 2; - - public static final int GetLenToPosState(int len) - { - len -= kMatchMinLen; - if (len < kNumLenToPosStates) - return len; - return (int)(kNumLenToPosStates - 1); - } - - public static final int kNumAlignBits = 4; - public static final int kAlignTableSize = 1 << kNumAlignBits; - public static final int kAlignMask = (kAlignTableSize - 1); - - public static final int kStartPosModelIndex = 4; - public static final int kEndPosModelIndex = 14; - public static final int kNumPosModels = kEndPosModelIndex - kStartPosModelIndex; - - public static final int kNumFullDistances = 1 << (kEndPosModelIndex / 2); - - public static final int kNumLitPosStatesBitsEncodingMax = 4; - public static final int kNumLitContextBitsMax = 8; - - public static final int kNumPosStatesBitsMax = 4; - public static final int kNumPosStatesMax = (1 << kNumPosStatesBitsMax); - public static final int kNumPosStatesBitsEncodingMax = 4; - public static final int kNumPosStatesEncodingMax = (1 << kNumPosStatesBitsEncodingMax); - - public static final int kNumLowLenBits = 3; - public static final int kNumMidLenBits = 3; - public static final int kNumHighLenBits = 8; - public static final int kNumLowLenSymbols = 1 << kNumLowLenBits; - public static final int kNumMidLenSymbols = 1 << kNumMidLenBits; - public static final int kNumLenSymbols = kNumLowLenSymbols + kNumMidLenSymbols + - (1 << kNumHighLenBits); - public static final int kMatchMaxLen = kMatchMinLen + kNumLenSymbols - 1; -} diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZMA/Decoder.java b/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZMA/Decoder.java deleted file mode 100644 index 4ebd571106a1..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZMA/Decoder.java +++ /dev/null @@ -1,329 +0,0 @@ -package SevenZip.Compression.LZMA; - -import SevenZip.Compression.RangeCoder.BitTreeDecoder; -import SevenZip.Compression.LZMA.Base; -import SevenZip.Compression.LZ.OutWindow; -import java.io.IOException; - -public class Decoder -{ - class LenDecoder - { - short[] m_Choice = new short[2]; - BitTreeDecoder[] m_LowCoder = new BitTreeDecoder[Base.kNumPosStatesMax]; - BitTreeDecoder[] m_MidCoder = new BitTreeDecoder[Base.kNumPosStatesMax]; - BitTreeDecoder m_HighCoder = new BitTreeDecoder(Base.kNumHighLenBits); - int m_NumPosStates = 0; - - public void Create(int numPosStates) - { - for (; m_NumPosStates < numPosStates; m_NumPosStates++) - { - m_LowCoder[m_NumPosStates] = new BitTreeDecoder(Base.kNumLowLenBits); - m_MidCoder[m_NumPosStates] = new BitTreeDecoder(Base.kNumMidLenBits); - } - } - - public void Init() - { - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_Choice); - for (int posState = 0; posState < m_NumPosStates; posState++) - { - m_LowCoder[posState].Init(); - m_MidCoder[posState].Init(); - } - m_HighCoder.Init(); - } - - public int Decode(SevenZip.Compression.RangeCoder.Decoder rangeDecoder, int posState) throws IOException - { - if (rangeDecoder.DecodeBit(m_Choice, 0) == 0) - return m_LowCoder[posState].Decode(rangeDecoder); - int symbol = Base.kNumLowLenSymbols; - if (rangeDecoder.DecodeBit(m_Choice, 1) == 0) - symbol += m_MidCoder[posState].Decode(rangeDecoder); - else - symbol += Base.kNumMidLenSymbols + m_HighCoder.Decode(rangeDecoder); - return symbol; - } - } - - class LiteralDecoder - { - class Decoder2 - { - short[] m_Decoders = new short[0x300]; - - public void Init() - { - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_Decoders); - } - - public byte DecodeNormal(SevenZip.Compression.RangeCoder.Decoder rangeDecoder) throws IOException - { - int symbol = 1; - do - symbol = (symbol << 1) | rangeDecoder.DecodeBit(m_Decoders, symbol); - while (symbol < 0x100); - return (byte)symbol; - } - - public byte DecodeWithMatchByte(SevenZip.Compression.RangeCoder.Decoder rangeDecoder, byte matchByte) throws IOException - { - int symbol = 1; - do - { - int matchBit = (matchByte >> 7) & 1; - matchByte <<= 1; - int bit = rangeDecoder.DecodeBit(m_Decoders, ((1 + matchBit) << 8) + symbol); - symbol = (symbol << 1) | bit; - if (matchBit != bit) - { - while (symbol < 0x100) - symbol = (symbol << 1) | rangeDecoder.DecodeBit(m_Decoders, symbol); - break; - } - } - while (symbol < 0x100); - return (byte)symbol; - } - } - - Decoder2[] m_Coders; - int m_NumPrevBits; - int m_NumPosBits; - int m_PosMask; - - public void Create(int numPosBits, int numPrevBits) - { - if (m_Coders != null && m_NumPrevBits == numPrevBits && m_NumPosBits == numPosBits) - return; - m_NumPosBits = numPosBits; - m_PosMask = (1 << numPosBits) - 1; - m_NumPrevBits = numPrevBits; - int numStates = 1 << (m_NumPrevBits + m_NumPosBits); - m_Coders = new Decoder2[numStates]; - for (int i = 0; i < numStates; i++) - m_Coders[i] = new Decoder2(); - } - - public void Init() - { - int numStates = 1 << (m_NumPrevBits + m_NumPosBits); - for (int i = 0; i < numStates; i++) - m_Coders[i].Init(); - } - - Decoder2 GetDecoder(int pos, byte prevByte) - { - return m_Coders[((pos & m_PosMask) << m_NumPrevBits) + ((prevByte & 0xFF) >>> (8 - m_NumPrevBits))]; - } - } - - OutWindow m_OutWindow = new OutWindow(); - SevenZip.Compression.RangeCoder.Decoder m_RangeDecoder = new SevenZip.Compression.RangeCoder.Decoder(); - - short[] m_IsMatchDecoders = new short[Base.kNumStates << Base.kNumPosStatesBitsMax]; - short[] m_IsRepDecoders = new short[Base.kNumStates]; - short[] m_IsRepG0Decoders = new short[Base.kNumStates]; - short[] m_IsRepG1Decoders = new short[Base.kNumStates]; - short[] m_IsRepG2Decoders = new short[Base.kNumStates]; - short[] m_IsRep0LongDecoders = new short[Base.kNumStates << Base.kNumPosStatesBitsMax]; - - BitTreeDecoder[] m_PosSlotDecoder = new BitTreeDecoder[Base.kNumLenToPosStates]; - short[] m_PosDecoders = new short[Base.kNumFullDistances - Base.kEndPosModelIndex]; - - BitTreeDecoder m_PosAlignDecoder = new BitTreeDecoder(Base.kNumAlignBits); - - LenDecoder m_LenDecoder = new LenDecoder(); - LenDecoder m_RepLenDecoder = new LenDecoder(); - - LiteralDecoder m_LiteralDecoder = new LiteralDecoder(); - - int m_DictionarySize = -1; - int m_DictionarySizeCheck = -1; - - int m_PosStateMask; - - public Decoder() - { - for (int i = 0; i < Base.kNumLenToPosStates; i++) - m_PosSlotDecoder[i] = new BitTreeDecoder(Base.kNumPosSlotBits); - } - - boolean SetDictionarySize(int dictionarySize) - { - if (dictionarySize < 0) - return false; - if (m_DictionarySize != dictionarySize) - { - m_DictionarySize = dictionarySize; - m_DictionarySizeCheck = Math.max(m_DictionarySize, 1); - m_OutWindow.Create(Math.max(m_DictionarySizeCheck, (1 << 12))); - } - return true; - } - - boolean SetLcLpPb(int lc, int lp, int pb) - { - if (lc > Base.kNumLitContextBitsMax || lp > 4 || pb > Base.kNumPosStatesBitsMax) - return false; - m_LiteralDecoder.Create(lp, lc); - int numPosStates = 1 << pb; - m_LenDecoder.Create(numPosStates); - m_RepLenDecoder.Create(numPosStates); - m_PosStateMask = numPosStates - 1; - return true; - } - - void Init() throws IOException - { - m_OutWindow.Init(false); - - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_IsMatchDecoders); - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_IsRep0LongDecoders); - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_IsRepDecoders); - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_IsRepG0Decoders); - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_IsRepG1Decoders); - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_IsRepG2Decoders); - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_PosDecoders); - - m_LiteralDecoder.Init(); - int i; - for (i = 0; i < Base.kNumLenToPosStates; i++) - m_PosSlotDecoder[i].Init(); - m_LenDecoder.Init(); - m_RepLenDecoder.Init(); - m_PosAlignDecoder.Init(); - m_RangeDecoder.Init(); - } - - public boolean Code(java.io.InputStream inStream, java.io.OutputStream outStream, - long outSize) throws IOException - { - m_RangeDecoder.SetStream(inStream); - m_OutWindow.SetStream(outStream); - Init(); - - int state = Base.StateInit(); - int rep0 = 0, rep1 = 0, rep2 = 0, rep3 = 0; - - long nowPos64 = 0; - byte prevByte = 0; - while (outSize < 0 || nowPos64 < outSize) - { - int posState = (int)nowPos64 & m_PosStateMask; - if (m_RangeDecoder.DecodeBit(m_IsMatchDecoders, (state << Base.kNumPosStatesBitsMax) + posState) == 0) - { - LiteralDecoder.Decoder2 decoder2 = m_LiteralDecoder.GetDecoder((int)nowPos64, prevByte); - if (!Base.StateIsCharState(state)) - prevByte = decoder2.DecodeWithMatchByte(m_RangeDecoder, m_OutWindow.GetByte(rep0)); - else - prevByte = decoder2.DecodeNormal(m_RangeDecoder); - m_OutWindow.PutByte(prevByte); - state = Base.StateUpdateChar(state); - nowPos64++; - } - else - { - int len; - if (m_RangeDecoder.DecodeBit(m_IsRepDecoders, state) == 1) - { - len = 0; - if (m_RangeDecoder.DecodeBit(m_IsRepG0Decoders, state) == 0) - { - if (m_RangeDecoder.DecodeBit(m_IsRep0LongDecoders, (state << Base.kNumPosStatesBitsMax) + posState) == 0) - { - state = Base.StateUpdateShortRep(state); - len = 1; - } - } - else - { - int distance; - if (m_RangeDecoder.DecodeBit(m_IsRepG1Decoders, state) == 0) - distance = rep1; - else - { - if (m_RangeDecoder.DecodeBit(m_IsRepG2Decoders, state) == 0) - distance = rep2; - else - { - distance = rep3; - rep3 = rep2; - } - rep2 = rep1; - } - rep1 = rep0; - rep0 = distance; - } - if (len == 0) - { - len = m_RepLenDecoder.Decode(m_RangeDecoder, posState) + Base.kMatchMinLen; - state = Base.StateUpdateRep(state); - } - } - else - { - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - len = Base.kMatchMinLen + m_LenDecoder.Decode(m_RangeDecoder, posState); - state = Base.StateUpdateMatch(state); - int posSlot = m_PosSlotDecoder[Base.GetLenToPosState(len)].Decode(m_RangeDecoder); - if (posSlot >= Base.kStartPosModelIndex) - { - int numDirectBits = (posSlot >> 1) - 1; - rep0 = ((2 | (posSlot & 1)) << numDirectBits); - if (posSlot < Base.kEndPosModelIndex) - rep0 += BitTreeDecoder.ReverseDecode(m_PosDecoders, - rep0 - posSlot - 1, m_RangeDecoder, numDirectBits); - else - { - rep0 += (m_RangeDecoder.DecodeDirectBits( - numDirectBits - Base.kNumAlignBits) << Base.kNumAlignBits); - rep0 += m_PosAlignDecoder.ReverseDecode(m_RangeDecoder); - if (rep0 < 0) - { - if (rep0 == -1) - break; - return false; - } - } - } - else - rep0 = posSlot; - } - if (rep0 >= nowPos64 || rep0 >= m_DictionarySizeCheck) - { - // m_OutWindow.Flush(); - return false; - } - m_OutWindow.CopyBlock(rep0, len); - nowPos64 += len; - prevByte = m_OutWindow.GetByte(0); - } - } - m_OutWindow.Flush(); - m_OutWindow.ReleaseStream(); - m_RangeDecoder.ReleaseStream(); - return true; - } - - public boolean SetDecoderProperties(byte[] properties) - { - if (properties.length < 5) - return false; - int val = properties[0] & 0xFF; - int lc = val % 9; - int remainder = val / 9; - int lp = remainder % 5; - int pb = remainder / 5; - int dictionarySize = 0; - for (int i = 0; i < 4; i++) - dictionarySize += ((int)(properties[1 + i]) & 0xFF) << (i * 8); - if (!SetLcLpPb(lc, lp, pb)) - return false; - return SetDictionarySize(dictionarySize); - } -} diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZMA/Encoder.java b/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZMA/Encoder.java deleted file mode 100644 index 771fb21946b0..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/LZMA/Encoder.java +++ /dev/null @@ -1,1416 +0,0 @@ -package SevenZip.Compression.LZMA; - -import SevenZip.Compression.RangeCoder.BitTreeEncoder; -import SevenZip.Compression.LZMA.Base; -import SevenZip.Compression.LZ.BinTree; -import SevenZip.ICodeProgress; -import java.io.IOException; - -public class Encoder -{ - public static final int EMatchFinderTypeBT2 = 0; - public static final int EMatchFinderTypeBT4 = 1; - - - - - static final int kIfinityPrice = 0xFFFFFFF; - - static byte[] g_FastPos = new byte[1 << 11]; - - static - { - int kFastSlots = 22; - int c = 2; - g_FastPos[0] = 0; - g_FastPos[1] = 1; - for (int slotFast = 2; slotFast < kFastSlots; slotFast++) - { - int k = (1 << ((slotFast >> 1) - 1)); - for (int j = 0; j < k; j++, c++) - g_FastPos[c] = (byte)slotFast; - } - } - - static int GetPosSlot(int pos) - { - if (pos < (1 << 11)) - return g_FastPos[pos]; - if (pos < (1 << 21)) - return (g_FastPos[pos >> 10] + 20); - return (g_FastPos[pos >> 20] + 40); - } - - static int GetPosSlot2(int pos) - { - if (pos < (1 << 17)) - return (g_FastPos[pos >> 6] + 12); - if (pos < (1 << 27)) - return (g_FastPos[pos >> 16] + 32); - return (g_FastPos[pos >> 26] + 52); - } - - int _state = Base.StateInit(); - byte _previousByte; - int[] _repDistances = new int[Base.kNumRepDistances]; - - void BaseInit() - { - _state = Base.StateInit(); - _previousByte = 0; - for (int i = 0; i < Base.kNumRepDistances; i++) - _repDistances[i] = 0; - } - - static final int kDefaultDictionaryLogSize = 22; - static final int kNumFastBytesDefault = 0x20; - - class LiteralEncoder - { - class Encoder2 - { - short[] m_Encoders = new short[0x300]; - - public void Init() { SevenZip.Compression.RangeCoder.Encoder.InitBitModels(m_Encoders); } - - - - public void Encode(SevenZip.Compression.RangeCoder.Encoder rangeEncoder, byte symbol) throws IOException - { - int context = 1; - for (int i = 7; i >= 0; i--) - { - int bit = ((symbol >> i) & 1); - rangeEncoder.Encode(m_Encoders, context, bit); - context = (context << 1) | bit; - } - } - - public void EncodeMatched(SevenZip.Compression.RangeCoder.Encoder rangeEncoder, byte matchByte, byte symbol) throws IOException - { - int context = 1; - boolean same = true; - for (int i = 7; i >= 0; i--) - { - int bit = ((symbol >> i) & 1); - int state = context; - if (same) - { - int matchBit = ((matchByte >> i) & 1); - state += ((1 + matchBit) << 8); - same = (matchBit == bit); - } - rangeEncoder.Encode(m_Encoders, state, bit); - context = (context << 1) | bit; - } - } - - public int GetPrice(boolean matchMode, byte matchByte, byte symbol) - { - int price = 0; - int context = 1; - int i = 7; - if (matchMode) - { - for (; i >= 0; i--) - { - int matchBit = (matchByte >> i) & 1; - int bit = (symbol >> i) & 1; - price += SevenZip.Compression.RangeCoder.Encoder.GetPrice(m_Encoders[((1 + matchBit) << 8) + context], bit); - context = (context << 1) | bit; - if (matchBit != bit) - { - i--; - break; - } - } - } - for (; i >= 0; i--) - { - int bit = (symbol >> i) & 1; - price += SevenZip.Compression.RangeCoder.Encoder.GetPrice(m_Encoders[context], bit); - context = (context << 1) | bit; - } - return price; - } - } - - Encoder2[] m_Coders; - int m_NumPrevBits; - int m_NumPosBits; - int m_PosMask; - - public void Create(int numPosBits, int numPrevBits) - { - if (m_Coders != null && m_NumPrevBits == numPrevBits && m_NumPosBits == numPosBits) - return; - m_NumPosBits = numPosBits; - m_PosMask = (1 << numPosBits) - 1; - m_NumPrevBits = numPrevBits; - int numStates = 1 << (m_NumPrevBits + m_NumPosBits); - m_Coders = new Encoder2[numStates]; - for (int i = 0; i < numStates; i++) - m_Coders[i] = new Encoder2(); - } - - public void Init() - { - int numStates = 1 << (m_NumPrevBits + m_NumPosBits); - for (int i = 0; i < numStates; i++) - m_Coders[i].Init(); - } - - public Encoder2 GetSubCoder(int pos, byte prevByte) - { return m_Coders[((pos & m_PosMask) << m_NumPrevBits) + ((prevByte & 0xFF) >>> (8 - m_NumPrevBits))]; } - } - - class LenEncoder - { - short[] _choice = new short[2]; - BitTreeEncoder[] _lowCoder = new BitTreeEncoder[Base.kNumPosStatesEncodingMax]; - BitTreeEncoder[] _midCoder = new BitTreeEncoder[Base.kNumPosStatesEncodingMax]; - BitTreeEncoder _highCoder = new BitTreeEncoder(Base.kNumHighLenBits); - - - public LenEncoder() - { - for (int posState = 0; posState < Base.kNumPosStatesEncodingMax; posState++) - { - _lowCoder[posState] = new BitTreeEncoder(Base.kNumLowLenBits); - _midCoder[posState] = new BitTreeEncoder(Base.kNumMidLenBits); - } - } - - public void Init(int numPosStates) - { - SevenZip.Compression.RangeCoder.Encoder.InitBitModels(_choice); - - for (int posState = 0; posState < numPosStates; posState++) - { - _lowCoder[posState].Init(); - _midCoder[posState].Init(); - } - _highCoder.Init(); - } - - public void Encode(SevenZip.Compression.RangeCoder.Encoder rangeEncoder, int symbol, int posState) throws IOException - { - if (symbol < Base.kNumLowLenSymbols) - { - rangeEncoder.Encode(_choice, 0, 0); - _lowCoder[posState].Encode(rangeEncoder, symbol); - } - else - { - symbol -= Base.kNumLowLenSymbols; - rangeEncoder.Encode(_choice, 0, 1); - if (symbol < Base.kNumMidLenSymbols) - { - rangeEncoder.Encode(_choice, 1, 0); - _midCoder[posState].Encode(rangeEncoder, symbol); - } - else - { - rangeEncoder.Encode(_choice, 1, 1); - _highCoder.Encode(rangeEncoder, symbol - Base.kNumMidLenSymbols); - } - } - } - - public void SetPrices(int posState, int numSymbols, int[] prices, int st) - { - int a0 = SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_choice[0]); - int a1 = SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_choice[0]); - int b0 = a1 + SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_choice[1]); - int b1 = a1 + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_choice[1]); - int i = 0; - for (i = 0; i < Base.kNumLowLenSymbols; i++) - { - if (i >= numSymbols) - return; - prices[st + i] = a0 + _lowCoder[posState].GetPrice(i); - } - for (; i < Base.kNumLowLenSymbols + Base.kNumMidLenSymbols; i++) - { - if (i >= numSymbols) - return; - prices[st + i] = b0 + _midCoder[posState].GetPrice(i - Base.kNumLowLenSymbols); - } - for (; i < numSymbols; i++) - prices[st + i] = b1 + _highCoder.GetPrice(i - Base.kNumLowLenSymbols - Base.kNumMidLenSymbols); - } - }; - - public static final int kNumLenSpecSymbols = Base.kNumLowLenSymbols + Base.kNumMidLenSymbols; - - class LenPriceTableEncoder extends LenEncoder - { - int[] _prices = new int[Base.kNumLenSymbols< 0) - { - lenRes = _matchDistances[_numDistancePairs - 2]; - if (lenRes == _numFastBytes) - lenRes += _matchFinder.GetMatchLen((int)lenRes - 1, _matchDistances[_numDistancePairs - 1], - Base.kMatchMaxLen - lenRes); - } - _additionalOffset++; - return lenRes; - } - - void MovePos(int num) throws java.io.IOException - { - if (num > 0) - { - _matchFinder.Skip(num); - _additionalOffset += num; - } - } - - int GetRepLen1Price(int state, int posState) - { - return SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isRepG0[state]) + - SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isRep0Long[(state << Base.kNumPosStatesBitsMax) + posState]); - } - - int GetPureRepPrice(int repIndex, int state, int posState) - { - int price; - if (repIndex == 0) - { - price = SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isRepG0[state]); - price += SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRep0Long[(state << Base.kNumPosStatesBitsMax) + posState]); - } - else - { - price = SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRepG0[state]); - if (repIndex == 1) - price += SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isRepG1[state]); - else - { - price += SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRepG1[state]); - price += SevenZip.Compression.RangeCoder.Encoder.GetPrice(_isRepG2[state], repIndex - 2); - } - } - return price; - } - - int GetRepPrice(int repIndex, int len, int state, int posState) - { - int price = _repMatchLenEncoder.GetPrice(len - Base.kMatchMinLen, posState); - return price + GetPureRepPrice(repIndex, state, posState); - } - - int GetPosLenPrice(int pos, int len, int posState) - { - int price; - int lenToPosState = Base.GetLenToPosState(len); - if (pos < Base.kNumFullDistances) - price = _distancesPrices[(lenToPosState * Base.kNumFullDistances) + pos]; - else - price = _posSlotPrices[(lenToPosState << Base.kNumPosSlotBits) + GetPosSlot2(pos)] + - _alignPrices[pos & Base.kAlignMask]; - return price + _lenEncoder.GetPrice(len - Base.kMatchMinLen, posState); - } - - int Backward(int cur) - { - _optimumEndIndex = cur; - int posMem = _optimum[cur].PosPrev; - int backMem = _optimum[cur].BackPrev; - do - { - if (_optimum[cur].Prev1IsChar) - { - _optimum[posMem].MakeAsChar(); - _optimum[posMem].PosPrev = posMem - 1; - if (_optimum[cur].Prev2) - { - _optimum[posMem - 1].Prev1IsChar = false; - _optimum[posMem - 1].PosPrev = _optimum[cur].PosPrev2; - _optimum[posMem - 1].BackPrev = _optimum[cur].BackPrev2; - } - } - int posPrev = posMem; - int backCur = backMem; - - backMem = _optimum[posPrev].BackPrev; - posMem = _optimum[posPrev].PosPrev; - - _optimum[posPrev].BackPrev = backCur; - _optimum[posPrev].PosPrev = cur; - cur = posPrev; - } - while (cur > 0); - backRes = _optimum[0].BackPrev; - _optimumCurrentIndex = _optimum[0].PosPrev; - return _optimumCurrentIndex; - } - - int[] reps = new int[Base.kNumRepDistances]; - int[] repLens = new int[Base.kNumRepDistances]; - int backRes; - - int GetOptimum(int position) throws IOException - { - if (_optimumEndIndex != _optimumCurrentIndex) - { - int lenRes = _optimum[_optimumCurrentIndex].PosPrev - _optimumCurrentIndex; - backRes = _optimum[_optimumCurrentIndex].BackPrev; - _optimumCurrentIndex = _optimum[_optimumCurrentIndex].PosPrev; - return lenRes; - } - _optimumCurrentIndex = _optimumEndIndex = 0; - - int lenMain, numDistancePairs; - if (!_longestMatchWasFound) - { - lenMain = ReadMatchDistances(); - } - else - { - lenMain = _longestMatchLength; - _longestMatchWasFound = false; - } - numDistancePairs = _numDistancePairs; - - int numAvailableBytes = _matchFinder.GetNumAvailableBytes() + 1; - if (numAvailableBytes < 2) - { - backRes = -1; - return 1; - } - if (numAvailableBytes > Base.kMatchMaxLen) - numAvailableBytes = Base.kMatchMaxLen; - - int repMaxIndex = 0; - int i; - for (i = 0; i < Base.kNumRepDistances; i++) - { - reps[i] = _repDistances[i]; - repLens[i] = _matchFinder.GetMatchLen(0 - 1, reps[i], Base.kMatchMaxLen); - if (repLens[i] > repLens[repMaxIndex]) - repMaxIndex = i; - } - if (repLens[repMaxIndex] >= _numFastBytes) - { - backRes = repMaxIndex; - int lenRes = repLens[repMaxIndex]; - MovePos(lenRes - 1); - return lenRes; - } - - if (lenMain >= _numFastBytes) - { - backRes = _matchDistances[numDistancePairs - 1] + Base.kNumRepDistances; - MovePos(lenMain - 1); - return lenMain; - } - - byte currentByte = _matchFinder.GetIndexByte(0 - 1); - byte matchByte = _matchFinder.GetIndexByte(0 - _repDistances[0] - 1 - 1); - - if (lenMain < 2 && currentByte != matchByte && repLens[repMaxIndex] < 2) - { - backRes = -1; - return 1; - } - - _optimum[0].State = _state; - - int posState = (position & _posStateMask); - - _optimum[1].Price = SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isMatch[(_state << Base.kNumPosStatesBitsMax) + posState]) + - _literalEncoder.GetSubCoder(position, _previousByte).GetPrice(!Base.StateIsCharState(_state), matchByte, currentByte); - _optimum[1].MakeAsChar(); - - int matchPrice = SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isMatch[(_state << Base.kNumPosStatesBitsMax) + posState]); - int repMatchPrice = matchPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRep[_state]); - - if (matchByte == currentByte) - { - int shortRepPrice = repMatchPrice + GetRepLen1Price(_state, posState); - if (shortRepPrice < _optimum[1].Price) - { - _optimum[1].Price = shortRepPrice; - _optimum[1].MakeAsShortRep(); - } - } - - int lenEnd = ((lenMain >= repLens[repMaxIndex]) ? lenMain : repLens[repMaxIndex]); - - if (lenEnd < 2) - { - backRes = _optimum[1].BackPrev; - return 1; - } - - _optimum[1].PosPrev = 0; - - _optimum[0].Backs0 = reps[0]; - _optimum[0].Backs1 = reps[1]; - _optimum[0].Backs2 = reps[2]; - _optimum[0].Backs3 = reps[3]; - - int len = lenEnd; - do - _optimum[len--].Price = kIfinityPrice; - while (len >= 2); - - for (i = 0; i < Base.kNumRepDistances; i++) - { - int repLen = repLens[i]; - if (repLen < 2) - continue; - int price = repMatchPrice + GetPureRepPrice(i, _state, posState); - do - { - int curAndLenPrice = price + _repMatchLenEncoder.GetPrice(repLen - 2, posState); - Optimal optimum = _optimum[repLen]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = 0; - optimum.BackPrev = i; - optimum.Prev1IsChar = false; - } - } - while (--repLen >= 2); - } - - int normalMatchPrice = matchPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isRep[_state]); - - len = ((repLens[0] >= 2) ? repLens[0] + 1 : 2); - if (len <= lenMain) - { - int offs = 0; - while (len > _matchDistances[offs]) - offs += 2; - for (; ; len++) - { - int distance = _matchDistances[offs + 1]; - int curAndLenPrice = normalMatchPrice + GetPosLenPrice(distance, len, posState); - Optimal optimum = _optimum[len]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = 0; - optimum.BackPrev = distance + Base.kNumRepDistances; - optimum.Prev1IsChar = false; - } - if (len == _matchDistances[offs]) - { - offs += 2; - if (offs == numDistancePairs) - break; - } - } - } - - int cur = 0; - - while (true) - { - cur++; - if (cur == lenEnd) - return Backward(cur); - int newLen = ReadMatchDistances(); - numDistancePairs = _numDistancePairs; - if (newLen >= _numFastBytes) - { - - _longestMatchLength = newLen; - _longestMatchWasFound = true; - return Backward(cur); - } - position++; - int posPrev = _optimum[cur].PosPrev; - int state; - if (_optimum[cur].Prev1IsChar) - { - posPrev--; - if (_optimum[cur].Prev2) - { - state = _optimum[_optimum[cur].PosPrev2].State; - if (_optimum[cur].BackPrev2 < Base.kNumRepDistances) - state = Base.StateUpdateRep(state); - else - state = Base.StateUpdateMatch(state); - } - else - state = _optimum[posPrev].State; - state = Base.StateUpdateChar(state); - } - else - state = _optimum[posPrev].State; - if (posPrev == cur - 1) - { - if (_optimum[cur].IsShortRep()) - state = Base.StateUpdateShortRep(state); - else - state = Base.StateUpdateChar(state); - } - else - { - int pos; - if (_optimum[cur].Prev1IsChar && _optimum[cur].Prev2) - { - posPrev = _optimum[cur].PosPrev2; - pos = _optimum[cur].BackPrev2; - state = Base.StateUpdateRep(state); - } - else - { - pos = _optimum[cur].BackPrev; - if (pos < Base.kNumRepDistances) - state = Base.StateUpdateRep(state); - else - state = Base.StateUpdateMatch(state); - } - Optimal opt = _optimum[posPrev]; - if (pos < Base.kNumRepDistances) - { - if (pos == 0) - { - reps[0] = opt.Backs0; - reps[1] = opt.Backs1; - reps[2] = opt.Backs2; - reps[3] = opt.Backs3; - } - else if (pos == 1) - { - reps[0] = opt.Backs1; - reps[1] = opt.Backs0; - reps[2] = opt.Backs2; - reps[3] = opt.Backs3; - } - else if (pos == 2) - { - reps[0] = opt.Backs2; - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs3; - } - else - { - reps[0] = opt.Backs3; - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs2; - } - } - else - { - reps[0] = (pos - Base.kNumRepDistances); - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs2; - } - } - _optimum[cur].State = state; - _optimum[cur].Backs0 = reps[0]; - _optimum[cur].Backs1 = reps[1]; - _optimum[cur].Backs2 = reps[2]; - _optimum[cur].Backs3 = reps[3]; - int curPrice = _optimum[cur].Price; - - currentByte = _matchFinder.GetIndexByte(0 - 1); - matchByte = _matchFinder.GetIndexByte(0 - reps[0] - 1 - 1); - - posState = (position & _posStateMask); - - int curAnd1Price = curPrice + - SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isMatch[(state << Base.kNumPosStatesBitsMax) + posState]) + - _literalEncoder.GetSubCoder(position, _matchFinder.GetIndexByte(0 - 2)). - GetPrice(!Base.StateIsCharState(state), matchByte, currentByte); - - Optimal nextOptimum = _optimum[cur + 1]; - - boolean nextIsChar = false; - if (curAnd1Price < nextOptimum.Price) - { - nextOptimum.Price = curAnd1Price; - nextOptimum.PosPrev = cur; - nextOptimum.MakeAsChar(); - nextIsChar = true; - } - - matchPrice = curPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isMatch[(state << Base.kNumPosStatesBitsMax) + posState]); - repMatchPrice = matchPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRep[state]); - - if (matchByte == currentByte && - !(nextOptimum.PosPrev < cur && nextOptimum.BackPrev == 0)) - { - int shortRepPrice = repMatchPrice + GetRepLen1Price(state, posState); - if (shortRepPrice <= nextOptimum.Price) - { - nextOptimum.Price = shortRepPrice; - nextOptimum.PosPrev = cur; - nextOptimum.MakeAsShortRep(); - nextIsChar = true; - } - } - - int numAvailableBytesFull = _matchFinder.GetNumAvailableBytes() + 1; - numAvailableBytesFull = Math.min(kNumOpts - 1 - cur, numAvailableBytesFull); - numAvailableBytes = numAvailableBytesFull; - - if (numAvailableBytes < 2) - continue; - if (numAvailableBytes > _numFastBytes) - numAvailableBytes = _numFastBytes; - if (!nextIsChar && matchByte != currentByte) - { - // try Literal + rep0 - int t = Math.min(numAvailableBytesFull - 1, _numFastBytes); - int lenTest2 = _matchFinder.GetMatchLen(0, reps[0], t); - if (lenTest2 >= 2) - { - int state2 = Base.StateUpdateChar(state); - - int posStateNext = (position + 1) & _posStateMask; - int nextRepMatchPrice = curAnd1Price + - SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isMatch[(state2 << Base.kNumPosStatesBitsMax) + posStateNext]) + - SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRep[state2]); - { - int offset = cur + 1 + lenTest2; - while (lenEnd < offset) - _optimum[++lenEnd].Price = kIfinityPrice; - int curAndLenPrice = nextRepMatchPrice + GetRepPrice( - 0, lenTest2, state2, posStateNext); - Optimal optimum = _optimum[offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = false; - } - } - } - } - - int startLen = 2; // speed optimization - - for (int repIndex = 0; repIndex < Base.kNumRepDistances; repIndex++) - { - int lenTest = _matchFinder.GetMatchLen(0 - 1, reps[repIndex], numAvailableBytes); - if (lenTest < 2) - continue; - int lenTestTemp = lenTest; - do - { - while (lenEnd < cur + lenTest) - _optimum[++lenEnd].Price = kIfinityPrice; - int curAndLenPrice = repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState); - Optimal optimum = _optimum[cur + lenTest]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur; - optimum.BackPrev = repIndex; - optimum.Prev1IsChar = false; - } - } - while (--lenTest >= 2); - lenTest = lenTestTemp; - - if (repIndex == 0) - startLen = lenTest + 1; - - // if (_maxMode) - if (lenTest < numAvailableBytesFull) - { - int t = Math.min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); - int lenTest2 = _matchFinder.GetMatchLen(lenTest, reps[repIndex], t); - if (lenTest2 >= 2) - { - int state2 = Base.StateUpdateRep(state); - - int posStateNext = (position + lenTest) & _posStateMask; - int curAndLenCharPrice = - repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState) + - SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isMatch[(state2 << Base.kNumPosStatesBitsMax) + posStateNext]) + - _literalEncoder.GetSubCoder(position + lenTest, - _matchFinder.GetIndexByte(lenTest - 1 - 1)).GetPrice(true, - _matchFinder.GetIndexByte(lenTest - 1 - (reps[repIndex] + 1)), - _matchFinder.GetIndexByte(lenTest - 1)); - state2 = Base.StateUpdateChar(state2); - posStateNext = (position + lenTest + 1) & _posStateMask; - int nextMatchPrice = curAndLenCharPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isMatch[(state2 << Base.kNumPosStatesBitsMax) + posStateNext]); - int nextRepMatchPrice = nextMatchPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRep[state2]); - - // for(; lenTest2 >= 2; lenTest2--) - { - int offset = lenTest + 1 + lenTest2; - while (lenEnd < cur + offset) - _optimum[++lenEnd].Price = kIfinityPrice; - int curAndLenPrice = nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); - Optimal optimum = _optimum[cur + offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + lenTest + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = true; - optimum.PosPrev2 = cur; - optimum.BackPrev2 = repIndex; - } - } - } - } - } - - if (newLen > numAvailableBytes) - { - newLen = numAvailableBytes; - for (numDistancePairs = 0; newLen > _matchDistances[numDistancePairs]; numDistancePairs += 2) ; - _matchDistances[numDistancePairs] = newLen; - numDistancePairs += 2; - } - if (newLen >= startLen) - { - normalMatchPrice = matchPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isRep[state]); - while (lenEnd < cur + newLen) - _optimum[++lenEnd].Price = kIfinityPrice; - - int offs = 0; - while (startLen > _matchDistances[offs]) - offs += 2; - - for (int lenTest = startLen; ; lenTest++) - { - int curBack = _matchDistances[offs + 1]; - int curAndLenPrice = normalMatchPrice + GetPosLenPrice(curBack, lenTest, posState); - Optimal optimum = _optimum[cur + lenTest]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur; - optimum.BackPrev = curBack + Base.kNumRepDistances; - optimum.Prev1IsChar = false; - } - - if (lenTest == _matchDistances[offs]) - { - if (lenTest < numAvailableBytesFull) - { - int t = Math.min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); - int lenTest2 = _matchFinder.GetMatchLen(lenTest, curBack, t); - if (lenTest2 >= 2) - { - int state2 = Base.StateUpdateMatch(state); - - int posStateNext = (position + lenTest) & _posStateMask; - int curAndLenCharPrice = curAndLenPrice + - SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isMatch[(state2 << Base.kNumPosStatesBitsMax) + posStateNext]) + - _literalEncoder.GetSubCoder(position + lenTest, - _matchFinder.GetIndexByte(lenTest - 1 - 1)). - GetPrice(true, - _matchFinder.GetIndexByte(lenTest - (curBack + 1) - 1), - _matchFinder.GetIndexByte(lenTest - 1)); - state2 = Base.StateUpdateChar(state2); - posStateNext = (position + lenTest + 1) & _posStateMask; - int nextMatchPrice = curAndLenCharPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isMatch[(state2 << Base.kNumPosStatesBitsMax) + posStateNext]); - int nextRepMatchPrice = nextMatchPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRep[state2]); - - int offset = lenTest + 1 + lenTest2; - while (lenEnd < cur + offset) - _optimum[++lenEnd].Price = kIfinityPrice; - curAndLenPrice = nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); - optimum = _optimum[cur + offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + lenTest + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = true; - optimum.PosPrev2 = cur; - optimum.BackPrev2 = curBack + Base.kNumRepDistances; - } - } - } - offs += 2; - if (offs == numDistancePairs) - break; - } - } - } - } - } - - boolean ChangePair(int smallDist, int bigDist) - { - int kDif = 7; - return (smallDist < (1 << (32 - kDif)) && bigDist >= (smallDist << kDif)); - } - - void WriteEndMarker(int posState) throws IOException - { - if (!_writeEndMark) - return; - - _rangeEncoder.Encode(_isMatch, (_state << Base.kNumPosStatesBitsMax) + posState, 1); - _rangeEncoder.Encode(_isRep, _state, 0); - _state = Base.StateUpdateMatch(_state); - int len = Base.kMatchMinLen; - _lenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - int posSlot = (1 << Base.kNumPosSlotBits) - 1; - int lenToPosState = Base.GetLenToPosState(len); - _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); - int footerBits = 30; - int posReduced = (1 << footerBits) - 1; - _rangeEncoder.EncodeDirectBits(posReduced >> Base.kNumAlignBits, footerBits - Base.kNumAlignBits); - _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced & Base.kAlignMask); - } - - void Flush(int nowPos) throws IOException - { - ReleaseMFStream(); - WriteEndMarker(nowPos & _posStateMask); - _rangeEncoder.FlushData(); - _rangeEncoder.FlushStream(); - } - - public void CodeOneBlock(long[] inSize, long[] outSize, boolean[] finished) throws IOException - { - inSize[0] = 0; - outSize[0] = 0; - finished[0] = true; - - if (_inStream != null) - { - _matchFinder.SetStream(_inStream); - _matchFinder.Init(); - _needReleaseMFStream = true; - _inStream = null; - } - - if (_finished) - return; - _finished = true; - - - long progressPosValuePrev = nowPos64; - if (nowPos64 == 0) - { - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((int)nowPos64); - return; - } - - ReadMatchDistances(); - int posState = (int)(nowPos64) & _posStateMask; - _rangeEncoder.Encode(_isMatch, (_state << Base.kNumPosStatesBitsMax) + posState, 0); - _state = Base.StateUpdateChar(_state); - byte curByte = _matchFinder.GetIndexByte(0 - _additionalOffset); - _literalEncoder.GetSubCoder((int)(nowPos64), _previousByte).Encode(_rangeEncoder, curByte); - _previousByte = curByte; - _additionalOffset--; - nowPos64++; - } - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((int)nowPos64); - return; - } - while (true) - { - - int len = GetOptimum((int)nowPos64); - int pos = backRes; - int posState = ((int)nowPos64) & _posStateMask; - int complexState = (_state << Base.kNumPosStatesBitsMax) + posState; - if (len == 1 && pos == -1) - { - _rangeEncoder.Encode(_isMatch, complexState, 0); - byte curByte = _matchFinder.GetIndexByte((int)(0 - _additionalOffset)); - LiteralEncoder.Encoder2 subCoder = _literalEncoder.GetSubCoder((int)nowPos64, _previousByte); - if (!Base.StateIsCharState(_state)) - { - byte matchByte = _matchFinder.GetIndexByte((int)(0 - _repDistances[0] - 1 - _additionalOffset)); - subCoder.EncodeMatched(_rangeEncoder, matchByte, curByte); - } - else - subCoder.Encode(_rangeEncoder, curByte); - _previousByte = curByte; - _state = Base.StateUpdateChar(_state); - } - else - { - _rangeEncoder.Encode(_isMatch, complexState, 1); - if (pos < Base.kNumRepDistances) - { - _rangeEncoder.Encode(_isRep, _state, 1); - if (pos == 0) - { - _rangeEncoder.Encode(_isRepG0, _state, 0); - if (len == 1) - _rangeEncoder.Encode(_isRep0Long, complexState, 0); - else - _rangeEncoder.Encode(_isRep0Long, complexState, 1); - } - else - { - _rangeEncoder.Encode(_isRepG0, _state, 1); - if (pos == 1) - _rangeEncoder.Encode(_isRepG1, _state, 0); - else - { - _rangeEncoder.Encode(_isRepG1, _state, 1); - _rangeEncoder.Encode(_isRepG2, _state, pos - 2); - } - } - if (len == 1) - _state = Base.StateUpdateShortRep(_state); - else - { - _repMatchLenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - _state = Base.StateUpdateRep(_state); - } - int distance = _repDistances[pos]; - if (pos != 0) - { - for (int i = pos; i >= 1; i--) - _repDistances[i] = _repDistances[i - 1]; - _repDistances[0] = distance; - } - } - else - { - _rangeEncoder.Encode(_isRep, _state, 0); - _state = Base.StateUpdateMatch(_state); - _lenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - pos -= Base.kNumRepDistances; - int posSlot = GetPosSlot(pos); - int lenToPosState = Base.GetLenToPosState(len); - _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); - - if (posSlot >= Base.kStartPosModelIndex) - { - int footerBits = (int)((posSlot >> 1) - 1); - int baseVal = ((2 | (posSlot & 1)) << footerBits); - int posReduced = pos - baseVal; - - if (posSlot < Base.kEndPosModelIndex) - BitTreeEncoder.ReverseEncode(_posEncoders, - baseVal - posSlot - 1, _rangeEncoder, footerBits, posReduced); - else - { - _rangeEncoder.EncodeDirectBits(posReduced >> Base.kNumAlignBits, footerBits - Base.kNumAlignBits); - _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced & Base.kAlignMask); - _alignPriceCount++; - } - } - int distance = pos; - for (int i = Base.kNumRepDistances - 1; i >= 1; i--) - _repDistances[i] = _repDistances[i - 1]; - _repDistances[0] = distance; - _matchPriceCount++; - } - _previousByte = _matchFinder.GetIndexByte(len - 1 - _additionalOffset); - } - _additionalOffset -= len; - nowPos64 += len; - if (_additionalOffset == 0) - { - // if (!_fastMode) - if (_matchPriceCount >= (1 << 7)) - FillDistancesPrices(); - if (_alignPriceCount >= Base.kAlignTableSize) - FillAlignPrices(); - inSize[0] = nowPos64; - outSize[0] = _rangeEncoder.GetProcessedSizeAdd(); - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((int)nowPos64); - return; - } - - if (nowPos64 - progressPosValuePrev >= (1 << 12)) - { - _finished = false; - finished[0] = false; - return; - } - } - } - } - - void ReleaseMFStream() - { - if (_matchFinder != null && _needReleaseMFStream) - { - _matchFinder.ReleaseStream(); - _needReleaseMFStream = false; - } - } - - void SetOutStream(java.io.OutputStream outStream) - { _rangeEncoder.SetStream(outStream); } - void ReleaseOutStream() - { _rangeEncoder.ReleaseStream(); } - - void ReleaseStreams() - { - ReleaseMFStream(); - ReleaseOutStream(); - } - - void SetStreams(java.io.InputStream inStream, java.io.OutputStream outStream, - long inSize, long outSize) - { - _inStream = inStream; - _finished = false; - Create(); - SetOutStream(outStream); - Init(); - - // if (!_fastMode) - { - FillDistancesPrices(); - FillAlignPrices(); - } - - _lenEncoder.SetTableSize(_numFastBytes + 1 - Base.kMatchMinLen); - _lenEncoder.UpdateTables(1 << _posStateBits); - _repMatchLenEncoder.SetTableSize(_numFastBytes + 1 - Base.kMatchMinLen); - _repMatchLenEncoder.UpdateTables(1 << _posStateBits); - - nowPos64 = 0; - } - - long[] processedInSize = new long[1]; long[] processedOutSize = new long[1]; boolean[] finished = new boolean[1]; - public void Code(java.io.InputStream inStream, java.io.OutputStream outStream, - long inSize, long outSize, ICodeProgress progress) throws IOException - { - _needReleaseMFStream = false; - try - { - SetStreams(inStream, outStream, inSize, outSize); - while (true) - { - - - - CodeOneBlock(processedInSize, processedOutSize, finished); - if (finished[0]) - return; - if (progress != null) - { - progress.SetProgress(processedInSize[0], processedOutSize[0]); - } - } - } - finally - { - ReleaseStreams(); - } - } - - public static final int kPropSize = 5; - byte[] properties = new byte[kPropSize]; - - public void WriteCoderProperties(java.io.OutputStream outStream) throws IOException - { - properties[0] = (byte)((_posStateBits * 5 + _numLiteralPosStateBits) * 9 + _numLiteralContextBits); - for (int i = 0; i < 4; i++) - properties[1 + i] = (byte)(_dictionarySize >> (8 * i)); - outStream.write(properties, 0, kPropSize); - } - - int[] tempPrices = new int[Base.kNumFullDistances]; - int _matchPriceCount; - - void FillDistancesPrices() - { - for (int i = Base.kStartPosModelIndex; i < Base.kNumFullDistances; i++) - { - int posSlot = GetPosSlot(i); - int footerBits = (int)((posSlot >> 1) - 1); - int baseVal = ((2 | (posSlot & 1)) << footerBits); - tempPrices[i] = BitTreeEncoder.ReverseGetPrice(_posEncoders, - baseVal - posSlot - 1, footerBits, i - baseVal); - } - - for (int lenToPosState = 0; lenToPosState < Base.kNumLenToPosStates; lenToPosState++) - { - int posSlot; - BitTreeEncoder encoder = _posSlotEncoder[lenToPosState]; - - int st = (lenToPosState << Base.kNumPosSlotBits); - for (posSlot = 0; posSlot < _distTableSize; posSlot++) - _posSlotPrices[st + posSlot] = encoder.GetPrice(posSlot); - for (posSlot = Base.kEndPosModelIndex; posSlot < _distTableSize; posSlot++) - _posSlotPrices[st + posSlot] += ((((posSlot >> 1) - 1) - Base.kNumAlignBits) << SevenZip.Compression.RangeCoder.Encoder.kNumBitPriceShiftBits); - - int st2 = lenToPosState * Base.kNumFullDistances; - int i; - for (i = 0; i < Base.kStartPosModelIndex; i++) - _distancesPrices[st2 + i] = _posSlotPrices[st + i]; - for (; i < Base.kNumFullDistances; i++) - _distancesPrices[st2 + i] = _posSlotPrices[st + GetPosSlot(i)] + tempPrices[i]; - } - _matchPriceCount = 0; - } - - void FillAlignPrices() - { - for (int i = 0; i < Base.kAlignTableSize; i++) - _alignPrices[i] = _posAlignEncoder.ReverseGetPrice(i); - _alignPriceCount = 0; - } - - - public boolean SetAlgorithm(int algorithm) - { - /* - _fastMode = (algorithm == 0); - _maxMode = (algorithm >= 2); - */ - return true; - } - - public boolean SetDictionarySize(int dictionarySize) - { - int kDicLogSizeMaxCompress = 29; - if (dictionarySize < (1 << Base.kDicLogSizeMin) || dictionarySize > (1 << kDicLogSizeMaxCompress)) - return false; - _dictionarySize = dictionarySize; - int dicLogSize; - for (dicLogSize = 0; dictionarySize > (1 << dicLogSize); dicLogSize++) ; - _distTableSize = dicLogSize * 2; - return true; - } - - public boolean SetNumFastBytes(int numFastBytes) - { - if (numFastBytes < 5 || numFastBytes > Base.kMatchMaxLen) - return false; - _numFastBytes = numFastBytes; - return true; - } - - public boolean SetMatchFinder(int matchFinderIndex) - { - if (matchFinderIndex < 0 || matchFinderIndex > 2) - return false; - int matchFinderIndexPrev = _matchFinderType; - _matchFinderType = matchFinderIndex; - if (_matchFinder != null && matchFinderIndexPrev != _matchFinderType) - { - _dictionarySizePrev = -1; - _matchFinder = null; - } - return true; - } - - public boolean SetLcLpPb(int lc, int lp, int pb) - { - if ( - lp < 0 || lp > Base.kNumLitPosStatesBitsEncodingMax || - lc < 0 || lc > Base.kNumLitContextBitsMax || - pb < 0 || pb > Base.kNumPosStatesBitsEncodingMax) - return false; - _numLiteralPosStateBits = lp; - _numLiteralContextBits = lc; - _posStateBits = pb; - _posStateMask = ((1) << _posStateBits) - 1; - return true; - } - - public void SetEndMarkerMode(boolean endMarkerMode) - { - _writeEndMark = endMarkerMode; - } -} - diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java b/modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java deleted file mode 100644 index 6864c69cefcd..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java +++ /dev/null @@ -1,55 +0,0 @@ -package SevenZip.Compression.RangeCoder; - -public class BitTreeDecoder -{ - short[] Models; - int NumBitLevels; - - public BitTreeDecoder(int numBitLevels) - { - NumBitLevels = numBitLevels; - Models = new short[1 << numBitLevels]; - } - - public void Init() - { - Decoder.InitBitModels(Models); - } - - public int Decode(Decoder rangeDecoder) throws java.io.IOException - { - int m = 1; - for (int bitIndex = NumBitLevels; bitIndex != 0; bitIndex--) - m = (m << 1) + rangeDecoder.DecodeBit(Models, m); - return m - (1 << NumBitLevels); - } - - public int ReverseDecode(Decoder rangeDecoder) throws java.io.IOException - { - int m = 1; - int symbol = 0; - for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++) - { - int bit = rangeDecoder.DecodeBit(Models, m); - m <<= 1; - m += bit; - symbol |= (bit << bitIndex); - } - return symbol; - } - - public static int ReverseDecode(short[] Models, int startIndex, - Decoder rangeDecoder, int NumBitLevels) throws java.io.IOException - { - int m = 1; - int symbol = 0; - for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++) - { - int bit = rangeDecoder.DecodeBit(Models, startIndex + m); - m <<= 1; - m += bit; - symbol |= (bit << bitIndex); - } - return symbol; - } -} diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java b/modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java deleted file mode 100644 index b4c0a0721dd6..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java +++ /dev/null @@ -1,99 +0,0 @@ -package SevenZip.Compression.RangeCoder; -import java.io.IOException; - -public class BitTreeEncoder -{ - short[] Models; - int NumBitLevels; - - public BitTreeEncoder(int numBitLevels) - { - NumBitLevels = numBitLevels; - Models = new short[1 << numBitLevels]; - } - - public void Init() - { - Decoder.InitBitModels(Models); - } - - public void Encode(Encoder rangeEncoder, int symbol) throws IOException - { - int m = 1; - for (int bitIndex = NumBitLevels; bitIndex != 0; ) - { - bitIndex--; - int bit = (symbol >>> bitIndex) & 1; - rangeEncoder.Encode(Models, m, bit); - m = (m << 1) | bit; - } - } - - public void ReverseEncode(Encoder rangeEncoder, int symbol) throws IOException - { - int m = 1; - for (int i = 0; i < NumBitLevels; i++) - { - int bit = symbol & 1; - rangeEncoder.Encode(Models, m, bit); - m = (m << 1) | bit; - symbol >>= 1; - } - } - - public int GetPrice(int symbol) - { - int price = 0; - int m = 1; - for (int bitIndex = NumBitLevels; bitIndex != 0; ) - { - bitIndex--; - int bit = (symbol >>> bitIndex) & 1; - price += Encoder.GetPrice(Models[m], bit); - m = (m << 1) + bit; - } - return price; - } - - public int ReverseGetPrice(int symbol) - { - int price = 0; - int m = 1; - for (int i = NumBitLevels; i != 0; i--) - { - int bit = symbol & 1; - symbol >>>= 1; - price += Encoder.GetPrice(Models[m], bit); - m = (m << 1) | bit; - } - return price; - } - - public static int ReverseGetPrice(short[] Models, int startIndex, - int NumBitLevels, int symbol) - { - int price = 0; - int m = 1; - for (int i = NumBitLevels; i != 0; i--) - { - int bit = symbol & 1; - symbol >>>= 1; - price += Encoder.GetPrice(Models[startIndex + m], bit); - m = (m << 1) | bit; - } - return price; - } - - public static void ReverseEncode(short[] Models, int startIndex, - Encoder rangeEncoder, int NumBitLevels, int symbol) throws IOException - { - int m = 1; - for (int i = 0; i < NumBitLevels; i++) - { - int bit = symbol & 1; - rangeEncoder.Encode(Models, startIndex + m, bit); - m = (m << 1) | bit; - symbol >>= 1; - } - } -} diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/Decoder.java b/modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/Decoder.java deleted file mode 100644 index 745338348309..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/Decoder.java +++ /dev/null @@ -1,88 +0,0 @@ -package SevenZip.Compression.RangeCoder; -import java.io.IOException; - -public class Decoder -{ - static final int kTopMask = ~((1 << 24) - 1); - - static final int kNumBitModelTotalBits = 11; - static final int kBitModelTotal = (1 << kNumBitModelTotalBits); - static final int kNumMoveBits = 5; - - int Range; - int Code; - - java.io.InputStream Stream; - - public final void SetStream(java.io.InputStream stream) - { - Stream = stream; - } - - public final void ReleaseStream() - { - Stream = null; - } - - public final void Init() throws IOException - { - Code = 0; - Range = -1; - for (int i = 0; i < 5; i++) - Code = (Code << 8) | Stream.read(); - } - - public final int DecodeDirectBits(int numTotalBits) throws IOException - { - int result = 0; - for (int i = numTotalBits; i != 0; i--) - { - Range >>>= 1; - int t = ((Code - Range) >>> 31); - Code -= Range & (t - 1); - result = (result << 1) | (1 - t); - - if ((Range & kTopMask) == 0) - { - Code = (Code << 8) | Stream.read(); - Range <<= 8; - } - } - return result; - } - - public int DecodeBit(short []probs, int index) throws IOException - { - int prob = probs[index]; - int newBound = (Range >>> kNumBitModelTotalBits) * prob; - if ((Code ^ 0x80000000) < (newBound ^ 0x80000000)) - { - Range = newBound; - probs[index] = (short)(prob + ((kBitModelTotal - prob) >>> kNumMoveBits)); - if ((Range & kTopMask) == 0) - { - Code = (Code << 8) | Stream.read(); - Range <<= 8; - } - return 0; - } - else - { - Range -= newBound; - Code -= newBound; - probs[index] = (short)(prob - ((prob) >>> kNumMoveBits)); - if ((Range & kTopMask) == 0) - { - Code = (Code << 8) | Stream.read(); - Range <<= 8; - } - return 1; - } - } - - public static void InitBitModels(short []probs) - { - for (int i = 0; i < probs.length; i++) - probs[i] = (kBitModelTotal >>> 1); - } -} diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/Encoder.java b/modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/Encoder.java deleted file mode 100644 index 2273e92e50d0..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/Compression/RangeCoder/Encoder.java +++ /dev/null @@ -1,151 +0,0 @@ -package SevenZip.Compression.RangeCoder; -import java.io.IOException; - -public class Encoder -{ - static final int kTopMask = ~((1 << 24) - 1); - - static final int kNumBitModelTotalBits = 11; - static final int kBitModelTotal = (1 << kNumBitModelTotalBits); - static final int kNumMoveBits = 5; - - java.io.OutputStream Stream; - - long Low; - int Range; - int _cacheSize; - int _cache; - - long _position; - - public void SetStream(java.io.OutputStream stream) - { - Stream = stream; - } - - public void ReleaseStream() - { - Stream = null; - } - - public void Init() - { - _position = 0; - Low = 0; - Range = -1; - _cacheSize = 1; - _cache = 0; - } - - public void FlushData() throws IOException - { - for (int i = 0; i < 5; i++) - ShiftLow(); - } - - public void FlushStream() throws IOException - { - Stream.flush(); - } - - public void ShiftLow() throws IOException - { - int LowHi = (int)(Low >>> 32); - if (LowHi != 0 || Low < 0xFF000000L) - { - _position += _cacheSize; - int temp = _cache; - do - { - Stream.write(temp + LowHi); - temp = 0xFF; - } - while(--_cacheSize != 0); - _cache = (((int)Low) >>> 24); - } - _cacheSize++; - Low = (Low & 0xFFFFFF) << 8; - } - - public void EncodeDirectBits(int v, int numTotalBits) throws IOException - { - for (int i = numTotalBits - 1; i >= 0; i--) - { - Range >>>= 1; - if (((v >>> i) & 1) == 1) - Low += Range; - if ((Range & Encoder.kTopMask) == 0) - { - Range <<= 8; - ShiftLow(); - } - } - } - - - public long GetProcessedSizeAdd() - { - return _cacheSize + _position + 4; - } - - - - static final int kNumMoveReducingBits = 2; - public static final int kNumBitPriceShiftBits = 6; - - public static void InitBitModels(short []probs) - { - for (int i = 0; i < probs.length; i++) - probs[i] = (kBitModelTotal >>> 1); - } - - public void Encode(short []probs, int index, int symbol) throws IOException - { - int prob = probs[index]; - int newBound = (Range >>> kNumBitModelTotalBits) * prob; - if (symbol == 0) - { - Range = newBound; - probs[index] = (short)(prob + ((kBitModelTotal - prob) >>> kNumMoveBits)); - } - else - { - Low += (newBound & 0xFFFFFFFFL); - Range -= newBound; - probs[index] = (short)(prob - ((prob) >>> kNumMoveBits)); - } - if ((Range & kTopMask) == 0) - { - Range <<= 8; - ShiftLow(); - } - } - - private static int[] ProbPrices = new int[kBitModelTotal >>> kNumMoveReducingBits]; - - static - { - int kNumBits = (kNumBitModelTotalBits - kNumMoveReducingBits); - for (int i = kNumBits - 1; i >= 0; i--) - { - int start = 1 << (kNumBits - i - 1); - int end = 1 << (kNumBits - i); - for (int j = start; j < end; j++) - ProbPrices[j] = (i << kNumBitPriceShiftBits) + - (((end - j) << kNumBitPriceShiftBits) >>> (kNumBits - i - 1)); - } - } - - static public int GetPrice(int Prob, int symbol) - { - return ProbPrices[(((Prob - symbol) ^ ((-symbol))) & (kBitModelTotal - 1)) >>> kNumMoveReducingBits]; - } - static public int GetPrice0(int Prob) - { - return ProbPrices[Prob >>> kNumMoveReducingBits]; - } - static public int GetPrice1(int Prob) - { - return ProbPrices[(kBitModelTotal - Prob) >>> kNumMoveReducingBits]; - } -} diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/ICodeProgress.java b/modules/lib7z/LZMASDK/Java/SevenZip/ICodeProgress.java deleted file mode 100644 index 290bd2d02440..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/ICodeProgress.java +++ /dev/null @@ -1,6 +0,0 @@ -package SevenZip; - -public interface ICodeProgress -{ - public void SetProgress(long inSize, long outSize); -} diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/LzmaAlone.java b/modules/lib7z/LZMASDK/Java/SevenZip/LzmaAlone.java deleted file mode 100644 index de39a22cc2b4..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/LzmaAlone.java +++ /dev/null @@ -1,253 +0,0 @@ -package SevenZip; - -public class LzmaAlone -{ - static public class CommandLine - { - public static final int kEncode = 0; - public static final int kDecode = 1; - public static final int kBenchmak = 2; - - public int Command = -1; - public int NumBenchmarkPasses = 10; - - public int DictionarySize = 1 << 23; - public boolean DictionarySizeIsDefined = false; - - public int Lc = 3; - public int Lp = 0; - public int Pb = 2; - - public int Fb = 128; - public boolean FbIsDefined = false; - - public boolean Eos = false; - - public int Algorithm = 2; - public int MatchFinder = 1; - - public String InFile; - public String OutFile; - - boolean ParseSwitch(String s) - { - if (s.startsWith("d")) - { - DictionarySize = 1 << Integer.parseInt(s.substring(1)); - DictionarySizeIsDefined = true; - } - else if (s.startsWith("fb")) - { - Fb = Integer.parseInt(s.substring(2)); - FbIsDefined = true; - } - else if (s.startsWith("a")) - Algorithm = Integer.parseInt(s.substring(1)); - else if (s.startsWith("lc")) - Lc = Integer.parseInt(s.substring(2)); - else if (s.startsWith("lp")) - Lp = Integer.parseInt(s.substring(2)); - else if (s.startsWith("pb")) - Pb = Integer.parseInt(s.substring(2)); - else if (s.startsWith("eos")) - Eos = true; - else if (s.startsWith("mf")) - { - String mfs = s.substring(2); - if (mfs.equals("bt2")) - MatchFinder = 0; - else if (mfs.equals("bt4")) - MatchFinder = 1; - else if (mfs.equals("bt4b")) - MatchFinder = 2; - else - return false; - } - else - return false; - return true; - } - - public boolean Parse(String[] args) throws Exception - { - int pos = 0; - boolean switchMode = true; - for (int i = 0; i < args.length; i++) - { - String s = args[i]; - if (s.length() == 0) - return false; - if (switchMode) - { - if (s.compareTo("--") == 0) - { - switchMode = false; - continue; - } - if (s.charAt(0) == '-') - { - String sw = s.substring(1).toLowerCase(); - if (sw.length() == 0) - return false; - try - { - if (!ParseSwitch(sw)) - return false; - } - catch (NumberFormatException e) - { - return false; - } - continue; - } - } - if (pos == 0) - { - if (s.equalsIgnoreCase("e")) - Command = kEncode; - else if (s.equalsIgnoreCase("d")) - Command = kDecode; - else if (s.equalsIgnoreCase("b")) - Command = kBenchmak; - else - return false; - } - else if(pos == 1) - { - if (Command == kBenchmak) - { - try - { - NumBenchmarkPasses = Integer.parseInt(s); - if (NumBenchmarkPasses < 1) - return false; - } - catch (NumberFormatException e) - { - return false; - } - } - else - InFile = s; - } - else if(pos == 2) - OutFile = s; - else - return false; - pos++; - continue; - } - return true; - } - } - - - static void PrintHelp() - { - System.out.println( - "\nUsage: LZMA [...] inputFile outputFile\n" + - " e: encode file\n" + - " d: decode file\n" + - " b: Benchmark\n" + - "\n" + - // " -a{N}: set compression mode - [0, 1], default: 1 (max)\n" + - " -d{N}: set dictionary - [0,28], default: 23 (8MB)\n" + - " -fb{N}: set number of fast bytes - [5, 273], default: 128\n" + - " -lc{N}: set number of literal context bits - [0, 8], default: 3\n" + - " -lp{N}: set number of literal pos bits - [0, 4], default: 0\n" + - " -pb{N}: set number of pos bits - [0, 4], default: 2\n" + - " -mf{MF_ID}: set Match Finder: [bt2, bt4], default: bt4\n" + - " -eos: write End Of Stream marker\n" - ); - } - - public static void main(String[] args) throws Exception - { - System.out.println("\nLZMA (Java) 4.61 2008-11-23\n"); - - if (args.length < 1) - { - PrintHelp(); - return; - } - - CommandLine params = new CommandLine(); - if (!params.Parse(args)) - { - System.out.println("\nIncorrect command"); - return; - } - - if (params.Command == CommandLine.kBenchmak) - { - int dictionary = (1 << 21); - if (params.DictionarySizeIsDefined) - dictionary = params.DictionarySize; - if (params.MatchFinder > 1) - throw new Exception("Unsupported match finder"); - SevenZip.LzmaBench.LzmaBenchmark(params.NumBenchmarkPasses, dictionary); - } - else if (params.Command == CommandLine.kEncode || params.Command == CommandLine.kDecode) - { - java.io.File inFile = new java.io.File(params.InFile); - java.io.File outFile = new java.io.File(params.OutFile); - - java.io.BufferedInputStream inStream = new java.io.BufferedInputStream(new java.io.FileInputStream(inFile)); - java.io.BufferedOutputStream outStream = new java.io.BufferedOutputStream(new java.io.FileOutputStream(outFile)); - - boolean eos = false; - if (params.Eos) - eos = true; - if (params.Command == CommandLine.kEncode) - { - SevenZip.Compression.LZMA.Encoder encoder = new SevenZip.Compression.LZMA.Encoder(); - if (!encoder.SetAlgorithm(params.Algorithm)) - throw new Exception("Incorrect compression mode"); - if (!encoder.SetDictionarySize(params.DictionarySize)) - throw new Exception("Incorrect dictionary size"); - if (!encoder.SetNumFastBytes(params.Fb)) - throw new Exception("Incorrect -fb value"); - if (!encoder.SetMatchFinder(params.MatchFinder)) - throw new Exception("Incorrect -mf value"); - if (!encoder.SetLcLpPb(params.Lc, params.Lp, params.Pb)) - throw new Exception("Incorrect -lc or -lp or -pb value"); - encoder.SetEndMarkerMode(eos); - encoder.WriteCoderProperties(outStream); - long fileSize; - if (eos) - fileSize = -1; - else - fileSize = inFile.length(); - for (int i = 0; i < 8; i++) - outStream.write((int)(fileSize >>> (8 * i)) & 0xFF); - encoder.Code(inStream, outStream, -1, -1, null); - } - else - { - int propertiesSize = 5; - byte[] properties = new byte[propertiesSize]; - if (inStream.read(properties, 0, propertiesSize) != propertiesSize) - throw new Exception("input .lzma file is too short"); - SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder(); - if (!decoder.SetDecoderProperties(properties)) - throw new Exception("Incorrect stream properties"); - long outSize = 0; - for (int i = 0; i < 8; i++) - { - int v = inStream.read(); - if (v < 0) - throw new Exception("Can't read stream size"); - outSize |= ((long)v) << (8 * i); - } - if (!decoder.Code(inStream, outStream, outSize)) - throw new Exception("Error in data stream"); - } - outStream.flush(); - outStream.close(); - inStream.close(); - } - else - throw new Exception("Incorrect command"); - return; - } -} diff --git a/modules/lib7z/LZMASDK/Java/SevenZip/LzmaBench.java b/modules/lib7z/LZMASDK/Java/SevenZip/LzmaBench.java deleted file mode 100644 index cceda24da296..000000000000 --- a/modules/lib7z/LZMASDK/Java/SevenZip/LzmaBench.java +++ /dev/null @@ -1,392 +0,0 @@ -package SevenZip; - -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; -import java.io.IOException; - -public class LzmaBench -{ - static final int kAdditionalSize = (1 << 21); - static final int kCompressedAdditionalSize = (1 << 10); - - static class CRandomGenerator - { - int A1; - int A2; - public CRandomGenerator() { Init(); } - public void Init() { A1 = 362436069; A2 = 521288629; } - public int GetRnd() - { - return - ((A1 = 36969 * (A1 & 0xffff) + (A1 >>> 16)) << 16) ^ - ((A2 = 18000 * (A2 & 0xffff) + (A2 >>> 16))); - } - }; - - static class CBitRandomGenerator - { - CRandomGenerator RG = new CRandomGenerator(); - int Value; - int NumBits; - public void Init() - { - Value = 0; - NumBits = 0; - } - public int GetRnd(int numBits) - { - int result; - if (NumBits > numBits) - { - result = Value & ((1 << numBits) - 1); - Value >>>= numBits; - NumBits -= numBits; - return result; - } - numBits -= NumBits; - result = (Value << numBits); - Value = RG.GetRnd(); - result |= Value & (((int)1 << numBits) - 1); - Value >>>= numBits; - NumBits = 32 - numBits; - return result; - } - }; - - static class CBenchRandomGenerator - { - CBitRandomGenerator RG = new CBitRandomGenerator(); - int Pos; - int Rep0; - - public int BufferSize; - public byte[] Buffer = null; - - public CBenchRandomGenerator() { } - public void Set(int bufferSize) - { - Buffer = new byte[bufferSize]; - Pos = 0; - BufferSize = bufferSize; - } - int GetRndBit() { return RG.GetRnd(1); } - int GetLogRandBits(int numBits) - { - int len = RG.GetRnd(numBits); - return RG.GetRnd((int)len); - } - int GetOffset() - { - if (GetRndBit() == 0) - return GetLogRandBits(4); - return (GetLogRandBits(4) << 10) | RG.GetRnd(10); - } - int GetLen1() { return RG.GetRnd(1 + (int)RG.GetRnd(2)); } - int GetLen2() { return RG.GetRnd(2 + (int)RG.GetRnd(2)); } - public void Generate() - { - RG.Init(); - Rep0 = 1; - while (Pos < BufferSize) - { - if (GetRndBit() == 0 || Pos < 1) - Buffer[Pos++] = (byte)(RG.GetRnd(8)); - else - { - int len; - if (RG.GetRnd(3) == 0) - len = 1 + GetLen1(); - else - { - do - Rep0 = GetOffset(); - while (Rep0 >= Pos); - Rep0++; - len = 2 + GetLen2(); - } - for (int i = 0; i < len && Pos < BufferSize; i++, Pos++) - Buffer[Pos] = Buffer[Pos - Rep0]; - } - } - } - }; - - static class CrcOutStream extends java.io.OutputStream - { - public CRC CRC = new CRC(); - - public void Init() - { - CRC.Init(); - } - public int GetDigest() - { - return CRC.GetDigest(); - } - public void write(byte[] b) - { - CRC.Update(b); - } - public void write(byte[] b, int off, int len) - { - CRC.Update(b, off, len); - } - public void write(int b) - { - CRC.UpdateByte(b); - } - }; - - static class MyOutputStream extends java.io.OutputStream - { - byte[] _buffer; - int _size; - int _pos; - - public MyOutputStream(byte[] buffer) - { - _buffer = buffer; - _size = _buffer.length; - } - - public void reset() - { - _pos = 0; - } - - public void write(int b) throws IOException - { - if (_pos >= _size) - throw new IOException("Error"); - _buffer[_pos++] = (byte)b; - } - - public int size() - { - return _pos; - } - }; - - static class MyInputStream extends java.io.InputStream - { - byte[] _buffer; - int _size; - int _pos; - - public MyInputStream(byte[] buffer, int size) - { - _buffer = buffer; - _size = size; - } - - public void reset() - { - _pos = 0; - } - - public int read() - { - if (_pos >= _size) - return -1; - return _buffer[_pos++] & 0xFF; - } - }; - - static class CProgressInfo implements ICodeProgress - { - public long ApprovedStart; - public long InSize; - public long Time; - public void Init() - { InSize = 0; } - public void SetProgress(long inSize, long outSize) - { - if (inSize >= ApprovedStart && InSize == 0) - { - Time = System.currentTimeMillis(); - InSize = inSize; - } - } - } - static final int kSubBits = 8; - - static int GetLogSize(int size) - { - for (int i = kSubBits; i < 32; i++) - for (int j = 0; j < (1 << kSubBits); j++) - if (size <= ((1) << i) + (j << (i - kSubBits))) - return (i << kSubBits) + j; - return (32 << kSubBits); - } - - static long MyMultDiv64(long value, long elapsedTime) - { - long freq = 1000; // ms - long elTime = elapsedTime; - while (freq > 1000000) - { - freq >>>= 1; - elTime >>>= 1; - } - if (elTime == 0) - elTime = 1; - return value * freq / elTime; - } - - static long GetCompressRating(int dictionarySize, long elapsedTime, long size) - { - long t = GetLogSize(dictionarySize) - (18 << kSubBits); - long numCommandsForOne = 1060 + ((t * t * 10) >> (2 * kSubBits)); - long numCommands = (long)(size) * numCommandsForOne; - return MyMultDiv64(numCommands, elapsedTime); - } - - static long GetDecompressRating(long elapsedTime, long outSize, long inSize) - { - long numCommands = inSize * 220 + outSize * 20; - return MyMultDiv64(numCommands, elapsedTime); - } - - static long GetTotalRating( - int dictionarySize, - long elapsedTimeEn, long sizeEn, - long elapsedTimeDe, - long inSizeDe, long outSizeDe) - { - return (GetCompressRating(dictionarySize, elapsedTimeEn, sizeEn) + - GetDecompressRating(elapsedTimeDe, inSizeDe, outSizeDe)) / 2; - } - - static void PrintValue(long v) - { - String s = ""; - s += v; - for (int i = 0; i + s.length() < 6; i++) - System.out.print(" "); - System.out.print(s); - } - - static void PrintRating(long rating) - { - PrintValue(rating / 1000000); - System.out.print(" MIPS"); - } - - static void PrintResults( - int dictionarySize, - long elapsedTime, - long size, - boolean decompressMode, long secondSize) - { - long speed = MyMultDiv64(size, elapsedTime); - PrintValue(speed / 1024); - System.out.print(" KB/s "); - long rating; - if (decompressMode) - rating = GetDecompressRating(elapsedTime, size, secondSize); - else - rating = GetCompressRating(dictionarySize, elapsedTime, size); - PrintRating(rating); - } - - static public int LzmaBenchmark(int numIterations, int dictionarySize) throws Exception - { - if (numIterations <= 0) - return 0; - if (dictionarySize < (1 << 18)) - { - System.out.println("\nError: dictionary size for benchmark must be >= 18 (256 KB)"); - return 1; - } - System.out.print("\n Compressing Decompressing\n\n"); - - SevenZip.Compression.LZMA.Encoder encoder = new SevenZip.Compression.LZMA.Encoder(); - SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder(); - - if (!encoder.SetDictionarySize(dictionarySize)) - throw new Exception("Incorrect dictionary size"); - - int kBufferSize = dictionarySize + kAdditionalSize; - int kCompressedBufferSize = (kBufferSize / 2) + kCompressedAdditionalSize; - - ByteArrayOutputStream propStream = new ByteArrayOutputStream(); - encoder.WriteCoderProperties(propStream); - byte[] propArray = propStream.toByteArray(); - decoder.SetDecoderProperties(propArray); - - CBenchRandomGenerator rg = new CBenchRandomGenerator(); - - rg.Set(kBufferSize); - rg.Generate(); - CRC crc = new CRC(); - crc.Init(); - crc.Update(rg.Buffer, 0, rg.BufferSize); - - CProgressInfo progressInfo = new CProgressInfo(); - progressInfo.ApprovedStart = dictionarySize; - - long totalBenchSize = 0; - long totalEncodeTime = 0; - long totalDecodeTime = 0; - long totalCompressedSize = 0; - - MyInputStream inStream = new MyInputStream(rg.Buffer, rg.BufferSize); - - byte[] compressedBuffer = new byte[kCompressedBufferSize]; - MyOutputStream compressedStream = new MyOutputStream(compressedBuffer); - CrcOutStream crcOutStream = new CrcOutStream(); - MyInputStream inputCompressedStream = null; - int compressedSize = 0; - for (int i = 0; i < numIterations; i++) - { - progressInfo.Init(); - inStream.reset(); - compressedStream.reset(); - encoder.Code(inStream, compressedStream, -1, -1, progressInfo); - long encodeTime = System.currentTimeMillis() - progressInfo.Time; - - if (i == 0) - { - compressedSize = compressedStream.size(); - inputCompressedStream = new MyInputStream(compressedBuffer, compressedSize); - } - else if (compressedSize != compressedStream.size()) - throw (new Exception("Encoding error")); - - if (progressInfo.InSize == 0) - throw (new Exception("Internal ERROR 1282")); - - long decodeTime = 0; - for (int j = 0; j < 2; j++) - { - inputCompressedStream.reset(); - crcOutStream.Init(); - - long outSize = kBufferSize; - long startTime = System.currentTimeMillis(); - if (!decoder.Code(inputCompressedStream, crcOutStream, outSize)) - throw (new Exception("Decoding Error"));; - decodeTime = System.currentTimeMillis() - startTime; - if (crcOutStream.GetDigest() != crc.GetDigest()) - throw (new Exception("CRC Error")); - } - long benchSize = kBufferSize - (long)progressInfo.InSize; - PrintResults(dictionarySize, encodeTime, benchSize, false, 0); - System.out.print(" "); - PrintResults(dictionarySize, decodeTime, kBufferSize, true, compressedSize); - System.out.println(); - - totalBenchSize += benchSize; - totalEncodeTime += encodeTime; - totalDecodeTime += decodeTime; - totalCompressedSize += compressedSize; - } - System.out.println("---------------------------------------------------"); - PrintResults(dictionarySize, totalEncodeTime, totalBenchSize, false, 0); - System.out.print(" "); - PrintResults(dictionarySize, totalDecodeTime, - kBufferSize * (long)numIterations, true, totalCompressedSize); - System.out.println(" Average"); - return 0; - } -} diff --git a/modules/lib7z/LZMASDK/Methods.txt b/modules/lib7z/LZMASDK/Methods.txt deleted file mode 100644 index 9ed27428d9d3..000000000000 --- a/modules/lib7z/LZMASDK/Methods.txt +++ /dev/null @@ -1,146 +0,0 @@ -7-Zip method IDs (9.04) ------------------------ - -Each compression or crypto method in 7z has unique binary value (ID). -The length of ID in bytes is arbitrary but it can not exceed 63 bits (8 bytes). - -If you want to add some new ID, you have two ways: -1) Write request for allocating IDs to 7-zip developers. -2) Generate 8-bytes ID: - - 3F ZZ ZZ ZZ ZZ ZZ MM MM - - 3F - Prefix for random IDs (1 byte) - ZZ ZZ ZZ ZZ ZZ - Developer ID (5 bytes). Use real random bytes. - - MM MM - Method ID (2 bytes) - - You can notify 7-Zip developers about your Developer ID / Method ID. - - Note: Use new ID only if old codec can not decode data encoded with new version. - - -List of defined IDs -------------------- - -00 - Copy - -03 - Delta -04 - x86 (BCJ) -05 - PPC (Big Endian) -06 - IA64 -07 - ARM (little endian) -08 - ARM Thumb (little endian) -09 - SPARC -21 - LZMA2 - -02.. - Common - 03 Swap - - 2 Swap2 - - 4 Swap4 - -03.. - 7z - 01 - LZMA - 01 - Version - - 03 - Branch - 01 - x86 - 03 - BCJ - 1B - BCJ2 - 02 - PPC - 05 - PPC (Big Endian) - 03 - Alpha - 01 - Alpha - 04 - IA64 - 01 - IA64 - 05 - ARM - 01 - ARM - 06 - M68 - 05 - M68 (Big Endian) - 07 - ARM Thumb - 01 - ARMT - 08 - SPARC - 05 - SPARC - - 04 - PPMD - 01 - Version - - 7F - - 01 - experimental methods. - - -04.. - Misc - 00 - Reserved - 01 - Zip - 00 - Copy (not used). Use {00} instead - 01 - Shrink - 06 - Implode - 08 - Deflate - 09 - Deflate64 - 12 - BZip2 (not used). Use {04 02 02} instead - 02 - BZip - 02 - BZip2 - 03 - Rar - 01 - Rar15 - 02 - Rar20 - 03 - Rar29 - 04 - Arj - 01 - Arj (1,2,3) - 02 - Arj 4 - 05 - Z - 06 - Lzh - 07 - Reserved for 7z - 08 - Cab - 09 - NSIS - 01 - DeflateNSIS - 02 - BZip2NSIS - - -06.. - Crypto - 00 - - 01 - AES - 0x - AES-128 - 4x - AES-192 - 8x - AES-256 - Cx - AES - - x0 - ECB - x1 - CBC - x2 - CFB - x3 - OFB - - 07 - Reserved - 0F - Reserved - - F0 - Misc Ciphers (Real Ciphers without hashing algo) - - F1 - Misc Ciphers (Combine) - 01 - Zip - 01 - Main Zip crypto algo - 03 - RAR - 02 - - 03 - Rar29 AES-128 + (modified SHA-1) - 07 - 7z - 01 - AES-256 + SHA-256 - -07.. - Hash (subject to change) - 00 - - 01 - CRC - 02 - SHA-1 - 03 - SHA-256 - 04 - SHA-384 - 05 - SHA-512 - - F0 - Misc Hash - - F1 - Misc - 03 - RAR - 03 - Rar29 Password Hashing (modified SHA1) - 07 - 7z - 01 - SHA-256 Password Hashing - - - - ---- -End of document diff --git a/modules/lib7z/LZMASDK/README.mozilla b/modules/lib7z/LZMASDK/README.mozilla deleted file mode 100644 index 14e2bf4195ce..000000000000 --- a/modules/lib7z/LZMASDK/README.mozilla +++ /dev/null @@ -1,5 +0,0 @@ -This directory contains LZMA SDK, which is available at -http://www.7-zip.org/sdk.html - -The files are the content of the LZMA SDK version 9.07 beta package -downloaded from http://downloads.sourceforge.net/sevenzip/lzma907.tar.bz2 diff --git a/modules/lib7z/LZMASDK/history.txt b/modules/lib7z/LZMASDK/history.txt deleted file mode 100644 index 05443df48211..000000000000 --- a/modules/lib7z/LZMASDK/history.txt +++ /dev/null @@ -1,247 +0,0 @@ -HISTORY of the LZMA SDK ------------------------ - -9.06 2009-08-17 -------------------------- -- Some changes in ANSI-C 7z Decoder interfaces. - - -9.04 2009-05-30 -------------------------- -- LZMA2 compression method support -- xz format support - - -4.65 2009-02-03 -------------------------- -- Some minor fixes - - -4.63 2008-12-31 -------------------------- -- Some minor fixes - - -4.61 beta 2008-11-23 -------------------------- -- The bug in ANSI-C LZMA Decoder was fixed: - If encoded stream was corrupted, decoder could access memory - outside of allocated range. -- Some changes in ANSI-C 7z Decoder interfaces. -- LZMA SDK is placed in the public domain. - - -4.60 beta 2008-08-19 -------------------------- -- Some minor fixes. - - -4.59 beta 2008-08-13 -------------------------- -- The bug was fixed: - LZMA Encoder in fast compression mode could access memory outside of - allocated range in some rare cases. - - -4.58 beta 2008-05-05 -------------------------- -- ANSI-C LZMA Decoder was rewritten for speed optimizations. -- ANSI-C LZMA Encoder was included to LZMA SDK. -- C++ LZMA code now is just wrapper over ANSI-C code. - - -4.57 2007-12-12 -------------------------- -- Speed optimizations in Ñ++ LZMA Decoder. -- Small changes for more compatibility with some C/C++ compilers. - - -4.49 beta 2007-07-05 -------------------------- -- .7z ANSI-C Decoder: - - now it supports BCJ and BCJ2 filters - - now it supports files larger than 4 GB. - - now it supports "Last Write Time" field for files. -- C++ code for .7z archives compressing/decompressing from 7-zip - was included to LZMA SDK. - - -4.43 2006-06-04 -------------------------- -- Small changes for more compatibility with some C/C++ compilers. - - -4.42 2006-05-15 -------------------------- -- Small changes in .h files in ANSI-C version. - - -4.39 beta 2006-04-14 -------------------------- -- The bug in versions 4.33b:4.38b was fixed: - C++ version of LZMA encoder could not correctly compress - files larger than 2 GB with HC4 match finder (-mfhc4). - - -4.37 beta 2005-04-06 -------------------------- -- Fixes in C++ code: code could no be compiled if _NO_EXCEPTIONS was defined. - - -4.35 beta 2005-03-02 -------------------------- -- The bug was fixed in C++ version of LZMA Decoder: - If encoded stream was corrupted, decoder could access memory - outside of allocated range. - - -4.34 beta 2006-02-27 -------------------------- -- Compressing speed and memory requirements for compressing were increased -- LZMA now can use only these match finders: HC4, BT2, BT3, BT4 - - -4.32 2005-12-09 -------------------------- -- Java version of LZMA SDK was included - - -4.30 2005-11-20 -------------------------- -- Compression ratio was improved in -a2 mode -- Speed optimizations for compressing in -a2 mode -- -fb switch now supports values up to 273 -- The bug in 7z_C (7zIn.c) was fixed: - It used Alloc/Free functions from different memory pools. - So if program used two memory pools, it worked incorrectly. -- 7z_C: .7z format supporting was improved -- LZMA# SDK (C#.NET version) was included - - -4.27 (Updated) 2005-09-21 -------------------------- -- Some GUIDs/interfaces in C++ were changed. - IStream.h: - ISequentialInStream::Read now works as old ReadPart - ISequentialOutStream::Write now works as old WritePart - - -4.27 2005-08-07 -------------------------- -- The bug in LzmaDecodeSize.c was fixed: - if _LZMA_IN_CB and _LZMA_OUT_READ were defined, - decompressing worked incorrectly. - - -4.26 2005-08-05 -------------------------- -- Fixes in 7z_C code and LzmaTest.c: - previous versions could work incorrectly, - if malloc(0) returns 0 - - -4.23 2005-06-29 -------------------------- -- Small fixes in C++ code - - -4.22 2005-06-10 -------------------------- -- Small fixes - - -4.21 2005-06-08 -------------------------- -- Interfaces for ANSI-C LZMA Decoder (LzmaDecode.c) were changed -- New additional version of ANSI-C LZMA Decoder with zlib-like interface: - - LzmaStateDecode.h - - LzmaStateDecode.c - - LzmaStateTest.c -- ANSI-C LZMA Decoder now can decompress files larger than 4 GB - - -4.17 2005-04-18 -------------------------- -- New example for RAM->RAM compressing/decompressing: - LZMA + BCJ (filter for x86 code): - - LzmaRam.h - - LzmaRam.cpp - - LzmaRamDecode.h - - LzmaRamDecode.c - - -f86 switch for lzma.exe - - -4.16 2005-03-29 -------------------------- -- The bug was fixed in LzmaDecode.c (ANSI-C LZMA Decoder): - If _LZMA_OUT_READ was defined, and if encoded stream was corrupted, - decoder could access memory outside of allocated range. -- Speed optimization of ANSI-C LZMA Decoder (now it's about 20% faster). - Old version of LZMA Decoder now is in file LzmaDecodeSize.c. - LzmaDecodeSize.c can provide slightly smaller code than LzmaDecode.c -- Small speed optimization in LZMA C++ code -- filter for SPARC's code was added -- Simplified version of .7z ANSI-C Decoder was included - - -4.06 2004-09-05 -------------------------- -- The bug in v4.05 was fixed: - LZMA-Encoder didn't release output stream in some cases. - - -4.05 2004-08-25 -------------------------- -- Source code of filters for x86, IA-64, ARM, ARM-Thumb - and PowerPC code was included to SDK -- Some internal minor changes - - -4.04 2004-07-28 -------------------------- -- More compatibility with some C++ compilers - - -4.03 2004-06-18 -------------------------- -- "Benchmark" command was added. It measures compressing - and decompressing speed and shows rating values. - Also it checks hardware errors. - - -4.02 2004-06-10 -------------------------- -- C++ LZMA Encoder/Decoder code now is more portable - and it can be compiled by GCC on Linux. - - -4.01 2004-02-15 -------------------------- -- Some detection of data corruption was enabled. - LzmaDecode.c / RangeDecoderReadByte - ..... - { - rd->ExtraBytes = 1; - return 0xFF; - } - - -4.00 2004-02-13 -------------------------- -- Original version of LZMA SDK - - - -HISTORY of the LZMA -------------------- - 2001-2008: Improvements to LZMA compressing/decompressing code, - keeping compatibility with original LZMA format - 1996-2001: Development of LZMA compression format - - Some milestones: - - 2001-08-30: LZMA compression was added to 7-Zip - 1999-01-02: First version of 7-Zip was released - - -End of document diff --git a/modules/lib7z/LZMASDK/lzma.txt b/modules/lib7z/LZMASDK/lzma.txt deleted file mode 100644 index 8a4c3d4755ed..000000000000 --- a/modules/lib7z/LZMASDK/lzma.txt +++ /dev/null @@ -1,591 +0,0 @@ -LZMA SDK 9.06 -------------- - -LZMA SDK provides the documentation, samples, header files, libraries, -and tools you need to develop applications that use LZMA compression. - -LZMA is default and general compression method of 7z format -in 7-Zip compression program (www.7-zip.org). LZMA provides high -compression ratio and very fast decompression. - -LZMA is an improved version of famous LZ77 compression algorithm. -It was improved in way of maximum increasing of compression ratio, -keeping high decompression speed and low memory requirements for -decompressing. - - - -LICENSE -------- - -LZMA SDK is written and placed in the public domain by Igor Pavlov. - - -LZMA SDK Contents ------------------ - -LZMA SDK includes: - - - ANSI-C/C++/C#/Java source code for LZMA compressing and decompressing - - Compiled file->file LZMA compressing/decompressing program for Windows system - - -UNIX/Linux version ------------------- -To compile C++ version of file->file LZMA encoding, go to directory -C++/7zip/Compress/LZMA_Alone -and call make to recompile it: - make -f makefile.gcc clean all - -In some UNIX/Linux versions you must compile LZMA with static libraries. -To compile with static libraries, you can use -LIB = -lm -static - - -Files ---------------------- -lzma.txt - LZMA SDK description (this file) -7zFormat.txt - 7z Format description -7zC.txt - 7z ANSI-C Decoder description -methods.txt - Compression method IDs for .7z -lzma.exe - Compiled file->file LZMA encoder/decoder for Windows -7zr.exe - 7-Zip with 7z/lzma/xz support. -history.txt - history of the LZMA SDK - - -Source code structure ---------------------- - -C/ - C files - 7zCrc*.* - CRC code - Alloc.* - Memory allocation functions - Bra*.* - Filters for x86, IA-64, ARM, ARM-Thumb, PowerPC and SPARC code - LzFind.* - Match finder for LZ (LZMA) encoders - LzFindMt.* - Match finder for LZ (LZMA) encoders for multithreading encoding - LzHash.h - Additional file for LZ match finder - LzmaDec.* - LZMA decoding - LzmaEnc.* - LZMA encoding - LzmaLib.* - LZMA Library for DLL calling - Types.h - Basic types for another .c files - Threads.* - The code for multithreading. - - LzmaLib - LZMA Library (.DLL for Windows) - - LzmaUtil - LZMA Utility (file->file LZMA encoder/decoder). - - Archive - files related to archiving - 7z - 7z ANSI-C Decoder - -CPP/ -- CPP files - - Common - common files for C++ projects - Windows - common files for Windows related code - - 7zip - files related to 7-Zip Project - - Common - common files for 7-Zip - - Compress - files related to compression/decompression - - LZMA_Alone - file->file LZMA compression/decompression - - Archive - files related to archiving - - Common - common files for archive handling - 7z - 7z C++ Encoder/Decoder - - Bundles - Modules that are bundles of other modules - - Alone7z - 7zr.exe: Standalone version of 7z.exe that supports only 7z/LZMA/BCJ/BCJ2 - Format7zR - 7zr.dll: Reduced version of 7za.dll: extracting/compressing to 7z/LZMA/BCJ/BCJ2 - Format7zExtractR - 7zxr.dll: Reduced version of 7zxa.dll: extracting from 7z/LZMA/BCJ/BCJ2. - - UI - User Interface files - - Client7z - Test application for 7za.dll, 7zr.dll, 7zxr.dll - Common - Common UI files - Console - Code for console archiver - - - -CS/ - C# files - 7zip - Common - some common files for 7-Zip - Compress - files related to compression/decompression - LZ - files related to LZ (Lempel-Ziv) compression algorithm - LZMA - LZMA compression/decompression - LzmaAlone - file->file LZMA compression/decompression - RangeCoder - Range Coder (special code of compression/decompression) - -Java/ - Java files - SevenZip - Compression - files related to compression/decompression - LZ - files related to LZ (Lempel-Ziv) compression algorithm - LZMA - LZMA compression/decompression - RangeCoder - Range Coder (special code of compression/decompression) - - -C/C++ source code of LZMA SDK is part of 7-Zip project. -7-Zip source code can be downloaded from 7-Zip's SourceForge page: - - http://sourceforge.net/projects/sevenzip/ - - - -LZMA features -------------- - - Variable dictionary size (up to 1 GB) - - Estimated compressing speed: about 2 MB/s on 2 GHz CPU - - Estimated decompressing speed: - - 20-30 MB/s on 2 GHz Core 2 or AMD Athlon 64 - - 1-2 MB/s on 200 MHz ARM, MIPS, PowerPC or other simple RISC - - Small memory requirements for decompressing (16 KB + DictionarySize) - - Small code size for decompressing: 5-8 KB - -LZMA decoder uses only integer operations and can be -implemented in any modern 32-bit CPU (or on 16-bit CPU with some conditions). - -Some critical operations that affect the speed of LZMA decompression: - 1) 32*16 bit integer multiply - 2) Misspredicted branches (penalty mostly depends from pipeline length) - 3) 32-bit shift and arithmetic operations - -The speed of LZMA decompressing mostly depends from CPU speed. -Memory speed has no big meaning. But if your CPU has small data cache, -overall weight of memory speed will slightly increase. - - -How To Use ----------- - -Using LZMA encoder/decoder executable --------------------------------------- - -Usage: LZMA inputFile outputFile [...] - - e: encode file - - d: decode file - - b: Benchmark. There are two tests: compressing and decompressing - with LZMA method. Benchmark shows rating in MIPS (million - instructions per second). Rating value is calculated from - measured speed and it is normalized with Intel's Core 2 results. - Also Benchmark checks possible hardware errors (RAM - errors in most cases). Benchmark uses these settings: - (-a1, -d21, -fb32, -mfbt4). You can change only -d parameter. - Also you can change the number of iterations. Example for 30 iterations: - LZMA b 30 - Default number of iterations is 10. - - - - - -a{N}: set compression mode 0 = fast, 1 = normal - default: 1 (normal) - - d{N}: Sets Dictionary size - [0, 30], default: 23 (8MB) - The maximum value for dictionary size is 1 GB = 2^30 bytes. - Dictionary size is calculated as DictionarySize = 2^N bytes. - For decompressing file compressed by LZMA method with dictionary - size D = 2^N you need about D bytes of memory (RAM). - - -fb{N}: set number of fast bytes - [5, 273], default: 128 - Usually big number gives a little bit better compression ratio - and slower compression process. - - -lc{N}: set number of literal context bits - [0, 8], default: 3 - Sometimes lc=4 gives gain for big files. - - -lp{N}: set number of literal pos bits - [0, 4], default: 0 - lp switch is intended for periodical data when period is - equal 2^N. For example, for 32-bit (4 bytes) - periodical data you can use lp=2. Often it's better to set lc0, - if you change lp switch. - - -pb{N}: set number of pos bits - [0, 4], default: 2 - pb switch is intended for periodical data - when period is equal 2^N. - - -mf{MF_ID}: set Match Finder. Default: bt4. - Algorithms from hc* group doesn't provide good compression - ratio, but they often works pretty fast in combination with - fast mode (-a0). - - Memory requirements depend from dictionary size - (parameter "d" in table below). - - MF_ID Memory Description - - bt2 d * 9.5 + 4MB Binary Tree with 2 bytes hashing. - bt3 d * 11.5 + 4MB Binary Tree with 3 bytes hashing. - bt4 d * 11.5 + 4MB Binary Tree with 4 bytes hashing. - hc4 d * 7.5 + 4MB Hash Chain with 4 bytes hashing. - - -eos: write End Of Stream marker. By default LZMA doesn't write - eos marker, since LZMA decoder knows uncompressed size - stored in .lzma file header. - - -si: Read data from stdin (it will write End Of Stream marker). - -so: Write data to stdout - - -Examples: - -1) LZMA e file.bin file.lzma -d16 -lc0 - -compresses file.bin to file.lzma with 64 KB dictionary (2^16=64K) -and 0 literal context bits. -lc0 allows to reduce memory requirements -for decompression. - - -2) LZMA e file.bin file.lzma -lc0 -lp2 - -compresses file.bin to file.lzma with settings suitable -for 32-bit periodical data (for example, ARM or MIPS code). - -3) LZMA d file.lzma file.bin - -decompresses file.lzma to file.bin. - - -Compression ratio hints ------------------------ - -Recommendations ---------------- - -To increase the compression ratio for LZMA compressing it's desirable -to have aligned data (if it's possible) and also it's desirable to locate -data in such order, where code is grouped in one place and data is -grouped in other place (it's better than such mixing: code, data, code, -data, ...). - - -Filters -------- -You can increase the compression ratio for some data types, using -special filters before compressing. For example, it's possible to -increase the compression ratio on 5-10% for code for those CPU ISAs: -x86, IA-64, ARM, ARM-Thumb, PowerPC, SPARC. - -You can find C source code of such filters in C/Bra*.* files - -You can check the compression ratio gain of these filters with such -7-Zip commands (example for ARM code): -No filter: - 7z a a1.7z a.bin -m0=lzma - -With filter for little-endian ARM code: - 7z a a2.7z a.bin -m0=arm -m1=lzma - -It works in such manner: -Compressing = Filter_encoding + LZMA_encoding -Decompressing = LZMA_decoding + Filter_decoding - -Compressing and decompressing speed of such filters is very high, -so it will not increase decompressing time too much. -Moreover, it reduces decompression time for LZMA_decoding, -since compression ratio with filtering is higher. - -These filters convert CALL (calling procedure) instructions -from relative offsets to absolute addresses, so such data becomes more -compressible. - -For some ISAs (for example, for MIPS) it's impossible to get gain from such filter. - - -LZMA compressed file format ---------------------------- -Offset Size Description - 0 1 Special LZMA properties (lc,lp, pb in encoded form) - 1 4 Dictionary size (little endian) - 5 8 Uncompressed size (little endian). -1 means unknown size - 13 Compressed data - - -ANSI-C LZMA Decoder -~~~~~~~~~~~~~~~~~~~ - -Please note that interfaces for ANSI-C code were changed in LZMA SDK 4.58. -If you want to use old interfaces you can download previous version of LZMA SDK -from sourceforge.net site. - -To use ANSI-C LZMA Decoder you need the following files: -1) LzmaDec.h + LzmaDec.c + Types.h -LzmaUtil/LzmaUtil.c is example application that uses these files. - - -Memory requirements for LZMA decoding -------------------------------------- - -Stack usage of LZMA decoding function for local variables is not -larger than 200-400 bytes. - -LZMA Decoder uses dictionary buffer and internal state structure. -Internal state structure consumes - state_size = (4 + (1.5 << (lc + lp))) KB -by default (lc=3, lp=0), state_size = 16 KB. - - -How To decompress data ----------------------- - -LZMA Decoder (ANSI-C version) now supports 2 interfaces: -1) Single-call Decompressing -2) Multi-call State Decompressing (zlib-like interface) - -You must use external allocator: -Example: -void *SzAlloc(void *p, size_t size) { p = p; return malloc(size); } -void SzFree(void *p, void *address) { p = p; free(address); } -ISzAlloc alloc = { SzAlloc, SzFree }; - -You can use p = p; operator to disable compiler warnings. - - -Single-call Decompressing -------------------------- -When to use: RAM->RAM decompressing -Compile files: LzmaDec.h + LzmaDec.c + Types.h -Compile defines: no defines -Memory Requirements: - - Input buffer: compressed size - - Output buffer: uncompressed size - - LZMA Internal Structures: state_size (16 KB for default settings) - -Interface: - int LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, - const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, - ELzmaStatus *status, ISzAlloc *alloc); - In: - dest - output data - destLen - output data size - src - input data - srcLen - input data size - propData - LZMA properties (5 bytes) - propSize - size of propData buffer (5 bytes) - finishMode - It has meaning only if the decoding reaches output limit (*destLen). - LZMA_FINISH_ANY - Decode just destLen bytes. - LZMA_FINISH_END - Stream must be finished after (*destLen). - You can use LZMA_FINISH_END, when you know that - current output buffer covers last bytes of stream. - alloc - Memory allocator. - - Out: - destLen - processed output size - srcLen - processed input size - - Output: - SZ_OK - status: - LZMA_STATUS_FINISHED_WITH_MARK - LZMA_STATUS_NOT_FINISHED - LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK - SZ_ERROR_DATA - Data error - SZ_ERROR_MEM - Memory allocation error - SZ_ERROR_UNSUPPORTED - Unsupported properties - SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src). - - If LZMA decoder sees end_marker before reaching output limit, it returns OK result, - and output value of destLen will be less than output buffer size limit. - - You can use multiple checks to test data integrity after full decompression: - 1) Check Result and "status" variable. - 2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize. - 3) Check that output(srcLen) = compressedSize, if you know real compressedSize. - You must use correct finish mode in that case. */ - - -Multi-call State Decompressing (zlib-like interface) ----------------------------------------------------- - -When to use: file->file decompressing -Compile files: LzmaDec.h + LzmaDec.c + Types.h - -Memory Requirements: - - Buffer for input stream: any size (for example, 16 KB) - - Buffer for output stream: any size (for example, 16 KB) - - LZMA Internal Structures: state_size (16 KB for default settings) - - LZMA dictionary (dictionary size is encoded in LZMA properties header) - -1) read LZMA properties (5 bytes) and uncompressed size (8 bytes, little-endian) to header: - unsigned char header[LZMA_PROPS_SIZE + 8]; - ReadFile(inFile, header, sizeof(header) - -2) Allocate CLzmaDec structures (state + dictionary) using LZMA properties - - CLzmaDec state; - LzmaDec_Constr(&state); - res = LzmaDec_Allocate(&state, header, LZMA_PROPS_SIZE, &g_Alloc); - if (res != SZ_OK) - return res; - -3) Init LzmaDec structure before any new LZMA stream. And call LzmaDec_DecodeToBuf in loop - - LzmaDec_Init(&state); - for (;;) - { - ... - int res = LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, - const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode); - ... - } - - -4) Free all allocated structures - LzmaDec_Free(&state, &g_Alloc); - -For full code example, look at C/LzmaUtil/LzmaUtil.c code. - - -How To compress data --------------------- - -Compile files: LzmaEnc.h + LzmaEnc.c + Types.h + -LzFind.c + LzFind.h + LzFindMt.c + LzFindMt.h + LzHash.h - -Memory Requirements: - - (dictSize * 11.5 + 6 MB) + state_size - -Lzma Encoder can use two memory allocators: -1) alloc - for small arrays. -2) allocBig - for big arrays. - -For example, you can use Large RAM Pages (2 MB) in allocBig allocator for -better compression speed. Note that Windows has bad implementation for -Large RAM Pages. -It's OK to use same allocator for alloc and allocBig. - - -Single-call Compression with callbacks --------------------------------------- - -Check C/LzmaUtil/LzmaUtil.c as example, - -When to use: file->file decompressing - -1) you must implement callback structures for interfaces: -ISeqInStream -ISeqOutStream -ICompressProgress -ISzAlloc - -static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); } -static void SzFree(void *p, void *address) { p = p; MyFree(address); } -static ISzAlloc g_Alloc = { SzAlloc, SzFree }; - - CFileSeqInStream inStream; - CFileSeqOutStream outStream; - - inStream.funcTable.Read = MyRead; - inStream.file = inFile; - outStream.funcTable.Write = MyWrite; - outStream.file = outFile; - - -2) Create CLzmaEncHandle object; - - CLzmaEncHandle enc; - - enc = LzmaEnc_Create(&g_Alloc); - if (enc == 0) - return SZ_ERROR_MEM; - - -3) initialize CLzmaEncProps properties; - - LzmaEncProps_Init(&props); - - Then you can change some properties in that structure. - -4) Send LZMA properties to LZMA Encoder - - res = LzmaEnc_SetProps(enc, &props); - -5) Write encoded properties to header - - Byte header[LZMA_PROPS_SIZE + 8]; - size_t headerSize = LZMA_PROPS_SIZE; - UInt64 fileSize; - int i; - - res = LzmaEnc_WriteProperties(enc, header, &headerSize); - fileSize = MyGetFileLength(inFile); - for (i = 0; i < 8; i++) - header[headerSize++] = (Byte)(fileSize >> (8 * i)); - MyWriteFileAndCheck(outFile, header, headerSize) - -6) Call encoding function: - res = LzmaEnc_Encode(enc, &outStream.funcTable, &inStream.funcTable, - NULL, &g_Alloc, &g_Alloc); - -7) Destroy LZMA Encoder Object - LzmaEnc_Destroy(enc, &g_Alloc, &g_Alloc); - - -If callback function return some error code, LzmaEnc_Encode also returns that code. - - -Single-call RAM->RAM Compression --------------------------------- - -Single-call RAM->RAM Compression is similar to Compression with callbacks, -but you provide pointers to buffers instead of pointers to stream callbacks: - -HRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, - CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark, - ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); - -Return code: - SZ_OK - OK - SZ_ERROR_MEM - Memory allocation error - SZ_ERROR_PARAM - Incorrect paramater - SZ_ERROR_OUTPUT_EOF - output buffer overflow - SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) - - - -LZMA Defines ------------- - -_LZMA_SIZE_OPT - Enable some optimizations in LZMA Decoder to get smaller executable code. - -_LZMA_PROB32 - It can increase the speed on some 32-bit CPUs, but memory usage for - some structures will be doubled in that case. - -_LZMA_UINT32_IS_ULONG - Define it if int is 16-bit on your compiler and long is 32-bit. - -_LZMA_NO_SYSTEM_SIZE_T - Define it if you don't want to use size_t type. - - -C++ LZMA Encoder/Decoder -~~~~~~~~~~~~~~~~~~~~~~~~ -C++ LZMA code use COM-like interfaces. So if you want to use it, -you can study basics of COM/OLE. -C++ LZMA code is just wrapper over ANSI-C code. - - -C++ Notes -~~~~~~~~~~~~~~~~~~~~~~~~ -If you use some C++ code folders in 7-Zip (for example, C++ code for .7z handling), -you must check that you correctly work with "new" operator. -7-Zip can be compiled with MSVC 6.0 that doesn't throw "exception" from "new" operator. -So 7-Zip uses "CPP\Common\NewHandler.cpp" that redefines "new" operator: -operator new(size_t size) -{ - void *p = ::malloc(size); - if (p == 0) - throw CNewException(); - return p; -} -If you use MSCV that throws exception for "new" operator, you can compile without -"NewHandler.cpp". So standard exception will be used. Actually some code of -7-Zip catches any exception in internal code and converts it to HRESULT code. -So you don't need to catch CNewException, if you call COM interfaces of 7-Zip. - ---- - -http://www.7-zip.org -http://www.7-zip.org/sdk.html -http://www.7-zip.org/support.html diff --git a/modules/lib7z/Makefile.in b/modules/lib7z/Makefile.in deleted file mode 100644 index 89fdee1535ae..000000000000 --- a/modules/lib7z/Makefile.in +++ /dev/null @@ -1,84 +0,0 @@ -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is Fennec Installer for WinCE. -# -# The Initial Developer of the Original Code is The Mozilla Foundation. -# -# Portions created by the Initial Developer are Copyright (C) 2009 -# the Mozilla Foundation . All Rights Reserved. -# -# Contributor(s): -# Alex Pakhotin (original author) -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -DEPTH = ../.. -topsrcdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = @srcdir@ - -include $(DEPTH)/config/autoconf.mk - -MODULE = lib7z -LIBRARY_NAME = 7z -DIST_INSTALL = 1 -FORCE_STATIC_LIB = 1 -ENABLE_CXX_EXCEPTIONS = 1 - -export NO_SHUNT = 1 - -7ZIPSRCDIR = $(srcdir)/LZMASDK - -include $(srcdir)/7zobjs.mk - -CPPSRCS = \ - 7zLib.cpp \ - $(7ZIPCPPSRCS) \ - $(NULL) - -CSRCS = \ - $(7ZIPCSRCS) \ - $(NULL) - -EXPORTS = 7zLib.h - -DEFINES += -D_UNICODE -DNO_REGISTRY -DEXTRACT_ONLY -DNO_READ_FROM_CODER -D_NO_CRYPTO -D_SFX - -LOCAL_INCLUDES += -I$(7ZIPSRCDIR)/CPP - -include $(topsrcdir)/config/rules.mk - -# Having this rule here to compile 7zIn.cpp, but not 7zIn.c -7zIn.$(OBJ_SUFFIX): %.$(OBJ_SUFFIX): %.cpp $(GLOBAL_DEPS) - $(REPORT_BUILD) - @$(MAKE_DEPS_AUTO_CXX) -ifdef STRICT_CPLUSPLUS_SUFFIX - echo "#line 1 \"$*.cpp\"" | cat - $*.cpp > t_$*.cc - $(ELOG) $(CCC) -o $@ -c $(COMPILE_CXXFLAGS) t_$*.cc - rm -f t_$*.cc -else - $(ELOG) $(CCC) $(OUTOPTION)$@ -c $(COMPILE_CXXFLAGS) $(_VPATH_SRCS) -endif #STRICT_CPLUSPLUS_SUFFIX diff --git a/toolkit/toolkit-makefiles.sh b/toolkit/toolkit-makefiles.sh index b71b9a7127ef..2a8ea10cfb4e 100644 --- a/toolkit/toolkit-makefiles.sh +++ b/toolkit/toolkit-makefiles.sh @@ -715,10 +715,6 @@ MAKEFILES_libmar=" modules/libmar/tool/Makefile " -MAKEFILES_lib7z=" - modules/lib7z/Makefile -" - MAKEFILES_extensions=" extensions/cookie/Makefile extensions/permissions/Makefile @@ -770,7 +766,6 @@ add_makefiles " $MAKEFILES_accessible $MAKEFILES_zlib $MAKEFILES_libmar - $MAKEFILES_lib7z $MAKEFILES_extensions $MAKEFILES_startupcache " From 1da498063b9d77a29dbd211fba090c77c2e887c2 Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Tue, 17 May 2011 00:41:28 +0200 Subject: [PATCH 164/282] Bug 618188 - browser-chrome: browser_600545.js (and _601955.js) intermittently times out; r=zpao --- .../sessionstore/test/browser/browser_600545.js | 11 ++++++----- .../sessionstore/test/browser/head.js | 17 ++++++++++++++++- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/browser/components/sessionstore/test/browser/browser_600545.js b/browser/components/sessionstore/test/browser/browser_600545.js index ceab493463fc..2707522ba557 100644 --- a/browser/components/sessionstore/test/browser/browser_600545.js +++ b/browser/components/sessionstore/test/browser/browser_600545.js @@ -49,6 +49,12 @@ function test() { function testBug600545() { // Set the pref to false to cause non-app tabs to be stripped out on a save Services.prefs.setBoolPref("browser.sessionstore.resume_from_crash", false); + Services.prefs.setIntPref("browser.sessionstore.interval", 2000); + + registerCleanupFunction(function () { + Services.prefs.clearUserPref("browser.sessionstore.resume_from_crash"); + Services.prefs.clearUserPref("browser.sessionstore.interval"); + }); // This tests the following use case: // When multiple windows are open and browser.sessionstore.resume_from_crash @@ -92,11 +98,6 @@ function testBug600545() { } function done() { - // Reset the pref - try { - Services.prefs.clearUserPref("browser.sessionstore.resume_from_crash"); - } catch (e) {} - // Enumerate windows and close everything but our primary window. We can't // use waitForFocus() because apparently it's buggy. See bug 599253. let windowsEnum = Services.wm.getEnumerator("navigator:browser"); diff --git a/browser/components/sessionstore/test/browser/head.js b/browser/components/sessionstore/test/browser/head.js index cc90917d897b..83d9203d59d5 100644 --- a/browser/components/sessionstore/test/browser/head.js +++ b/browser/components/sessionstore/test/browser/head.js @@ -112,18 +112,33 @@ function waitForBrowserState(aState, aSetStateCallback) { // waitForSaveState waits for a state write but not necessarily for the state to // turn dirty. function waitForSaveState(aSaveStateCallback) { - let topic = "sessionstore-state-write"; let observing = false; + let topic = "sessionstore-state-write"; + + let sessionSaveTimeout = 1000 + + Services.prefs.getIntPref("browser.sessionstore.interval"); + + let timeout = setTimeout(function () { + Services.obs.removeObserver(observer, topic, false); + aSaveStateCallback(); + }, sessionSaveTimeout); + function observer(aSubject, aTopic, aData) { Services.obs.removeObserver(observer, topic, false); + timeout = clearTimeout(timeout); observing = false; executeSoon(aSaveStateCallback); } + registerCleanupFunction(function() { if (observing) { Services.obs.removeObserver(observer, topic, false); } + if (timeout) { + clearTimeout(timeout); + } }); + observing = true; Services.obs.addObserver(observer, topic, false); }; From df2d627e1c92fc446f0089932fbaedc829ebfb6a Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Wed, 18 May 2011 00:00:05 +0200 Subject: [PATCH 165/282] Bug 656778 - Enable session restore when Panorama usage is detected; r=zpao+dolske, ui-r=limi --- browser/base/content/browser-tabview.js | 68 ++++++--- browser/base/content/tabview/ui.js | 3 + browser/base/content/test/tabview/Makefile.in | 1 + .../test/tabview/browser_tabview_bug656778.js | 141 ++++++++++++++++++ .../preferences/tests/browser_bug567487.js | 11 +- 5 files changed, 201 insertions(+), 23 deletions(-) create mode 100644 browser/base/content/test/tabview/browser_tabview_bug656778.js diff --git a/browser/base/content/browser-tabview.js b/browser/base/content/browser-tabview.js index 3020c7a58385..0a492d3cdae1 100644 --- a/browser/base/content/browser-tabview.js +++ b/browser/base/content/browser-tabview.js @@ -40,10 +40,13 @@ let TabView = { _deck: null, _iframe: null, _window: null, - _firstUseExperienced: false, _browserKeyHandlerInitialized: false, _isFrameLoading: false, _initFrameCallbacks: [], + PREF_BRANCH: "browser.panorama.", + PREF_FIRST_RUN: "browser.panorama.experienced_first_run", + PREF_STARTUP_PAGE: "browser.startup.page", + PREF_RESTORE_ENABLED_ONCE: "browser.panorama.session_restore_enabled_once", VISIBILITY_IDENTIFIER: "tabview-visibility", // ---------- @@ -57,24 +60,35 @@ let TabView = { // ---------- get firstUseExperienced() { - return this._firstUseExperienced; + let pref = this.PREF_FIRST_RUN; + if (Services.prefs.prefHasUserValue(pref)) + return Services.prefs.getBoolPref(pref); + + return false; }, // ---------- set firstUseExperienced(val) { - if (val != this._firstUseExperienced) - Services.prefs.setBoolPref("browser.panorama.experienced_first_run", val); + Services.prefs.setBoolPref(this.PREF_FIRST_RUN, val); + }, + + // ---------- + get sessionRestoreEnabledOnce() { + let pref = this.PREF_RESTORE_ENABLED_ONCE; + if (Services.prefs.prefHasUserValue(pref)) + return Services.prefs.getBoolPref(pref); + + return false; + }, + + // ---------- + set sessionRestoreEnabledOnce(val) { + Services.prefs.setBoolPref(this.PREF_RESTORE_ENABLED_ONCE, val); }, // ---------- init: function TabView_init() { - if (!Services.prefs.prefHasUserValue("browser.panorama.experienced_first_run") || - !Services.prefs.getBoolPref("browser.panorama.experienced_first_run")) { - Services.prefs.addObserver( - "browser.panorama.experienced_first_run", this, false); - } else { - this._firstUseExperienced = true; - + if (this.firstUseExperienced) { if ((gBrowser.tabs.length - gBrowser.visibleTabs.length) > 0) this._setBrowserKeyHandlers(); @@ -100,26 +114,24 @@ let TabView = { "TabShow", this._tabShowEventListener, true); } } + + Services.prefs.addObserver(this.PREF_BRANCH, this, false); }, // ---------- // Observes topic changes. observe: function TabView_observe(subject, topic, data) { - if (topic == "nsPref:changed") { - Services.prefs.removeObserver( - "browser.panorama.experienced_first_run", this); - this._firstUseExperienced = true; + if (data == this.PREF_FIRST_RUN && this.firstUseExperienced) { this._addToolbarButton(); + this.enableSessionRestore(); } }, // ---------- // Uninitializes TabView. uninit: function TabView_uninit() { - if (!this._firstUseExperienced) { - Services.prefs.removeObserver( - "browser.panorama.experienced_first_run", this); - } + Services.prefs.removeObserver(this.PREF_BRANCH, this); + if (this._tabShowEventListener) { gBrowser.tabContainer.removeEventListener( "TabShow", this._tabShowEventListener, true); @@ -366,5 +378,23 @@ let TabView = { toolbar.currentSet = currentSet; toolbar.setAttribute("currentset", currentSet); document.persist(toolbar.id, "currentset"); + }, + + // ---------- + // Function: enableSessionRestore + // Enables automatic session restore when the browser is started. Does + // nothing if we already did that once in the past. + enableSessionRestore: function UI_enableSessionRestore() { + if (!this._window || !this.firstUseExperienced) + return; + + // do nothing if we already enabled session restore once + if (this.sessionRestoreEnabledOnce) + return; + + this.sessionRestoreEnabledOnce = true; + + // enable session restore + Services.prefs.setIntPref(this.PREF_STARTUP_PAGE, 3); } }; diff --git a/browser/base/content/tabview/ui.js b/browser/base/content/tabview/ui.js index 4f4c448d91f5..644135e8363f 100644 --- a/browser/base/content/tabview/ui.js +++ b/browser/base/content/tabview/ui.js @@ -552,6 +552,9 @@ let UI = { TabItems.resumePainting(); } + + if (gTabView.firstUseExperienced) + gTabView.enableSessionRestore(); }, // ---------- diff --git a/browser/base/content/test/tabview/Makefile.in b/browser/base/content/test/tabview/Makefile.in index 8fa21faf7506..8626987df1f5 100644 --- a/browser/base/content/test/tabview/Makefile.in +++ b/browser/base/content/test/tabview/Makefile.in @@ -138,6 +138,7 @@ _BROWSER_FILES = \ browser_tabview_bug649307.js \ browser_tabview_bug651311.js \ browser_tabview_bug654941.js \ + browser_tabview_bug656778.js \ browser_tabview_dragdrop.js \ browser_tabview_exit_button.js \ browser_tabview_expander.js \ diff --git a/browser/base/content/test/tabview/browser_tabview_bug656778.js b/browser/base/content/test/tabview/browser_tabview_bug656778.js new file mode 100644 index 000000000000..a17bdf3afcb7 --- /dev/null +++ b/browser/base/content/test/tabview/browser_tabview_bug656778.js @@ -0,0 +1,141 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +function test() { + waitForExplicitFinish(); + + registerCleanupFunction(function () { + Services.prefs.clearUserPref(TabView.PREF_FIRST_RUN); + Services.prefs.clearUserPref(TabView.PREF_STARTUP_PAGE); + Services.prefs.clearUserPref(TabView.PREF_RESTORE_ENABLED_ONCE); + }); + + let assertBoolPref = function (pref, value) { + is(Services.prefs.getBoolPref(pref), value, pref + " is " + value); + }; + + let assertIntPref = function (pref, value) { + is(Services.prefs.getIntPref(pref), value, pref + " is " + value); + }; + + let setPreferences = function (startupPage, firstRun, enabledOnce) { + Services.prefs.setIntPref(TabView.PREF_STARTUP_PAGE, startupPage); + Services.prefs.setBoolPref(TabView.PREF_FIRST_RUN, firstRun); + Services.prefs.setBoolPref(TabView.PREF_RESTORE_ENABLED_ONCE, enabledOnce); + }; + + let assertPreferences = function (startupPage, firstRun, enabledOnce) { + assertIntPref(TabView.PREF_STARTUP_PAGE, startupPage); + assertBoolPref(TabView.PREF_FIRST_RUN, firstRun); + assertBoolPref(TabView.PREF_RESTORE_ENABLED_ONCE, enabledOnce); + }; + + let next = function () { + if (tests.length == 0) { + waitForFocus(finish); + return; + } + + let test = tests.shift(); + info("running " + test.name + "..."); + test(); + }; + + // State: + // Panorama was already used before (firstUseExperienced = true) but session + // restore is deactivated. We did not automatically enable SR, yet. + // + // Expected result: + // When entering Panorma session restore will be enabled and a notification + // banner is shown. + let test1 = function test1() { + setPreferences(1, true, false); + + newWindowWithTabView(function (win) { + assertPreferences(3, true, true); + + win.close(); + next(); + }); + }; + + // State: + // Panorama has not been used before (firstUseExperienced = false) and session + // restore is deactivated. We did not automatically enable SR, yet. That state + // is equal to starting the browser the first time. + // + // Expected result: + // When entering Panorma nothing happens. When we detect that Panorama is + // really used (firstUseExperienced = true) we notify that session restore + // is now enabled. + let test2 = function test2() { + setPreferences(1, false, false); + + newWindowWithTabView(function (win) { + assertPreferences(1, false, false); + + win.TabView.firstUseExperienced = true; + + assertPreferences(3, true, true); + + win.close(); + next(); + }); + }; + + // State: + // Panorama was already used before (firstUseExperienced = true) and session + // restore is activated. We did not automatically enable SR, yet. + // + // Expected result: + // When entering Panorama nothing happens because session store is already + // enabled so there's no reason to notify. + let test3 = function test3() { + setPreferences(3, true, false); + + newWindowWithTabView(function (win) { + assertPreferences(3, true, true); + + win.close(); + next(); + }); + }; + + // State: + // Panorama was already used before (firstUseExperienced = true) and session + // restore has been automatically activated. + // + // Expected result: + // When entering Panorama nothing happens. + let test4 = function test4() { + setPreferences(3, true, true); + + newWindowWithTabView(function (win) { + assertPreferences(3, true, true); + + win.close(); + next(); + }); + }; + + // State: + // Panorama was already used before (firstUseExperienced = true) and session + // restore has been automatically activated. Session store was afterwards + // disabled by the user so we won't touch that again. + // + // Expected result: + // When entering Panorama nothing happens and we didn't enable session restore. + let test5 = function test5() { + setPreferences(1, true, true); + + newWindowWithTabView(function (win) { + assertPreferences(1, true, true); + + win.close(); + next(); + }); + }; + + let tests = [test1, test2, test3, test4, test5]; + next(); +} diff --git a/browser/components/preferences/tests/browser_bug567487.js b/browser/components/preferences/tests/browser_bug567487.js index 7184f372a8a4..0d04351e48cb 100644 --- a/browser/components/preferences/tests/browser_bug567487.js +++ b/browser/components/preferences/tests/browser_bug567487.js @@ -1,5 +1,6 @@ function test() { waitForExplicitFinish(); + resetPreferences(); function observer(win, topic, data) { if (topic != "main-pane-loaded") @@ -57,11 +58,13 @@ function runTest(win) { is(menu.selectedItem, option, "The correct value should be restored"); // cleanup - [pbAutoStartPref, startupPref].forEach(function (pref) { - if (pref.hasUserValue) - pref.reset(); - }); + resetPreferences(); win.close(); finish(); } + +function resetPreferences() { + Services.prefs.clearUserPref("browser.startup.page"); + Services.prefs.clearUserPref("browser.privatebrowsing.autostart"); +} From 5e6522f267323c44ff918ea05282287d5468e61d Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Tue, 17 May 2011 23:31:41 +0200 Subject: [PATCH 166/282] Bug 643392 - A 'ghost tab' appears inside a Tab Group; f=raymond, r=dao+ehsan --- .../base/content/tabview/modules/AllTabs.jsm | 5 +- browser/base/content/test/tabview/Makefile.in | 1 + .../test/tabview/browser_tabview_bug643392.js | 56 +++++++++++++++++++ browser/base/content/test/tabview/head.js | 30 ++++++++++ 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 browser/base/content/test/tabview/browser_tabview_bug643392.js diff --git a/browser/base/content/tabview/modules/AllTabs.jsm b/browser/base/content/tabview/modules/AllTabs.jsm index e1f36ccdf06b..22ed7b2e8131 100644 --- a/browser/base/content/tabview/modules/AllTabs.jsm +++ b/browser/base/content/tabview/modules/AllTabs.jsm @@ -57,7 +57,10 @@ let AllTabs = { get tabs() { // Get tabs from each browser window and flatten them into one array return Array.concat.apply(null, browserWindows.map(function(browserWindow) { - return Array.slice(browserWindow.gBrowser.tabs); + let removingTabs = browserWindow.gBrowser._removingTabs; + return Array.filter(browserWindow.gBrowser.tabs, function (tab) { + return removingTabs.indexOf(tab) == -1; + }); })); }, diff --git a/browser/base/content/test/tabview/Makefile.in b/browser/base/content/test/tabview/Makefile.in index 8626987df1f5..06b8159500c7 100644 --- a/browser/base/content/test/tabview/Makefile.in +++ b/browser/base/content/test/tabview/Makefile.in @@ -131,6 +131,7 @@ _BROWSER_FILES = \ browser_tabview_bug640765.js \ browser_tabview_bug641802.js \ browser_tabview_bug642793.js \ + browser_tabview_bug643392.js \ browser_tabview_bug644097.js \ browser_tabview_bug645653.js \ browser_tabview_bug648882.js \ diff --git a/browser/base/content/test/tabview/browser_tabview_bug643392.js b/browser/base/content/test/tabview/browser_tabview_bug643392.js new file mode 100644 index 000000000000..5980cf24fbe2 --- /dev/null +++ b/browser/base/content/test/tabview/browser_tabview_bug643392.js @@ -0,0 +1,56 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +const ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore); + +let state = { + windows: [{ + tabs: [{ + entries: [{ url: "about:home" }], + hidden: true, + extData: {"tabview-tab": '{"url":"about:home","groupID":1,"bounds":{"left":20,"top":20,"width":20,"height":20}}'} + },{ + entries: [{ url: "about:home" }], + hidden: false, + extData: {"tabview-tab": '{"url":"about:home","groupID":2,"bounds":{"left":20,"top":20,"width":20,"height":20}}'}, + }], + selected: 2, + extData: { + "tabview-groups": '{"nextID":3,"activeGroupId":2}', + "tabview-group": + '{"1":{"bounds":{"left":15,"top":5,"width":280,"height":232},"id":1},' + + '"2":{"bounds":{"left":309,"top":5,"width":267,"height":226},"id":2}}' + } + }] +}; + +function test() { + waitForExplicitFinish(); + + newWindowWithState(state, function (win) { + registerCleanupFunction(function () win.close()); + + is(win.gBrowser.tabs.length, 2, "two tabs"); + + let opts = {animate: true, byMouse: true}; + win.gBrowser.removeTab(win.gBrowser.visibleTabs[0], opts); + + let checkTabCount = function () { + if (win.gBrowser.tabs.length > 1) { + executeSoon(checkTabCount); + return; + } + + is(win.gBrowser.tabs.length, 1, "one tab"); + + showTabView(function () { + let cw = win.TabView.getContentWindow(); + is(cw.TabItems.items.length, 1, "one tabItem"); + + waitForFocus(finish); + }, win); + }; + + checkTabCount(); + }); +} diff --git a/browser/base/content/test/tabview/head.js b/browser/base/content/test/tabview/head.js index 83e0c1517de6..c772791f54c6 100644 --- a/browser/base/content/test/tabview/head.js +++ b/browser/base/content/test/tabview/head.js @@ -261,3 +261,33 @@ function unhideGroupItem(groupItem, callback) { }); groupItem._unhide(); } + +// ---------- +function whenWindowLoaded(win, callback) { + win.addEventListener("load", function onLoad() { + win.removeEventListener("load", onLoad, false); + executeSoon(callback); + }, false); +} + +// ---------- +function whenWindowStateReady(win, callback) { + win.addEventListener("SSWindowStateReady", function onReady() { + win.removeEventListener("SSWindowStateReady", onReady, false); + executeSoon(callback); + }, false); +} + +// ---------- +function newWindowWithState(state, callback) { + let opts = "chrome,all,dialog=no,height=800,width=800"; + let win = window.openDialog(getBrowserURL(), "_blank", opts); + + whenWindowLoaded(win, function () { + ss.setWindowState(win, JSON.stringify(state), true); + }); + + whenWindowStateReady(win, function () { + afterAllTabsLoaded(function () callback(win), win); + }); +} From 211b76b78dcbc7211611ad41ced3dbbd325b35f0 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 18 May 2011 23:24:52 +1200 Subject: [PATCH 167/282] Bug 629866. Part 2: Make MarkLeafLayersHidden actually hide layers that aren't in the dirty region. Don't consider hidden layers when deciding whether double-buffering is needed. r=cjones --- gfx/layers/basic/BasicLayers.cpp | 128 ++++++++++++++++++++----------- gfx/layers/basic/BasicLayers.h | 4 + 2 files changed, 88 insertions(+), 44 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index bdae2c8e90e1..68d1572ad09e 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -92,7 +92,7 @@ class ShadowableLayer; */ class BasicImplData { public: - BasicImplData() + BasicImplData() : mHidden(PR_FALSE) { MOZ_COUNT_CTOR(BasicImplData); } @@ -136,16 +136,13 @@ public: virtual void ClearCachedResources() {} /** - * This variable is used by layer manager in order to - * MarkLeafLayersCoveredByOpaque() before painting. - * We keep it here for now. Once we need to cull completely covered - * non-Basic layers, mCoveredByOpaque should be moved to Layer. + * This variable is set by MarkLeafLayersHidden() before painting. */ - void SetCoveredByOpaque(PRBool aCovered) { mCoveredByOpaque = aCovered; } - PRBool IsCoveredByOpaque() const { return mCoveredByOpaque; } + void SetHidden(PRBool aCovered) { mHidden = aCovered; } + PRBool IsHidden() const { return PR_FALSE; } protected: - PRPackedBool mCoveredByOpaque; + PRPackedBool mHidden; }; static BasicImplData* @@ -554,7 +551,7 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, mBuffer.Clear(); nsIntRegion toDraw = IntersectWithClip(mVisibleRegion, aContext); - if (!toDraw.IsEmpty()) { + if (!toDraw.IsEmpty() && !IsHidden()) { if (!aCallback) { BasicManager()->SetTransactionIncomplete(); return; @@ -620,7 +617,9 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, } } - mBuffer.DrawTo(this, aContext, opacity); + if (!IsHidden()) { + mBuffer.DrawTo(this, aContext, opacity); + } for (PRUint32 i = 0; i < readbackUpdates.Length(); ++i) { ReadbackProcessor::Update& update = readbackUpdates[i]; @@ -739,6 +738,8 @@ protected: void BasicImageLayer::Paint(gfxContext* aContext) { + if (IsHidden()) + return; nsRefPtr dontcare = GetAndPaintCurrentImage(aContext, GetEffectiveOpacity()); } @@ -850,6 +851,8 @@ public: virtual void Paint(gfxContext* aContext) { + if (IsHidden()) + return; PaintColorTo(mColor, GetEffectiveOpacity(), aContext); } @@ -994,6 +997,8 @@ BasicCanvasLayer::UpdateSurface() void BasicCanvasLayer::Paint(gfxContext* aContext) { + if (IsHidden()) + return; UpdateSurface(); FireDidTransactionCallback(); PaintWithOpacity(aContext, GetEffectiveOpacity()); @@ -1084,6 +1089,11 @@ MayHaveOverlappingOrTransparentLayers(Layer* aLayer, const nsIntRect& aBounds, nsIntRegion* aDirtyVisibleRegionInContainer) { + if (static_cast(aLayer->ImplData())->IsHidden()) { + // This layer won't be painted, so just ignore it. + return PR_FALSE; + } + if (!(aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE)) { return PR_TRUE; } @@ -1244,17 +1254,27 @@ TransformIntRect(nsIntRect& aRect, const gfxMatrix& aMatrix, aRect = (*aRoundMethod)(gr); } -// This implementation assumes that GetEffectiveTransform transforms -// all layers to the same coordinate system. It can't be used as is -// by accelerated layers because of intermediate surfaces. -// aClipRect and aRegion are in that global coordinate system. +/** + * This function assumes that GetEffectiveTransform transforms + * all layers to the same coordinate system (the "root coordinate system"). + * It can't be used as is by accelerated layers because of intermediate surfaces. + * This must set the hidden flag to true or false on *all* layers in the subtree. + * @param aClipRect the cliprect, in the root coordinate system. We assume + * that any layer drawing is clipped to this rect. It is therefore not + * allowed to add to the opaque region outside that rect. + * @param aDirtyRect the dirty rect that will be painted, in the root + * coordinate system. Layers outside this rect should be hidden. + * @param aOpaqueRegion the opaque region covering aLayer, in the + * root coordinate system. + */ static void -MarkLeafLayersCoveredByOpaque(Layer* aLayer, const nsIntRect& aClipRect, - nsIntRegion& aRegion) +MarkLeafLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, + const nsIntRect& aDirtyRect, + nsIntRegion& aOpaqueRegion) { Layer* child = aLayer->GetLastChild(); BasicImplData* data = ToData(aLayer); - data->SetCoveredByOpaque(PR_FALSE); + data->SetHidden(PR_FALSE); nsIntRect newClipRect(aClipRect); @@ -1274,6 +1294,8 @@ MarkLeafLayersCoveredByOpaque(Layer* aLayer, const nsIntRect& aClipRect, if (aLayer->GetParent()) { gfxMatrix tr; if (aLayer->GetParent()->GetEffectiveTransform().Is2D(&tr)) { + // Clip rect is applied after aLayer's transform, i.e., in the coordinate + // system of aLayer's parent. TransformIntRect(cr, tr, ToInsideIntRect); } else { cr.SetRect(0, 0, 0, 0); @@ -1292,7 +1314,8 @@ MarkLeafLayersCoveredByOpaque(Layer* aLayer, const nsIntRect& aClipRect, nsIntRegion region = aLayer->GetEffectiveVisibleRegion(); nsIntRect r = region.GetBounds(); TransformIntRect(r, transform, ToOutsideIntRect); - data->SetCoveredByOpaque(aRegion.Contains(r)); + r.IntersectRect(r, aDirtyRect); + data->SetHidden(aOpaqueRegion.Contains(r)); // Allow aLayer to cover underlying layers only if aLayer's // content is opaque @@ -1307,12 +1330,12 @@ MarkLeafLayersCoveredByOpaque(Layer* aLayer, const nsIntRect& aClipRect, r.IntersectRect(r, newClipRect); if (!r.IsEmpty()) { - aRegion.Or(aRegion, r); + aOpaqueRegion.Or(aOpaqueRegion, r); } } } else { for (; child; child = child->GetPrevSibling()) { - MarkLeafLayersCoveredByOpaque(child, newClipRect, aRegion); + MarkLeafLayersHidden(child, newClipRect, aDirtyRect, aOpaqueRegion); } } } @@ -1341,29 +1364,48 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, mTransactionIncomplete = false; if (mTarget && mRoot) { - nsRefPtr finalTarget = mTarget; - gfxPoint cachedSurfaceOffset; - - nsIntRegion rootRegion; - PRBool useDoubleBuffering = mUsingDefaultTarget && - mDoubleBuffering != BUFFER_NONE && - MayHaveOverlappingOrTransparentLayers(mRoot, - ToOutsideIntRect(mTarget->GetClipExtents()), - &rootRegion); - if (useDoubleBuffering) { - nsRefPtr targetSurface = mTarget->CurrentSurface(); - mTarget = PushGroupWithCachedSurface(mTarget, targetSurface->GetContentType(), - &cachedSurfaceOffset); + nsIntRect clipRect; + if (HasShadowManager()) { + // If this has a shadow manager, the clip extents of mTarget are meaningless. + // So instead just use the root layer's visible region bounds. + const nsIntRect& bounds = mRoot->GetVisibleRegion().GetBounds(); + gfxRect deviceRect = + mTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height)); + clipRect = ToOutsideIntRect(deviceRect); + } else { + gfxContextMatrixAutoSaveRestore save(mTarget); + mTarget->SetMatrix(gfxMatrix()); + clipRect = ToOutsideIntRect(mTarget->GetClipExtents()); } + // Need to do this before we call MarkLeafLayersHidden, + // which depends on correct effective transforms mSnapEffectiveTransforms = !(mTarget->GetFlags() & gfxContext::FLAG_DISABLE_SNAPPING); mRoot->ComputeEffectiveTransforms(gfx3DMatrix::From2D(mTarget->CurrentMatrix())); - nsIntRegion region; - MarkLeafLayersCoveredByOpaque(mRoot, - mRoot->GetEffectiveVisibleRegion().GetBounds(), - region); + // Need to do this before we call MayHaveOverlappingOrTransparentLayers, + // which uses information about which layers are going to be drawn. + if (IsRetained()) { + nsIntRegion region; + MarkLeafLayersHidden(mRoot, clipRect, clipRect, region); + } + + nsRefPtr finalTarget = mTarget; + gfxPoint cachedSurfaceOffset; + nsIntRegion rootRegion; + PRBool useDoubleBuffering = mUsingDefaultTarget && + mDoubleBuffering != BUFFER_NONE && + MayHaveOverlappingOrTransparentLayers(mRoot, clipRect, &rootRegion); + + if (useDoubleBuffering) { + nsRefPtr targetSurface = mTarget->CurrentSurface(); + mTarget = PushGroupWithCachedSurface(mTarget, targetSurface->GetContentType(), + &cachedSurfaceOffset); + // Recompute effective transforms since the gfxContext matrix has changed + mRoot->ComputeEffectiveTransforms(gfx3DMatrix::From2D(mTarget->CurrentMatrix())); + } + PaintLayer(mRoot, aCallback, aCallbackData, nsnull); // If we're doing manual double-buffering, we need to avoid drawing @@ -1495,14 +1537,12 @@ BasicLayerManager::PaintLayer(Layer* aLayer, BasicImplData* data = ToData(aLayer); #ifdef MOZ_LAYERS_HAVE_LOG MOZ_LAYERS_LOG(("%s (0x%p) is covered: %i\n", __FUNCTION__, - (void*)aLayer, data->IsCoveredByOpaque())); + (void*)aLayer, data->IsHidden())); #endif - if (!data->IsCoveredByOpaque()) { - if (aLayer->AsThebesLayer()) { - data->PaintThebes(mTarget, aCallback, aCallbackData, aReadback); - } else { - data->Paint(mTarget); - } + if (aLayer->AsThebesLayer()) { + data->PaintThebes(mTarget, aCallback, aCallbackData, aReadback); + } else { + data->Paint(mTarget); } } else { ReadbackProcessor readback; diff --git a/gfx/layers/basic/BasicLayers.h b/gfx/layers/basic/BasicLayers.h index 392479d38e80..41c684ffa88a 100644 --- a/gfx/layers/basic/BasicLayers.h +++ b/gfx/layers/basic/BasicLayers.h @@ -181,6 +181,8 @@ public: void SetTransactionIncomplete() { mTransactionIncomplete = true; } virtual PRBool IsCompositingCheap() { return PR_FALSE; } + virtual bool HasShadowManagerInternal() const { return false; } + bool HasShadowManager() const { return HasShadowManagerInternal(); } protected: #ifdef DEBUG @@ -260,6 +262,7 @@ public: ShadowableLayer* Hold(Layer* aLayer); + bool HasShadowManager() const { return ShadowLayerForwarder::HasShadowManager(); } PLayersChild* GetShadowManager() const { return mShadowManager; } void SetShadowManager(PLayersChild* aShadowManager) @@ -268,6 +271,7 @@ public: } virtual PRBool IsCompositingCheap(); + virtual bool HasShadowManagerInternal() const { return HasShadowManager(); } private: /** From f243295b25642890c2b3bf88e981232114482a80 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 18 May 2011 23:24:52 +1200 Subject: [PATCH 168/282] Bug 647560. Clean up MarkLeafLayersHidden and make it set the hidden state on container layers. r=tnikkel Instead of doing tricks with the cliprect to prevent layer content from adding to aOpaqueRegion, pass an explicit flag to control that. Mark a ContainerLayer hidden if all its children are hidden. This will need to be changed if/when we add layer properties that result in a ContainerLayer drawing content even if it has no children. --- gfx/layers/basic/BasicLayers.cpp | 51 ++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index 68d1572ad09e..2b72928bfe1e 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -1267,22 +1267,22 @@ TransformIntRect(nsIntRect& aRect, const gfxMatrix& aMatrix, * @param aOpaqueRegion the opaque region covering aLayer, in the * root coordinate system. */ +enum { + ALLOW_OPAQUE = 0x01, +}; static void -MarkLeafLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, - const nsIntRect& aDirtyRect, - nsIntRegion& aOpaqueRegion) +MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, + const nsIntRect& aDirtyRect, + nsIntRegion& aOpaqueRegion, + PRUint32 aFlags) { - Layer* child = aLayer->GetLastChild(); - BasicImplData* data = ToData(aLayer); - data->SetHidden(PR_FALSE); - nsIntRect newClipRect(aClipRect); + PRUint32 newFlags = aFlags; // Allow aLayer or aLayer's descendants to cover underlying layers - // only if it's opaque. GetEffectiveOpacity() could be used instead, - // but it does extra passes from descendant to ancestor. + // only if it's opaque. if (aLayer->GetOpacity() != 1.0f) { - newClipRect.SetRect(0, 0, 0, 0); + newFlags &= ~ALLOW_OPAQUE; } { @@ -1305,9 +1305,12 @@ MarkLeafLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, } } + BasicImplData* data = ToData(aLayer); + Layer* child = aLayer->GetLastChild(); if (!child) { gfxMatrix transform; if (!aLayer->GetEffectiveTransform().Is2D(&transform)) { + data->SetHidden(PR_FALSE); return; } @@ -1319,24 +1322,26 @@ MarkLeafLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, // Allow aLayer to cover underlying layers only if aLayer's // content is opaque - if (!(aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE)) { - return; - } + if ((aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE) && + (newFlags & ALLOW_OPAQUE)) { + nsIntRegionRectIterator it(region); + while (const nsIntRect* sr = it.Next()) { + r = *sr; + TransformIntRect(r, transform, ToInsideIntRect); - nsIntRegionRectIterator it(region); - while (const nsIntRect* sr = it.Next()) { - r = *sr; - TransformIntRect(r, transform, ToInsideIntRect); - - r.IntersectRect(r, newClipRect); - if (!r.IsEmpty()) { + r.IntersectRect(r, newClipRect); aOpaqueRegion.Or(aOpaqueRegion, r); } } } else { + PRBool allHidden = PR_TRUE; for (; child; child = child->GetPrevSibling()) { - MarkLeafLayersHidden(child, newClipRect, aDirtyRect, aOpaqueRegion); + MarkLayersHidden(child, newClipRect, aDirtyRect, aOpaqueRegion, newFlags); + if (!ToData(child)->IsHidden()) { + allHidden = PR_FALSE; + } } + data->SetHidden(allHidden); } } @@ -1378,7 +1383,7 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, clipRect = ToOutsideIntRect(mTarget->GetClipExtents()); } - // Need to do this before we call MarkLeafLayersHidden, + // Need to do this before we call MarkLayersHidden, // which depends on correct effective transforms mSnapEffectiveTransforms = !(mTarget->GetFlags() & gfxContext::FLAG_DISABLE_SNAPPING); @@ -1388,7 +1393,7 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, // which uses information about which layers are going to be drawn. if (IsRetained()) { nsIntRegion region; - MarkLeafLayersHidden(mRoot, clipRect, clipRect, region); + MarkLayersHidden(mRoot, clipRect, clipRect, region, ALLOW_OPAQUE); } nsRefPtr finalTarget = mTarget; From c768bea25ed42efff8d024e5f5878e051f873759 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 18 May 2011 23:24:52 +1200 Subject: [PATCH 169/282] Bug 647560. Add support for compositing BasicLayers with OPERATOR_SOURCE. r=tnikkel We'll need this for the improved backbuffer code in the next patch. When a layer tree's leaf layers don't overlap and cover the window, the next patch will avoid double-buffering by blitting those layers directly to the window. If the window has transparent parts (e.g. with Aero Glass), we need to draw the layers for those transparent parts using OPERATOR_SOURCE so that the alpha values in the window are reset. --- gfx/layers/basic/BasicLayers.cpp | 93 ++++++++++++++++++++++++-------- 1 file changed, 71 insertions(+), 22 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index 2b72928bfe1e..f675a6a7e47c 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -92,7 +92,7 @@ class ShadowableLayer; */ class BasicImplData { public: - BasicImplData() : mHidden(PR_FALSE) + BasicImplData() : mHidden(PR_FALSE), mOperator(gfxContext::OPERATOR_OVER) { MOZ_COUNT_CTOR(BasicImplData); } @@ -136,13 +136,45 @@ public: virtual void ClearCachedResources() {} /** - * This variable is set by MarkLeafLayersHidden() before painting. + * This variable is set by MarkLayersHidden() before painting. It indicates + * that the layer should not be composited during this transaction. */ void SetHidden(PRBool aCovered) { mHidden = aCovered; } PRBool IsHidden() const { return PR_FALSE; } + /** + * This variable is set by MarkLayersHidden() before painting. This is + * the operator to be used when compositing the layer in this transaction. It must + * be OVER or SOURCE. + */ + void SetOperator(gfxContext::GraphicsOperator aOperator) + { + NS_ASSERTION(aOperator == gfxContext::OPERATOR_OVER || + aOperator == gfxContext::OPERATOR_SOURCE, + "Bad composition operator"); + mOperator = aOperator; + } + gfxContext::GraphicsOperator GetOperator() const { return mOperator; } protected: PRPackedBool mHidden; + gfxContext::GraphicsOperator mOperator; +}; + +class AutoSetOperator { +public: + AutoSetOperator(gfxContext* aContext, gfxContext::GraphicsOperator aOperator) { + if (aOperator != gfxContext::OPERATOR_OVER) { + aContext->SetOperator(aOperator); + mContext = aContext; + } + } + ~AutoSetOperator() { + if (mContext) { + mContext->SetOperator(gfxContext::OPERATOR_OVER); + } + } +private: + nsRefPtr mContext; }; static BasicImplData* @@ -156,7 +188,7 @@ static void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aConta template static void ContainerRemoveChild(Layer* aChild, Container* aContainer); -class BasicContainerLayer : public ContainerLayer, BasicImplData { +class BasicContainerLayer : public ContainerLayer, public BasicImplData { template friend void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aContainer); template @@ -358,7 +390,7 @@ private: BasicThebesLayer* mLayer; }; -class BasicThebesLayer : public ThebesLayer, BasicImplData { +class BasicThebesLayer : public ThebesLayer, public BasicImplData { public: typedef BasicThebesLayerBuffer Buffer; @@ -550,7 +582,7 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, mValidRegion.SetEmpty(); mBuffer.Clear(); - nsIntRegion toDraw = IntersectWithClip(mVisibleRegion, aContext); + nsIntRegion toDraw = IntersectWithClip(GetEffectiveVisibleRegion(), aContext); if (!toDraw.IsEmpty() && !IsHidden()) { if (!aCallback) { BasicManager()->SetTransactionIncomplete(); @@ -560,16 +592,20 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, aContext->Save(); PRBool needsClipToVisibleRegion = PR_FALSE; - if (opacity != 1.0) { - needsClipToVisibleRegion = PushGroupForLayer(aContext, this, toDraw); + PRBool needsGroup = + opacity != 1.0 || GetOperator() != gfxContext::OPERATOR_OVER; + if (needsGroup) { + needsClipToVisibleRegion = PushGroupForLayer(aContext, this, toDraw) || + GetOperator() != gfxContext::OPERATOR_OVER; } SetAntialiasingFlags(this, aContext); aCallback(this, aContext, toDraw, nsIntRegion(), aCallbackData); - if (opacity != 1.0) { + if (needsGroup) { aContext->PopGroupToSource(); if (needsClipToVisibleRegion) { gfxUtils::ClipToRegion(aContext, toDraw); } + AutoSetOperator setOperator(aContext, GetOperator()); aContext->Paint(opacity); } @@ -598,7 +634,8 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, // (this could be the whole visible area if our buffer switched // from RGB to RGBA, because we might need to repaint with // subpixel AA) - state.mRegionToInvalidate.And(state.mRegionToInvalidate, mVisibleRegion); + state.mRegionToInvalidate.And(state.mRegionToInvalidate, + GetEffectiveVisibleRegion()); nsIntRegion extendedDrawRegion = state.mRegionToDraw; extendedDrawRegion.ExtendForScaling(paintXRes, paintYRes); mXResolution = paintXRes; @@ -618,6 +655,7 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, } if (!IsHidden()) { + AutoSetOperator setOperator(aContext, GetOperator()); mBuffer.DrawTo(this, aContext, opacity); } @@ -655,13 +693,13 @@ BasicThebesLayerBuffer::DrawTo(ThebesLayer* aLayer, // no need to clip. But we'll still clip if clipping is cheap --- // that might let us copy a smaller region of the buffer. if (!aLayer->GetValidRegion().Contains(BufferRect()) || - IsClippingCheap(aTarget, aLayer->GetVisibleRegion())) { + IsClippingCheap(aTarget, aLayer->GetEffectiveVisibleRegion())) { // We don't want to draw invalid stuff, so we need to clip. Might as // well clip to the smallest area possible --- the visible region. // Bug 599189 if there is a non-integer-translation transform in aTarget, - // we might sample pixels outside GetVisibleRegion(), which is wrong + // we might sample pixels outside GetEffectiveVisibleRegion(), which is wrong // and may cause gray lines. - gfxUtils::ClipToRegionSnapped(aTarget, aLayer->GetVisibleRegion()); + gfxUtils::ClipToRegionSnapped(aTarget, aLayer->GetEffectiveVisibleRegion()); } DrawBufferWithRotation(aTarget, aOpacity, aLayer->GetXResolution(), aLayer->GetYResolution()); @@ -694,7 +732,7 @@ BasicThebesLayerBuffer::SetBackingBufferAndUpdateFrom( srcBuffer.DrawBufferWithRotation(destCtx, 1.0, aXResolution, aYResolution); } -class BasicImageLayer : public ImageLayer, BasicImplData { +class BasicImageLayer : public ImageLayer, public BasicImplData { public: BasicImageLayer(BasicLayerManager* aLayerManager) : ImageLayer(aLayerManager, static_cast(this)), @@ -769,6 +807,7 @@ BasicImageLayer::GetAndPaintCurrentImage(gfxContext* aContext, // tiling, we don't want to draw into that area, so just draw within // the image bounds. const nsIntRect* tileSrcRect = GetTileSourceRect(); + AutoSetOperator setOperator(aContext, GetOperator()); PaintContext(pat, tileSrcRect ? GetVisibleRegion() : nsIntRegion(nsIntRect(0, 0, mSize.width, mSize.height)), tileSrcRect, @@ -830,7 +869,7 @@ BasicImageLayer::PaintContext(gfxPattern* aPattern, aPattern->SetExtend(extend); } -class BasicColorLayer : public ColorLayer, BasicImplData { +class BasicColorLayer : public ColorLayer, public BasicImplData { public: BasicColorLayer(BasicLayerManager* aLayerManager) : ColorLayer(aLayerManager, static_cast(this)) @@ -853,6 +892,7 @@ public: { if (IsHidden()) return; + AutoSetOperator setOperator(aContext, GetOperator()); PaintColorTo(mColor, GetEffectiveOpacity(), aContext); } @@ -875,7 +915,7 @@ BasicColorLayer::PaintColorTo(gfxRGBA aColor, float aOpacity, } class BasicCanvasLayer : public CanvasLayer, - BasicImplData + public BasicImplData { public: BasicCanvasLayer(BasicLayerManager* aLayerManager) : @@ -1023,6 +1063,7 @@ BasicCanvasLayer::PaintWithOpacity(gfxContext* aContext, aContext->Scale(1.0, -1.0); } + AutoSetOperator setOperator(aContext, GetOperator()); aContext->NewPath(); // No need to snap here; our transform is already set up to snap our rect aContext->Rectangle(gfxRect(0, 0, mBounds.width, mBounds.height)); @@ -1035,7 +1076,7 @@ BasicCanvasLayer::PaintWithOpacity(gfxContext* aContext, } class BasicReadbackLayer : public ReadbackLayer, - BasicImplData + public BasicImplData { public: BasicReadbackLayer(BasicLayerManager* aLayerManager) : @@ -1487,8 +1528,13 @@ BasicLayerManager::PaintLayer(Layer* aLayer, { const nsIntRect* clipRect = aLayer->GetEffectiveClipRect(); const gfx3DMatrix& effectiveTransform = aLayer->GetEffectiveTransform(); + BasicContainerLayer* container = static_cast(aLayer); PRBool needsGroup = aLayer->GetFirstChild() && - static_cast(aLayer)->UseIntermediateSurface(); + container->UseIntermediateSurface(); + NS_ASSERTION(needsGroup || !aLayer->GetFirstChild() || + container->GetOperator() == gfxContext::OPERATOR_OVER, + "non-OVER operator should have forced UseIntermediateSurface"); + // If needsSaveRestore is false, we should still save and restore // the CTM PRBool needsSaveRestore = needsGroup || clipRect; @@ -1568,6 +1614,7 @@ BasicLayerManager::PaintLayer(Layer* aLayer, if (needsClipToVisibleRegion) { gfxUtils::ClipToRegion(mTarget, aLayer->GetEffectiveVisibleRegion()); } + AutoSetOperator setOperator(mTarget, container->GetOperator()); mTarget->Paint(aLayer->GetEffectiveOpacity()); } @@ -2339,7 +2386,7 @@ protected: }; -class BasicShadowThebesLayer : public ShadowThebesLayer, BasicImplData { +class BasicShadowThebesLayer : public ShadowThebesLayer, public BasicImplData { public: BasicShadowThebesLayer(BasicShadowLayerManager* aLayerManager) : ShadowThebesLayer(aLayerManager, static_cast(this)) @@ -2513,7 +2560,7 @@ BasicShadowThebesLayer::PaintThebes(gfxContext* aContext, mFrontBuffer.DrawTo(this, target, GetEffectiveOpacity()); } -class BasicShadowContainerLayer : public ShadowContainerLayer, BasicImplData { +class BasicShadowContainerLayer : public ShadowContainerLayer, public BasicImplData { template friend void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aContainer); template @@ -2559,7 +2606,7 @@ public: } }; -class BasicShadowImageLayer : public ShadowImageLayer, BasicImplData { +class BasicShadowImageLayer : public ShadowImageLayer, public BasicImplData { public: BasicShadowImageLayer(BasicShadowLayerManager* aLayerManager) : ShadowImageLayer(aLayerManager, static_cast(this)) @@ -2632,6 +2679,7 @@ BasicShadowImageLayer::Paint(gfxContext* aContext) // tiling, we don't want to draw into that area, so just draw within // the image bounds. const nsIntRect* tileSrcRect = GetTileSourceRect(); + AutoSetOperator setOperator(aContext, GetOperator()); BasicImageLayer::PaintContext(pat, tileSrcRect ? GetEffectiveVisibleRegion() : nsIntRegion(nsIntRect(0, 0, mSize.width, mSize.height)), tileSrcRect, @@ -2639,7 +2687,7 @@ BasicShadowImageLayer::Paint(gfxContext* aContext) } class BasicShadowColorLayer : public ShadowColorLayer, - BasicImplData + public BasicImplData { public: BasicShadowColorLayer(BasicShadowLayerManager* aLayerManager) : @@ -2654,12 +2702,13 @@ public: virtual void Paint(gfxContext* aContext) { + AutoSetOperator setOperator(aContext, GetOperator()); BasicColorLayer::PaintColorTo(mColor, GetEffectiveOpacity(), aContext); } }; class BasicShadowCanvasLayer : public ShadowCanvasLayer, - BasicImplData + public BasicImplData { public: BasicShadowCanvasLayer(BasicShadowLayerManager* aLayerManager) : From 66c2bd79f55afe3b43964ab9dd59009c35e4393e Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 18 May 2011 23:24:52 +1200 Subject: [PATCH 170/282] Bug 647560. Create ApplyDoubleBuffering to recursively walk layer tree and implement double-buffering by setting mUseIntermediateSurface on ContainerLayers where necessary. r=tnikkel The idea here is to do double-buffering just by setting mUseIntermediateSurface on ContainerLayers when needed. When we need to double-buffer compositing of a layer tree, ApplyDoubleBuffering examines the root container layer. If the child layers don't overlap and together cover the window, we don't need to double-buffer in that container, instead we can double-buffer each child layer separately --- so we recursively call ApplyDoubleBuffering on the child layers. When a container has children that overlap or that don't cover the container's visible rect (the latter case probably can't happen in practice), we force it to have an intermediate surface. This change fixes this bug because in normal browser windows the Web content layer double-buffers --- gfx/layers/basic/BasicLayers.cpp | 174 ++++++++++++++++++++++++------- 1 file changed, 136 insertions(+), 38 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index f675a6a7e47c..8f6a6fcc1bff 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -242,6 +242,23 @@ public: mUseIntermediateSurface = GetEffectiveOpacity() != 1.0 && HasMultipleChildren(); } + /** + * Returns true when: + * a) no (non-hidden) childrens' visible areas overlap in + * (aInRect intersected with this layer's visible region). + * b) the (non-hidden) childrens' visible areas cover + * (aInRect intersected with this layer's visible region). + * c) this layer and all (non-hidden) children have transforms that are translations + * by integers. + * aInRect is in the root coordinate system. + * Child layers with opacity do not contribute to the covered area in check b). + * This method can be conservative; it's OK to return false under any + * circumstances. + */ + PRBool ChildrenPartitionVisibleRegion(const nsIntRect& aInRect); + + void ForceIntermediateSurface() { mUseIntermediateSurface = PR_TRUE; } + protected: BasicLayerManager* BasicManager() { @@ -258,6 +275,43 @@ BasicContainerLayer::~BasicContainerLayer() MOZ_COUNT_DTOR(BasicContainerLayer); } +PRBool +BasicContainerLayer::ChildrenPartitionVisibleRegion(const nsIntRect& aInRect) +{ + gfxMatrix transform; + if (!GetEffectiveTransform().Is2D(&transform) || + transform.HasNonIntegerTranslation()) + return PR_FALSE; + + nsIntPoint offset(PRInt32(transform.x0), PRInt32(transform.y0)); + nsIntRect rect = aInRect.Intersect(GetEffectiveVisibleRegion().GetBounds() + offset); + nsIntRegion covered; + + for (Layer* l = mFirstChild; l; l = l->GetNextSibling()) { + if (ToData(l)->IsHidden()) + continue; + + gfxMatrix childTransform; + if (!l->GetEffectiveTransform().Is2D(&childTransform) || + childTransform.HasNonIntegerTranslation() || + l->GetEffectiveOpacity() != 1.0) + return PR_FALSE; + nsIntRegion childRegion = l->GetEffectiveVisibleRegion(); + childRegion.MoveBy(PRInt32(childTransform.x0), PRInt32(childTransform.y0)); + childRegion.And(childRegion, rect); + if (l->GetClipRect()) { + childRegion.And(childRegion, *l->GetClipRect() + offset); + } + nsIntRegion intersection; + intersection.And(covered, childRegion); + if (!intersection.IsEmpty()) + return PR_FALSE; + covered.Or(covered, childRegion); + } + + return covered.Contains(rect); +} + template static void ContainerInsertAfter(Layer* aChild, Layer* aAfter, Container* aContainer) @@ -1300,6 +1354,7 @@ TransformIntRect(nsIntRect& aRect, const gfxMatrix& aMatrix, * all layers to the same coordinate system (the "root coordinate system"). * It can't be used as is by accelerated layers because of intermediate surfaces. * This must set the hidden flag to true or false on *all* layers in the subtree. + * It also sets the operator for all layers to "OVER". * @param aClipRect the cliprect, in the root coordinate system. We assume * that any layer drawing is clipped to this rect. It is therefore not * allowed to add to the opaque region outside that rect. @@ -1347,8 +1402,9 @@ MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, } BasicImplData* data = ToData(aLayer); - Layer* child = aLayer->GetLastChild(); - if (!child) { + data->SetOperator(gfxContext::OPERATOR_OVER); + + if (!aLayer->AsContainerLayer()) { gfxMatrix transform; if (!aLayer->GetEffectiveTransform().Is2D(&transform)) { data->SetHidden(PR_FALSE); @@ -1375,6 +1431,7 @@ MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, } } } else { + Layer* child = aLayer->GetLastChild(); PRBool allHidden = PR_TRUE; for (; child; child = child->GetPrevSibling()) { MarkLayersHidden(child, newClipRect, aDirtyRect, aOpaqueRegion, newFlags); @@ -1386,6 +1443,64 @@ MarkLayersHidden(Layer* aLayer, const nsIntRect& aClipRect, } } +/** + * This function assumes that GetEffectiveTransform transforms + * all layers to the same coordinate system (the "root coordinate system"). + * MarkLayersHidden must be called before calling this. + * @param aVisibleRect the rectangle of aLayer that is visible (i.e. not + * clipped and in the dirty rect), in the root coordinate system. + */ +static void +ApplyDoubleBuffering(Layer* aLayer, const nsIntRect& aVisibleRect) +{ + BasicImplData* data = ToData(aLayer); + if (data->IsHidden()) + return; + + nsIntRect newVisibleRect(aVisibleRect); + + { + const nsIntRect* clipRect = aLayer->GetEffectiveClipRect(); + if (clipRect) { + nsIntRect cr = *clipRect; + // clipRect is in the container's coordinate system. Get it into the + // global coordinate system. + if (aLayer->GetParent()) { + gfxMatrix tr; + if (aLayer->GetParent()->GetEffectiveTransform().Is2D(&tr)) { + NS_ASSERTION(!tr.HasNonIntegerTranslation(), + "Parent can only have an integer translation"); + cr += nsIntPoint(PRInt32(tr.x0), PRInt32(tr.y0)); + } else { + NS_ERROR("Parent can only have an integer translation"); + } + } + newVisibleRect.IntersectRect(newVisibleRect, cr); + } + } + + BasicContainerLayer* container = + static_cast(aLayer->AsContainerLayer()); + // Layers that act as their own backbuffers should be drawn to the destination + // using OPERATOR_SOURCE to ensure that alpha values in a transparent window + // are cleared. This can also be faster than OPERATOR_OVER. + if (!container) { + data->SetOperator(gfxContext::OPERATOR_SOURCE); + } else { + if (container->UseIntermediateSurface() || + !container->ChildrenPartitionVisibleRegion(newVisibleRect)) { + // We need to double-buffer this container. + data->SetOperator(gfxContext::OPERATOR_SOURCE); + container->ForceIntermediateSurface(); + } else { + for (Layer* child = aLayer->GetFirstChild(); child; + child = child->GetNextSibling()) { + ApplyDoubleBuffering(child, newVisibleRect); + } + } + } +} + void BasicLayerManager::EndTransaction(DrawThebesLayerCallback aCallback, void* aCallbackData) @@ -1424,7 +1539,7 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, clipRect = ToOutsideIntRect(mTarget->GetClipExtents()); } - // Need to do this before we call MarkLayersHidden, + // Need to do this before we call ApplyDoubleBuffering, // which depends on correct effective transforms mSnapEffectiveTransforms = !(mTarget->GetFlags() & gfxContext::FLAG_DISABLE_SNAPPING); @@ -1435,44 +1550,16 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, if (IsRetained()) { nsIntRegion region; MarkLayersHidden(mRoot, clipRect, clipRect, region, ALLOW_OPAQUE); - } - - nsRefPtr finalTarget = mTarget; - gfxPoint cachedSurfaceOffset; - nsIntRegion rootRegion; - PRBool useDoubleBuffering = mUsingDefaultTarget && - mDoubleBuffering != BUFFER_NONE && - MayHaveOverlappingOrTransparentLayers(mRoot, clipRect, &rootRegion); - - if (useDoubleBuffering) { - nsRefPtr targetSurface = mTarget->CurrentSurface(); - mTarget = PushGroupWithCachedSurface(mTarget, targetSurface->GetContentType(), - &cachedSurfaceOffset); - // Recompute effective transforms since the gfxContext matrix has changed - mRoot->ComputeEffectiveTransforms(gfx3DMatrix::From2D(mTarget->CurrentMatrix())); + if (mUsingDefaultTarget && mDoubleBuffering != BUFFER_NONE) { + ApplyDoubleBuffering(mRoot, deviceSpaceClipExtents); + } } PaintLayer(mRoot, aCallback, aCallbackData, nsnull); - // If we're doing manual double-buffering, we need to avoid drawing - // the results of an incomplete transaction to the destination surface. - // If the transaction is incomplete and we're not double-buffering then - // either the system is double-buffering our window (in which case the - // followup EndTransaction will be drawn over the top of our incomplete - // transaction before the system updates the window), or we have no - // overlapping or transparent layers in the update region, in which case - // our partial transaction drawing will look fine. - if (useDoubleBuffering && !mTransactionIncomplete) { - finalTarget->SetOperator(gfxContext::OPERATOR_SOURCE); - PopGroupWithCachedSurface(finalTarget, cachedSurfaceOffset); - } - if (!mTransactionIncomplete) { // Clear out target if we have a complete transaction. mTarget = nsnull; - } else { - // If we don't have a complete transaction set back to the old mTarget. - mTarget = finalTarget; } } @@ -1611,11 +1698,22 @@ BasicLayerManager::PaintLayer(Layer* aLayer, if (needsGroup) { mTarget->PopGroupToSource(); - if (needsClipToVisibleRegion) { - gfxUtils::ClipToRegion(mTarget, aLayer->GetEffectiveVisibleRegion()); + // If we're doing our own double-buffering, we need to avoid drawing + // the results of an incomplete transaction to the destination surface --- + // that could cause flicker. Double-buffering is implemented using a + // temporary surface for one or more container layers, so we need to stop + // those temporary surfaces from being composited to mTarget. + // ApplyDoubleBuffering guarantees that this container layer can't + // intersect any other leaf layers, so if the transaction is not yet marked + // incomplete, the contents of this container layer are the final contents + // for the window. + if (!mTransactionIncomplete) { + if (needsClipToVisibleRegion) { + gfxUtils::ClipToRegion(mTarget, aLayer->GetEffectiveVisibleRegion()); + } + AutoSetOperator setOperator(mTarget, container->GetOperator()); + mTarget->Paint(aLayer->GetEffectiveOpacity()); } - AutoSetOperator setOperator(mTarget, container->GetOperator()); - mTarget->Paint(aLayer->GetEffectiveOpacity()); } if (pushedTargetOpaqueRect) { From b3d6e4d0269fd0c7cfac0af3d63967984b35e889 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 18 May 2011 23:24:52 +1200 Subject: [PATCH 171/282] Bug 647560. Cache temporary backbuffer surfaces. r=karlt --- gfx/layers/basic/BasicLayers.cpp | 127 ++++++++++++++++------------ gfx/layers/basic/BasicLayers.h | 17 ++-- gfx/thebes/gfxCachedTempSurface.cpp | 11 +-- gfx/thebes/gfxCachedTempSurface.h | 4 +- 4 files changed, 92 insertions(+), 67 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index 8f6a6fcc1bff..21a7fc4655ac 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -583,15 +583,16 @@ SetAntialiasingFlags(Layer* aLayer, gfxContext* aTarget) aTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height)))); } -static PRBool -PushGroupForLayer(gfxContext* aContext, Layer* aLayer, const nsIntRegion& aRegion) +already_AddRefed +BasicLayerManager::PushGroupForLayer(gfxContext* aContext, Layer* aLayer, + const nsIntRegion& aRegion, + PRBool* aNeedsClipToVisibleRegion) { // If we need to call PushGroup, we should clip to the smallest possible // area first to minimize the size of the temporary surface. PRBool didCompleteClip = ClipToContain(aContext, aRegion.GetBounds()); - gfxASurface::gfxContentType contentType = gfxASurface::CONTENT_COLOR_ALPHA; - PRBool needsClipToVisibleRegion = PR_FALSE; + nsRefPtr result; if (aLayer->CanUseOpaqueSurface() && ((didCompleteClip && aRegion.GetNumRects() == 1) || !aContext->CurrentMatrix().HasNonIntegerTranslation())) { @@ -599,11 +600,14 @@ PushGroupForLayer(gfxContext* aContext, Layer* aLayer, const nsIntRegion& aRegio // group. We need to make sure that only pixels inside the layer's visible // region are copied back to the destination. Remember if we've already // clipped precisely to the visible region. - needsClipToVisibleRegion = !didCompleteClip || aRegion.GetNumRects() > 1; - contentType = gfxASurface::CONTENT_COLOR; + *aNeedsClipToVisibleRegion = !didCompleteClip || aRegion.GetNumRects() > 1; + result = PushGroupWithCachedSurface(aContext, gfxASurface::CONTENT_COLOR); + } else { + *aNeedsClipToVisibleRegion = PR_FALSE; + result = aContext; + aContext->PushGroupAndCopyBackground(gfxASurface::CONTENT_COLOR_ALPHA); } - aContext->PushGroupAndCopyBackground(contentType); - return needsClipToVisibleRegion; + return result.forget(); } void @@ -648,14 +652,21 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext, PRBool needsClipToVisibleRegion = PR_FALSE; PRBool needsGroup = opacity != 1.0 || GetOperator() != gfxContext::OPERATOR_OVER; + nsRefPtr groupContext; if (needsGroup) { - needsClipToVisibleRegion = PushGroupForLayer(aContext, this, toDraw) || - GetOperator() != gfxContext::OPERATOR_OVER; + groupContext = + BasicManager()->PushGroupForLayer(aContext, this, toDraw, + &needsClipToVisibleRegion); + if (GetOperator() != gfxContext::OPERATOR_OVER) { + needsClipToVisibleRegion = PR_TRUE; + } + } else { + groupContext = aContext; } - SetAntialiasingFlags(this, aContext); - aCallback(this, aContext, toDraw, nsIntRegion(), aCallbackData); + SetAntialiasingFlags(this, groupContext); + aCallback(this, groupContext, toDraw, nsIntRegion(), aCallbackData); if (needsGroup) { - aContext->PopGroupToSource(); + BasicManager()->PopGroupToSourceWithCachedSurface(aContext, groupContext); if (needsClipToVisibleRegion) { gfxUtils::ClipToRegion(aContext, toDraw); } @@ -1244,6 +1255,7 @@ BasicLayerManager::BasicLayerManager(nsIWidget* aWidget) : , mYResolution(1.0) , mWidget(aWidget) , mDoubleBuffering(BUFFER_NONE), mUsingDefaultTarget(PR_FALSE) + , mCachedSurfaceInUse(PR_FALSE) , mTransactionIncomplete(false) { MOZ_COUNT_CTOR(BasicLayerManager); @@ -1290,9 +1302,15 @@ BasicLayerManager::BeginTransaction() already_AddRefed BasicLayerManager::PushGroupWithCachedSurface(gfxContext *aTarget, - gfxASurface::gfxContentType aContent, - gfxPoint *aSavedOffset) + gfxASurface::gfxContentType aContent) { + if (mCachedSurfaceInUse) { + aTarget->PushGroup(aContent); + nsRefPtr result = aTarget; + return result.forget(); + } + mCachedSurfaceInUse = PR_TRUE; + gfxContextMatrixAutoSaveRestore saveMatrix(aTarget); aTarget->IdentityMatrix(); @@ -1300,29 +1318,26 @@ BasicLayerManager::PushGroupWithCachedSurface(gfxContext *aTarget, gfxRect clip = aTarget->GetClipExtents(); clip.RoundOut(); - nsRefPtr ctx = - mCachedSurface.Get(aContent, - gfxIntSize(clip.Width(), clip.Height()), - currentSurf); + nsRefPtr ctx = mCachedSurface.Get(aContent, clip, currentSurf); /* Align our buffer for the original surface */ - ctx->Translate(-clip.TopLeft()); - *aSavedOffset = clip.TopLeft(); - ctx->Multiply(saveMatrix.Matrix()); + ctx->SetMatrix(saveMatrix.Matrix()); return ctx.forget(); } void -BasicLayerManager::PopGroupWithCachedSurface(gfxContext *aTarget, - const gfxPoint& aSavedOffset) +BasicLayerManager::PopGroupToSourceWithCachedSurface(gfxContext *aTarget, gfxContext *aPushed) { - if (!mTarget) + if (!aTarget) return; - - gfxContextMatrixAutoSaveRestore saveMatrix(aTarget); - aTarget->IdentityMatrix(); - - aTarget->SetSource(mTarget->OriginalSurface(), aSavedOffset); - aTarget->Paint(); + nsRefPtr current = aPushed->CurrentSurface(); + if (mCachedSurface.IsSurface(current)) { + gfxContextMatrixAutoSaveRestore saveMatrix(aTarget); + aTarget->IdentityMatrix(); + aTarget->SetSource(current); + mCachedSurfaceInUse = PR_FALSE; + } else { + aTarget->PopGroupToSource(); + } } void @@ -1551,11 +1566,11 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, nsIntRegion region; MarkLayersHidden(mRoot, clipRect, clipRect, region, ALLOW_OPAQUE); if (mUsingDefaultTarget && mDoubleBuffering != BUFFER_NONE) { - ApplyDoubleBuffering(mRoot, deviceSpaceClipExtents); + ApplyDoubleBuffering(mRoot, clipRect); } } - PaintLayer(mRoot, aCallback, aCallbackData, nsnull); + PaintLayer(mTarget, mRoot, aCallback, aCallbackData, nsnull); if (!mTransactionIncomplete) { // Clear out target if we have a complete transaction. @@ -1608,7 +1623,8 @@ BasicLayerManager::SetRoot(Layer* aLayer) } void -BasicLayerManager::PaintLayer(Layer* aLayer, +BasicLayerManager::PaintLayer(gfxContext* aTarget, + Layer* aLayer, DrawThebesLayerCallback aCallback, void* aCallbackData, ReadbackProcessor* aReadback) @@ -1628,15 +1644,15 @@ BasicLayerManager::PaintLayer(Layer* aLayer, gfxMatrix savedMatrix; if (needsSaveRestore) { - mTarget->Save(); + aTarget->Save(); if (clipRect) { - mTarget->NewPath(); - mTarget->Rectangle(gfxRect(clipRect->x, clipRect->y, clipRect->width, clipRect->height), PR_TRUE); - mTarget->Clip(); + aTarget->NewPath(); + aTarget->Rectangle(gfxRect(clipRect->x, clipRect->y, clipRect->width, clipRect->height), PR_TRUE); + aTarget->Clip(); } } else { - savedMatrix = mTarget->CurrentMatrix(); + savedMatrix = aTarget->CurrentMatrix(); } gfxMatrix transform; @@ -1645,11 +1661,11 @@ BasicLayerManager::PaintLayer(Layer* aLayer, NS_ASSERTION(effectiveTransform.Is2D(), "Only 2D transforms supported currently"); effectiveTransform.Is2D(&transform); - mTarget->SetMatrix(transform); + aTarget->SetMatrix(transform); PRBool pushedTargetOpaqueRect = PR_FALSE; const nsIntRegion& visibleRegion = aLayer->GetEffectiveVisibleRegion(); - nsRefPtr currentSurface = mTarget->CurrentSurface(); + nsRefPtr currentSurface = aTarget->CurrentSurface(); const gfxRect& targetOpaqueRect = currentSurface->GetOpaqueRect(); // Try to annotate currentSurface with a region of pixels that have been @@ -1659,14 +1675,17 @@ BasicLayerManager::PaintLayer(Layer* aLayer, !transform.HasNonAxisAlignedTransform()) { const nsIntRect& bounds = visibleRegion.GetBounds(); currentSurface->SetOpaqueRect( - mTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height))); + aTarget->UserToDevice(gfxRect(bounds.x, bounds.y, bounds.width, bounds.height))); pushedTargetOpaqueRect = PR_TRUE; } PRBool needsClipToVisibleRegion = PR_FALSE; + nsRefPtr groupTarget; if (needsGroup) { - needsClipToVisibleRegion = - PushGroupForLayer(mTarget, aLayer, aLayer->GetEffectiveVisibleRegion()); + groupTarget = PushGroupForLayer(aTarget, aLayer, aLayer->GetEffectiveVisibleRegion(), + &needsClipToVisibleRegion); + } else { + groupTarget = aTarget; } /* Only paint ourself, or our children - This optimization relies on this! */ @@ -1678,9 +1697,9 @@ BasicLayerManager::PaintLayer(Layer* aLayer, (void*)aLayer, data->IsHidden())); #endif if (aLayer->AsThebesLayer()) { - data->PaintThebes(mTarget, aCallback, aCallbackData, aReadback); + data->PaintThebes(groupTarget, aCallback, aCallbackData, aReadback); } else { - data->Paint(mTarget); + data->Paint(groupTarget); } } else { ReadbackProcessor readback; @@ -1690,29 +1709,29 @@ BasicLayerManager::PaintLayer(Layer* aLayer, } for (; child; child = child->GetNextSibling()) { - PaintLayer(child, aCallback, aCallbackData, &readback); + PaintLayer(groupTarget, child, aCallback, aCallbackData, &readback); if (mTransactionIncomplete) break; } } if (needsGroup) { - mTarget->PopGroupToSource(); + PopGroupToSourceWithCachedSurface(aTarget, groupTarget); // If we're doing our own double-buffering, we need to avoid drawing // the results of an incomplete transaction to the destination surface --- // that could cause flicker. Double-buffering is implemented using a // temporary surface for one or more container layers, so we need to stop - // those temporary surfaces from being composited to mTarget. + // those temporary surfaces from being composited to aTarget. // ApplyDoubleBuffering guarantees that this container layer can't // intersect any other leaf layers, so if the transaction is not yet marked // incomplete, the contents of this container layer are the final contents // for the window. if (!mTransactionIncomplete) { if (needsClipToVisibleRegion) { - gfxUtils::ClipToRegion(mTarget, aLayer->GetEffectiveVisibleRegion()); + gfxUtils::ClipToRegion(aTarget, aLayer->GetEffectiveVisibleRegion()); } - AutoSetOperator setOperator(mTarget, container->GetOperator()); - mTarget->Paint(aLayer->GetEffectiveOpacity()); + AutoSetOperator setOperator(aTarget, container->GetOperator()); + aTarget->Paint(aLayer->GetEffectiveOpacity()); } } @@ -1721,9 +1740,9 @@ BasicLayerManager::PaintLayer(Layer* aLayer, } if (needsSaveRestore) { - mTarget->Restore(); + aTarget->Restore(); } else { - mTarget->SetMatrix(savedMatrix); + aTarget->SetMatrix(savedMatrix); } } diff --git a/gfx/layers/basic/BasicLayers.h b/gfx/layers/basic/BasicLayers.h index 41c684ffa88a..2704b9c30bf6 100644 --- a/gfx/layers/basic/BasicLayers.h +++ b/gfx/layers/basic/BasicLayers.h @@ -180,6 +180,13 @@ public: void SetTransactionIncomplete() { mTransactionIncomplete = true; } + already_AddRefed PushGroupForLayer(gfxContext* aContext, Layer* aLayer, + const nsIntRegion& aRegion, + PRBool* aNeedsClipToVisibleRegion); + already_AddRefed PushGroupWithCachedSurface(gfxContext *aTarget, + gfxASurface::gfxContentType aContent); + void PopGroupToSourceWithCachedSurface(gfxContext *aTarget, gfxContext *aPushed); + virtual PRBool IsCompositingCheap() { return PR_FALSE; } virtual bool HasShadowManagerInternal() const { return false; } bool HasShadowManager() const { return HasShadowManagerInternal(); } @@ -193,7 +200,8 @@ protected: #endif // Paints aLayer to mTarget. - void PaintLayer(Layer* aLayer, + void PaintLayer(gfxContext* aTarget, + Layer* aLayer, DrawThebesLayerCallback aCallback, void* aCallbackData, ReadbackProcessor* aReadback); @@ -201,12 +209,6 @@ protected: // Clear the contents of a layer void ClearLayer(Layer* aLayer); - already_AddRefed PushGroupWithCachedSurface(gfxContext *aTarget, - gfxASurface::gfxContentType aContent, - gfxPoint *aSavedOffset); - void PopGroupWithCachedSurface(gfxContext *aTarget, - const gfxPoint& aSavedOffset); - bool EndTransactionInternal(DrawThebesLayerCallback aCallback, void* aCallbackData); @@ -227,6 +229,7 @@ protected: BufferMode mDoubleBuffering; PRPackedBool mUsingDefaultTarget; + PRPackedBool mCachedSurfaceInUse; bool mTransactionIncomplete; }; diff --git a/gfx/thebes/gfxCachedTempSurface.cpp b/gfx/thebes/gfxCachedTempSurface.cpp index a165175e4780..b480174315ae 100644 --- a/gfx/thebes/gfxCachedTempSurface.cpp +++ b/gfx/thebes/gfxCachedTempSurface.cpp @@ -98,12 +98,12 @@ gfxCachedTempSurface::~gfxCachedTempSurface() already_AddRefed gfxCachedTempSurface::Get(gfxASurface::gfxContentType aContentType, - const gfxIntSize& aSize, + const gfxRect& aRect, gfxASurface* aSimilarTo) { if (mSurface) { /* Verify the current buffer is valid for this purpose */ - if (mSize.width < aSize.width || mSize.height < aSize.height + if (mSize.width < aRect.width || mSize.height < aRect.height || mSurface->GetContentType() != aContentType) { mSurface = nsnull; } else { @@ -114,8 +114,8 @@ gfxCachedTempSurface::Get(gfxASurface::gfxContentType aContentType, PRBool cleared = PR_FALSE; if (!mSurface) { - mSize = aSize; - mSurface = aSimilarTo->CreateSimilarSurface(aContentType, aSize); + mSize = gfxIntSize(PRInt32(NS_ceil(aRect.width)), PRInt32(NS_ceil(aRect.height))); + mSurface = aSimilarTo->CreateSimilarSurface(aContentType, mSize); if (!mSurface) return nsnull; @@ -124,9 +124,10 @@ gfxCachedTempSurface::Get(gfxASurface::gfxContentType aContentType, mType = aSimilarTo->GetType(); #endif } + mSurface->SetDeviceOffset(-aRect.TopLeft()); nsRefPtr ctx = new gfxContext(mSurface); - ctx->Rectangle(gfxRect(0, 0, aSize.width, aSize.height)); + ctx->Rectangle(aRect); ctx->Clip(); if (!cleared && aContentType != gfxASurface::CONTENT_COLOR) { ctx->SetOperator(gfxContext::OPERATOR_CLEAR); diff --git a/gfx/thebes/gfxCachedTempSurface.h b/gfx/thebes/gfxCachedTempSurface.h index b3dbce37f397..3904cbe32ffb 100644 --- a/gfx/thebes/gfxCachedTempSurface.h +++ b/gfx/thebes/gfxCachedTempSurface.h @@ -71,13 +71,15 @@ public: * different format. */ already_AddRefed Get(gfxASurface::gfxContentType aContentType, - const gfxIntSize& aSize, + const gfxRect& aRect, gfxASurface* aSimilarTo); void Expire() { mSurface = nsnull; } nsExpirationState* GetExpirationState() { return &mExpirationState; } ~gfxCachedTempSurface(); + PRBool IsSurface(gfxASurface* aSurface) { return mSurface == aSurface; } + private: nsRefPtr mSurface; gfxIntSize mSize; From 47ede5b8e28e55c8deb9aab626aefa767d112943 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 18 May 2011 23:24:52 +1200 Subject: [PATCH 172/282] Bug 647560. Remove unused MayHaveOverlappingOrTransparentLayers. r=tnikkel --- gfx/layers/basic/BasicLayers.cpp | 65 -------------------------------- 1 file changed, 65 deletions(-) diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index 21a7fc4655ac..65c723a1aa10 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -1184,69 +1184,6 @@ ToInsideIntRect(const gfxRect& aRect) return nsIntRect(r.X(), r.Y(), r.Width(), r.Height()); } -/** - * Returns false if there is at most one leaf layer overlapping aBounds - * and that layer is opaque. - * aDirtyVisibleRegionInContainer is filled in only if we return false. - * It contains the union of the visible regions of leaf layers under aLayer. - */ -static PRBool -MayHaveOverlappingOrTransparentLayers(Layer* aLayer, - const nsIntRect& aBounds, - nsIntRegion* aDirtyVisibleRegionInContainer) -{ - if (static_cast(aLayer->ImplData())->IsHidden()) { - // This layer won't be painted, so just ignore it. - return PR_FALSE; - } - - if (!(aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE)) { - return PR_TRUE; - } - - gfxMatrix matrix; - if (!aLayer->GetTransform().Is2D(&matrix) || - matrix.HasNonIntegerTranslation()) { - return PR_TRUE; - } - - nsIntPoint translation = nsIntPoint(PRInt32(matrix.x0), PRInt32(matrix.y0)); - nsIntRect bounds = aBounds - translation; - - nsIntRect clippedDirtyRect = bounds; - const nsIntRect* clipRect = aLayer->GetClipRect(); - if (clipRect) { - clippedDirtyRect.IntersectRect(clippedDirtyRect, *clipRect - translation); - } - aDirtyVisibleRegionInContainer->And(aLayer->GetVisibleRegion(), clippedDirtyRect); - aDirtyVisibleRegionInContainer->MoveBy(translation); - - /* Ignore layers outside the clip rect */ - if (aDirtyVisibleRegionInContainer->IsEmpty()) { - return PR_FALSE; - } - - nsIntRegion region; - - for (Layer* child = aLayer->GetFirstChild(); child; - child = child->GetNextSibling()) { - nsIntRegion childRegion; - if (MayHaveOverlappingOrTransparentLayers(child, bounds, &childRegion)) { - return PR_TRUE; - } - - nsIntRegion tmp; - tmp.And(region, childRegion); - if (!tmp.IsEmpty()) { - return PR_TRUE; - } - - region.Or(region, childRegion); - } - - return PR_FALSE; -} - BasicLayerManager::BasicLayerManager(nsIWidget* aWidget) : #ifdef DEBUG mPhase(PHASE_NONE), @@ -1560,8 +1497,6 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, !(mTarget->GetFlags() & gfxContext::FLAG_DISABLE_SNAPPING); mRoot->ComputeEffectiveTransforms(gfx3DMatrix::From2D(mTarget->CurrentMatrix())); - // Need to do this before we call MayHaveOverlappingOrTransparentLayers, - // which uses information about which layers are going to be drawn. if (IsRetained()) { nsIntRegion region; MarkLayersHidden(mRoot, clipRect, clipRect, region, ALLOW_OPAQUE); From e852e1fb264c6c7c23a2105319196888c5f1f610 Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Wed, 18 May 2011 21:22:59 -0400 Subject: [PATCH 173/282] Bug 541496 part 1: add an overload of nsCSSParser::Parse() that takes a string rather than a stream; rename both methods ParseSheet(); change calling convention of the older overload for the templated implementation's sake. r=bzbarsky --- .../src/nsHTMLFragmentContentSink.cpp | 6 +- layout/style/Loader.cpp | 8 +-- layout/style/nsCSSParser.cpp | 64 +++++++++++-------- layout/style/nsCSSParser.h | 18 ++++-- 4 files changed, 58 insertions(+), 38 deletions(-) diff --git a/content/html/document/src/nsHTMLFragmentContentSink.cpp b/content/html/document/src/nsHTMLFragmentContentSink.cpp index b47eb478c18d..859ff9d0189b 100644 --- a/content/html/document/src/nsHTMLFragmentContentSink.cpp +++ b/content/html/document/src/nsHTMLFragmentContentSink.cpp @@ -1167,9 +1167,9 @@ nsHTMLParanoidFragmentSink::CloseContainer(const nsHTMLTag aTag) sheet->SetPrincipal(mTargetDocument->NodePrincipal()); // Create the CSS parser, and parse the CSS text. nsCSSParser parser(nsnull, sheet); - rv = parser.Parse(uin, mTargetDocument->GetDocumentURI(), - baseURI, mTargetDocument->NodePrincipal(), - 0, PR_FALSE); + rv = parser.ParseSheet(*uin, mTargetDocument->GetDocumentURI(), + baseURI, mTargetDocument->NodePrincipal(), + 0, PR_FALSE); // Mark the sheet as complete. if (NS_SUCCEEDED(rv)) { NS_ABORT_IF_FALSE(!sheet->IsModified(), diff --git a/layout/style/Loader.cpp b/layout/style/Loader.cpp index 2ea02b261e2f..5fb6ee4655f2 100644 --- a/layout/style/Loader.cpp +++ b/layout/style/Loader.cpp @@ -1579,10 +1579,10 @@ Loader::ParseSheet(nsIUnicharInputStream* aStream, mParsingDatas.AppendElement(aLoadData); nsIURI* sheetURI = aLoadData->mSheet->GetSheetURI(); nsIURI* baseURI = aLoadData->mSheet->GetBaseURI(); - nsresult rv = parser.Parse(aStream, sheetURI, baseURI, - aLoadData->mSheet->Principal(), - aLoadData->mLineNumber, - aLoadData->mAllowUnsafeRules); + nsresult rv = parser.ParseSheet(*aStream, sheetURI, baseURI, + aLoadData->mSheet->Principal(), + aLoadData->mLineNumber, + aLoadData->mAllowUnsafeRules); mParsingDatas.RemoveElementAt(mParsingDatas.Length() - 1); if (NS_FAILED(rv)) { diff --git a/layout/style/nsCSSParser.cpp b/layout/style/nsCSSParser.cpp index 4fe0f2f55c98..be005ba6b6d5 100644 --- a/layout/style/nsCSSParser.cpp +++ b/layout/style/nsCSSParser.cpp @@ -203,12 +203,13 @@ public: // Clears everything set by the above Set*() functions. void Reset(); - nsresult Parse(nsIUnicharInputStream* aInput, - nsIURI* aSheetURI, - nsIURI* aBaseURI, - nsIPrincipal* aSheetPrincipal, - PRUint32 aLineNumber, - PRBool aAllowUnsafeRules); + template + nsresult ParseSheet(T& aInput, + nsIURI* aSheetURI, + nsIURI* aBaseURI, + nsIPrincipal* aSheetPrincipal, + PRUint32 aLineNumber, + PRBool aAllowUnsafeRules); nsresult ParseStyleAttribute(const nsAString& aAttributeValue, nsIURI* aDocURL, @@ -295,10 +296,10 @@ protected: CSSParserImpl* mParser; }; - void InitScanner(nsIUnicharInputStream* aInput, nsIURI* aSheetURI, + void InitScanner(nsIUnicharInputStream& aInput, nsIURI* aSheetURI, PRUint32 aLineNumber, nsIURI* aBaseURI, nsIPrincipal* aSheetPrincipal); - // the caller must hold on to aBuffer until parsing is done + // the caller must hold on to aString until parsing is done void InitScanner(const nsSubstring& aString, nsIURI* aSheetURI, PRUint32 aLineNumber, nsIURI* aBaseURI, nsIPrincipal* aSheetPrincipal); @@ -836,13 +837,13 @@ CSSParserImpl::Reset() } void -CSSParserImpl::InitScanner(nsIUnicharInputStream* aInput, nsIURI* aSheetURI, +CSSParserImpl::InitScanner(nsIUnicharInputStream& aInput, nsIURI* aSheetURI, PRUint32 aLineNumber, nsIURI* aBaseURI, nsIPrincipal* aSheetPrincipal) { NS_ASSERTION(! mScannerInited, "already have scanner"); - mScanner.Init(aInput, nsnull, 0, aSheetURI, aLineNumber, mSheet, + mScanner.Init(&aInput, nsnull, 0, aSheetURI, aLineNumber, mSheet, mChildLoader); #ifdef DEBUG mScannerInited = PR_TRUE; @@ -888,14 +889,14 @@ CSSParserImpl::ReleaseScanner(void) mSheetPrincipal = nsnull; } - +template nsresult -CSSParserImpl::Parse(nsIUnicharInputStream* aInput, - nsIURI* aSheetURI, - nsIURI* aBaseURI, - nsIPrincipal* aSheetPrincipal, - PRUint32 aLineNumber, - PRBool aAllowUnsafeRules) +CSSParserImpl::ParseSheet(T& aInput, + nsIURI* aSheetURI, + nsIURI* aBaseURI, + nsIPrincipal* aSheetPrincipal, + PRUint32 aLineNumber, + PRBool aAllowUnsafeRules) { NS_PRECONDITION(aSheetPrincipal, "Must have principal here!"); @@ -8758,16 +8759,29 @@ nsCSSParser::SetChildLoader(mozilla::css::Loader* aChildLoader) } nsresult -nsCSSParser::Parse(nsIUnicharInputStream* aInput, - nsIURI* aSheetURI, - nsIURI* aBaseURI, - nsIPrincipal* aSheetPrincipal, - PRUint32 aLineNumber, - PRBool aAllowUnsafeRules) +nsCSSParser::ParseSheet(nsIUnicharInputStream& aInput, + nsIURI* aSheetURI, + nsIURI* aBaseURI, + nsIPrincipal* aSheetPrincipal, + PRUint32 aLineNumber, + PRBool aAllowUnsafeRules) { return static_cast(mImpl)-> - Parse(aInput, aSheetURI, aBaseURI, aSheetPrincipal, aLineNumber, - aAllowUnsafeRules); + ParseSheet(aInput, aSheetURI, aBaseURI, aSheetPrincipal, aLineNumber, + aAllowUnsafeRules); +} + +nsresult +nsCSSParser::ParseSheet(const nsAString& aInput, + nsIURI* aSheetURI, + nsIURI* aBaseURI, + nsIPrincipal* aSheetPrincipal, + PRUint32 aLineNumber, + PRBool aAllowUnsafeRules) +{ + return static_cast(mImpl)-> + ParseSheet(aInput, aSheetURI, aBaseURI, aSheetPrincipal, aLineNumber, + aAllowUnsafeRules); } nsresult diff --git a/layout/style/nsCSSParser.h b/layout/style/nsCSSParser.h index 93d472294d7c..af61fbb05a10 100644 --- a/layout/style/nsCSSParser.h +++ b/layout/style/nsCSSParser.h @@ -113,12 +113,18 @@ public: * @param aAllowUnsafeRules see aEnableUnsafeRules in * mozilla::css::Loader::LoadSheetSync */ - nsresult Parse(nsIUnicharInputStream* aInput, - nsIURI* aSheetURL, - nsIURI* aBaseURI, - nsIPrincipal* aSheetPrincipal, - PRUint32 aLineNumber, - PRBool aAllowUnsafeRules); + nsresult ParseSheet(nsIUnicharInputStream& aInput, + nsIURI* aSheetURL, + nsIURI* aBaseURI, + nsIPrincipal* aSheetPrincipal, + PRUint32 aLineNumber, + PRBool aAllowUnsafeRules); + nsresult ParseSheet(const nsAString& aInput, + nsIURI* aSheetURL, + nsIURI* aBaseURI, + nsIPrincipal* aSheetPrincipal, + PRUint32 aLineNumber, + PRBool aAllowUnsafeRules); // Parse HTML style attribute or its equivalent in other markup // languages. aBaseURL is the base url to use for relative links in From 566c8cf3064544ada2f175fe3b60bf8f92e6f78c Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Wed, 18 May 2011 21:22:59 -0400 Subject: [PATCH 174/282] Bug 541496 part 2: use the new string-taking API in nsHTMLParanoidFragmentSink. En passant prune some unnecessary inclusions of ns(I)UnicharInputStream.h. r=bzbarsky --- content/base/src/nsDOMFileReader.cpp | 1 - .../src/nsHTMLFragmentContentSink.cpp | 109 ++++++++---------- content/xml/document/src/nsXMLContentSink.cpp | 1 - 3 files changed, 51 insertions(+), 60 deletions(-) diff --git a/content/base/src/nsDOMFileReader.cpp b/content/base/src/nsDOMFileReader.cpp index 439d127a864e..e88f776c590b 100644 --- a/content/base/src/nsDOMFileReader.cpp +++ b/content/base/src/nsDOMFileReader.cpp @@ -51,7 +51,6 @@ #include "nsIInputStream.h" #include "nsIMIMEService.h" #include "nsIPlatformCharset.h" -#include "nsIUnicharInputStream.h" #include "nsIUnicodeDecoder.h" #include "nsNetCID.h" #include "nsNetUtil.h" diff --git a/content/html/document/src/nsHTMLFragmentContentSink.cpp b/content/html/document/src/nsHTMLFragmentContentSink.cpp index 859ff9d0189b..235e3d4d1ee3 100644 --- a/content/html/document/src/nsHTMLFragmentContentSink.cpp +++ b/content/html/document/src/nsHTMLFragmentContentSink.cpp @@ -71,7 +71,6 @@ #include "nsCSSProperty.h" #include "mozilla/css/Declaration.h" #include "mozilla/css/StyleRule.h" -#include "nsUnicharInputStream.h" #include "nsCSSStyleSheet.h" #include "nsICSSRuleList.h" #include "nsIDOMCSSRule.h" @@ -1153,67 +1152,61 @@ nsHTMLParanoidFragmentSink::CloseContainer(const nsHTMLTag aTag) // styleText will hold the text inside the style element. nsAutoString styleText; nsContentUtils::GetNodeTextContent(style, PR_FALSE, styleText); - // Create a unichar input stream for the CSS parser. - nsCOMPtr uin; - rv = nsSimpleUnicharStreamFactory::GetInstance()-> - CreateInstanceFromString(styleText, getter_AddRefs(uin)); + // Create a sheet to hold the parsed CSS + nsRefPtr sheet; + rv = NS_NewCSSStyleSheet(getter_AddRefs(sheet)); if (NS_SUCCEEDED(rv)) { - // Create a sheet to hold the parsed CSS - nsRefPtr sheet; - rv = NS_NewCSSStyleSheet(getter_AddRefs(sheet)); + nsCOMPtr baseURI = style->GetBaseURI(); + sheet->SetURIs(mTargetDocument->GetDocumentURI(), nsnull, baseURI); + sheet->SetPrincipal(mTargetDocument->NodePrincipal()); + // Create the CSS parser, and parse the CSS text. + nsCSSParser parser(nsnull, sheet); + rv = parser.ParseSheet(styleText, mTargetDocument->GetDocumentURI(), + baseURI, mTargetDocument->NodePrincipal(), + 0, PR_FALSE); + // Mark the sheet as complete. if (NS_SUCCEEDED(rv)) { - nsCOMPtr baseURI = style->GetBaseURI(); - sheet->SetURIs(mTargetDocument->GetDocumentURI(), nsnull, baseURI); - sheet->SetPrincipal(mTargetDocument->NodePrincipal()); - // Create the CSS parser, and parse the CSS text. - nsCSSParser parser(nsnull, sheet); - rv = parser.ParseSheet(*uin, mTargetDocument->GetDocumentURI(), - baseURI, mTargetDocument->NodePrincipal(), - 0, PR_FALSE); - // Mark the sheet as complete. - if (NS_SUCCEEDED(rv)) { - NS_ABORT_IF_FALSE(!sheet->IsModified(), - "should not get marked modified during parsing"); - sheet->SetComplete(); - } - if (NS_SUCCEEDED(rv)) { - // Loop through all the rules found in the CSS text - PRInt32 ruleCount = sheet->StyleRuleCount(); - for (PRInt32 i = 0; i < ruleCount; ++i) { - nsRefPtr rule; - rv = sheet->GetStyleRuleAt(i, *getter_AddRefs(rule)); - if (NS_FAILED(rv)) - continue; - NS_ASSERTION(rule, "We should have a rule by now"); - switch (rule->GetType()) { - default: - didSanitize = PR_TRUE; - // Ignore these rule types. - break; - case css::Rule::NAMESPACE_RULE: - case css::Rule::FONT_FACE_RULE: { - // Append @namespace and @font-face rules verbatim. - nsAutoString cssText; - nsCOMPtr styleRule = do_QueryInterface(rule); - if (styleRule) { - rv = styleRule->GetCssText(cssText); - if (NS_SUCCEEDED(rv)) { - sanitizedStyleText.Append(cssText); - } - } - break; - } - case css::Rule::STYLE_RULE: { - // For style rules, we will just look for and remove the - // -moz-binding properties. - nsRefPtr styleRule = do_QueryObject(rule); - NS_ASSERTION(styleRule, "Must be a style rule"); - nsAutoString decl; - didSanitize = SanitizeStyleRule(styleRule, decl) || didSanitize; - styleRule->GetCssText(decl); - sanitizedStyleText.Append(decl); + NS_ABORT_IF_FALSE(!sheet->IsModified(), + "should not get marked modified during parsing"); + sheet->SetComplete(); + } + if (NS_SUCCEEDED(rv)) { + // Loop through all the rules found in the CSS text + PRInt32 ruleCount = sheet->StyleRuleCount(); + for (PRInt32 i = 0; i < ruleCount; ++i) { + nsRefPtr rule; + rv = sheet->GetStyleRuleAt(i, *getter_AddRefs(rule)); + if (NS_FAILED(rv)) + continue; + NS_ASSERTION(rule, "We should have a rule by now"); + switch (rule->GetType()) { + default: + didSanitize = PR_TRUE; + // Ignore these rule types. + break; + case css::Rule::NAMESPACE_RULE: + case css::Rule::FONT_FACE_RULE: { + // Append @namespace and @font-face rules verbatim. + nsAutoString cssText; + nsCOMPtr styleRule = do_QueryInterface(rule); + if (styleRule) { + rv = styleRule->GetCssText(cssText); + if (NS_SUCCEEDED(rv)) { + sanitizedStyleText.Append(cssText); } } + break; + } + case css::Rule::STYLE_RULE: { + // For style rules, we will just look for and remove the + // -moz-binding properties. + nsRefPtr styleRule = do_QueryObject(rule); + NS_ASSERTION(styleRule, "Must be a style rule"); + nsAutoString decl; + didSanitize = SanitizeStyleRule(styleRule, decl) || didSanitize; + styleRule->GetCssText(decl); + sanitizedStyleText.Append(decl); + } } } } diff --git a/content/xml/document/src/nsXMLContentSink.cpp b/content/xml/document/src/nsXMLContentSink.cpp index f8cb2b2f3489..3cc9326de475 100644 --- a/content/xml/document/src/nsXMLContentSink.cpp +++ b/content/xml/document/src/nsXMLContentSink.cpp @@ -40,7 +40,6 @@ #include "nsCOMPtr.h" #include "nsXMLContentSink.h" #include "nsIParser.h" -#include "nsIUnicharInputStream.h" #include "nsIDocument.h" #include "nsIDOMDocument.h" #include "nsIDOMDocumentType.h" From e89f55ad05d26d51430da186cb6b1df44218fc45 Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Wed, 18 May 2011 21:22:59 -0400 Subject: [PATCH 175/282] Bug 541496 part 3: use the new string-taking API in LoadInlineStyle. r=bzbarsky --- content/base/src/nsStyleLinkElement.cpp | 21 +++++---------------- layout/style/Loader.cpp | 16 ++++++++-------- layout/style/Loader.h | 11 ++++++----- 3 files changed, 19 insertions(+), 29 deletions(-) diff --git a/content/base/src/nsStyleLinkElement.cpp b/content/base/src/nsStyleLinkElement.cpp index 06a0119b7317..0abcb03d6b98 100644 --- a/content/base/src/nsStyleLinkElement.cpp +++ b/content/base/src/nsStyleLinkElement.cpp @@ -1,5 +1,5 @@ /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * + * * ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * @@ -53,8 +53,6 @@ #include "nsIDOMNode.h" #include "nsIDOMStyleSheet.h" #include "nsIDOMText.h" -#include "nsIUnicharInputStream.h" -#include "nsISimpleUnicharStreamFactory.h" #include "nsNetUtil.h" #include "nsUnicharUtils.h" #include "nsCRT.h" @@ -281,20 +279,12 @@ nsStyleLinkElement::DoUpdateStyleSheet(nsIDocument *aOldDocument, PRBool doneLoading = PR_FALSE; nsresult rv = NS_OK; if (isInline) { - nsAutoString content; - nsContentUtils::GetNodeTextContent(thisContent, PR_FALSE, content); + nsAutoString text; + nsContentUtils::GetNodeTextContent(thisContent, PR_FALSE, text); - nsCOMPtr uin; - rv = nsSimpleUnicharStreamFactory::GetInstance()-> - CreateInstanceFromString(content, getter_AddRefs(uin)); - if (NS_FAILED(rv)) { - return rv; - } - - // Now that we have a url and a unicode input stream, parse the - // style sheet. + // Parse the style sheet. rv = doc->CSSLoader()-> - LoadInlineStyle(thisContent, uin, mLineNumber, title, media, + LoadInlineStyle(thisContent, text, mLineNumber, title, media, aObserver, &doneLoading, &isAlternate); } else { @@ -318,4 +308,3 @@ nsStyleLinkElement::DoUpdateStyleSheet(nsIDocument *aOldDocument, return NS_OK; } - diff --git a/layout/style/Loader.cpp b/layout/style/Loader.cpp index 5fb6ee4655f2..2b7b2caa7b32 100644 --- a/layout/style/Loader.cpp +++ b/layout/style/Loader.cpp @@ -902,7 +902,7 @@ SheetLoadData::OnStreamComplete(nsIUnicharStreamLoader* aLoader, mSheet->SetURIs(channelURI, originalURI, channelURI); PRBool completed; - return mLoader->ParseSheet(aDataStream, this, completed); + return mLoader->ParseSheet(*aDataStream, this, completed); } #ifdef MOZ_XUL @@ -1405,7 +1405,8 @@ Loader::LoadSheet(SheetLoadData* aLoadData, StyleSheetState aSheetState) } PRBool completed; - rv = ParseSheet(converterStream, aLoadData, completed); + rv = ParseSheet(static_cast(*converterStream), + aLoadData, completed); NS_ASSERTION(completed, "sync load did not complete"); return rv; } @@ -1555,13 +1556,13 @@ Loader::LoadSheet(SheetLoadData* aLoadData, StyleSheetState aSheetState) * the CSS parser at the data stream. That lets us handle @import * correctly. */ +template nsresult -Loader::ParseSheet(nsIUnicharInputStream* aStream, +Loader::ParseSheet(T& aInput, SheetLoadData* aLoadData, PRBool& aCompleted) { LOG(("css::Loader::ParseSheet")); - NS_PRECONDITION(aStream, "Must have data to parse"); NS_PRECONDITION(aLoadData, "Must have load data"); NS_PRECONDITION(aLoadData->mSheet, "Must have sheet to parse into"); @@ -1579,7 +1580,7 @@ Loader::ParseSheet(nsIUnicharInputStream* aStream, mParsingDatas.AppendElement(aLoadData); nsIURI* sheetURI = aLoadData->mSheet->GetSheetURI(); nsIURI* baseURI = aLoadData->mSheet->GetBaseURI(); - nsresult rv = parser.ParseSheet(*aStream, sheetURI, baseURI, + nsresult rv = parser.ParseSheet(aInput, sheetURI, baseURI, aLoadData->mSheet->Principal(), aLoadData->mLineNumber, aLoadData->mAllowUnsafeRules); @@ -1745,7 +1746,7 @@ Loader::DoSheetComplete(SheetLoadData* aLoadData, nsresult aStatus, nsresult Loader::LoadInlineStyle(nsIContent* aElement, - nsIUnicharInputStream* aStream, + const nsAString& aBuffer, PRUint32 aLineNumber, const nsAString& aTitle, const nsAString& aMedia, @@ -1754,7 +1755,6 @@ Loader::LoadInlineStyle(nsIContent* aElement, PRBool* aIsAlternate) { LOG(("css::Loader::LoadInlineStyle")); - NS_PRECONDITION(aStream, "Must have a stream to parse!"); NS_ASSERTION(mParsingDatas.Length() == 0, "We're in the middle of a parse?"); *aCompleted = PR_TRUE; @@ -1803,7 +1803,7 @@ Loader::LoadInlineStyle(nsIContent* aElement, NS_ADDREF(data); data->mLineNumber = aLineNumber; // Parse completion releases the load data - rv = ParseSheet(aStream, data, *aCompleted); + rv = ParseSheet(aBuffer, data, *aCompleted); NS_ENSURE_SUCCESS(rv, rv); // If aCompleted is true, |data| may well be deleted by now. diff --git a/layout/style/Loader.h b/layout/style/Loader.h index b7b3e97ef5b9..4c78937fd8c0 100644 --- a/layout/style/Loader.h +++ b/layout/style/Loader.h @@ -167,7 +167,7 @@ public: * * @param aElement the element linking to the stylesheet. This must not be * null and must implement nsIStyleSheetLinkingElement. - * @param aStream the character stream that holds the stylesheet data. + * @param aBuffer the stylesheet data * @param aLineNumber the line number at which the stylesheet data started. * @param aTitle the title of the sheet. * @param aMedia the media string for the sheet. @@ -178,7 +178,7 @@ public: * alternate sheet. */ nsresult LoadInlineStyle(nsIContent* aElement, - nsIUnicharInputStream* aStream, + const nsAString& aBuffer, PRUint32 aLineNumber, const nsAString& aTitle, const nsAString& aMedia, @@ -439,11 +439,12 @@ private: // sheet to complete on failure. nsresult LoadSheet(SheetLoadData* aLoadData, StyleSheetState aSheetState); - // Parse the stylesheet in aLoadData. The sheet data comes from aStream. + // Parse the stylesheet in aLoadData. The sheet data comes from aInput. // Set aCompleted to true if the parse finished, false otherwise (e.g. if the // sheet had an @import). If aCompleted is true when this returns, then - // ParseSheet also called SheetComplete on aLoadData - nsresult ParseSheet(nsIUnicharInputStream* aStream, + // ParseSheet also called SheetComplete on aLoadData. + template + nsresult ParseSheet(T& aStream, SheetLoadData* aLoadData, PRBool& aCompleted); From c526a0f7883e10d21562c2ea3da5c7a78a67f878 Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Wed, 18 May 2011 21:22:59 -0400 Subject: [PATCH 176/282] Bug 541496 part 4: rewrite ns(I)UnicharStreamLoader to produce a string rather than a stream; use string-taking parser API for async style loads. r=bzbarsky --- layout/style/Loader.cpp | 17 +- .../base/public/nsIUnicharStreamLoader.idl | 43 ++- netwerk/base/public/nsNetUtil.h | 5 +- netwerk/base/src/nsUnicharStreamLoader.cpp | 288 ++++++++++-------- netwerk/base/src/nsUnicharStreamLoader.h | 34 ++- netwerk/test/unit/test_bug376660.js | 9 +- 6 files changed, 205 insertions(+), 191 deletions(-) diff --git a/layout/style/Loader.cpp b/layout/style/Loader.cpp index 2b7b2caa7b32..b90468fe88a7 100644 --- a/layout/style/Loader.cpp +++ b/layout/style/Loader.cpp @@ -632,8 +632,7 @@ static nsresult GetCharsetFromData(const unsigned char* aStyleSheetData, NS_IMETHODIMP SheetLoadData::OnDetermineCharset(nsIUnicharStreamLoader* aLoader, nsISupports* aContext, - const char* aData, - PRUint32 aDataLength, + nsACString const& aSegment, nsACString& aCharset) { NS_PRECONDITION(!mOwningElement || mCharsetHint.IsEmpty(), @@ -671,8 +670,8 @@ SheetLoadData::OnDetermineCharset(nsIUnicharStreamLoader* aLoader, if (aCharset.IsEmpty()) { // We have no charset // Try @charset rule and BOM - result = GetCharsetFromData((const unsigned char*)aData, - aDataLength, aCharset); + result = GetCharsetFromData((const unsigned char*)aSegment.BeginReading(), + aSegment.Length(), aCharset); #ifdef PR_LOGGING if (NS_SUCCEEDED(result)) { LOG((" Setting from @charset rule or BOM: %s", @@ -750,7 +749,7 @@ NS_IMETHODIMP SheetLoadData::OnStreamComplete(nsIUnicharStreamLoader* aLoader, nsISupports* aContext, nsresult aStatus, - nsIUnicharInputStream* aDataStream) + const nsAString& aBuffer) { LOG(("SheetLoadData::OnStreamComplete")); NS_ASSERTION(!mLoader->mSyncCallback, "Synchronous callback from necko"); @@ -834,12 +833,6 @@ SheetLoadData::OnStreamComplete(nsIUnicharStreamLoader* aLoader, } } - if (!aDataStream) { - LOG_WARN((" No data stream; bailing")); - mLoader->SheetComplete(this, NS_ERROR_NOT_AVAILABLE); - return NS_OK; - } - nsCAutoString contentType; if (channel) { channel->GetContentType(contentType); @@ -902,7 +895,7 @@ SheetLoadData::OnStreamComplete(nsIUnicharStreamLoader* aLoader, mSheet->SetURIs(channelURI, originalURI, channelURI); PRBool completed; - return mLoader->ParseSheet(*aDataStream, this, completed); + return mLoader->ParseSheet(aBuffer, this, completed); } #ifdef MOZ_XUL diff --git a/netwerk/base/public/nsIUnicharStreamLoader.idl b/netwerk/base/public/nsIUnicharStreamLoader.idl index 50ddca2859c4..0b8364c50400 100644 --- a/netwerk/base/public/nsIUnicharStreamLoader.idl +++ b/netwerk/base/public/nsIUnicharStreamLoader.idl @@ -42,47 +42,43 @@ interface nsIUnicharInputStream; interface nsIUnicharStreamLoader; interface nsIChannel; -[scriptable, uuid(6bb3e55b-69c0-4fc9-87e5-bed780d997ce)] +[scriptable, uuid(c2982b39-2e48-429e-92b7-99348a1633c5)] interface nsIUnicharStreamLoaderObserver : nsISupports { /** - * Called when the first full segment of data if available. + * Called as soon as at least 512 octets of data have arrived. + * If the stream receives fewer than 512 octets of data in total, + * called upon stream completion but before calling OnStreamComplete. + * Will not be called if the stream receives no data at all. * * @param aLoader the unichar stream loader * @param aContext the context parameter of the underlying channel - * @param aFirstSegment the raw bytes of the first full data segment - * @param aLength the length of aFirstSegment + * @param aSegment up to 512 octets of raw data from the stream * - * @return charset corresponding to this stream - * - * @note this method will only be called if the stream loader receives an - * OnDataAvailable call. + * @return the name of the character set to be used to decode this stream */ ACString onDetermineCharset(in nsIUnicharStreamLoader aLoader, in nsISupports aContext, - [size_is(aLength)] in string aFirstSegment, - in unsigned long aLength); + in ACString aSegment); /** - * Called when the entire stream has been loaded. + * Called when the entire stream has been loaded and decoded. * * @param aLoader the unichar stream loader * @param aContext the context parameter of the underlying channel * @param aStatus the status of the underlying channel - * @param aUnicharData the unichar input stream containing the data. This - * can be null in some failure conditions. + * @param aBuffer the contents of the stream, decoded to UTF-16. * * This method will always be called asynchronously by the * nsUnicharIStreamLoader involved, on the thread that called the - * loader's init() method. - * - * @note If the stream loader does not receive an OnDataAvailable call, - * aUnicharData will be null, and aStatus will be a success value. + * loader's init() method. If onDetermineCharset fails, + * onStreamComplete will still be called, but aStatus will be an + * error code. */ void onStreamComplete(in nsIUnicharStreamLoader aLoader, in nsISupports aContext, in nsresult aStatus, - in nsIUnicharInputStream aUnicharData); + in AString aBuffer); }; /** @@ -94,21 +90,16 @@ interface nsIUnicharStreamLoaderObserver : nsISupports * as the listener. The context argument in the asyncOpen() call will be * passed to the onStreamComplete() callback. */ -[scriptable, uuid(9037f476-7c08-4729-b690-3e425269802b)] +[scriptable, uuid(afb62060-37c7-4713-8a84-4a0c1199ba5c)] interface nsIUnicharStreamLoader : nsIStreamListener { - const unsigned long DEFAULT_SEGMENT_SIZE = 4096; - /** * Initializes the unichar stream loader * * @param aObserver the observer to notify when a charset is needed and when - * the load is complete - * @param aSegmentSize the size of the segments to use for the data, in bytes + * the load is complete */ - - void init(in nsIUnicharStreamLoaderObserver aObserver, - in unsigned long aSegmentSize); + void init(in nsIUnicharStreamLoaderObserver aObserver); /** * The channel attribute is only valid inside the onDetermineCharset diff --git a/netwerk/base/public/nsNetUtil.h b/netwerk/base/public/nsNetUtil.h index 6b740f98b93f..991a44ef5128 100644 --- a/netwerk/base/public/nsNetUtil.h +++ b/netwerk/base/public/nsNetUtil.h @@ -616,14 +616,13 @@ NS_NewStreamLoader(nsIStreamLoader **result, inline nsresult NS_NewUnicharStreamLoader(nsIUnicharStreamLoader **result, - nsIUnicharStreamLoaderObserver *observer, - PRUint32 segmentSize = nsIUnicharStreamLoader::DEFAULT_SEGMENT_SIZE) + nsIUnicharStreamLoaderObserver *observer) { nsresult rv; nsCOMPtr loader = do_CreateInstance(NS_UNICHARSTREAMLOADER_CONTRACTID, &rv); if (NS_SUCCEEDED(rv)) { - rv = loader->Init(observer, segmentSize); + rv = loader->Init(observer); if (NS_SUCCEEDED(rv)) { *result = nsnull; loader.swap(*result); diff --git a/netwerk/base/src/nsUnicharStreamLoader.cpp b/netwerk/base/src/nsUnicharStreamLoader.cpp index b511bc3eb49e..0e311b8aedcc 100644 --- a/netwerk/base/src/nsUnicharStreamLoader.cpp +++ b/netwerk/base/src/nsUnicharStreamLoader.cpp @@ -37,31 +37,21 @@ * ***** END LICENSE BLOCK ***** */ #include "nsUnicharStreamLoader.h" -#include "nsNetUtil.h" -#include "nsProxiedService.h" -#include "nsIChannel.h" -#include "nsIUnicharInputStream.h" -#include "nsIConverterInputStream.h" -#include "nsIPipe.h" +#include "nsIInputStream.h" +#include "nsICharsetConverterManager.h" +#include "nsIServiceManager.h" -#ifdef DEBUG // needed for IsASCII assertion -#include "nsReadableUtils.h" -#endif // DEBUG NS_IMETHODIMP -nsUnicharStreamLoader::Init(nsIUnicharStreamLoaderObserver *aObserver, - PRUint32 aSegmentSize) +nsUnicharStreamLoader::Init(nsIUnicharStreamLoaderObserver *aObserver) { NS_ENSURE_ARG_POINTER(aObserver); - if (aSegmentSize <= 0) { - aSegmentSize = nsIUnicharStreamLoader::DEFAULT_SEGMENT_SIZE; - } - mObserver = aObserver; - mCharset.Truncate(); - mChannel = nsnull; // Leave this null till OnStopRequest - mSegmentSize = aSegmentSize; + + if (!mRawData.SetCapacity(512)) + return NS_ERROR_OUT_OF_MEMORY; + return NS_OK; } @@ -73,8 +63,6 @@ nsUnicharStreamLoader::Create(nsISupports *aOuter, if (aOuter) return NS_ERROR_NO_AGGREGATION; nsUnicharStreamLoader* it = new nsUnicharStreamLoader(); - if (it == nsnull) - return NS_ERROR_OUT_OF_MEMORY; NS_ADDREF(it); nsresult rv = it->QueryInterface(aIID, aResult); NS_RELEASE(it); @@ -85,7 +73,7 @@ NS_IMPL_ISUPPORTS3(nsUnicharStreamLoader, nsIUnicharStreamLoader, nsIRequestObserver, nsIStreamListener) /* readonly attribute nsIChannel channel; */ -NS_IMETHODIMP +NS_IMETHODIMP nsUnicharStreamLoader::GetChannel(nsIChannel **aChannel) { NS_IF_ADDREF(*aChannel = mChannel); @@ -102,142 +90,178 @@ nsUnicharStreamLoader::GetCharset(nsACString& aCharset) /* nsIRequestObserver implementation */ NS_IMETHODIMP -nsUnicharStreamLoader::OnStartRequest(nsIRequest* request, - nsISupports *ctxt) +nsUnicharStreamLoader::OnStartRequest(nsIRequest*, nsISupports*) { - mContext = ctxt; return NS_OK; } -NS_IMETHODIMP -nsUnicharStreamLoader::OnStopRequest(nsIRequest *request, - nsISupports *ctxt, +NS_IMETHODIMP +nsUnicharStreamLoader::OnStopRequest(nsIRequest *aRequest, + nsISupports *aContext, nsresult aStatus) { - // if we trigger this assertion, then it means that the channel called - // OnStopRequest before returning from AsyncOpen, which is totally - // unexpected behavior. if (!mObserver) { - NS_ERROR("No way we should not have an mObserver here!"); + NS_ERROR("nsUnicharStreamLoader::OnStopRequest called before ::Init"); return NS_ERROR_UNEXPECTED; } - // Make sure mChannel points to the channel that we ended up with - mChannel = do_QueryInterface(request); + mContext = aContext; + mChannel = do_QueryInterface(aRequest); - if (mInputStream) { - nsresult rv; - // We got some data at some point. I guess we should tell our - // observer about it or something.... - - // Determine the charset - PRUint32 readCount = 0; - rv = mInputStream->ReadSegments(WriteSegmentFun, - this, - mSegmentSize, - &readCount); - if (NS_FAILED(rv)) { - rv = mObserver->OnStreamComplete(this, mContext, rv, nsnull); - goto cleanup; - } - - nsCOMPtr uin = - do_CreateInstance("@mozilla.org/intl/converter-input-stream;1", - &rv); - if (NS_FAILED(rv)) { - rv = mObserver->OnStreamComplete(this, mContext, rv, nsnull); - goto cleanup; - } - - rv = uin->Init(mInputStream, - mCharset.get(), - mSegmentSize, - nsIConverterInputStream::DEFAULT_REPLACEMENT_CHARACTER); - - if (NS_FAILED(rv)) { - rv = mObserver->OnStreamComplete(this, mContext, rv, nsnull); - goto cleanup; - } - - mObserver->OnStreamComplete(this, mContext, aStatus, uin); - - } else { - // We never got any data, so just tell our observer that we are - // done and give them no stream - mObserver->OnStreamComplete(this, mContext, aStatus, nsnull); + nsresult rv = NS_OK; + if (mRawData.Length() > 0 && NS_SUCCEEDED(aStatus)) { + NS_ABORT_IF_FALSE(mBuffer.Length() == 0, + "should not have both decoded and raw data"); + rv = DetermineCharset(); } - - // Clean up. - cleanup: + + if (NS_FAILED(rv)) { + // Call the observer but pass it no data. + mObserver->OnStreamComplete(this, mContext, rv, EmptyString()); + } else { + mObserver->OnStreamComplete(this, mContext, aStatus, mBuffer); + } + mObserver = nsnull; - mChannel = nsnull; + mDecoder = nsnull; mContext = nsnull; - mInputStream = nsnull; - mOutputStream = nsnull; - return NS_OK; + mChannel = nsnull; + mCharset.Truncate(); + mBuffer.Truncate(); + return rv; } /* nsIStreamListener implementation */ -NS_METHOD -nsUnicharStreamLoader::WriteSegmentFun(nsIInputStream *aInputStream, - void *aClosure, - const char *aSegment, - PRUint32 aToOffset, - PRUint32 aCount, - PRUint32 *aWriteCount) -{ - nsUnicharStreamLoader *self = (nsUnicharStreamLoader *) aClosure; - if (self->mCharset.IsEmpty()) { - // First time through. Call our observer. - NS_ASSERTION(self->mObserver, "This should never be possible"); - - nsresult rv = self->mObserver->OnDetermineCharset(self, - self->mContext, - aSegment, - aCount, - self->mCharset); - - if (NS_FAILED(rv) || self->mCharset.IsEmpty()) { - // The observer told us nothing useful - self->mCharset.AssignLiteral("ISO-8859-1"); - } - - NS_ASSERTION(IsASCII(self->mCharset), - "Why is the charset name non-ascii? Whose bright idea was that?"); - } - // Don't consume any data - *aWriteCount = 0; - return NS_BASE_STREAM_WOULD_BLOCK; -} - - NS_IMETHODIMP nsUnicharStreamLoader::OnDataAvailable(nsIRequest *aRequest, nsISupports *aContext, - nsIInputStream *aInputStream, + nsIInputStream *aInputStream, PRUint32 aSourceOffset, PRUint32 aCount) { - nsresult rv = NS_OK; - if (!mInputStream) { - // We are not initialized. Time to set things up. - NS_ASSERTION(!mOutputStream, "Why are we sorta-initialized?"); - rv = NS_NewPipe(getter_AddRefs(mInputStream), - getter_AddRefs(mOutputStream), - mSegmentSize, - PRUint32(-1), // give me all the data you can! - PR_TRUE, // non-blocking input - PR_TRUE); // non-blocking output - if (NS_FAILED(rv)) - return rv; + if (!mObserver) { + NS_ERROR("nsUnicharStreamLoader::OnDataAvailable called before ::Init"); + return NS_ERROR_UNEXPECTED; } - PRUint32 writeCount = 0; - do { - rv = mOutputStream->WriteFrom(aInputStream, aCount, &writeCount); - if (NS_FAILED(rv)) return rv; - aCount -= writeCount; - } while (aCount > 0); + mContext = aContext; + mChannel = do_QueryInterface(aRequest); + nsresult rv = NS_OK; + if (mDecoder) { + // process everything we've got + PRUint32 dummy; + aInputStream->ReadSegments(WriteSegmentFun, this, aCount, &dummy); + } else { + // no decoder yet. Read up to 512 octets into mRawData (this is + // the cutoff specified in draft-abarth-mime-sniff-06). If we can + // get that much, then go ahead and fire charset detection and + // read the rest. Otherwise wait for more data. + + PRUint32 haveRead = mRawData.Length(); + PRUint32 toRead = 512 - haveRead; + PRUint32 n; + char *here = mRawData.BeginWriting() + haveRead; + + rv = aInputStream->Read(here, toRead, &n); + if (NS_SUCCEEDED(rv)) { + mRawData.SetLength(haveRead + n); + if (mRawData.Length() == 512) { + rv = DetermineCharset(); + if (NS_SUCCEEDED(rv)) { + // process what's left + PRUint32 dummy; + aInputStream->ReadSegments(WriteSegmentFun, this, aCount - n, &dummy); + } + } else { + NS_ABORT_IF_FALSE(n == aCount, "didn't read as much as was available"); + } + } + } + + mContext = nsnull; + mChannel = nsnull; + return rv; +} + +/* internal */ +static NS_DEFINE_CID(kCharsetConverterManagerCID, + NS_ICHARSETCONVERTERMANAGER_CID); + +nsresult +nsUnicharStreamLoader::DetermineCharset() +{ + nsresult rv = mObserver->OnDetermineCharset(this, mContext, + mRawData, mCharset); + if (NS_FAILED(rv) || mCharset.IsEmpty()) { + // The observer told us nothing useful + mCharset.AssignLiteral("UTF-8"); + } + + // Create the decoder for this character set + nsCOMPtr ccm = + do_GetService(kCharsetConverterManagerCID, &rv); + if (NS_FAILED(rv)) return rv; + + rv = ccm->GetUnicodeDecoder(mCharset.get(), getter_AddRefs(mDecoder)); + if (NS_FAILED(rv)) return rv; + + // Process the data into mBuffer + PRUint32 dummy; + rv = WriteSegmentFun(nsnull, this, + mRawData.BeginReading(), + 0, mRawData.Length(), + &dummy); + mRawData.Truncate(); + return rv; +} + +NS_METHOD +nsUnicharStreamLoader::WriteSegmentFun(nsIInputStream *, + void *aClosure, + const char *aSegment, + PRUint32, + PRUint32 aCount, + PRUint32 *aWriteCount) +{ + nsUnicharStreamLoader* self = static_cast(aClosure); + + PRUint32 haveRead = self->mBuffer.Length(); + PRUint32 consumed = 0; + nsresult rv; + do { + PRInt32 srcLen = aCount - consumed; + PRInt32 dstLen; + self->mDecoder->GetMaxLength(aSegment + consumed, srcLen, &dstLen); + + PRUint32 capacity = haveRead + dstLen; + if (!self->mBuffer.SetCapacity(capacity)) { + return NS_ERROR_OUT_OF_MEMORY; + } + + rv = self->mDecoder->Convert(aSegment + consumed, + &srcLen, + self->mBuffer.BeginWriting() + haveRead, + &dstLen); + haveRead += dstLen; + // XXX if srcLen is negative, we want to drop the _first_ byte in + // the erroneous byte sequence and try again. This is not quite + // possible right now -- see bug 160784 + consumed += srcLen; + if (NS_FAILED(rv)) { + NS_ASSERTION(0 < capacity - haveRead, + "Decoder returned an error but filled the output buffer! " + "Should not happen."); + self->mBuffer.BeginWriting()[haveRead++] = 0xFFFD; + ++consumed; + // XXX this is needed to make sure we don't underrun our buffer; + // bug 160784 again + consumed = PR_MAX(consumed, 0); + self->mDecoder->Reset(); + } + } while (consumed < aCount); + + self->mBuffer.SetLength(haveRead); + *aWriteCount = aCount; return NS_OK; } diff --git a/netwerk/base/src/nsUnicharStreamLoader.h b/netwerk/base/src/nsUnicharStreamLoader.h index 692a119a1274..7856d28f0448 100644 --- a/netwerk/base/src/nsUnicharStreamLoader.h +++ b/netwerk/base/src/nsUnicharStreamLoader.h @@ -39,12 +39,13 @@ #ifndef nsUnicharStreamLoader_h__ #define nsUnicharStreamLoader_h__ -#include "nsIUnicharStreamLoader.h" -#include "nsCOMPtr.h" #include "nsIChannel.h" +#include "nsIUnicharStreamLoader.h" +#include "nsIUnicodeDecoder.h" +#include "nsCOMPtr.h" #include "nsString.h" -#include "nsIInputStream.h" -#include "nsIOutputStream.h" + +class nsIInputStream; class nsUnicharStreamLoader : public nsIUnicharStreamLoader { @@ -54,13 +55,14 @@ public: NS_DECL_NSIREQUESTOBSERVER NS_DECL_NSISTREAMLISTENER - nsUnicharStreamLoader() { } + nsUnicharStreamLoader() {} virtual ~nsUnicharStreamLoader() {} - static nsresult - Create(nsISupports *aOuter, REFNSIID aIID, void **aResult); + static nsresult Create(nsISupports *aOuter, REFNSIID aIID, void **aResult); protected: + nsresult DetermineCharset(); + /** * callback method used for ReadSegments */ @@ -68,13 +70,19 @@ protected: PRUint32, PRUint32, PRUint32 *); nsCOMPtr mObserver; - nsCOMPtr mContext; // observer's context - nsCString mCharset; + nsCOMPtr mDecoder; + nsCOMPtr mContext; nsCOMPtr mChannel; - nsCOMPtr mInputStream; - nsCOMPtr mOutputStream; - PRUint32 mSegmentSize; - + nsCString mCharset; + + // This holds the first up-to-512 bytes of the raw stream. + // It will be passed to the OnDetermineCharset callback. + nsCString mRawData; + + // This holds the complete contents of the stream so far, after + // decoding to UTF-16. It will be passed to the OnStreamComplete + // callback. + nsString mBuffer; }; #endif // nsUnicharStreamLoader_h__ diff --git a/netwerk/test/unit/test_bug376660.js b/netwerk/test/unit/test_bug376660.js index db9c4458e6e4..debd34f9696d 100644 --- a/netwerk/test/unit/test_bug376660.js +++ b/netwerk/test/unit/test_bug376660.js @@ -10,8 +10,7 @@ var listener = { } throw Components.results.NS_ERROR_NO_INTERFACE; }, - onDetermineCharset : function onDetermineCharset(loader, context, - data, length) + onDetermineCharset : function onDetermineCharset(loader, context, data) { return "us-ascii"; }, @@ -22,7 +21,7 @@ var listener = { do_check_false(Components.isSuccessCode(status)); else do_check_eq(status, Components.results.NS_OK); - do_check_eq(data, null); + do_check_eq(data, ""); do_check_neq(loader.channel, null); tests[current_test++](); } finally { @@ -42,7 +41,7 @@ function test1() { var f = Cc["@mozilla.org/network/unichar-stream-loader;1"]. createInstance(Ci.nsIUnicharStreamLoader); - f.init(listener, 4096); + f.init(listener); var ios = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); @@ -55,7 +54,7 @@ function test2() { var f = Cc["@mozilla.org/network/unichar-stream-loader;1"]. createInstance(Ci.nsIUnicharStreamLoader); - f.init(listener, 4096); + f.init(listener); var ios = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); From 97dcf8c4095e9706b85ec09382fe4dab298b987d Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Wed, 18 May 2011 21:22:59 -0400 Subject: [PATCH 177/282] Bug 541496 part 5: use the string-taking API for sync sheet loads. r=bzbarsky --- content/base/src/nsSyncLoadService.cpp | 40 +++++++------ layout/style/Loader.cpp | 83 ++++++++++---------------- 2 files changed, 53 insertions(+), 70 deletions(-) diff --git a/content/base/src/nsSyncLoadService.cpp b/content/base/src/nsSyncLoadService.cpp index 9d4254ef736b..54ead52c6399 100644 --- a/content/base/src/nsSyncLoadService.cpp +++ b/content/base/src/nsSyncLoadService.cpp @@ -475,28 +475,32 @@ nsSyncLoadService::PushSyncStreamToListener(nsIInputStream* aIn, } // Load - aListener->OnStartRequest(aChannel, nsnull); - PRUint32 sourceOffset = 0; - while (1) { - PRUint32 readCount = 0; - rv = aIn->Available(&readCount); - if (NS_FAILED(rv) || !readCount) { - if (rv == NS_BASE_STREAM_CLOSED) { - // End of file, but not an error - rv = NS_OK; + rv = aListener->OnStartRequest(aChannel, nsnull); + if (NS_SUCCEEDED(rv)) { + PRUint32 sourceOffset = 0; + while (1) { + PRUint32 readCount = 0; + rv = aIn->Available(&readCount); + if (NS_FAILED(rv) || !readCount) { + if (rv == NS_BASE_STREAM_CLOSED) { + // End of file, but not an error + rv = NS_OK; + } + break; } - break; - } - rv = aListener->OnDataAvailable(aChannel, nsnull, aIn, sourceOffset, - readCount); - if (NS_FAILED(rv)) { - break; + rv = aListener->OnDataAvailable(aChannel, nsnull, aIn, + sourceOffset, readCount); + if (NS_FAILED(rv)) { + break; + } + sourceOffset += readCount; } - - sourceOffset += readCount; + } + if (NS_FAILED(rv)) { + aChannel->Cancel(rv); } aListener->OnStopRequest(aChannel, nsnull, rv); - + return rv; } diff --git a/layout/style/Loader.cpp b/layout/style/Loader.cpp index b90468fe88a7..ea33892781e9 100644 --- a/layout/style/Loader.cpp +++ b/layout/style/Loader.cpp @@ -51,6 +51,7 @@ #include "mozilla/css/Loader.h" #include "nsIRunnable.h" #include "nsIUnicharStreamLoader.h" +#include "nsSyncLoadService.h" #include "nsCOMPtr.h" #include "nsCOMArray.h" #include "nsString.h" @@ -59,10 +60,7 @@ #include "nsIDOMWindow.h" #include "nsIDocument.h" #include "nsIDOMNSDocumentStyle.h" -#include "nsIUnicharInputStream.h" -#include "nsIConverterInputStream.h" #include "nsICharsetAlias.h" -#include "nsUnicharUtils.h" #include "nsHashtable.h" #include "nsIURI.h" #include "nsIServiceManager.h" @@ -804,7 +802,11 @@ SheetLoadData::OnStreamComplete(nsIUnicharStreamLoader* aLoader, nsIScriptSecurityManager* secMan = nsContentUtils::GetSecurityManager(); result = NS_ERROR_NOT_AVAILABLE; if (secMan) { // Could be null if we already shut down - result = secMan->GetChannelPrincipal(channel, getter_AddRefs(principal)); + if (mUseSystemPrincipal) { + result = secMan->GetSystemPrincipal(getter_AddRefs(principal)); + } else { + result = secMan->GetChannelPrincipal(channel, getter_AddRefs(principal)); + } } if (NS_FAILED(result)) { @@ -895,7 +897,9 @@ SheetLoadData::OnStreamComplete(nsIUnicharStreamLoader* aLoader, mSheet->SetURIs(channelURI, originalURI, channelURI); PRBool completed; - return mLoader->ParseSheet(aBuffer, this, completed); + result = mLoader->ParseSheet(aBuffer, this, completed); + NS_ASSERTION(completed || !mSyncLoad, "sync load did not complete"); + return result; } #ifdef MOZ_XUL @@ -1340,6 +1344,17 @@ Loader::LoadSheet(SheetLoadData* aLoadData, StyleSheetState aSheetState) NS_ASSERTION(aSheetState == eSheetNeedsParser, "Sync loads can't reuse existing async loads"); + // Create a nsIUnicharStreamLoader instance to which we will feed + // the data from the sync load. Do this before creating the + // channel to make error recovery simpler. + nsCOMPtr streamLoader; + rv = NS_NewUnicharStreamLoader(getter_AddRefs(streamLoader), aLoadData); + if (NS_FAILED(rv)) { + LOG_ERROR((" Failed to create stream loader for sync load")); + SheetComplete(aLoadData, rv); + return rv; + } + // Just load it nsCOMPtr stream; nsCOMPtr channel; @@ -1354,54 +1369,18 @@ Loader::LoadSheet(SheetLoadData* aLoadData, StyleSheetState aSheetState) NS_ASSERTION(channel, "NS_OpenURI lied?"); - // Get the principal for this sheet - nsCOMPtr principal; - if (aLoadData->mUseSystemPrincipal) { - rv = nsContentUtils::GetSecurityManager()-> - GetSystemPrincipal(getter_AddRefs(principal)); - } else { - rv = nsContentUtils::GetSecurityManager()-> - GetChannelPrincipal(channel, getter_AddRefs(principal)); - } + // Force UA sheets to be UTF-8. + // XXX this is only necessary because the default in + // SheetLoadData::OnDetermineCharset is wrong (bug 521039). + channel->SetContentCharset(NS_LITERAL_CSTRING("UTF-8")); - if (NS_FAILED(rv)) { - LOG_ERROR((" Failed to get a principal for the sheet")); - SheetComplete(aLoadData, rv); - return rv; - } - - aLoadData->mSheet->SetPrincipal(principal); - - nsCOMPtr converterStream = - do_CreateInstance("@mozilla.org/intl/converter-input-stream;1", &rv); - - if (NS_FAILED(rv)) { - LOG_ERROR((" Failed to create converter stream")); - SheetComplete(aLoadData, rv); - return rv; - } - - // This forces UA sheets to be UTF-8. We should really look for - // @charset rules here via ReadSegments on the raw stream... - - // 8192 is a nice magic number that happens to be what a lot of - // other things use for buffer sizes. - rv = converterStream->Init(stream, "UTF-8", - 8192, - nsIConverterInputStream:: - DEFAULT_REPLACEMENT_CHARACTER); - - if (NS_FAILED(rv)) { - LOG_ERROR((" Failed to initialize converter stream")); - SheetComplete(aLoadData, rv); - return rv; - } - - PRBool completed; - rv = ParseSheet(static_cast(*converterStream), - aLoadData, completed); - NS_ASSERTION(completed, "sync load did not complete"); - return rv; + // Manually feed the streamloader the contents of the stream we + // got from NS_OpenURI. This will call back into OnStreamComplete + // and thence to ParseSheet. Regardless of whether this fails, + // SheetComplete has been called. + return nsSyncLoadService::PushSyncStreamToListener(stream, + streamLoader, + channel); } SheetLoadData* existingData = nsnull; From 2f9f7105887a9de7df7681bcd8fbfbfd31bd07ef Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Wed, 18 May 2011 21:22:59 -0400 Subject: [PATCH 178/282] Bug 541496 part 6: remove no-longer-used stream-processing code from css::Loader and nsCSSParser. r=bzbarsky --- layout/style/Loader.cpp | 3 +-- layout/style/Loader.h | 4 +--- layout/style/nsCSSParser.cpp | 42 ++---------------------------------- layout/style/nsCSSParser.h | 7 ------ 4 files changed, 4 insertions(+), 52 deletions(-) diff --git a/layout/style/Loader.cpp b/layout/style/Loader.cpp index ea33892781e9..9ff90e17abc5 100644 --- a/layout/style/Loader.cpp +++ b/layout/style/Loader.cpp @@ -1528,9 +1528,8 @@ Loader::LoadSheet(SheetLoadData* aLoadData, StyleSheetState aSheetState) * the CSS parser at the data stream. That lets us handle @import * correctly. */ -template nsresult -Loader::ParseSheet(T& aInput, +Loader::ParseSheet(const nsAString& aInput, SheetLoadData* aLoadData, PRBool& aCompleted) { diff --git a/layout/style/Loader.h b/layout/style/Loader.h index 4c78937fd8c0..21df11546810 100644 --- a/layout/style/Loader.h +++ b/layout/style/Loader.h @@ -56,7 +56,6 @@ class nsICSSLoaderObserver; class nsCSSStyleSheet; class nsIContent; class nsIDocument; -class nsIUnicharInputStream; class nsCSSParser; class nsMediaList; @@ -443,8 +442,7 @@ private: // Set aCompleted to true if the parse finished, false otherwise (e.g. if the // sheet had an @import). If aCompleted is true when this returns, then // ParseSheet also called SheetComplete on aLoadData. - template - nsresult ParseSheet(T& aStream, + nsresult ParseSheet(const nsAString& aInput, SheetLoadData* aLoadData, PRBool& aCompleted); diff --git a/layout/style/nsCSSParser.cpp b/layout/style/nsCSSParser.cpp index be005ba6b6d5..606fc6a112b1 100644 --- a/layout/style/nsCSSParser.cpp +++ b/layout/style/nsCSSParser.cpp @@ -55,7 +55,6 @@ #include "mozilla/css/ImportRule.h" #include "nsCSSRules.h" #include "mozilla/css/NameSpaceRule.h" -#include "nsIUnicharInputStream.h" #include "nsCSSStyleSheet.h" #include "mozilla/css/Declaration.h" #include "nsStyleConsts.h" @@ -203,8 +202,7 @@ public: // Clears everything set by the above Set*() functions. void Reset(); - template - nsresult ParseSheet(T& aInput, + nsresult ParseSheet(const nsAString& aInput, nsIURI* aSheetURI, nsIURI* aBaseURI, nsIPrincipal* aSheetPrincipal, @@ -296,9 +294,6 @@ protected: CSSParserImpl* mParser; }; - void InitScanner(nsIUnicharInputStream& aInput, nsIURI* aSheetURI, - PRUint32 aLineNumber, nsIURI* aBaseURI, - nsIPrincipal* aSheetPrincipal); // the caller must hold on to aString until parsing is done void InitScanner(const nsSubstring& aString, nsIURI* aSheetURI, PRUint32 aLineNumber, nsIURI* aBaseURI, @@ -836,25 +831,6 @@ CSSParserImpl::Reset() SetChildLoader(nsnull); } -void -CSSParserImpl::InitScanner(nsIUnicharInputStream& aInput, nsIURI* aSheetURI, - PRUint32 aLineNumber, nsIURI* aBaseURI, - nsIPrincipal* aSheetPrincipal) -{ - NS_ASSERTION(! mScannerInited, "already have scanner"); - - mScanner.Init(&aInput, nsnull, 0, aSheetURI, aLineNumber, mSheet, - mChildLoader); -#ifdef DEBUG - mScannerInited = PR_TRUE; -#endif - mBaseURI = aBaseURI; - mSheetURI = aSheetURI; - mSheetPrincipal = aSheetPrincipal; - - mHavePushBack = PR_FALSE; -} - void CSSParserImpl::InitScanner(const nsSubstring& aString, nsIURI* aSheetURI, PRUint32 aLineNumber, nsIURI* aBaseURI, @@ -889,9 +865,8 @@ CSSParserImpl::ReleaseScanner(void) mSheetPrincipal = nsnull; } -template nsresult -CSSParserImpl::ParseSheet(T& aInput, +CSSParserImpl::ParseSheet(const nsAString& aInput, nsIURI* aSheetURI, nsIURI* aBaseURI, nsIPrincipal* aSheetPrincipal, @@ -8758,19 +8733,6 @@ nsCSSParser::SetChildLoader(mozilla::css::Loader* aChildLoader) SetChildLoader(aChildLoader); } -nsresult -nsCSSParser::ParseSheet(nsIUnicharInputStream& aInput, - nsIURI* aSheetURI, - nsIURI* aBaseURI, - nsIPrincipal* aSheetPrincipal, - PRUint32 aLineNumber, - PRBool aAllowUnsafeRules) -{ - return static_cast(mImpl)-> - ParseSheet(aInput, aSheetURI, aBaseURI, aSheetPrincipal, aLineNumber, - aAllowUnsafeRules); -} - nsresult nsCSSParser::ParseSheet(const nsAString& aInput, nsIURI* aSheetURI, diff --git a/layout/style/nsCSSParser.h b/layout/style/nsCSSParser.h index af61fbb05a10..0667af497e13 100644 --- a/layout/style/nsCSSParser.h +++ b/layout/style/nsCSSParser.h @@ -49,7 +49,6 @@ class nsCSSStyleSheet; class nsIPrincipal; class nsIURI; -class nsIUnicharInputStream; struct nsCSSSelectorList; class nsMediaList; #ifdef MOZ_CSS_ANIMATIONS @@ -113,12 +112,6 @@ public: * @param aAllowUnsafeRules see aEnableUnsafeRules in * mozilla::css::Loader::LoadSheetSync */ - nsresult ParseSheet(nsIUnicharInputStream& aInput, - nsIURI* aSheetURL, - nsIURI* aBaseURI, - nsIPrincipal* aSheetPrincipal, - PRUint32 aLineNumber, - PRBool aAllowUnsafeRules); nsresult ParseSheet(const nsAString& aInput, nsIURI* aSheetURL, nsIURI* aBaseURI, From 82cd3a1f8d47c408592be36cd9445f0769d393d6 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Mon, 16 May 2011 22:25:39 -0700 Subject: [PATCH 179/282] Bug 657548 part 1. Remove some duplicate and unused CIDs from nsContentCID.h and nsLayoutCID.h. r=jst --- content/base/public/nsContentCID.h | 53 ++--------- content/xul/content/src/nsXULElement.h | 2 - layout/build/nsLayoutCID.h | 118 ------------------------- 3 files changed, 8 insertions(+), 165 deletions(-) diff --git a/content/base/public/nsContentCID.h b/content/base/public/nsContentCID.h index 6985a77179b7..dc33413671a7 100644 --- a/content/base/public/nsContentCID.h +++ b/content/base/public/nsContentCID.h @@ -44,26 +44,14 @@ #define NS_HTMLCOPY_ENCODER_CONTRACTID \ "@mozilla.org/layout/htmlCopyEncoder;1" -// {1691E1F7-EE41-11d4-9885-00C04FA0CF4B} -#define NS_STYLESET_CID \ -{ 0x1691e1f7, 0xee41, 0x11d4, { 0x98, 0x85, 0x0, 0xc0, 0x4f, 0xa0, 0xcf, 0x4b } } - // {972D8D8F-F0DA-11d4-9885-00C04FA0CF4B} #define NS_DOCUMENT_VIEWER_CID \ { 0x972d8d8f, 0xf0da, 0x11d4, { 0x98, 0x85, 0x0, 0xc0, 0x4f, 0xa0, 0xcf, 0x4b } } -// {A5121627-EDB6-11d4-9885-00C04FA0CF4B} -#define NS_ANONYMOUSCONTENT_CID \ -{ 0xa5121627, 0xedb6, 0x11d4, { 0x98, 0x85, 0x0, 0xc0, 0x4f, 0xa0, 0xcf, 0x4b } } - // {FC886801-E768-11d4-9885-00C04FA0CF4B} #define NS_CONTENT_DOCUMENT_LOADER_FACTORY_CID \ { 0xfc886801, 0xe768, 0x11d4, { 0x98, 0x85, 0x0, 0xc0, 0x4f, 0xa0, 0xcf, 0x4b } } -/* a6cf90f9-15b3-11d2-932e-00805f8add32 */ -#define NS_LAYOUT_DEBUGGER_CID \ - { 0xa6cf90f9, 0x15b3, 0x11d2,{0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32}} - #define NS_HTMLDOCUMENT_CID \ { /* 5d0fcdd0-4daa-11d2-b328-00805f8a3859 */ \ 0x5d0fcdd0, 0x4daa, 0x11d2, \ @@ -105,43 +93,22 @@ 0xa6cf90f5, 0x15b3, 0x11d2, \ {0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32}} +#ifdef MOZ_MEDIA +#define NS_HTMLAUDIOELEMENT_CID \ +{ /* 1d40026b-4c44-4f6f-b158-26bb5e9c65e9 */ \ + 0x1d40026b, 0x4c44, 0x4f6f, \ + {0xb1, 0x58, 0x26, 0xbb, 0x5e, 0x9c, 0x65, 0xe9}} +#endif + #define NS_NAMESPACEMANAGER_CID \ { /* d9783472-8fe9-11d2-9d3c-0060088f9ff7 */ \ 0xd9783472, 0x8fe9, 0x11d2, \ {0x9d, 0x3c, 0x00, 0x60, 0x08, 0x8f, 0x9f, 0xf7}} -/* a6cf90d7-15b3-11d2-932e-00805f8add32 */ -#define NS_FRAME_UTIL_CID \ - { 0xa6cf90d5, 0x15b3, 0x11d2,{0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32}} - - -// XXX This should really be factored into a style-specific DLL so -// that all the HTML, generic layout, and style stuff isn't munged -// together. - -// {2E363D60-872E-11d2-B531-000000000000} -#define NS_CSSPARSER_CID \ -{ 0x2e363d60, 0x872e, 0x11d2, { 0xb5, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } } - -// {eaca2576-0d4a-11d3-9d7e-0060088f9ff7} -#define NS_CSS_LOADER_CID \ -{ 0xeaca2576, 0x0d4a, 0x11d3, { 0x9d, 0x7e, 0x00, 0x60, 0x08, 0x8f, 0x9f, 0xf7 } } - -// {96882B72-8A27-11d2-8EAF-00805F29F370} -#define NS_SELECTION_CID \ -{ 0x96882b72, 0x8a27, 0x11d2, { 0x8e, 0xaf, 0x0, 0x80, 0x5f, 0x29, 0xf3, 0x70 } } - -#define NS_FRAMESELECTION_CID \ -{/* {905F80F1-8A7B-11d2-918C-0080C8E44DB5}*/ \ - 0x905f80f1, 0x8a7b, 0x11d2, { 0x91, 0x8c, 0x0, 0x80, 0xc8, 0xe4, 0x4d, 0xb5 } } - -#define NS_DOMSELECTION_CID \ -{/* {C87A37FC-8109-4ce2-A322-8CDEC925379F}*/ \ - 0xc87a37fc, 0x8109, 0x4ce2, { 0xa3, 0x22, 0x8c, 0xde, 0xc9, 0x25, 0x37, 0x9f } } - #define NS_RANGE_CID \ {/* {56AD2981-8A87-11d2-918C-0080C8E44DB5}*/ \ 0x56ad2981, 0x8a87, 0x11d2, { 0x91, 0x8c, 0x0, 0x80, 0xc8, 0xe4, 0x4d, 0xb5 } } + #define NS_CONTENTITERATOR_CID \ {/* {a6cf90e3-15b3-11d2-932e-00805f8add32}*/ \ 0xa6cf90e3, 0x15b3, 0x11d2, {0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32 } } @@ -170,10 +137,6 @@ #define NS_DOM_IMPLEMENTATION_CID \ { 0x3a9cd622, 0x264d, 0x11d4, {0xba, 0x06, 0x00, 0x60, 0xb0, 0xfc, 0x76, 0xdd } } -// {AE52FE52-683A-437D-B661-DE55F4E0A873} -#define NS_NODEINFOMANAGER_CID \ -{ 0xae52fe52, 0x683a, 0x437d, { 0xb6, 0x61, 0xde, 0x55, 0xf4, 0xe0, 0xa8, 0x73 } } - // {ECEA1B28-AE54-4047-8BBE-C624235106B4} #define NS_COMPUTEDDOMSTYLE_CID \ { 0xecea1b28, 0xae54, 0x4047, { 0x8b, 0xbe, 0xc6, 0x24, 0x23, 0x51, 0x06, 0xb4 } } diff --git a/content/xul/content/src/nsXULElement.h b/content/xul/content/src/nsXULElement.h index a55964f361a4..23d8e8cabda0 100644 --- a/content/xul/content/src/nsXULElement.h +++ b/content/xul/content/src/nsXULElement.h @@ -93,8 +93,6 @@ class StyleRule; } } -static NS_DEFINE_CID(kCSSParserCID, NS_CSSPARSER_CID); - //////////////////////////////////////////////////////////////////////// #ifdef XUL_PROTOTYPE_ATTRIBUTE_METERING diff --git a/layout/build/nsLayoutCID.h b/layout/build/nsLayoutCID.h index 847b58e308c9..989cc4689e8c 100644 --- a/layout/build/nsLayoutCID.h +++ b/layout/build/nsLayoutCID.h @@ -38,10 +38,6 @@ #ifndef nsLayoutCID_h__ #define nsLayoutCID_h__ -#include "nsISupports.h" -#include "nsIFactory.h" -#include "nsIComponentManager.h" - // {1691E1F4-EE41-11d4-9885-00C04FA0CF4B} #define NS_FRAMETRAVERSAL_CID \ { 0x1691e1f4, 0xee41, 0x11d4, { 0x98, 0x85, 0x0, 0xc0, 0x4f, 0xa0, 0xcf, 0x4b } } @@ -54,61 +50,14 @@ #define NS_LAYOUT_DEBUGGER_CID \ { 0xa6cf90f9, 0x15b3, 0x11d2,{0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32}} -#define NS_HTMLDOCUMENT_CID \ -{ /* 5d0fcdd0-4daa-11d2-b328-00805f8a3859 */ \ - 0x5d0fcdd0, 0x4daa, 0x11d2, \ - {0xb3, 0x28, 0x00, 0x80, 0x5f, 0x8a, 0x38, 0x59}} - -#define NS_XMLDOCUMENT_CID \ -{ /* a6cf9063-15b3-11d2-932e-00805f8add32 */ \ - 0xa6cf9063, 0x15b3, 0x11d2, \ - {0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32}} - -#define NS_IMAGEDOCUMENT_CID \ -{ /* e11a6080-4daa-11d2-b328-00805f8a3859 */ \ - 0xe11a6080, 0x4daa, 0x11d2, \ - {0xb3, 0x28, 0x00, 0x80, 0x5f, 0x8a, 0x38, 0x59}} - -#define NS_HTMLIMAGEELEMENT_CID \ -{ /* d6008c40-4dad-11d2-b328-00805f8a3859 */ \ - 0xd6008c40, 0x4dad, 0x11d2, \ - {0xb3, 0x28, 0x00, 0x80, 0x5f, 0x8a, 0x38, 0x59}} - -#define NS_HTMLOPTIONELEMENT_CID \ -{ /* a6cf90f5-15b3-11d2-932e-00805f8add32 */ \ - 0xa6cf90f5, 0x15b3, 0x11d2, \ - {0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32}} - -#define NS_NAMESPACEMANAGER_CID \ -{ /* d9783472-8fe9-11d2-9d3c-0060088f9ff7 */ \ - 0xd9783472, 0x8fe9, 0x11d2, \ - {0x9d, 0x3c, 0x00, 0x60, 0x08, 0x8f, 0x9f, 0xf7}} - /* a6cf90d7-15b3-11d2-932e-00805f8add32 */ #define NS_FRAME_UTIL_CID \ { 0xa6cf90d5, 0x15b3, 0x11d2,{0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32}} - -// XXX This should really be factored into a style-specific DLL so -// that all the HTML, generic layout, and style stuff isn't munged -// together. - -// {2E363D60-872E-11d2-B531-000000000000} -#define NS_CSSPARSER_CID \ -{ 0x2e363d60, 0x872e, 0x11d2, { 0xb5, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } } - // {E6FD9940-899D-11d2-8EAE-00805F29F370} #define NS_PRESSHELL_CID \ { 0xe6fd9940, 0x899d, 0x11d2, { 0x8e, 0xae, 0x0, 0x80, 0x5f, 0x29, 0xf3, 0x70 } } -// {eaca2576-0d4a-11d3-9d7e-0060088f9ff7} -#define NS_CSS_LOADER_CID \ -{ 0xeaca2576, 0x0d4a, 0x11d3, { 0x9d, 0x7e, 0x00, 0x60, 0x08, 0x8f, 0x9f, 0xf7 } } - -// {96882B72-8A27-11d2-8EAF-00805F29F370} -#define NS_SELECTION_CID \ -{ 0x96882b72, 0x8a27, 0x11d2, { 0x8e, 0xaf, 0x0, 0x80, 0x5f, 0x29, 0xf3, 0x70 } } - #define NS_FRAMESELECTION_CID \ {/* {905F80F1-8A7B-11d2-918C-0080C8E44DB5}*/ \ 0x905f80f1, 0x8a7b, 0x11d2, { 0x91, 0x8c, 0x0, 0x80, 0xc8, 0xe4, 0x4d, 0xb5 } } @@ -117,22 +66,6 @@ {/* {C87A37FC-8109-4ce2-A322-8CDEC925379F}*/ \ 0xc87a37fc, 0x8109, 0x4ce2, { 0xa3, 0x22, 0x8c, 0xde, 0xc9, 0x25, 0x37, 0x9f } } -#define NS_RANGE_CID \ -{/* {56AD2981-8A87-11d2-918C-0080C8E44DB5}*/ \ - 0x56ad2981, 0x8a87, 0x11d2, { 0x91, 0x8c, 0x0, 0x80, 0xc8, 0xe4, 0x4d, 0xb5 } } - -#define NS_CONTENTITERATOR_CID \ -{/* {a6cf90e3-15b3-11d2-932e-00805f8add32}*/ \ - 0xa6cf90e3, 0x15b3, 0x11d2, {0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32 } } - -#define NS_SUBTREEITERATOR_CID \ -{/* {a6cf90e5-15b3-11d2-932e-00805f8add32}*/ \ - 0xa6cf90e5, 0x15b3, 0x11d2, {0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32 } } - -// {64F300A1-C88C-11d3-97FB-00400553EEF0} -#define NS_XBLSERVICE_CID \ -{ 0x64f300a1, 0xc88c, 0x11d3, { 0x97, 0xfb, 0x0, 0x40, 0x5, 0x53, 0xee, 0xf0 } } - // {D750A964-2D14-484c-B3AA-8ED7823B5C7B} #define NS_BOXOBJECT_CID \ { 0xd750a964, 0x2d14, 0x484c, { 0xb3, 0xaa, 0x8e, 0xd7, 0x82, 0x3b, 0x5c, 0x7b } } @@ -162,50 +95,6 @@ #define NS_TREEBOXOBJECT_CID \ { 0x3b581fd4, 0x3497, 0x426c, { 0x8f, 0x61, 0x36, 0x58, 0xb9, 0x71, 0xcb, 0x80 } } -// {8775CA39-4072-4cc0-92D3-A7C2B820089C} -#define NS_AUTOCOPYSERVICE_CID \ -{ 0x8775ca39, 0x4072, 0x4cc0, { 0x92, 0xd3, 0xa7, 0xc2, 0xb8, 0x20, 0x8, 0x9c } } - -// 3a9cd622-264d-11d4-ba06-0060b0fc76dd -#define NS_DOM_IMPLEMENTATION_CID \ -{ 0x3a9cd622, 0x264d, 0x11d4, {0xba, 0x06, 0x00, 0x60, 0xb0, 0xfc, 0x76, 0xdd } } - -// {AE52FE52-683A-437D-B661-DE55F4E0A873} -#define NS_NODEINFOMANAGER_CID \ -{ 0xae52fe52, 0x683a, 0x437d, { 0xb6, 0x61, 0xde, 0x55, 0xf4, 0xe0, 0xa8, 0x73 } } - -// {ECEA1B28-AE54-4047-8BBE-C624235106B4} -#define NS_COMPUTEDDOMSTYLE_CID \ -{ 0xecea1b28, 0xae54, 0x4047, { 0x8b, 0xbe, 0xc6, 0x24, 0x23, 0x51, 0x06, 0xb4 } } - -// {4aef38b7-6364-4e23-a5e7-12f837fbbd9c} -#define NS_XMLCONTENTSERIALIZER_CID \ -{ 0x4aef38b7, 0x6364, 0x4e23, { 0xa5, 0xe7, 0x12, 0xf8, 0x37, 0xfb, 0xbd, 0x9c } } - -// {e7c2aaf5-c11a-4954-9dbf-e28edec1fd91} -#define NS_XHTMLCONTENTSERIALIZER_CID \ -{ 0xe7c2aaf5, 0xc11a, 0x4954, { 0x9d, 0xbf, 0xe2, 0x8e, 0xde, 0xc1, 0xfd, 0x91 } } - -// {9d3f70da-86e9-11d4-95ec-00b0d03e37b7} -#define NS_HTMLCONTENTSERIALIZER_CID \ -{ 0x9d3f70da, 0x86e9, 0x11d4, { 0x95, 0xec, 0x00, 0xb0, 0xd0, 0x3e, 0x37, 0xb7 } } - -// {6030f7ef-32ed-46a7-9a63-6a5d3f90445f} -#define NS_PLAINTEXTSERIALIZER_CID \ -{ 0x6030f7ef, 0x32ed, 0x46a7, { 0x9a, 0x63, 0x6a, 0x5d, 0x3f, 0x90, 0x44, 0x5f } } - -// {5C5AF390-34BE-11d5-A03B-0010A4EF48C9} -#define NS_LAYOUT_HISTORY_STATE_CID \ -{ 0x5c5af390, 0x34be, 0x11d5, { 0xa0, 0x3b, 0x00, 0x10, 0xa4, 0xef, 0x48, 0xc9 } } - -// {E14B66F6-BFC5-11d2-B57E-00105AA83B2F} -#define NS_CARET_CID \ -{ 0xe14b66f6, 0xbfc5, 0x11d2, { 0xb5, 0x7e, 0x0, 0x10, 0x5a, 0xa8, 0x3b, 0x2f } } - -// {f96f5ec9-755b-447e-b1f3-717d1a84bb41} -#define NS_PLUGINDOCUMENT_CID \ -{ 0xf96f5ec9, 0x755b, 0x447e, { 0xb1, 0xf3, 0x71, 0x7d, 0x1a, 0x84, 0xbb, 0x41 } } - // {a35d1cd4-c505-4d2d-a0f9-aef00b7ce5a5} #define NS_CANVASRENDERINGCONTEXT2D_CID \ { 0xa35d1cd4, 0xc505, 0x4d2d, { 0xa0, 0xf9, 0xae, 0xf0, 0x0b, 0x7c, 0xe5, 0xa5 } } @@ -242,11 +131,4 @@ #define INDEXEDDB_MANAGER_CID \ { 0x1a26a7b7, 0xd06e, 0x4f45, { 0x8b, 0x45, 0xd7, 0xad, 0x60, 0xf7, 0xa9, 0xab } } -#ifdef MOZ_MEDIA -#define NS_HTMLAUDIOELEMENT_CID \ -{ /* 1d40026b-4c44-4f6f-b158-26bb5e9c65e9 */ \ - 0x1d40026b, 0x4c44, 0x4f6f, \ - {0xb1, 0x58, 0x26, 0xbb, 0x5e, 0x9c, 0x65, 0xe9}} -#endif - #endif /* nsLayoutCID_h__ */ From 83da916f93f3f15e21499630dfee72bc9a4f72d1 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Mon, 16 May 2011 23:46:22 -0700 Subject: [PATCH 180/282] Bug 657548 - Part 2: Remove more unused CIDs. r=jst --- content/base/public/nsContentCID.h | 20 -------------------- layout/build/nsLayoutCID.h | 4 ---- 2 files changed, 24 deletions(-) diff --git a/content/base/public/nsContentCID.h b/content/base/public/nsContentCID.h index dc33413671a7..77074af51039 100644 --- a/content/base/public/nsContentCID.h +++ b/content/base/public/nsContentCID.h @@ -75,14 +75,6 @@ #define NS_HTMLCOPY_TEXT_ENCODER_CID \ { 0x7f915b01, 0x98fc, 0x11d4, { 0x8e, 0xb0, 0xa8, 0x03, 0xf8, 0x0f, 0xf1, 0xbc } } -// {A1FDE864-E802-11d4-9885-00C04FA0CF4B} -#define NS_HTMLHRELEMENT_CID \ -{ 0xa1fde864, 0xe802, 0x11d4, { 0x98, 0x85, 0x0, 0xc0, 0x4f, 0xa0, 0xcf, 0x4b } } - -// {A1FDE865-E802-11d4-9885-00C04FA0CF4B} -#define NS_HTMLINPUTELEMENT_CID \ -{ 0xa1fde865, 0xe802, 0x11d4, { 0x98, 0x85, 0x0, 0xc0, 0x4f, 0xa0, 0xcf, 0x4b } } - #define NS_HTMLIMAGEELEMENT_CID \ { /* d6008c40-4dad-11d2-b328-00805f8a3859 */ \ 0xd6008c40, 0x4dad, 0x11d2, \ @@ -137,10 +129,6 @@ #define NS_DOM_IMPLEMENTATION_CID \ { 0x3a9cd622, 0x264d, 0x11d4, {0xba, 0x06, 0x00, 0x60, 0xb0, 0xfc, 0x76, 0xdd } } -// {ECEA1B28-AE54-4047-8BBE-C624235106B4} -#define NS_COMPUTEDDOMSTYLE_CID \ -{ 0xecea1b28, 0xae54, 0x4047, { 0x8b, 0xbe, 0xc6, 0x24, 0x23, 0x51, 0x06, 0xb4 } } - // {4aef38b7-6364-4e23-a5e7-12f837fbbd9c} #define NS_XMLCONTENTSERIALIZER_CID \ { 0x4aef38b7, 0x6364, 0x4e23, { 0xa5, 0xe7, 0x12, 0xf8, 0x37, 0xfb, 0xbd, 0x9c } } @@ -202,10 +190,6 @@ { 0x1f5c1721, 0x7dc3, 0x11d3, { 0xbf, 0x87, 0x0, 0x10, 0x5a, 0x1b, 0x6, 0x27 } } -// {daedcb43-1dd1-11b2-b1d2-caf06cb40387} -#define NS_DLGDEFAULTKEYS_CID \ -{ 0xdaedcb43, 0x1dd1, 0x11b2, { 0xb1, 0xd2, 0xca, 0xf0, 0x6c, 0xb4, 0x3, 0x87 } } - // {BFD05264-834C-11d2-8EAC-00805F29F371} #define NS_XULSORTSERVICE_CID \ { 0xbfd05264, 0x834c, 0x11d2, { 0x8e, 0xac, 0x0, 0x80, 0x5f, 0x29, 0xf3, 0x71 } } @@ -218,10 +202,6 @@ #define NS_XULTREEBUILDER_CID \ { 0x1abdcc96, 0x1dd2, 0x11b2, { 0xb5, 0x20, 0xf8, 0xf5, 0x9c, 0xdd, 0x67, 0xbc } } -// {CE058B21-BA9C-11d2-BF86-00105A1B0627} -#define NS_XULCONTENTSINK_CID \ -{ 0xce058b21, 0xba9c, 0x11d2, { 0xbf, 0x86, 0x0, 0x10, 0x5a, 0x1b, 0x6, 0x27 } } - // {541AFCB2-A9A3-11d2-8EC5-00805F29F370} #define NS_XULDOCUMENT_CID \ { 0x541afcb2, 0xa9a3, 0x11d2, { 0x8e, 0xc5, 0x0, 0x80, 0x5f, 0x29, 0xf3, 0x70 } } diff --git a/layout/build/nsLayoutCID.h b/layout/build/nsLayoutCID.h index 989cc4689e8c..cd7989442fb4 100644 --- a/layout/build/nsLayoutCID.h +++ b/layout/build/nsLayoutCID.h @@ -42,10 +42,6 @@ #define NS_FRAMETRAVERSAL_CID \ { 0x1691e1f4, 0xee41, 0x11d4, { 0x98, 0x85, 0x0, 0xc0, 0x4f, 0xa0, 0xcf, 0x4b } } -/* a6cf90fa-15b3-11d2-932e-00805f8add32 */ -#define NS_LAYOUT_DOCUMENT_LOADER_FACTORY_CID \ - { 0xa6cf90fa, 0x15b3, 0x11d2,{0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32}} - /* a6cf90f9-15b3-11d2-932e-00805f8add32 */ #define NS_LAYOUT_DEBUGGER_CID \ { 0xa6cf90f9, 0x15b3, 0x11d2,{0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32}} From a3d1ab8a345af9eac47a73082d05f271c6d7653f Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 18 May 2011 17:48:43 +1200 Subject: [PATCH 181/282] Bug 657780. Silence pldhash warnings by shrinking ThebesLayerItemsEntry. r=tnikkel --- layout/base/FrameLayerBuilder.cpp | 76 +++++++++++++++---------------- layout/base/FrameLayerBuilder.h | 19 ++++---- 2 files changed, 46 insertions(+), 49 deletions(-) diff --git a/layout/base/FrameLayerBuilder.cpp b/layout/base/FrameLayerBuilder.cpp index 81f1c7391235..b1dee08f15ac 100644 --- a/layout/base/FrameLayerBuilder.cpp +++ b/layout/base/FrameLayerBuilder.cpp @@ -715,28 +715,19 @@ FrameLayerBuilder::GetOldLayerFor(nsIFrame* aFrame, PRUint32 aDisplayItemKey) /** * Invalidate aRegion in aLayer. aLayer is in the coordinate system - * *after* aTransform has been applied, so we need to + * *after* aTranslation has been applied, so we need to * apply the inverse of that transform before calling InvalidateRegion. - * Currently we assume that the transform is just an integer translation, - * since that's all we need for scrolling. */ static void InvalidatePostTransformRegion(ThebesLayer* aLayer, const nsIntRegion& aRegion, - const gfx3DMatrix& aTransform) + const nsIntPoint& aTranslation) { - gfxMatrix transform; - if (aTransform.Is2D(&transform)) { - NS_ASSERTION(!transform.HasNonIntegerTranslation(), - "Matrix not just an integer translation?"); - // Convert the region from the coordinates of the container layer - // (relative to the snapped top-left of the display list reference frame) - // to the ThebesLayer's own coordinates - nsIntRegion rgn = aRegion; - rgn.MoveBy(-nsIntPoint(PRInt32(transform.x0), PRInt32(transform.y0))); - aLayer->InvalidateRegion(rgn); - } else { - NS_ERROR("Only 2D transformations currently supported"); - } + // Convert the region from the coordinates of the container layer + // (relative to the snapped top-left of the display list reference frame) + // to the ThebesLayer's own coordinates + nsIntRegion rgn = aRegion; + rgn.MoveBy(-aTranslation); + aLayer->InvalidateRegion(rgn); } already_AddRefed @@ -783,6 +774,18 @@ ContainerState::CreateOrRecycleImageLayer() return layer.forget(); } +static nsIntPoint +GetTranslationForThebesLayer(ThebesLayer* aLayer) +{ + gfxMatrix transform; + if (!aLayer->GetTransform().Is2D(&transform) && + transform.HasNonIntegerTranslation()) { + NS_ERROR("ThebesLayers should have integer translations only"); + return nsIntPoint(0, 0); + } + return nsIntPoint(PRInt32(transform.x0), PRInt32(transform.y0)); +} + already_AddRefed ContainerState::CreateOrRecycleThebesLayer(nsIFrame* aActiveScrolledRoot) { @@ -809,7 +812,7 @@ ContainerState::CreateOrRecycleThebesLayer(nsIFrame* aActiveScrolledRoot) layer->InvalidateRegion(invalidate); } else { InvalidatePostTransformRegion(layer, mInvalidThebesContent, - layer->GetTransform()); + GetTranslationForThebesLayer(layer)); } // We do not need to Invalidate these areas in the widget because we // assume the caller of InvalidateThebesLayerContents has ensured @@ -824,7 +827,7 @@ ContainerState::CreateOrRecycleThebesLayer(nsIFrame* aActiveScrolledRoot) new ThebesDisplayItemLayerUserData()); } - mBuilder->LayerBuilder()->SaveLastPaintTransform(layer, layer->GetTransform()); + mBuilder->LayerBuilder()->SaveLastPaintOffset(layer); // Set up transform so that 0,0 in the Thebes layer corresponds to the // (pixel-snapped) top-left of the aActiveScrolledRoot. @@ -1424,12 +1427,13 @@ ContainerState::InvalidateForLayerChange(nsDisplayItem* aItem, Layer* aNewLayer) ThebesLayer* t = oldLayer->AsThebesLayer(); if (t) { InvalidatePostTransformRegion(t, r, - mBuilder->LayerBuilder()->GetLastPaintTransform(t)); + mBuilder->LayerBuilder()->GetLastPaintOffset(t)); } if (aNewLayer) { ThebesLayer* newLayer = aNewLayer->AsThebesLayer(); if (newLayer) { - InvalidatePostTransformRegion(newLayer, r, newLayer->GetTransform()); + InvalidatePostTransformRegion(newLayer, r, + GetTranslationForThebesLayer(newLayer)); } } @@ -1484,23 +1488,22 @@ FrameLayerBuilder::AddLayerDisplayItem(Layer* aLayer, } } -const gfx3DMatrix& -FrameLayerBuilder::GetLastPaintTransform(ThebesLayer* aLayer) +nsIntPoint +FrameLayerBuilder::GetLastPaintOffset(ThebesLayer* aLayer) { ThebesLayerItemsEntry* entry = mThebesLayerItems.PutEntry(aLayer); - if (entry && entry->mHasExplicitLastPaintTransform) - return entry->mLastPaintTransform; - return aLayer->GetTransform(); + if (entry && entry->mHasExplicitLastPaintOffset) + return entry->mLastPaintOffset; + return GetTranslationForThebesLayer(aLayer); } void -FrameLayerBuilder::SaveLastPaintTransform(ThebesLayer* aLayer, - const gfx3DMatrix& aMatrix) +FrameLayerBuilder::SaveLastPaintOffset(ThebesLayer* aLayer) { ThebesLayerItemsEntry* entry = mThebesLayerItems.PutEntry(aLayer); if (entry) { - entry->mLastPaintTransform = aMatrix; - entry->mHasExplicitLastPaintTransform = PR_TRUE; + entry->mLastPaintOffset = GetTranslationForThebesLayer(aLayer); + entry->mHasExplicitLastPaintOffset = PR_TRUE; } } @@ -1846,18 +1849,11 @@ FrameLayerBuilder::DrawThebesLayer(ThebesLayer* aLayer, aContext->Fill(); } - gfxMatrix transform; - if (!aLayer->GetTransform().Is2D(&transform)) { - NS_ERROR("non-2D transform in our Thebes layer!"); - return; - } - NS_ASSERTION(!transform.HasNonIntegerTranslation(), - "Matrix not just an integer translation?"); // make the origin of the context coincide with the origin of the // ThebesLayer - gfxContextMatrixAutoSaveRestore saveMatrix(aContext); - aContext->Translate(-gfxPoint(transform.x0, transform.y0)); - nsIntPoint offset(PRInt32(transform.x0), PRInt32(transform.y0)); + gfxContextMatrixAutoSaveRestore saveMatrix(aContext); + nsIntPoint offset = GetTranslationForThebesLayer(aLayer); + aContext->Translate(-gfxPoint(offset.x, offset.y)); nsPresContext* presContext = containerLayerFrame->PresContext(); PRInt32 appUnitsPerDevPixel = presContext->AppUnitsPerDevPixel(); diff --git a/layout/base/FrameLayerBuilder.h b/layout/base/FrameLayerBuilder.h index c19a598d6125..a3df8d37a375 100644 --- a/layout/base/FrameLayerBuilder.h +++ b/layout/base/FrameLayerBuilder.h @@ -297,15 +297,16 @@ public: static PRBool HasRetainedLayerFor(nsIFrame* aFrame, PRUint32 aDisplayItemKey); /** - * Save aMatrix as the transform that was in aLayer when we last painted. + * Save transform that was in aLayer when we last painted. It must be an integer + * translation. */ - void SaveLastPaintTransform(ThebesLayer* aLayer, const gfx3DMatrix& aMatrix); + void SaveLastPaintOffset(ThebesLayer* aLayer); /** - * Get the transform that was in aLayer when we last painted. It's either + * Get the translation transform that was in aLayer when we last painted. It's either * the transform saved by SaveLastPaintTransform, or else the transform - * that's currently in the layer. + * that's currently in the layer (which must be an integer translation). */ - const gfx3DMatrix& GetLastPaintTransform(ThebesLayer* aLayer); + nsIntPoint GetLastPaintOffset(ThebesLayer* aLayer); /** * Clip represents the intersection of an optional rectangle with a @@ -451,7 +452,7 @@ protected: public: ThebesLayerItemsEntry(const ThebesLayer *key) : nsPtrHashKey(key), mContainerLayerFrame(nsnull), - mHasExplicitLastPaintTransform(PR_FALSE) {} + mHasExplicitLastPaintOffset(PR_FALSE) {} ThebesLayerItemsEntry(const ThebesLayerItemsEntry &toCopy) : nsPtrHashKey(toCopy.mKey), mItems(toCopy.mItems) { @@ -460,10 +461,10 @@ protected: nsTArray mItems; nsIFrame* mContainerLayerFrame; - // The transform set on this ThebesLayer before we started updating the + // The translation set on this ThebesLayer before we started updating the // layer tree. - gfx3DMatrix mLastPaintTransform; - PRPackedBool mHasExplicitLastPaintTransform; + nsIntPoint mLastPaintOffset; + PRPackedBool mHasExplicitLastPaintOffset; enum { ALLOW_MEMMOVE = PR_TRUE }; }; From 909389680eadc91794c9c00422a638364a0bab1d Mon Sep 17 00:00:00 2001 From: Jim Mathies Date: Wed, 18 May 2011 06:57:07 -0500 Subject: [PATCH 182/282] Bug 648935 - Remove dead code from plugin instances. r=bsmedberg. --- dom/plugins/ipc/PluginInstanceChild.cpp | 42 ------------------------ dom/plugins/ipc/PluginInstanceParent.cpp | 4 --- 2 files changed, 46 deletions(-) diff --git a/dom/plugins/ipc/PluginInstanceChild.cpp b/dom/plugins/ipc/PluginInstanceChild.cpp index a9eaf901391e..9029db62f6c3 100644 --- a/dom/plugins/ipc/PluginInstanceChild.cpp +++ b/dom/plugins/ipc/PluginInstanceChild.cpp @@ -1553,54 +1553,12 @@ PluginInstanceChild::DestroyWinlessPopupSurrogate() mWinlessPopupSurrogateHWND = NULL; } -/* windowless handle event helpers */ - -static bool -NeedsNestedEventCoverage(UINT msg) -{ - // Events we assume some sort of modal ui *might* be generated. - switch (msg) { - case WM_LBUTTONUP: - case WM_RBUTTONUP: - case WM_MBUTTONUP: - case WM_LBUTTONDOWN: - case WM_RBUTTONDOWN: - case WM_MBUTTONDOWN: - case WM_CONTEXTMENU: - return true; - } - return false; -} - -static bool -IsMouseInputEvent(UINT msg) -{ - switch (msg) { - case WM_MOUSEMOVE: - case WM_LBUTTONUP: - case WM_RBUTTONUP: - case WM_MBUTTONUP: - case WM_LBUTTONDOWN: - case WM_RBUTTONDOWN: - case WM_MBUTTONDOWN: - case WM_LBUTTONDBLCLK: - case WM_MBUTTONDBLCLK: - case WM_RBUTTONDBLCLK: - return true; - } - return false; -} - int16_t PluginInstanceChild::WinlessHandleEvent(NPEvent& event) { if (!mPluginIface->event) return false; - if (!NeedsNestedEventCoverage(event.event)) { - return mPluginIface->event(&mData, reinterpret_cast(&event)); - } - // Events that might generate nested event dispatch loops need // special handling during delivery. int16_t handled; diff --git a/dom/plugins/ipc/PluginInstanceParent.cpp b/dom/plugins/ipc/PluginInstanceParent.cpp index 7125fcdbffc3..3e4588826be9 100644 --- a/dom/plugins/ipc/PluginInstanceParent.cpp +++ b/dom/plugins/ipc/PluginInstanceParent.cpp @@ -68,10 +68,6 @@ extern const PRUnichar* kOOPPPluginFocusEventId; UINT gOOPPPluginFocusEvent = RegisterWindowMessage(kOOPPPluginFocusEventId); extern const PRUnichar* kFlashFullscreenClass; -UINT gOOPPSpinNativeLoopEvent = - RegisterWindowMessage(L"SyncChannel Spin Inner Loop Message"); -UINT gOOPPStopNativeLoopEvent = - RegisterWindowMessage(L"SyncChannel Stop Inner Loop Message"); #elif defined(MOZ_WIDGET_GTK2) #include #elif defined(XP_MACOSX) From 7d59d4601d2d0ad2b34ebae849ccf8c85ca5317d Mon Sep 17 00:00:00 2001 From: Jim Mathies Date: Wed, 18 May 2011 06:57:08 -0500 Subject: [PATCH 183/282] Bug 648935 - Prevent focus event overhead when the dom sets the focus to a windowed plugin. r=bsmedberg. --- dom/plugins/ipc/PluginInstanceParent.cpp | 6 +++++- dom/plugins/ipc/PluginInstanceParent.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/dom/plugins/ipc/PluginInstanceParent.cpp b/dom/plugins/ipc/PluginInstanceParent.cpp index 3e4588826be9..8279176e1759 100644 --- a/dom/plugins/ipc/PluginInstanceParent.cpp +++ b/dom/plugins/ipc/PluginInstanceParent.cpp @@ -96,6 +96,7 @@ PluginInstanceParent::PluginInstanceParent(PluginModuleParent* parent, , mPluginHWND(NULL) , mPluginWndProc(NULL) , mNestedEventState(false) + , mInAnswerFocusChange(false) #endif // defined(XP_WIN) , mQuirks(0) #if defined(XP_MACOSX) @@ -1559,7 +1560,8 @@ PluginInstanceParent::PluginWindowHookProc(HWND hWnd, switch (message) { case WM_SETFOCUS: // Let the child plugin window know it should take focus. - self->CallSetPluginFocus(); + if (!self->mInAnswerFocusChange) + self->CallSetPluginFocus(); break; case WM_CLOSE: @@ -1739,6 +1741,8 @@ PluginInstanceParent::AnswerPluginFocusChange(const bool& gotFocus) // focus. We forward the event down to widget so the dom/focus manager can // be updated. #if defined(OS_WIN) + AutoRestore ar(mInAnswerFocusChange) + mInAnswerFocusChange = true; ::SendMessage(mPluginHWND, gOOPPPluginFocusEvent, gotFocus ? 1 : 0, 0); return true; #else diff --git a/dom/plugins/ipc/PluginInstanceParent.h b/dom/plugins/ipc/PluginInstanceParent.h index 77c486876a07..f3c526198f80 100644 --- a/dom/plugins/ipc/PluginInstanceParent.h +++ b/dom/plugins/ipc/PluginInstanceParent.h @@ -349,6 +349,7 @@ private: HWND mPluginHWND; WNDPROC mPluginWndProc; bool mNestedEventState; + bool mInAnswerFocusChange; #endif // defined(XP_WIN) #if defined(OS_MACOSX) private: From f81f1189fb5cba3145802311a0fd9a7fed657ce7 Mon Sep 17 00:00:00 2001 From: Jim Mathies Date: Wed, 18 May 2011 06:57:08 -0500 Subject: [PATCH 184/282] Bug 648935 - When paint events are deferred in WindowsMessageLoop, temporarily validate the plugin until painting can occur. r=bent. --- ipc/glue/WindowsMessageLoop.cpp | 17 ++++++++++++++--- ipc/glue/WindowsMessageLoop.h | 7 +++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/ipc/glue/WindowsMessageLoop.cpp b/ipc/glue/WindowsMessageLoop.cpp index 5b5c70faf30d..175c8fec8771 100644 --- a/ipc/glue/WindowsMessageLoop.cpp +++ b/ipc/glue/WindowsMessageLoop.cpp @@ -996,19 +996,30 @@ DeferredRedrawMessage::Run() NS_ASSERTION(ret, "RedrawWindow failed!"); } +DeferredUpdateMessage::DeferredUpdateMessage(HWND aHWnd) +{ + mWnd = aHWnd; + if (!GetUpdateRect(mWnd, &mUpdateRect, FALSE)) { + memset(&mUpdateRect, 0, sizeof(RECT)); + return; + } + ValidateRect(mWnd, &mUpdateRect); +} + void DeferredUpdateMessage::Run() { - AssertWindowIsNotNeutered(hWnd); - if (!IsWindow(hWnd)) { + AssertWindowIsNotNeutered(mWnd); + if (!IsWindow(mWnd)) { NS_ERROR("Invalid window!"); return; } + InvalidateRect(mWnd, &mUpdateRect, FALSE); #ifdef DEBUG BOOL ret = #endif - UpdateWindow(hWnd); + UpdateWindow(mWnd); NS_ASSERTION(ret, "UpdateWindow failed!"); } diff --git a/ipc/glue/WindowsMessageLoop.h b/ipc/glue/WindowsMessageLoop.h index 5746f58e51cd..82ec04db5fec 100644 --- a/ipc/glue/WindowsMessageLoop.h +++ b/ipc/glue/WindowsMessageLoop.h @@ -113,14 +113,13 @@ private: class DeferredUpdateMessage : public DeferredMessage { public: - DeferredUpdateMessage(HWND aHWnd) - : hWnd(aHWnd) - { } + DeferredUpdateMessage(HWND aHWnd); virtual void Run(); private: - HWND hWnd; + HWND mWnd; + RECT mUpdateRect; }; // This class duplicates a string that may exist in the lParam member of the From 56de4d1f15d83129f7e586f98a1799ec1fa0a3c2 Mon Sep 17 00:00:00 2001 From: Jim Mathies Date: Wed, 18 May 2011 06:57:08 -0500 Subject: [PATCH 185/282] Bug 648935 - Process native events during calls to WaitForNotify in the child process when nested native event loops are detected in the parent. r=bsmedberg. --- dom/plugins/ipc/PPluginModule.ipdl | 8 ++++---- dom/plugins/ipc/PluginInstanceParent.cpp | 2 +- dom/plugins/ipc/PluginModuleChild.cpp | 14 ++++++++++++++ dom/plugins/ipc/PluginModuleChild.h | 3 +++ dom/plugins/ipc/PluginModuleParent.cpp | 13 ++++++++++++- dom/plugins/ipc/PluginModuleParent.h | 2 ++ ipc/glue/RPCChannel.cpp | 4 ++++ ipc/glue/RPCChannel.h | 2 ++ ipc/glue/SyncChannel.h | 1 + ipc/glue/WindowsMessageLoop.cpp | 21 ++++++++++++++++++++- ipc/ipdl/ipdl/lower.py | 3 +-- widget/src/windows/nsAppShell.cpp | 4 ++++ 12 files changed, 68 insertions(+), 9 deletions(-) diff --git a/dom/plugins/ipc/PPluginModule.ipdl b/dom/plugins/ipc/PPluginModule.ipdl index 7619a843bcbd..956799d7cf4b 100644 --- a/dom/plugins/ipc/PPluginModule.ipdl +++ b/dom/plugins/ipc/PPluginModule.ipdl @@ -68,6 +68,10 @@ both: async PPluginIdentifier(nsCString aString, int32_t aInt); + // Window-specific message which instructs the RPC mechanism to enter + // a nested event loop for the current RPC call. + async ProcessNativeEventsInRPCCall(); + child: // Forces the child process to update its plugin function table. rpc NP_GetEntryPoints() @@ -123,10 +127,6 @@ parent: // native events, then "livelock" and some other glitches can occur. rpc ProcessSomeEvents(); - // Window-specific message which instructs the RPC mechanism to enter - // a nested event loop for the current RPC call. - async ProcessNativeEventsInRPCCall(); - sync AppendNotesToCrashReport(nsCString aNotes); // OS X Specific calls to manage the plugin's window diff --git a/dom/plugins/ipc/PluginInstanceParent.cpp b/dom/plugins/ipc/PluginInstanceParent.cpp index 8279176e1759..0694fb7fd873 100644 --- a/dom/plugins/ipc/PluginInstanceParent.cpp +++ b/dom/plugins/ipc/PluginInstanceParent.cpp @@ -1741,7 +1741,7 @@ PluginInstanceParent::AnswerPluginFocusChange(const bool& gotFocus) // focus. We forward the event down to widget so the dom/focus manager can // be updated. #if defined(OS_WIN) - AutoRestore ar(mInAnswerFocusChange) + AutoRestore ar(mInAnswerFocusChange); mInAnswerFocusChange = true; ::SendMessage(mPluginHWND, gOOPPPluginFocusEvent, gotFocus ? 1 : 0, 0); return true; diff --git a/dom/plugins/ipc/PluginModuleChild.cpp b/dom/plugins/ipc/PluginModuleChild.cpp index ff964e851959..b245aec911d1 100644 --- a/dom/plugins/ipc/PluginModuleChild.cpp +++ b/dom/plugins/ipc/PluginModuleChild.cpp @@ -2295,6 +2295,20 @@ PluginModuleChild::ResetEventHooks() } #endif +bool +PluginModuleChild::RecvProcessNativeEventsInRPCCall() +{ + PLUGIN_LOG_DEBUG(("%s", FULLFUNCTION)); +#if defined(OS_WIN) + ProcessNativeEventsInRPCCall(); + return true; +#else + NS_RUNTIMEABORT( + "PluginModuleChild::RecvProcessNativeEventsInRPCCall not implemented!"); + return false; +#endif +} + #ifdef OS_MACOSX void PluginModuleChild::ProcessNativeEvents() { diff --git a/dom/plugins/ipc/PluginModuleChild.h b/dom/plugins/ipc/PluginModuleChild.h index 871309539b0b..1585cd6bc1ea 100644 --- a/dom/plugins/ipc/PluginModuleChild.h +++ b/dom/plugins/ipc/PluginModuleChild.h @@ -157,6 +157,9 @@ protected: NS_NORETURN void QuickExit(); + NS_OVERRIDE virtual bool + RecvProcessNativeEventsInRPCCall(); + public: PluginModuleChild(); virtual ~PluginModuleChild(); diff --git a/dom/plugins/ipc/PluginModuleParent.cpp b/dom/plugins/ipc/PluginModuleParent.cpp index eca761a9402e..18a3703a42fe 100644 --- a/dom/plugins/ipc/PluginModuleParent.cpp +++ b/dom/plugins/ipc/PluginModuleParent.cpp @@ -1000,11 +1000,22 @@ PluginModuleParent::RecvProcessNativeEventsInRPCCall() return true; #else NS_NOTREACHED( - "PluginInstanceParent::RecvProcessNativeEventsInRPCCall not implemented!"); + "PluginModuleParent::RecvProcessNativeEventsInRPCCall not implemented!"); return false; #endif } +void +PluginModuleParent::ProcessRemoteNativeEventsInRPCCall() +{ +#if defined(OS_WIN) + SendProcessNativeEventsInRPCCall(); + return; +#endif + NS_NOTREACHED( + "PluginModuleParent::ProcessRemoteNativeEventsInRPCCall not implemented!"); +} + bool PluginModuleParent::RecvPluginShowWindow(const uint32_t& aWindowId, const bool& aModal, const int32_t& aX, const int32_t& aY, diff --git a/dom/plugins/ipc/PluginModuleParent.h b/dom/plugins/ipc/PluginModuleParent.h index 8cdb2ba47b03..7095e48b09de 100644 --- a/dom/plugins/ipc/PluginModuleParent.h +++ b/dom/plugins/ipc/PluginModuleParent.h @@ -139,6 +139,8 @@ public: PPluginIdentifierParent* GetIdentifierForNPIdentifier(NPIdentifier aIdentifier); + void ProcessRemoteNativeEventsInRPCCall(); + #ifdef OS_MACOSX void AddToRefreshTimer(PluginInstanceParent *aInstance); void RemoveFromRefreshTimer(PluginInstanceParent *aInstance); diff --git a/ipc/glue/RPCChannel.cpp b/ipc/glue/RPCChannel.cpp index 461c00a5fa2a..df9fa5166c83 100644 --- a/ipc/glue/RPCChannel.cpp +++ b/ipc/glue/RPCChannel.cpp @@ -495,6 +495,10 @@ RPCChannel::Incall(const Message& call, size_t stackDepth) // which will make it correct again } +#ifdef OS_WIN + SyncStackFrame frame(this, true); +#endif + DispatchIncall(call); } diff --git a/ipc/glue/RPCChannel.h b/ipc/glue/RPCChannel.h index 451d50ff080e..ccaddd4910c9 100644 --- a/ipc/glue/RPCChannel.h +++ b/ipc/glue/RPCChannel.h @@ -111,6 +111,7 @@ public: { return RRPChildWins; } + virtual void ProcessRemoteNativeEventsInRPCCall() {}; }; RPCChannel(RPCListener* aListener); @@ -178,6 +179,7 @@ public: #ifdef OS_WIN void ProcessNativeEventsInRPCCall(); + static void NotifyGeckoEventDispatch(); protected: bool WaitForNotify(); diff --git a/ipc/glue/SyncChannel.h b/ipc/glue/SyncChannel.h index 8166744b97eb..39ef8c0c1749 100644 --- a/ipc/glue/SyncChannel.h +++ b/ipc/glue/SyncChannel.h @@ -105,6 +105,7 @@ public: bool mRPC; bool mSpinNestedEvents; + bool mListenerNotified; SyncChannel* mChannel; /* the previous stack frame for this channel */ diff --git a/ipc/glue/WindowsMessageLoop.cpp b/ipc/glue/WindowsMessageLoop.cpp index 175c8fec8771..e37f1b520678 100644 --- a/ipc/glue/WindowsMessageLoop.cpp +++ b/ipc/glue/WindowsMessageLoop.cpp @@ -584,6 +584,7 @@ TimeoutHasExpired(const TimeoutData& aData) RPCChannel::SyncStackFrame::SyncStackFrame(SyncChannel* channel, bool rpc) : mRPC(rpc) , mSpinNestedEvents(false) + , mListenerNotified(false) , mChannel(channel) , mPrev(mChannel->mTopFrame) , mStaticPrev(sStaticTopFrame) @@ -617,11 +618,29 @@ RPCChannel::SyncStackFrame::~SyncStackFrame() SyncChannel::SyncStackFrame* SyncChannel::sStaticTopFrame; +// nsAppShell's notification that gecko events are being processed. +// If we are here and there is an RPC Incall active, we are spinning +// a nested gecko event loop. In which case the remote process needs +// to know about it. +void /* static */ +RPCChannel::NotifyGeckoEventDispatch() +{ + // sStaticTopFrame is only valid for RPC channels + if (!sStaticTopFrame || sStaticTopFrame->mListenerNotified) + return; + + sStaticTopFrame->mListenerNotified = true; + RPCChannel* channel = static_cast(sStaticTopFrame->mChannel); + channel->Listener()->ProcessRemoteNativeEventsInRPCCall(); +} + +// invoked by the module that receives the spin event loop +// message. void RPCChannel::ProcessNativeEventsInRPCCall() { if (!mTopFrame) { - NS_ERROR("Child logic error: no RPC frame"); + NS_ERROR("Spin logic error: no RPC frame"); return; } diff --git a/ipc/ipdl/ipdl/lower.py b/ipc/ipdl/ipdl/lower.py index f2f9739acb31..7d2e1e4f6cc2 100644 --- a/ipc/ipdl/ipdl/lower.py +++ b/ipc/ipdl/ipdl/lower.py @@ -2836,8 +2836,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): # User-facing shmem methods self.cls.addstmts(self.makeShmemIface()) - if (ptype.isToplevel() and self.side is 'parent' - and ptype.talksRpc()): + if (ptype.isToplevel() and ptype.talksRpc()): processnative = MethodDefn( MethodDecl('ProcessNativeEventsInRPCCall', ret=Type.VOID)) diff --git a/widget/src/windows/nsAppShell.cpp b/widget/src/windows/nsAppShell.cpp index 082e96e61880..2ee951247997 100644 --- a/widget/src/windows/nsAppShell.cpp +++ b/widget/src/windows/nsAppShell.cpp @@ -38,6 +38,7 @@ * * ***** END LICENSE BLOCK ***** */ +#include "mozilla/ipc/RPCChannel.h" #include "nsAppShell.h" #include "nsToolkit.h" #include "nsThreadUtils.h" @@ -307,6 +308,9 @@ nsAppShell::ProcessNextNativeEvent(PRBool mayWait) } #endif + // Notify ipc we are spinning a (possibly nested) gecko event loop. + mozilla::ipc::RPCChannel::NotifyGeckoEventDispatch(); + PRBool gotMessage = PR_FALSE; do { From dd6678d2a651cf9b2f43cfbd4f0965b450d85ae4 Mon Sep 17 00:00:00 2001 From: Benjamin Smedberg Date: Wed, 18 May 2011 09:05:24 -0400 Subject: [PATCH 186/282] Bug 644626 - Move plugin tests from modules/plugin/test to dom/plugin/test, r=ted --HG-- rename : modules/plugin/test/Makefile.in => dom/plugins/test/Makefile.in rename : modules/plugin/test/crashtests/110650-1.html => dom/plugins/test/crashtests/110650-1.html rename : modules/plugin/test/crashtests/41276-1.html => dom/plugins/test/crashtests/41276-1.html rename : modules/plugin/test/crashtests/48856-1.html => dom/plugins/test/crashtests/48856-1.html rename : modules/plugin/test/crashtests/539897-1.html => dom/plugins/test/crashtests/539897-1.html rename : modules/plugin/test/crashtests/540114-1.html => dom/plugins/test/crashtests/540114-1.html rename : modules/plugin/test/crashtests/570884.html => dom/plugins/test/crashtests/570884.html rename : modules/plugin/test/crashtests/598862.html => dom/plugins/test/crashtests/598862.html rename : modules/plugin/test/crashtests/626602-1.html => dom/plugins/test/crashtests/626602-1.html rename : modules/plugin/test/crashtests/crashtests.list => dom/plugins/test/crashtests/crashtests.list rename : modules/plugin/test/mochitest/307-xo-redirect.sjs => dom/plugins/test/mochitest/307-xo-redirect.sjs rename : modules/plugin/test/mochitest/Makefile.in => dom/plugins/test/mochitest/Makefile.in rename : modules/plugin/test/mochitest/cocoa_focus.html => dom/plugins/test/mochitest/cocoa_focus.html rename : modules/plugin/test/mochitest/cocoa_window_focus.html => dom/plugins/test/mochitest/cocoa_window_focus.html rename : modules/plugin/test/mochitest/crashing_subpage.html => dom/plugins/test/mochitest/crashing_subpage.html rename : modules/plugin/test/mochitest/large-pic.jpg => dom/plugins/test/mochitest/large-pic.jpg rename : modules/plugin/test/mochitest/loremipsum.txt => dom/plugins/test/mochitest/loremipsum.txt rename : modules/plugin/test/mochitest/loremipsum.xtest => dom/plugins/test/mochitest/loremipsum.xtest rename : modules/plugin/test/mochitest/loremipsum.xtest^headers^ => dom/plugins/test/mochitest/loremipsum.xtest^headers^ rename : modules/plugin/test/mochitest/loremipsum_file.txt => dom/plugins/test/mochitest/loremipsum_file.txt rename : modules/plugin/test/mochitest/loremipsum_nocache.txt => dom/plugins/test/mochitest/loremipsum_nocache.txt rename : modules/plugin/test/mochitest/loremipsum_nocache.txt^headers^ => dom/plugins/test/mochitest/loremipsum_nocache.txt^headers^ rename : modules/plugin/test/mochitest/neverending.sjs => dom/plugins/test/mochitest/neverending.sjs rename : modules/plugin/test/mochitest/plugin_visibility_loader.html => dom/plugins/test/mochitest/plugin_visibility_loader.html rename : modules/plugin/test/mochitest/plugin_window.html => dom/plugins/test/mochitest/plugin_window.html rename : modules/plugin/test/mochitest/pluginstream.js => dom/plugins/test/mochitest/pluginstream.js rename : modules/plugin/test/mochitest/post.sjs => dom/plugins/test/mochitest/post.sjs rename : modules/plugin/test/mochitest/test_GCrace.html => dom/plugins/test/mochitest/test_GCrace.html rename : modules/plugin/test/mochitest/test_bug479979.xul => dom/plugins/test/mochitest/test_bug479979.xul rename : modules/plugin/test/mochitest/test_bug532208.html => dom/plugins/test/mochitest/test_bug532208.html rename : modules/plugin/test/mochitest/test_bug539565-1.html => dom/plugins/test/mochitest/test_bug539565-1.html rename : modules/plugin/test/mochitest/test_bug539565-2.html => dom/plugins/test/mochitest/test_bug539565-2.html rename : modules/plugin/test/mochitest/test_clear_site_data.html => dom/plugins/test/mochitest/test_clear_site_data.html rename : modules/plugin/test/mochitest/test_cocoa_focus.html => dom/plugins/test/mochitest/test_cocoa_focus.html rename : modules/plugin/test/mochitest/test_cocoa_window_focus.html => dom/plugins/test/mochitest/test_cocoa_window_focus.html rename : modules/plugin/test/mochitest/test_convertpoint.xul => dom/plugins/test/mochitest/test_convertpoint.xul rename : modules/plugin/test/mochitest/test_cookies.html => dom/plugins/test/mochitest/test_cookies.html rename : modules/plugin/test/mochitest/test_copyText.html => dom/plugins/test/mochitest/test_copyText.html rename : modules/plugin/test/mochitest/test_crash_nested_loop.html => dom/plugins/test/mochitest/test_crash_nested_loop.html rename : modules/plugin/test/mochitest/test_crash_notify.xul => dom/plugins/test/mochitest/test_crash_notify.xul rename : modules/plugin/test/mochitest/test_crash_notify_no_report.xul => dom/plugins/test/mochitest/test_crash_notify_no_report.xul rename : modules/plugin/test/mochitest/test_crash_submit.xul => dom/plugins/test/mochitest/test_crash_submit.xul rename : modules/plugin/test/mochitest/test_crashing.html => dom/plugins/test/mochitest/test_crashing.html rename : modules/plugin/test/mochitest/test_crashing2.html => dom/plugins/test/mochitest/test_crashing2.html rename : modules/plugin/test/mochitest/test_enumerate.html => dom/plugins/test/mochitest/test_enumerate.html rename : modules/plugin/test/mochitest/test_fullpage.html => dom/plugins/test/mochitest/test_fullpage.html rename : modules/plugin/test/mochitest/test_getauthenticationinfo.html => dom/plugins/test/mochitest/test_getauthenticationinfo.html rename : modules/plugin/test/mochitest/test_hanging.html => dom/plugins/test/mochitest/test_hanging.html rename : modules/plugin/test/mochitest/test_instantiation.html => dom/plugins/test/mochitest/test_instantiation.html rename : modules/plugin/test/mochitest/test_multipleinstanceobjects.html => dom/plugins/test/mochitest/test_multipleinstanceobjects.html rename : modules/plugin/test/mochitest/test_newstreamondestroy.html => dom/plugins/test/mochitest/test_newstreamondestroy.html rename : modules/plugin/test/mochitest/test_npn_asynccall.html => dom/plugins/test/mochitest/test_npn_asynccall.html rename : modules/plugin/test/mochitest/test_npn_timers.html => dom/plugins/test/mochitest/test_npn_timers.html rename : modules/plugin/test/mochitest/test_npobject_getters.html => dom/plugins/test/mochitest/test_npobject_getters.html rename : modules/plugin/test/mochitest/test_npruntime.xul => dom/plugins/test/mochitest/test_npruntime.xul rename : modules/plugin/test/mochitest/test_npruntime_construct.html => dom/plugins/test/mochitest/test_npruntime_construct.html rename : modules/plugin/test/mochitest/test_npruntime_identifiers.html => dom/plugins/test/mochitest/test_npruntime_identifiers.html rename : modules/plugin/test/mochitest/test_npruntime_npnevaluate.html => dom/plugins/test/mochitest/test_npruntime_npnevaluate.html rename : modules/plugin/test/mochitest/test_npruntime_npninvoke.html => dom/plugins/test/mochitest/test_npruntime_npninvoke.html rename : modules/plugin/test/mochitest/test_npruntime_npninvokedefault.html => dom/plugins/test/mochitest/test_npruntime_npninvokedefault.html rename : modules/plugin/test/mochitest/test_npruntime_npnsetexception.html => dom/plugins/test/mochitest/test_npruntime_npnsetexception.html rename : modules/plugin/test/mochitest/test_painting.html => dom/plugins/test/mochitest/test_painting.html rename : modules/plugin/test/mochitest/test_plugin_scroll_painting.html => dom/plugins/test/mochitest/test_plugin_scroll_painting.html rename : modules/plugin/test/mochitest/test_pluginstream_asfile.html => dom/plugins/test/mochitest/test_pluginstream_asfile.html rename : modules/plugin/test/mochitest/test_pluginstream_asfileonly.html => dom/plugins/test/mochitest/test_pluginstream_asfileonly.html rename : modules/plugin/test/mochitest/test_pluginstream_err.html => dom/plugins/test/mochitest/test_pluginstream_err.html rename : modules/plugin/test/mochitest/test_pluginstream_geturl.html => dom/plugins/test/mochitest/test_pluginstream_geturl.html rename : modules/plugin/test/mochitest/test_pluginstream_geturlnotify.html => dom/plugins/test/mochitest/test_pluginstream_geturlnotify.html rename : modules/plugin/test/mochitest/test_pluginstream_newstream.html => dom/plugins/test/mochitest/test_pluginstream_newstream.html rename : modules/plugin/test/mochitest/test_pluginstream_post.html => dom/plugins/test/mochitest/test_pluginstream_post.html rename : modules/plugin/test/mochitest/test_pluginstream_poststream.html => dom/plugins/test/mochitest/test_pluginstream_poststream.html rename : modules/plugin/test/mochitest/test_pluginstream_seek.html => dom/plugins/test/mochitest/test_pluginstream_seek.html rename : modules/plugin/test/mochitest/test_pluginstream_seek_close.html => dom/plugins/test/mochitest/test_pluginstream_seek_close.html rename : modules/plugin/test/mochitest/test_pluginstream_src.html => dom/plugins/test/mochitest/test_pluginstream_src.html rename : modules/plugin/test/mochitest/test_positioning.html => dom/plugins/test/mochitest/test_positioning.html rename : modules/plugin/test/mochitest/test_privatemode.xul => dom/plugins/test/mochitest/test_privatemode.xul rename : modules/plugin/test/mochitest/test_propertyAndMethod.html => dom/plugins/test/mochitest/test_propertyAndMethod.html rename : modules/plugin/test/mochitest/test_redirect_handling.html => dom/plugins/test/mochitest/test_redirect_handling.html rename : modules/plugin/test/mochitest/test_streamNotify.html => dom/plugins/test/mochitest/test_streamNotify.html rename : modules/plugin/test/mochitest/test_streamatclose.html => dom/plugins/test/mochitest/test_streamatclose.html rename : modules/plugin/test/mochitest/test_twostreams.html => dom/plugins/test/mochitest/test_twostreams.html rename : modules/plugin/test/mochitest/test_visibility.html => dom/plugins/test/mochitest/test_visibility.html rename : modules/plugin/test/mochitest/test_windowed_invalidate.html => dom/plugins/test/mochitest/test_windowed_invalidate.html rename : modules/plugin/test/mochitest/test_wmode.xul => dom/plugins/test/mochitest/test_wmode.xul rename : modules/plugin/test/mochitest/test_xulbrowser_plugin_visibility.xul => dom/plugins/test/mochitest/test_xulbrowser_plugin_visibility.xul rename : modules/plugin/test/mochitest/test_zero_opacity.html => dom/plugins/test/mochitest/test_zero_opacity.html rename : modules/plugin/test/mochitest/utils.js => dom/plugins/test/mochitest/utils.js rename : modules/plugin/test/mochitest/xulbrowser_plugin_visibility.xul => dom/plugins/test/mochitest/xulbrowser_plugin_visibility.xul rename : modules/plugin/test/reftest/border-padding-1-ref.html => dom/plugins/test/reftest/border-padding-1-ref.html rename : modules/plugin/test/reftest/border-padding-1.html => dom/plugins/test/reftest/border-padding-1.html rename : modules/plugin/test/reftest/border-padding-2-ref.html => dom/plugins/test/reftest/border-padding-2-ref.html rename : modules/plugin/test/reftest/border-padding-2.html => dom/plugins/test/reftest/border-padding-2.html rename : modules/plugin/test/reftest/border-padding-3-ref.html => dom/plugins/test/reftest/border-padding-3-ref.html rename : modules/plugin/test/reftest/border-padding-3.html => dom/plugins/test/reftest/border-padding-3.html rename : modules/plugin/test/reftest/div-alpha-opacity.html => dom/plugins/test/reftest/div-alpha-opacity.html rename : modules/plugin/test/reftest/div-alpha-zindex.html => dom/plugins/test/reftest/div-alpha-zindex.html rename : modules/plugin/test/reftest/div-sanity.html => dom/plugins/test/reftest/div-sanity.html rename : modules/plugin/test/reftest/plugin-alpha-opacity.html => dom/plugins/test/reftest/plugin-alpha-opacity.html rename : modules/plugin/test/reftest/plugin-alpha-zindex.html => dom/plugins/test/reftest/plugin-alpha-zindex.html rename : modules/plugin/test/reftest/plugin-background-1-step.html => dom/plugins/test/reftest/plugin-background-1-step.html rename : modules/plugin/test/reftest/plugin-background-10-step.html => dom/plugins/test/reftest/plugin-background-10-step.html rename : modules/plugin/test/reftest/plugin-background-2-step.html => dom/plugins/test/reftest/plugin-background-2-step.html rename : modules/plugin/test/reftest/plugin-background-5-step.html => dom/plugins/test/reftest/plugin-background-5-step.html rename : modules/plugin/test/reftest/plugin-background-ref.html => dom/plugins/test/reftest/plugin-background-ref.html rename : modules/plugin/test/reftest/plugin-background.css => dom/plugins/test/reftest/plugin-background.css rename : modules/plugin/test/reftest/plugin-background.html => dom/plugins/test/reftest/plugin-background.html rename : modules/plugin/test/reftest/plugin-background.js => dom/plugins/test/reftest/plugin-background.js rename : modules/plugin/test/reftest/plugin-busy-alpha-zindex.html => dom/plugins/test/reftest/plugin-busy-alpha-zindex.html rename : modules/plugin/test/reftest/plugin-canvas-alpha-zindex.html => dom/plugins/test/reftest/plugin-canvas-alpha-zindex.html rename : modules/plugin/test/reftest/plugin-sanity.html => dom/plugins/test/reftest/plugin-sanity.html rename : modules/plugin/test/reftest/plugin-transform-1-ref.html => dom/plugins/test/reftest/plugin-transform-1-ref.html rename : modules/plugin/test/reftest/plugin-transform-1.html => dom/plugins/test/reftest/plugin-transform-1.html rename : modules/plugin/test/reftest/plugin-transform-2-ref.html => dom/plugins/test/reftest/plugin-transform-2-ref.html rename : modules/plugin/test/reftest/plugin-transform-2.html => dom/plugins/test/reftest/plugin-transform-2.html rename : modules/plugin/test/reftest/plugin-transform-alpha-zindex.html => dom/plugins/test/reftest/plugin-transform-alpha-zindex.html rename : modules/plugin/test/reftest/pluginproblemui-direction-1-ref.html => dom/plugins/test/reftest/pluginproblemui-direction-1-ref.html rename : modules/plugin/test/reftest/pluginproblemui-direction-1.html => dom/plugins/test/reftest/pluginproblemui-direction-1.html rename : modules/plugin/test/reftest/pluginproblemui-direction-2-ref.html => dom/plugins/test/reftest/pluginproblemui-direction-2-ref.html rename : modules/plugin/test/reftest/pluginproblemui-direction-2.html => dom/plugins/test/reftest/pluginproblemui-direction-2.html rename : modules/plugin/test/reftest/reftest.list => dom/plugins/test/reftest/reftest.list rename : modules/plugin/test/reftest/windowless-clipping-1-ref.html => dom/plugins/test/reftest/windowless-clipping-1-ref.html rename : modules/plugin/test/reftest/windowless-clipping-1.html => dom/plugins/test/reftest/windowless-clipping-1.html rename : modules/plugin/test/testplugin/Info.plist => dom/plugins/test/testplugin/Info.plist rename : modules/plugin/test/testplugin/Makefile.in => dom/plugins/test/testplugin/Makefile.in rename : modules/plugin/test/testplugin/README => dom/plugins/test/testplugin/README rename : modules/plugin/test/testplugin/nptest.cpp => dom/plugins/test/testplugin/nptest.cpp rename : modules/plugin/test/testplugin/nptest.def => dom/plugins/test/testplugin/nptest.def rename : modules/plugin/test/testplugin/nptest.h => dom/plugins/test/testplugin/nptest.h rename : modules/plugin/test/testplugin/nptest.rc => dom/plugins/test/testplugin/nptest.rc rename : modules/plugin/test/testplugin/nptest_droid.cpp => dom/plugins/test/testplugin/nptest_droid.cpp rename : modules/plugin/test/testplugin/nptest_gtk2.cpp => dom/plugins/test/testplugin/nptest_gtk2.cpp rename : modules/plugin/test/testplugin/nptest_macosx.mm => dom/plugins/test/testplugin/nptest_macosx.mm rename : modules/plugin/test/testplugin/nptest_os2.cpp => dom/plugins/test/testplugin/nptest_os2.cpp rename : modules/plugin/test/testplugin/nptest_platform.h => dom/plugins/test/testplugin/nptest_platform.h rename : modules/plugin/test/testplugin/nptest_qt.cpp => dom/plugins/test/testplugin/nptest_qt.cpp rename : modules/plugin/test/testplugin/nptest_utils.cpp => dom/plugins/test/testplugin/nptest_utils.cpp rename : modules/plugin/test/testplugin/nptest_utils.h => dom/plugins/test/testplugin/nptest_utils.h rename : modules/plugin/test/testplugin/nptest_windows.cpp => dom/plugins/test/testplugin/nptest_windows.cpp rename : modules/plugin/test/unit/head_plugins.js => dom/plugins/test/unit/head_plugins.js rename : modules/plugin/test/unit/test_bug455213.js => dom/plugins/test/unit/test_bug455213.js rename : modules/plugin/test/unit/test_bug471245.js => dom/plugins/test/unit/test_bug471245.js --- dom/Makefile.in | 8 +++ dom/plugins/base/Makefile.in | 4 ++ .../plugin => dom/plugins}/test/Makefile.in | 2 +- .../plugins}/test/crashtests/110650-1.html | 0 .../plugins}/test/crashtests/41276-1.html | 0 .../plugins}/test/crashtests/48856-1.html | 0 .../plugins}/test/crashtests/539897-1.html | 0 .../plugins}/test/crashtests/540114-1.html | 0 .../plugins}/test/crashtests/570884.html | 0 .../plugins}/test/crashtests/598862.html | 0 .../plugins}/test/crashtests/626602-1.html | 0 .../plugins}/test/crashtests/crashtests.list | 0 .../test/mochitest/307-xo-redirect.sjs | 2 +- .../plugins}/test/mochitest/Makefile.in | 2 +- .../plugins}/test/mochitest/cocoa_focus.html | 0 .../test/mochitest/cocoa_window_focus.html | 0 .../test/mochitest/crashing_subpage.html | 0 .../plugins}/test/mochitest/large-pic.jpg | Bin .../plugins}/test/mochitest/loremipsum.txt | 0 .../plugins}/test/mochitest/loremipsum.xtest | 0 .../test/mochitest/loremipsum.xtest^headers^ | 0 .../test/mochitest/loremipsum_file.txt | 0 .../test/mochitest/loremipsum_nocache.txt | 0 .../mochitest/loremipsum_nocache.txt^headers^ | 0 .../plugins}/test/mochitest/neverending.sjs | 0 .../mochitest/plugin_visibility_loader.html | 0 .../test/mochitest/plugin_window.html | 0 .../plugins}/test/mochitest/pluginstream.js | 0 .../plugins}/test/mochitest/post.sjs | 0 .../plugins}/test/mochitest/test_GCrace.html | 0 .../test/mochitest/test_bug479979.xul | 0 .../test/mochitest/test_bug532208.html | 0 .../test/mochitest/test_bug539565-1.html | 0 .../test/mochitest/test_bug539565-2.html | 0 .../test/mochitest/test_clear_site_data.html | 0 .../test/mochitest/test_cocoa_focus.html | 0 .../mochitest/test_cocoa_window_focus.html | 0 .../test/mochitest/test_convertpoint.xul | 0 .../plugins}/test/mochitest/test_cookies.html | 0 .../test/mochitest/test_copyText.html | 0 .../mochitest/test_crash_nested_loop.html | 0 .../test/mochitest/test_crash_notify.xul | 0 .../mochitest/test_crash_notify_no_report.xul | 0 .../test/mochitest/test_crash_submit.xul | 0 .../test/mochitest/test_crashing.html | 0 .../test/mochitest/test_crashing2.html | 0 .../test/mochitest/test_enumerate.html | 0 .../test/mochitest/test_fullpage.html | 0 .../mochitest/test_getauthenticationinfo.html | 0 .../plugins}/test/mochitest/test_hanging.html | 0 .../test/mochitest/test_instantiation.html | 0 .../test_multipleinstanceobjects.html | 0 .../mochitest/test_newstreamondestroy.html | 0 .../test/mochitest/test_npn_asynccall.html | 0 .../test/mochitest/test_npn_timers.html | 0 .../test/mochitest/test_npobject_getters.html | 0 .../test/mochitest/test_npruntime.xul | 0 .../mochitest/test_npruntime_construct.html | 0 .../mochitest/test_npruntime_identifiers.html | 0 .../mochitest/test_npruntime_npnevaluate.html | 0 .../mochitest/test_npruntime_npninvoke.html | 0 .../test_npruntime_npninvokedefault.html | 0 .../test_npruntime_npnsetexception.html | 0 .../test/mochitest/test_painting.html | 0 .../test_plugin_scroll_painting.html | 0 .../mochitest/test_pluginstream_asfile.html | 0 .../test_pluginstream_asfileonly.html | 0 .../test/mochitest/test_pluginstream_err.html | 0 .../mochitest/test_pluginstream_geturl.html | 0 .../test_pluginstream_geturlnotify.html | 0 .../test_pluginstream_newstream.html | 0 .../mochitest/test_pluginstream_post.html | 0 .../test_pluginstream_poststream.html | 0 .../mochitest/test_pluginstream_seek.html | 0 .../test_pluginstream_seek_close.html | 0 .../test/mochitest/test_pluginstream_src.html | 0 .../test/mochitest/test_positioning.html | 0 .../test/mochitest/test_privatemode.xul | 0 .../mochitest/test_propertyAndMethod.html | 0 .../mochitest/test_redirect_handling.html | 2 +- .../test/mochitest/test_streamNotify.html | 0 .../test/mochitest/test_streamatclose.html | 0 .../test/mochitest/test_twostreams.html | 0 .../test/mochitest/test_visibility.html | 0 .../mochitest/test_windowed_invalidate.html | 0 .../plugins}/test/mochitest/test_wmode.xul | 0 .../test_xulbrowser_plugin_visibility.xul | 0 .../test/mochitest/test_zero_opacity.html | 0 .../plugins}/test/mochitest/utils.js | 0 .../xulbrowser_plugin_visibility.xul | 2 +- .../test/reftest/border-padding-1-ref.html | 0 .../test/reftest/border-padding-1.html | 0 .../test/reftest/border-padding-2-ref.html | 0 .../test/reftest/border-padding-2.html | 0 .../test/reftest/border-padding-3-ref.html | 0 .../test/reftest/border-padding-3.html | 0 .../test/reftest/div-alpha-opacity.html | 0 .../test/reftest/div-alpha-zindex.html | 0 .../plugins}/test/reftest/div-sanity.html | 0 .../test/reftest/plugin-alpha-opacity.html | 0 .../test/reftest/plugin-alpha-zindex.html | 0 .../reftest/plugin-background-1-step.html | 0 .../reftest/plugin-background-10-step.html | 0 .../reftest/plugin-background-2-step.html | 0 .../reftest/plugin-background-5-step.html | 0 .../test/reftest/plugin-background-ref.html | 0 .../test/reftest/plugin-background.css | 0 .../test/reftest/plugin-background.html | 0 .../test/reftest/plugin-background.js | 0 .../reftest/plugin-busy-alpha-zindex.html | 0 .../reftest/plugin-canvas-alpha-zindex.html | 0 .../plugins}/test/reftest/plugin-sanity.html | 0 .../test/reftest/plugin-transform-1-ref.html | 0 .../test/reftest/plugin-transform-1.html | 0 .../test/reftest/plugin-transform-2-ref.html | 0 .../test/reftest/plugin-transform-2.html | 0 .../plugin-transform-alpha-zindex.html | 0 .../pluginproblemui-direction-1-ref.html | 0 .../reftest/pluginproblemui-direction-1.html | 0 .../pluginproblemui-direction-2-ref.html | 0 .../reftest/pluginproblemui-direction-2.html | 0 .../plugins}/test/reftest/reftest.list | 0 .../reftest/windowless-clipping-1-ref.html | 0 .../test/reftest/windowless-clipping-1.html | 0 .../plugins}/test/testplugin/Info.plist | 0 .../plugins}/test/testplugin/Makefile.in | 0 .../plugins}/test/testplugin/README | 0 .../plugins}/test/testplugin/nptest.cpp | 0 .../plugins}/test/testplugin/nptest.def | 0 .../plugins}/test/testplugin/nptest.h | 0 .../plugins}/test/testplugin/nptest.rc | 0 .../plugins}/test/testplugin/nptest_droid.cpp | 0 .../plugins}/test/testplugin/nptest_gtk2.cpp | 0 .../plugins}/test/testplugin/nptest_macosx.mm | 0 .../plugins}/test/testplugin/nptest_os2.cpp | 0 .../test/testplugin/nptest_platform.h | 0 .../plugins}/test/testplugin/nptest_qt.cpp | 0 .../plugins}/test/testplugin/nptest_utils.cpp | 0 .../plugins}/test/testplugin/nptest_utils.h | 0 .../test/testplugin/nptest_windows.cpp | 0 .../plugins}/test/unit/head_plugins.js | 0 .../plugins}/test/unit/test_bug455213.js | 0 .../plugins}/test/unit/test_bug471245.js | 0 layout/reftests/reftest.list | 2 +- modules/plugin/Makefile.in | 61 ------------------ testing/crashtest/crashtests.list | 2 +- testing/mochitest/runtests.py | 2 +- testing/testsuite-targets.mk | 8 +-- toolkit/toolkit-makefiles.sh | 10 +-- toolkit/toolkit-tiers.mk | 1 - 150 files changed, 27 insertions(+), 81 deletions(-) rename {modules/plugin => dom/plugins}/test/Makefile.in (98%) rename {modules/plugin => dom/plugins}/test/crashtests/110650-1.html (100%) rename {modules/plugin => dom/plugins}/test/crashtests/41276-1.html (100%) rename {modules/plugin => dom/plugins}/test/crashtests/48856-1.html (100%) rename {modules/plugin => dom/plugins}/test/crashtests/539897-1.html (100%) rename {modules/plugin => dom/plugins}/test/crashtests/540114-1.html (100%) rename {modules/plugin => dom/plugins}/test/crashtests/570884.html (100%) rename {modules/plugin => dom/plugins}/test/crashtests/598862.html (100%) rename {modules/plugin => dom/plugins}/test/crashtests/626602-1.html (100%) rename {modules/plugin => dom/plugins}/test/crashtests/crashtests.list (100%) rename {modules/plugin => dom/plugins}/test/mochitest/307-xo-redirect.sjs (63%) rename {modules/plugin => dom/plugins}/test/mochitest/Makefile.in (99%) rename {modules/plugin => dom/plugins}/test/mochitest/cocoa_focus.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/cocoa_window_focus.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/crashing_subpage.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/large-pic.jpg (100%) rename {modules/plugin => dom/plugins}/test/mochitest/loremipsum.txt (100%) rename {modules/plugin => dom/plugins}/test/mochitest/loremipsum.xtest (100%) rename {modules/plugin => dom/plugins}/test/mochitest/loremipsum.xtest^headers^ (100%) rename {modules/plugin => dom/plugins}/test/mochitest/loremipsum_file.txt (100%) rename {modules/plugin => dom/plugins}/test/mochitest/loremipsum_nocache.txt (100%) rename {modules/plugin => dom/plugins}/test/mochitest/loremipsum_nocache.txt^headers^ (100%) rename {modules/plugin => dom/plugins}/test/mochitest/neverending.sjs (100%) rename {modules/plugin => dom/plugins}/test/mochitest/plugin_visibility_loader.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/plugin_window.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/pluginstream.js (100%) rename {modules/plugin => dom/plugins}/test/mochitest/post.sjs (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_GCrace.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_bug479979.xul (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_bug532208.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_bug539565-1.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_bug539565-2.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_clear_site_data.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_cocoa_focus.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_cocoa_window_focus.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_convertpoint.xul (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_cookies.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_copyText.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_crash_nested_loop.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_crash_notify.xul (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_crash_notify_no_report.xul (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_crash_submit.xul (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_crashing.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_crashing2.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_enumerate.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_fullpage.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_getauthenticationinfo.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_hanging.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_instantiation.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_multipleinstanceobjects.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_newstreamondestroy.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_npn_asynccall.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_npn_timers.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_npobject_getters.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_npruntime.xul (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_npruntime_construct.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_npruntime_identifiers.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_npruntime_npnevaluate.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_npruntime_npninvoke.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_npruntime_npninvokedefault.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_npruntime_npnsetexception.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_painting.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_plugin_scroll_painting.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_pluginstream_asfile.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_pluginstream_asfileonly.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_pluginstream_err.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_pluginstream_geturl.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_pluginstream_geturlnotify.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_pluginstream_newstream.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_pluginstream_post.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_pluginstream_poststream.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_pluginstream_seek.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_pluginstream_seek_close.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_pluginstream_src.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_positioning.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_privatemode.xul (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_propertyAndMethod.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_redirect_handling.html (95%) rename {modules/plugin => dom/plugins}/test/mochitest/test_streamNotify.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_streamatclose.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_twostreams.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_visibility.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_windowed_invalidate.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_wmode.xul (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_xulbrowser_plugin_visibility.xul (100%) rename {modules/plugin => dom/plugins}/test/mochitest/test_zero_opacity.html (100%) rename {modules/plugin => dom/plugins}/test/mochitest/utils.js (100%) rename {modules/plugin => dom/plugins}/test/mochitest/xulbrowser_plugin_visibility.xul (94%) rename {modules/plugin => dom/plugins}/test/reftest/border-padding-1-ref.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/border-padding-1.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/border-padding-2-ref.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/border-padding-2.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/border-padding-3-ref.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/border-padding-3.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/div-alpha-opacity.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/div-alpha-zindex.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/div-sanity.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-alpha-opacity.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-alpha-zindex.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-background-1-step.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-background-10-step.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-background-2-step.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-background-5-step.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-background-ref.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-background.css (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-background.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-background.js (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-busy-alpha-zindex.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-canvas-alpha-zindex.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-sanity.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-transform-1-ref.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-transform-1.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-transform-2-ref.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-transform-2.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/plugin-transform-alpha-zindex.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/pluginproblemui-direction-1-ref.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/pluginproblemui-direction-1.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/pluginproblemui-direction-2-ref.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/pluginproblemui-direction-2.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/reftest.list (100%) rename {modules/plugin => dom/plugins}/test/reftest/windowless-clipping-1-ref.html (100%) rename {modules/plugin => dom/plugins}/test/reftest/windowless-clipping-1.html (100%) rename {modules/plugin => dom/plugins}/test/testplugin/Info.plist (100%) rename {modules/plugin => dom/plugins}/test/testplugin/Makefile.in (100%) rename {modules/plugin => dom/plugins}/test/testplugin/README (100%) rename {modules/plugin => dom/plugins}/test/testplugin/nptest.cpp (100%) rename {modules/plugin => dom/plugins}/test/testplugin/nptest.def (100%) rename {modules/plugin => dom/plugins}/test/testplugin/nptest.h (100%) rename {modules/plugin => dom/plugins}/test/testplugin/nptest.rc (100%) rename {modules/plugin => dom/plugins}/test/testplugin/nptest_droid.cpp (100%) rename {modules/plugin => dom/plugins}/test/testplugin/nptest_gtk2.cpp (100%) rename {modules/plugin => dom/plugins}/test/testplugin/nptest_macosx.mm (100%) rename {modules/plugin => dom/plugins}/test/testplugin/nptest_os2.cpp (100%) rename {modules/plugin => dom/plugins}/test/testplugin/nptest_platform.h (100%) rename {modules/plugin => dom/plugins}/test/testplugin/nptest_qt.cpp (100%) rename {modules/plugin => dom/plugins}/test/testplugin/nptest_utils.cpp (100%) rename {modules/plugin => dom/plugins}/test/testplugin/nptest_utils.h (100%) rename {modules/plugin => dom/plugins}/test/testplugin/nptest_windows.cpp (100%) rename {modules/plugin => dom/plugins}/test/unit/head_plugins.js (100%) rename {modules/plugin => dom/plugins}/test/unit/test_bug455213.js (100%) rename {modules/plugin => dom/plugins}/test/unit/test_bug471245.js (100%) delete mode 100644 modules/plugin/Makefile.in diff --git a/dom/Makefile.in b/dom/Makefile.in index ab5772684bce..d303dc8df198 100644 --- a/dom/Makefile.in +++ b/dom/Makefile.in @@ -81,6 +81,7 @@ DIRS += \ locales \ plugins/base \ plugins/ipc \ + plugins/test \ indexedDB \ system \ ipc \ @@ -88,6 +89,13 @@ DIRS += \ ifdef ENABLE_TESTS DIRS += tests + +# These subdirs rely on GTK libraries and header files, it is not +# buildable on other non-GTK unix builds + +ifneq (,$(filter gtk2 cocoa windows android qt os2,$(MOZ_WIDGET_TOOLKIT))) +DIRS += plugins/test +endif endif include $(topsrcdir)/config/rules.mk diff --git a/dom/plugins/base/Makefile.in b/dom/plugins/base/Makefile.in index 663cb1203a52..e1671df1c897 100644 --- a/dom/plugins/base/Makefile.in +++ b/dom/plugins/base/Makefile.in @@ -165,3 +165,7 @@ ifeq ($(MOZ_WIDGET_TOOLKIT),qt) EXTRA_DSO_LDOPTS += $(XEXT_LIBS) $(XCOMPOSITE_LIBS) endif +$(DIST)/bin/plugins: + $(NSINSTALL) -D $@ + +export:: $(DIST)/bin/plugins diff --git a/modules/plugin/test/Makefile.in b/dom/plugins/test/Makefile.in similarity index 98% rename from modules/plugin/test/Makefile.in rename to dom/plugins/test/Makefile.in index 1197387440c7..bbb390e3741d 100644 --- a/modules/plugin/test/Makefile.in +++ b/dom/plugins/test/Makefile.in @@ -40,7 +40,7 @@ DEPTH = ../../.. topsrcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ -relativesrcdir = modules/plugin/test +relativesrcdir = dom/plugins/test include $(DEPTH)/config/autoconf.mk diff --git a/modules/plugin/test/crashtests/110650-1.html b/dom/plugins/test/crashtests/110650-1.html similarity index 100% rename from modules/plugin/test/crashtests/110650-1.html rename to dom/plugins/test/crashtests/110650-1.html diff --git a/modules/plugin/test/crashtests/41276-1.html b/dom/plugins/test/crashtests/41276-1.html similarity index 100% rename from modules/plugin/test/crashtests/41276-1.html rename to dom/plugins/test/crashtests/41276-1.html diff --git a/modules/plugin/test/crashtests/48856-1.html b/dom/plugins/test/crashtests/48856-1.html similarity index 100% rename from modules/plugin/test/crashtests/48856-1.html rename to dom/plugins/test/crashtests/48856-1.html diff --git a/modules/plugin/test/crashtests/539897-1.html b/dom/plugins/test/crashtests/539897-1.html similarity index 100% rename from modules/plugin/test/crashtests/539897-1.html rename to dom/plugins/test/crashtests/539897-1.html diff --git a/modules/plugin/test/crashtests/540114-1.html b/dom/plugins/test/crashtests/540114-1.html similarity index 100% rename from modules/plugin/test/crashtests/540114-1.html rename to dom/plugins/test/crashtests/540114-1.html diff --git a/modules/plugin/test/crashtests/570884.html b/dom/plugins/test/crashtests/570884.html similarity index 100% rename from modules/plugin/test/crashtests/570884.html rename to dom/plugins/test/crashtests/570884.html diff --git a/modules/plugin/test/crashtests/598862.html b/dom/plugins/test/crashtests/598862.html similarity index 100% rename from modules/plugin/test/crashtests/598862.html rename to dom/plugins/test/crashtests/598862.html diff --git a/modules/plugin/test/crashtests/626602-1.html b/dom/plugins/test/crashtests/626602-1.html similarity index 100% rename from modules/plugin/test/crashtests/626602-1.html rename to dom/plugins/test/crashtests/626602-1.html diff --git a/modules/plugin/test/crashtests/crashtests.list b/dom/plugins/test/crashtests/crashtests.list similarity index 100% rename from modules/plugin/test/crashtests/crashtests.list rename to dom/plugins/test/crashtests/crashtests.list diff --git a/modules/plugin/test/mochitest/307-xo-redirect.sjs b/dom/plugins/test/mochitest/307-xo-redirect.sjs similarity index 63% rename from modules/plugin/test/mochitest/307-xo-redirect.sjs rename to dom/plugins/test/mochitest/307-xo-redirect.sjs index 242805d94a2f..639623c140c5 100644 --- a/modules/plugin/test/mochitest/307-xo-redirect.sjs +++ b/dom/plugins/test/mochitest/307-xo-redirect.sjs @@ -1,6 +1,6 @@ function handleRequest(request, response) { response.setStatusLine(request.httpVersion, 307, "Moved temporarily"); - response.setHeader("Location", "http://example.org/tests/modules/plugin/test/loremipsum.txt"); + response.setHeader("Location", "http://example.org/tests/dom/plugins/test/loremipsum.txt"); response.setHeader("Content-Type", "text/html"); } diff --git a/modules/plugin/test/mochitest/Makefile.in b/dom/plugins/test/mochitest/Makefile.in similarity index 99% rename from modules/plugin/test/mochitest/Makefile.in rename to dom/plugins/test/mochitest/Makefile.in index ac98f2acca99..a84d5fe787d5 100644 --- a/modules/plugin/test/mochitest/Makefile.in +++ b/dom/plugins/test/mochitest/Makefile.in @@ -39,7 +39,7 @@ DEPTH = ../../../.. topsrcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ -relativesrcdir = modules/plugin/test +relativesrcdir = dom/plugins/test include $(DEPTH)/config/autoconf.mk include $(topsrcdir)/config/rules.mk diff --git a/modules/plugin/test/mochitest/cocoa_focus.html b/dom/plugins/test/mochitest/cocoa_focus.html similarity index 100% rename from modules/plugin/test/mochitest/cocoa_focus.html rename to dom/plugins/test/mochitest/cocoa_focus.html diff --git a/modules/plugin/test/mochitest/cocoa_window_focus.html b/dom/plugins/test/mochitest/cocoa_window_focus.html similarity index 100% rename from modules/plugin/test/mochitest/cocoa_window_focus.html rename to dom/plugins/test/mochitest/cocoa_window_focus.html diff --git a/modules/plugin/test/mochitest/crashing_subpage.html b/dom/plugins/test/mochitest/crashing_subpage.html similarity index 100% rename from modules/plugin/test/mochitest/crashing_subpage.html rename to dom/plugins/test/mochitest/crashing_subpage.html diff --git a/modules/plugin/test/mochitest/large-pic.jpg b/dom/plugins/test/mochitest/large-pic.jpg similarity index 100% rename from modules/plugin/test/mochitest/large-pic.jpg rename to dom/plugins/test/mochitest/large-pic.jpg diff --git a/modules/plugin/test/mochitest/loremipsum.txt b/dom/plugins/test/mochitest/loremipsum.txt similarity index 100% rename from modules/plugin/test/mochitest/loremipsum.txt rename to dom/plugins/test/mochitest/loremipsum.txt diff --git a/modules/plugin/test/mochitest/loremipsum.xtest b/dom/plugins/test/mochitest/loremipsum.xtest similarity index 100% rename from modules/plugin/test/mochitest/loremipsum.xtest rename to dom/plugins/test/mochitest/loremipsum.xtest diff --git a/modules/plugin/test/mochitest/loremipsum.xtest^headers^ b/dom/plugins/test/mochitest/loremipsum.xtest^headers^ similarity index 100% rename from modules/plugin/test/mochitest/loremipsum.xtest^headers^ rename to dom/plugins/test/mochitest/loremipsum.xtest^headers^ diff --git a/modules/plugin/test/mochitest/loremipsum_file.txt b/dom/plugins/test/mochitest/loremipsum_file.txt similarity index 100% rename from modules/plugin/test/mochitest/loremipsum_file.txt rename to dom/plugins/test/mochitest/loremipsum_file.txt diff --git a/modules/plugin/test/mochitest/loremipsum_nocache.txt b/dom/plugins/test/mochitest/loremipsum_nocache.txt similarity index 100% rename from modules/plugin/test/mochitest/loremipsum_nocache.txt rename to dom/plugins/test/mochitest/loremipsum_nocache.txt diff --git a/modules/plugin/test/mochitest/loremipsum_nocache.txt^headers^ b/dom/plugins/test/mochitest/loremipsum_nocache.txt^headers^ similarity index 100% rename from modules/plugin/test/mochitest/loremipsum_nocache.txt^headers^ rename to dom/plugins/test/mochitest/loremipsum_nocache.txt^headers^ diff --git a/modules/plugin/test/mochitest/neverending.sjs b/dom/plugins/test/mochitest/neverending.sjs similarity index 100% rename from modules/plugin/test/mochitest/neverending.sjs rename to dom/plugins/test/mochitest/neverending.sjs diff --git a/modules/plugin/test/mochitest/plugin_visibility_loader.html b/dom/plugins/test/mochitest/plugin_visibility_loader.html similarity index 100% rename from modules/plugin/test/mochitest/plugin_visibility_loader.html rename to dom/plugins/test/mochitest/plugin_visibility_loader.html diff --git a/modules/plugin/test/mochitest/plugin_window.html b/dom/plugins/test/mochitest/plugin_window.html similarity index 100% rename from modules/plugin/test/mochitest/plugin_window.html rename to dom/plugins/test/mochitest/plugin_window.html diff --git a/modules/plugin/test/mochitest/pluginstream.js b/dom/plugins/test/mochitest/pluginstream.js similarity index 100% rename from modules/plugin/test/mochitest/pluginstream.js rename to dom/plugins/test/mochitest/pluginstream.js diff --git a/modules/plugin/test/mochitest/post.sjs b/dom/plugins/test/mochitest/post.sjs similarity index 100% rename from modules/plugin/test/mochitest/post.sjs rename to dom/plugins/test/mochitest/post.sjs diff --git a/modules/plugin/test/mochitest/test_GCrace.html b/dom/plugins/test/mochitest/test_GCrace.html similarity index 100% rename from modules/plugin/test/mochitest/test_GCrace.html rename to dom/plugins/test/mochitest/test_GCrace.html diff --git a/modules/plugin/test/mochitest/test_bug479979.xul b/dom/plugins/test/mochitest/test_bug479979.xul similarity index 100% rename from modules/plugin/test/mochitest/test_bug479979.xul rename to dom/plugins/test/mochitest/test_bug479979.xul diff --git a/modules/plugin/test/mochitest/test_bug532208.html b/dom/plugins/test/mochitest/test_bug532208.html similarity index 100% rename from modules/plugin/test/mochitest/test_bug532208.html rename to dom/plugins/test/mochitest/test_bug532208.html diff --git a/modules/plugin/test/mochitest/test_bug539565-1.html b/dom/plugins/test/mochitest/test_bug539565-1.html similarity index 100% rename from modules/plugin/test/mochitest/test_bug539565-1.html rename to dom/plugins/test/mochitest/test_bug539565-1.html diff --git a/modules/plugin/test/mochitest/test_bug539565-2.html b/dom/plugins/test/mochitest/test_bug539565-2.html similarity index 100% rename from modules/plugin/test/mochitest/test_bug539565-2.html rename to dom/plugins/test/mochitest/test_bug539565-2.html diff --git a/modules/plugin/test/mochitest/test_clear_site_data.html b/dom/plugins/test/mochitest/test_clear_site_data.html similarity index 100% rename from modules/plugin/test/mochitest/test_clear_site_data.html rename to dom/plugins/test/mochitest/test_clear_site_data.html diff --git a/modules/plugin/test/mochitest/test_cocoa_focus.html b/dom/plugins/test/mochitest/test_cocoa_focus.html similarity index 100% rename from modules/plugin/test/mochitest/test_cocoa_focus.html rename to dom/plugins/test/mochitest/test_cocoa_focus.html diff --git a/modules/plugin/test/mochitest/test_cocoa_window_focus.html b/dom/plugins/test/mochitest/test_cocoa_window_focus.html similarity index 100% rename from modules/plugin/test/mochitest/test_cocoa_window_focus.html rename to dom/plugins/test/mochitest/test_cocoa_window_focus.html diff --git a/modules/plugin/test/mochitest/test_convertpoint.xul b/dom/plugins/test/mochitest/test_convertpoint.xul similarity index 100% rename from modules/plugin/test/mochitest/test_convertpoint.xul rename to dom/plugins/test/mochitest/test_convertpoint.xul diff --git a/modules/plugin/test/mochitest/test_cookies.html b/dom/plugins/test/mochitest/test_cookies.html similarity index 100% rename from modules/plugin/test/mochitest/test_cookies.html rename to dom/plugins/test/mochitest/test_cookies.html diff --git a/modules/plugin/test/mochitest/test_copyText.html b/dom/plugins/test/mochitest/test_copyText.html similarity index 100% rename from modules/plugin/test/mochitest/test_copyText.html rename to dom/plugins/test/mochitest/test_copyText.html diff --git a/modules/plugin/test/mochitest/test_crash_nested_loop.html b/dom/plugins/test/mochitest/test_crash_nested_loop.html similarity index 100% rename from modules/plugin/test/mochitest/test_crash_nested_loop.html rename to dom/plugins/test/mochitest/test_crash_nested_loop.html diff --git a/modules/plugin/test/mochitest/test_crash_notify.xul b/dom/plugins/test/mochitest/test_crash_notify.xul similarity index 100% rename from modules/plugin/test/mochitest/test_crash_notify.xul rename to dom/plugins/test/mochitest/test_crash_notify.xul diff --git a/modules/plugin/test/mochitest/test_crash_notify_no_report.xul b/dom/plugins/test/mochitest/test_crash_notify_no_report.xul similarity index 100% rename from modules/plugin/test/mochitest/test_crash_notify_no_report.xul rename to dom/plugins/test/mochitest/test_crash_notify_no_report.xul diff --git a/modules/plugin/test/mochitest/test_crash_submit.xul b/dom/plugins/test/mochitest/test_crash_submit.xul similarity index 100% rename from modules/plugin/test/mochitest/test_crash_submit.xul rename to dom/plugins/test/mochitest/test_crash_submit.xul diff --git a/modules/plugin/test/mochitest/test_crashing.html b/dom/plugins/test/mochitest/test_crashing.html similarity index 100% rename from modules/plugin/test/mochitest/test_crashing.html rename to dom/plugins/test/mochitest/test_crashing.html diff --git a/modules/plugin/test/mochitest/test_crashing2.html b/dom/plugins/test/mochitest/test_crashing2.html similarity index 100% rename from modules/plugin/test/mochitest/test_crashing2.html rename to dom/plugins/test/mochitest/test_crashing2.html diff --git a/modules/plugin/test/mochitest/test_enumerate.html b/dom/plugins/test/mochitest/test_enumerate.html similarity index 100% rename from modules/plugin/test/mochitest/test_enumerate.html rename to dom/plugins/test/mochitest/test_enumerate.html diff --git a/modules/plugin/test/mochitest/test_fullpage.html b/dom/plugins/test/mochitest/test_fullpage.html similarity index 100% rename from modules/plugin/test/mochitest/test_fullpage.html rename to dom/plugins/test/mochitest/test_fullpage.html diff --git a/modules/plugin/test/mochitest/test_getauthenticationinfo.html b/dom/plugins/test/mochitest/test_getauthenticationinfo.html similarity index 100% rename from modules/plugin/test/mochitest/test_getauthenticationinfo.html rename to dom/plugins/test/mochitest/test_getauthenticationinfo.html diff --git a/modules/plugin/test/mochitest/test_hanging.html b/dom/plugins/test/mochitest/test_hanging.html similarity index 100% rename from modules/plugin/test/mochitest/test_hanging.html rename to dom/plugins/test/mochitest/test_hanging.html diff --git a/modules/plugin/test/mochitest/test_instantiation.html b/dom/plugins/test/mochitest/test_instantiation.html similarity index 100% rename from modules/plugin/test/mochitest/test_instantiation.html rename to dom/plugins/test/mochitest/test_instantiation.html diff --git a/modules/plugin/test/mochitest/test_multipleinstanceobjects.html b/dom/plugins/test/mochitest/test_multipleinstanceobjects.html similarity index 100% rename from modules/plugin/test/mochitest/test_multipleinstanceobjects.html rename to dom/plugins/test/mochitest/test_multipleinstanceobjects.html diff --git a/modules/plugin/test/mochitest/test_newstreamondestroy.html b/dom/plugins/test/mochitest/test_newstreamondestroy.html similarity index 100% rename from modules/plugin/test/mochitest/test_newstreamondestroy.html rename to dom/plugins/test/mochitest/test_newstreamondestroy.html diff --git a/modules/plugin/test/mochitest/test_npn_asynccall.html b/dom/plugins/test/mochitest/test_npn_asynccall.html similarity index 100% rename from modules/plugin/test/mochitest/test_npn_asynccall.html rename to dom/plugins/test/mochitest/test_npn_asynccall.html diff --git a/modules/plugin/test/mochitest/test_npn_timers.html b/dom/plugins/test/mochitest/test_npn_timers.html similarity index 100% rename from modules/plugin/test/mochitest/test_npn_timers.html rename to dom/plugins/test/mochitest/test_npn_timers.html diff --git a/modules/plugin/test/mochitest/test_npobject_getters.html b/dom/plugins/test/mochitest/test_npobject_getters.html similarity index 100% rename from modules/plugin/test/mochitest/test_npobject_getters.html rename to dom/plugins/test/mochitest/test_npobject_getters.html diff --git a/modules/plugin/test/mochitest/test_npruntime.xul b/dom/plugins/test/mochitest/test_npruntime.xul similarity index 100% rename from modules/plugin/test/mochitest/test_npruntime.xul rename to dom/plugins/test/mochitest/test_npruntime.xul diff --git a/modules/plugin/test/mochitest/test_npruntime_construct.html b/dom/plugins/test/mochitest/test_npruntime_construct.html similarity index 100% rename from modules/plugin/test/mochitest/test_npruntime_construct.html rename to dom/plugins/test/mochitest/test_npruntime_construct.html diff --git a/modules/plugin/test/mochitest/test_npruntime_identifiers.html b/dom/plugins/test/mochitest/test_npruntime_identifiers.html similarity index 100% rename from modules/plugin/test/mochitest/test_npruntime_identifiers.html rename to dom/plugins/test/mochitest/test_npruntime_identifiers.html diff --git a/modules/plugin/test/mochitest/test_npruntime_npnevaluate.html b/dom/plugins/test/mochitest/test_npruntime_npnevaluate.html similarity index 100% rename from modules/plugin/test/mochitest/test_npruntime_npnevaluate.html rename to dom/plugins/test/mochitest/test_npruntime_npnevaluate.html diff --git a/modules/plugin/test/mochitest/test_npruntime_npninvoke.html b/dom/plugins/test/mochitest/test_npruntime_npninvoke.html similarity index 100% rename from modules/plugin/test/mochitest/test_npruntime_npninvoke.html rename to dom/plugins/test/mochitest/test_npruntime_npninvoke.html diff --git a/modules/plugin/test/mochitest/test_npruntime_npninvokedefault.html b/dom/plugins/test/mochitest/test_npruntime_npninvokedefault.html similarity index 100% rename from modules/plugin/test/mochitest/test_npruntime_npninvokedefault.html rename to dom/plugins/test/mochitest/test_npruntime_npninvokedefault.html diff --git a/modules/plugin/test/mochitest/test_npruntime_npnsetexception.html b/dom/plugins/test/mochitest/test_npruntime_npnsetexception.html similarity index 100% rename from modules/plugin/test/mochitest/test_npruntime_npnsetexception.html rename to dom/plugins/test/mochitest/test_npruntime_npnsetexception.html diff --git a/modules/plugin/test/mochitest/test_painting.html b/dom/plugins/test/mochitest/test_painting.html similarity index 100% rename from modules/plugin/test/mochitest/test_painting.html rename to dom/plugins/test/mochitest/test_painting.html diff --git a/modules/plugin/test/mochitest/test_plugin_scroll_painting.html b/dom/plugins/test/mochitest/test_plugin_scroll_painting.html similarity index 100% rename from modules/plugin/test/mochitest/test_plugin_scroll_painting.html rename to dom/plugins/test/mochitest/test_plugin_scroll_painting.html diff --git a/modules/plugin/test/mochitest/test_pluginstream_asfile.html b/dom/plugins/test/mochitest/test_pluginstream_asfile.html similarity index 100% rename from modules/plugin/test/mochitest/test_pluginstream_asfile.html rename to dom/plugins/test/mochitest/test_pluginstream_asfile.html diff --git a/modules/plugin/test/mochitest/test_pluginstream_asfileonly.html b/dom/plugins/test/mochitest/test_pluginstream_asfileonly.html similarity index 100% rename from modules/plugin/test/mochitest/test_pluginstream_asfileonly.html rename to dom/plugins/test/mochitest/test_pluginstream_asfileonly.html diff --git a/modules/plugin/test/mochitest/test_pluginstream_err.html b/dom/plugins/test/mochitest/test_pluginstream_err.html similarity index 100% rename from modules/plugin/test/mochitest/test_pluginstream_err.html rename to dom/plugins/test/mochitest/test_pluginstream_err.html diff --git a/modules/plugin/test/mochitest/test_pluginstream_geturl.html b/dom/plugins/test/mochitest/test_pluginstream_geturl.html similarity index 100% rename from modules/plugin/test/mochitest/test_pluginstream_geturl.html rename to dom/plugins/test/mochitest/test_pluginstream_geturl.html diff --git a/modules/plugin/test/mochitest/test_pluginstream_geturlnotify.html b/dom/plugins/test/mochitest/test_pluginstream_geturlnotify.html similarity index 100% rename from modules/plugin/test/mochitest/test_pluginstream_geturlnotify.html rename to dom/plugins/test/mochitest/test_pluginstream_geturlnotify.html diff --git a/modules/plugin/test/mochitest/test_pluginstream_newstream.html b/dom/plugins/test/mochitest/test_pluginstream_newstream.html similarity index 100% rename from modules/plugin/test/mochitest/test_pluginstream_newstream.html rename to dom/plugins/test/mochitest/test_pluginstream_newstream.html diff --git a/modules/plugin/test/mochitest/test_pluginstream_post.html b/dom/plugins/test/mochitest/test_pluginstream_post.html similarity index 100% rename from modules/plugin/test/mochitest/test_pluginstream_post.html rename to dom/plugins/test/mochitest/test_pluginstream_post.html diff --git a/modules/plugin/test/mochitest/test_pluginstream_poststream.html b/dom/plugins/test/mochitest/test_pluginstream_poststream.html similarity index 100% rename from modules/plugin/test/mochitest/test_pluginstream_poststream.html rename to dom/plugins/test/mochitest/test_pluginstream_poststream.html diff --git a/modules/plugin/test/mochitest/test_pluginstream_seek.html b/dom/plugins/test/mochitest/test_pluginstream_seek.html similarity index 100% rename from modules/plugin/test/mochitest/test_pluginstream_seek.html rename to dom/plugins/test/mochitest/test_pluginstream_seek.html diff --git a/modules/plugin/test/mochitest/test_pluginstream_seek_close.html b/dom/plugins/test/mochitest/test_pluginstream_seek_close.html similarity index 100% rename from modules/plugin/test/mochitest/test_pluginstream_seek_close.html rename to dom/plugins/test/mochitest/test_pluginstream_seek_close.html diff --git a/modules/plugin/test/mochitest/test_pluginstream_src.html b/dom/plugins/test/mochitest/test_pluginstream_src.html similarity index 100% rename from modules/plugin/test/mochitest/test_pluginstream_src.html rename to dom/plugins/test/mochitest/test_pluginstream_src.html diff --git a/modules/plugin/test/mochitest/test_positioning.html b/dom/plugins/test/mochitest/test_positioning.html similarity index 100% rename from modules/plugin/test/mochitest/test_positioning.html rename to dom/plugins/test/mochitest/test_positioning.html diff --git a/modules/plugin/test/mochitest/test_privatemode.xul b/dom/plugins/test/mochitest/test_privatemode.xul similarity index 100% rename from modules/plugin/test/mochitest/test_privatemode.xul rename to dom/plugins/test/mochitest/test_privatemode.xul diff --git a/modules/plugin/test/mochitest/test_propertyAndMethod.html b/dom/plugins/test/mochitest/test_propertyAndMethod.html similarity index 100% rename from modules/plugin/test/mochitest/test_propertyAndMethod.html rename to dom/plugins/test/mochitest/test_propertyAndMethod.html diff --git a/modules/plugin/test/mochitest/test_redirect_handling.html b/dom/plugins/test/mochitest/test_redirect_handling.html similarity index 95% rename from modules/plugin/test/mochitest/test_redirect_handling.html rename to dom/plugins/test/mochitest/test_redirect_handling.html index 281cfd5f00f9..63107ce90df7 100644 --- a/modules/plugin/test/mochitest/test_redirect_handling.html +++ b/dom/plugins/test/mochitest/test_redirect_handling.html @@ -13,7 +13,7 @@ var p = document.getElementById("plugin1"); var redirectingURL = "307-xo-redirect.sjs"; - var redirectTargetURL = "http://example.org/tests/modules/plugin/test/loremipsum.txt"; + var redirectTargetURL = "http://example.org/tests/dom/plugins/test/loremipsum.txt"; var expectedWriteURL = ""; var expectedNotifyStatus = -1; diff --git a/modules/plugin/test/mochitest/test_streamNotify.html b/dom/plugins/test/mochitest/test_streamNotify.html similarity index 100% rename from modules/plugin/test/mochitest/test_streamNotify.html rename to dom/plugins/test/mochitest/test_streamNotify.html diff --git a/modules/plugin/test/mochitest/test_streamatclose.html b/dom/plugins/test/mochitest/test_streamatclose.html similarity index 100% rename from modules/plugin/test/mochitest/test_streamatclose.html rename to dom/plugins/test/mochitest/test_streamatclose.html diff --git a/modules/plugin/test/mochitest/test_twostreams.html b/dom/plugins/test/mochitest/test_twostreams.html similarity index 100% rename from modules/plugin/test/mochitest/test_twostreams.html rename to dom/plugins/test/mochitest/test_twostreams.html diff --git a/modules/plugin/test/mochitest/test_visibility.html b/dom/plugins/test/mochitest/test_visibility.html similarity index 100% rename from modules/plugin/test/mochitest/test_visibility.html rename to dom/plugins/test/mochitest/test_visibility.html diff --git a/modules/plugin/test/mochitest/test_windowed_invalidate.html b/dom/plugins/test/mochitest/test_windowed_invalidate.html similarity index 100% rename from modules/plugin/test/mochitest/test_windowed_invalidate.html rename to dom/plugins/test/mochitest/test_windowed_invalidate.html diff --git a/modules/plugin/test/mochitest/test_wmode.xul b/dom/plugins/test/mochitest/test_wmode.xul similarity index 100% rename from modules/plugin/test/mochitest/test_wmode.xul rename to dom/plugins/test/mochitest/test_wmode.xul diff --git a/modules/plugin/test/mochitest/test_xulbrowser_plugin_visibility.xul b/dom/plugins/test/mochitest/test_xulbrowser_plugin_visibility.xul similarity index 100% rename from modules/plugin/test/mochitest/test_xulbrowser_plugin_visibility.xul rename to dom/plugins/test/mochitest/test_xulbrowser_plugin_visibility.xul diff --git a/modules/plugin/test/mochitest/test_zero_opacity.html b/dom/plugins/test/mochitest/test_zero_opacity.html similarity index 100% rename from modules/plugin/test/mochitest/test_zero_opacity.html rename to dom/plugins/test/mochitest/test_zero_opacity.html diff --git a/modules/plugin/test/mochitest/utils.js b/dom/plugins/test/mochitest/utils.js similarity index 100% rename from modules/plugin/test/mochitest/utils.js rename to dom/plugins/test/mochitest/utils.js diff --git a/modules/plugin/test/mochitest/xulbrowser_plugin_visibility.xul b/dom/plugins/test/mochitest/xulbrowser_plugin_visibility.xul similarity index 94% rename from modules/plugin/test/mochitest/xulbrowser_plugin_visibility.xul rename to dom/plugins/test/mochitest/xulbrowser_plugin_visibility.xul index 0d043a2a396f..2e5a672e06f0 100644 --- a/modules/plugin/test/mochitest/xulbrowser_plugin_visibility.xul +++ b/dom/plugins/test/mochitest/xulbrowser_plugin_visibility.xul @@ -24,7 +24,7 @@ const nsIWebProgress = Components.interfaces.nsIWebProgress; const nsIWebProgressListener = Components.interfaces.nsIWebProgressListener; - const kURI = 'http://mochi.test:8888/chrome/modules/plugin/test/plugin_visibility_loader.html'; + const kURI = 'http://mochi.test:8888/chrome/dom/plugins/test/plugin_visibility_loader.html'; function ProgressListener() { } diff --git a/modules/plugin/test/reftest/border-padding-1-ref.html b/dom/plugins/test/reftest/border-padding-1-ref.html similarity index 100% rename from modules/plugin/test/reftest/border-padding-1-ref.html rename to dom/plugins/test/reftest/border-padding-1-ref.html diff --git a/modules/plugin/test/reftest/border-padding-1.html b/dom/plugins/test/reftest/border-padding-1.html similarity index 100% rename from modules/plugin/test/reftest/border-padding-1.html rename to dom/plugins/test/reftest/border-padding-1.html diff --git a/modules/plugin/test/reftest/border-padding-2-ref.html b/dom/plugins/test/reftest/border-padding-2-ref.html similarity index 100% rename from modules/plugin/test/reftest/border-padding-2-ref.html rename to dom/plugins/test/reftest/border-padding-2-ref.html diff --git a/modules/plugin/test/reftest/border-padding-2.html b/dom/plugins/test/reftest/border-padding-2.html similarity index 100% rename from modules/plugin/test/reftest/border-padding-2.html rename to dom/plugins/test/reftest/border-padding-2.html diff --git a/modules/plugin/test/reftest/border-padding-3-ref.html b/dom/plugins/test/reftest/border-padding-3-ref.html similarity index 100% rename from modules/plugin/test/reftest/border-padding-3-ref.html rename to dom/plugins/test/reftest/border-padding-3-ref.html diff --git a/modules/plugin/test/reftest/border-padding-3.html b/dom/plugins/test/reftest/border-padding-3.html similarity index 100% rename from modules/plugin/test/reftest/border-padding-3.html rename to dom/plugins/test/reftest/border-padding-3.html diff --git a/modules/plugin/test/reftest/div-alpha-opacity.html b/dom/plugins/test/reftest/div-alpha-opacity.html similarity index 100% rename from modules/plugin/test/reftest/div-alpha-opacity.html rename to dom/plugins/test/reftest/div-alpha-opacity.html diff --git a/modules/plugin/test/reftest/div-alpha-zindex.html b/dom/plugins/test/reftest/div-alpha-zindex.html similarity index 100% rename from modules/plugin/test/reftest/div-alpha-zindex.html rename to dom/plugins/test/reftest/div-alpha-zindex.html diff --git a/modules/plugin/test/reftest/div-sanity.html b/dom/plugins/test/reftest/div-sanity.html similarity index 100% rename from modules/plugin/test/reftest/div-sanity.html rename to dom/plugins/test/reftest/div-sanity.html diff --git a/modules/plugin/test/reftest/plugin-alpha-opacity.html b/dom/plugins/test/reftest/plugin-alpha-opacity.html similarity index 100% rename from modules/plugin/test/reftest/plugin-alpha-opacity.html rename to dom/plugins/test/reftest/plugin-alpha-opacity.html diff --git a/modules/plugin/test/reftest/plugin-alpha-zindex.html b/dom/plugins/test/reftest/plugin-alpha-zindex.html similarity index 100% rename from modules/plugin/test/reftest/plugin-alpha-zindex.html rename to dom/plugins/test/reftest/plugin-alpha-zindex.html diff --git a/modules/plugin/test/reftest/plugin-background-1-step.html b/dom/plugins/test/reftest/plugin-background-1-step.html similarity index 100% rename from modules/plugin/test/reftest/plugin-background-1-step.html rename to dom/plugins/test/reftest/plugin-background-1-step.html diff --git a/modules/plugin/test/reftest/plugin-background-10-step.html b/dom/plugins/test/reftest/plugin-background-10-step.html similarity index 100% rename from modules/plugin/test/reftest/plugin-background-10-step.html rename to dom/plugins/test/reftest/plugin-background-10-step.html diff --git a/modules/plugin/test/reftest/plugin-background-2-step.html b/dom/plugins/test/reftest/plugin-background-2-step.html similarity index 100% rename from modules/plugin/test/reftest/plugin-background-2-step.html rename to dom/plugins/test/reftest/plugin-background-2-step.html diff --git a/modules/plugin/test/reftest/plugin-background-5-step.html b/dom/plugins/test/reftest/plugin-background-5-step.html similarity index 100% rename from modules/plugin/test/reftest/plugin-background-5-step.html rename to dom/plugins/test/reftest/plugin-background-5-step.html diff --git a/modules/plugin/test/reftest/plugin-background-ref.html b/dom/plugins/test/reftest/plugin-background-ref.html similarity index 100% rename from modules/plugin/test/reftest/plugin-background-ref.html rename to dom/plugins/test/reftest/plugin-background-ref.html diff --git a/modules/plugin/test/reftest/plugin-background.css b/dom/plugins/test/reftest/plugin-background.css similarity index 100% rename from modules/plugin/test/reftest/plugin-background.css rename to dom/plugins/test/reftest/plugin-background.css diff --git a/modules/plugin/test/reftest/plugin-background.html b/dom/plugins/test/reftest/plugin-background.html similarity index 100% rename from modules/plugin/test/reftest/plugin-background.html rename to dom/plugins/test/reftest/plugin-background.html diff --git a/modules/plugin/test/reftest/plugin-background.js b/dom/plugins/test/reftest/plugin-background.js similarity index 100% rename from modules/plugin/test/reftest/plugin-background.js rename to dom/plugins/test/reftest/plugin-background.js diff --git a/modules/plugin/test/reftest/plugin-busy-alpha-zindex.html b/dom/plugins/test/reftest/plugin-busy-alpha-zindex.html similarity index 100% rename from modules/plugin/test/reftest/plugin-busy-alpha-zindex.html rename to dom/plugins/test/reftest/plugin-busy-alpha-zindex.html diff --git a/modules/plugin/test/reftest/plugin-canvas-alpha-zindex.html b/dom/plugins/test/reftest/plugin-canvas-alpha-zindex.html similarity index 100% rename from modules/plugin/test/reftest/plugin-canvas-alpha-zindex.html rename to dom/plugins/test/reftest/plugin-canvas-alpha-zindex.html diff --git a/modules/plugin/test/reftest/plugin-sanity.html b/dom/plugins/test/reftest/plugin-sanity.html similarity index 100% rename from modules/plugin/test/reftest/plugin-sanity.html rename to dom/plugins/test/reftest/plugin-sanity.html diff --git a/modules/plugin/test/reftest/plugin-transform-1-ref.html b/dom/plugins/test/reftest/plugin-transform-1-ref.html similarity index 100% rename from modules/plugin/test/reftest/plugin-transform-1-ref.html rename to dom/plugins/test/reftest/plugin-transform-1-ref.html diff --git a/modules/plugin/test/reftest/plugin-transform-1.html b/dom/plugins/test/reftest/plugin-transform-1.html similarity index 100% rename from modules/plugin/test/reftest/plugin-transform-1.html rename to dom/plugins/test/reftest/plugin-transform-1.html diff --git a/modules/plugin/test/reftest/plugin-transform-2-ref.html b/dom/plugins/test/reftest/plugin-transform-2-ref.html similarity index 100% rename from modules/plugin/test/reftest/plugin-transform-2-ref.html rename to dom/plugins/test/reftest/plugin-transform-2-ref.html diff --git a/modules/plugin/test/reftest/plugin-transform-2.html b/dom/plugins/test/reftest/plugin-transform-2.html similarity index 100% rename from modules/plugin/test/reftest/plugin-transform-2.html rename to dom/plugins/test/reftest/plugin-transform-2.html diff --git a/modules/plugin/test/reftest/plugin-transform-alpha-zindex.html b/dom/plugins/test/reftest/plugin-transform-alpha-zindex.html similarity index 100% rename from modules/plugin/test/reftest/plugin-transform-alpha-zindex.html rename to dom/plugins/test/reftest/plugin-transform-alpha-zindex.html diff --git a/modules/plugin/test/reftest/pluginproblemui-direction-1-ref.html b/dom/plugins/test/reftest/pluginproblemui-direction-1-ref.html similarity index 100% rename from modules/plugin/test/reftest/pluginproblemui-direction-1-ref.html rename to dom/plugins/test/reftest/pluginproblemui-direction-1-ref.html diff --git a/modules/plugin/test/reftest/pluginproblemui-direction-1.html b/dom/plugins/test/reftest/pluginproblemui-direction-1.html similarity index 100% rename from modules/plugin/test/reftest/pluginproblemui-direction-1.html rename to dom/plugins/test/reftest/pluginproblemui-direction-1.html diff --git a/modules/plugin/test/reftest/pluginproblemui-direction-2-ref.html b/dom/plugins/test/reftest/pluginproblemui-direction-2-ref.html similarity index 100% rename from modules/plugin/test/reftest/pluginproblemui-direction-2-ref.html rename to dom/plugins/test/reftest/pluginproblemui-direction-2-ref.html diff --git a/modules/plugin/test/reftest/pluginproblemui-direction-2.html b/dom/plugins/test/reftest/pluginproblemui-direction-2.html similarity index 100% rename from modules/plugin/test/reftest/pluginproblemui-direction-2.html rename to dom/plugins/test/reftest/pluginproblemui-direction-2.html diff --git a/modules/plugin/test/reftest/reftest.list b/dom/plugins/test/reftest/reftest.list similarity index 100% rename from modules/plugin/test/reftest/reftest.list rename to dom/plugins/test/reftest/reftest.list diff --git a/modules/plugin/test/reftest/windowless-clipping-1-ref.html b/dom/plugins/test/reftest/windowless-clipping-1-ref.html similarity index 100% rename from modules/plugin/test/reftest/windowless-clipping-1-ref.html rename to dom/plugins/test/reftest/windowless-clipping-1-ref.html diff --git a/modules/plugin/test/reftest/windowless-clipping-1.html b/dom/plugins/test/reftest/windowless-clipping-1.html similarity index 100% rename from modules/plugin/test/reftest/windowless-clipping-1.html rename to dom/plugins/test/reftest/windowless-clipping-1.html diff --git a/modules/plugin/test/testplugin/Info.plist b/dom/plugins/test/testplugin/Info.plist similarity index 100% rename from modules/plugin/test/testplugin/Info.plist rename to dom/plugins/test/testplugin/Info.plist diff --git a/modules/plugin/test/testplugin/Makefile.in b/dom/plugins/test/testplugin/Makefile.in similarity index 100% rename from modules/plugin/test/testplugin/Makefile.in rename to dom/plugins/test/testplugin/Makefile.in diff --git a/modules/plugin/test/testplugin/README b/dom/plugins/test/testplugin/README similarity index 100% rename from modules/plugin/test/testplugin/README rename to dom/plugins/test/testplugin/README diff --git a/modules/plugin/test/testplugin/nptest.cpp b/dom/plugins/test/testplugin/nptest.cpp similarity index 100% rename from modules/plugin/test/testplugin/nptest.cpp rename to dom/plugins/test/testplugin/nptest.cpp diff --git a/modules/plugin/test/testplugin/nptest.def b/dom/plugins/test/testplugin/nptest.def similarity index 100% rename from modules/plugin/test/testplugin/nptest.def rename to dom/plugins/test/testplugin/nptest.def diff --git a/modules/plugin/test/testplugin/nptest.h b/dom/plugins/test/testplugin/nptest.h similarity index 100% rename from modules/plugin/test/testplugin/nptest.h rename to dom/plugins/test/testplugin/nptest.h diff --git a/modules/plugin/test/testplugin/nptest.rc b/dom/plugins/test/testplugin/nptest.rc similarity index 100% rename from modules/plugin/test/testplugin/nptest.rc rename to dom/plugins/test/testplugin/nptest.rc diff --git a/modules/plugin/test/testplugin/nptest_droid.cpp b/dom/plugins/test/testplugin/nptest_droid.cpp similarity index 100% rename from modules/plugin/test/testplugin/nptest_droid.cpp rename to dom/plugins/test/testplugin/nptest_droid.cpp diff --git a/modules/plugin/test/testplugin/nptest_gtk2.cpp b/dom/plugins/test/testplugin/nptest_gtk2.cpp similarity index 100% rename from modules/plugin/test/testplugin/nptest_gtk2.cpp rename to dom/plugins/test/testplugin/nptest_gtk2.cpp diff --git a/modules/plugin/test/testplugin/nptest_macosx.mm b/dom/plugins/test/testplugin/nptest_macosx.mm similarity index 100% rename from modules/plugin/test/testplugin/nptest_macosx.mm rename to dom/plugins/test/testplugin/nptest_macosx.mm diff --git a/modules/plugin/test/testplugin/nptest_os2.cpp b/dom/plugins/test/testplugin/nptest_os2.cpp similarity index 100% rename from modules/plugin/test/testplugin/nptest_os2.cpp rename to dom/plugins/test/testplugin/nptest_os2.cpp diff --git a/modules/plugin/test/testplugin/nptest_platform.h b/dom/plugins/test/testplugin/nptest_platform.h similarity index 100% rename from modules/plugin/test/testplugin/nptest_platform.h rename to dom/plugins/test/testplugin/nptest_platform.h diff --git a/modules/plugin/test/testplugin/nptest_qt.cpp b/dom/plugins/test/testplugin/nptest_qt.cpp similarity index 100% rename from modules/plugin/test/testplugin/nptest_qt.cpp rename to dom/plugins/test/testplugin/nptest_qt.cpp diff --git a/modules/plugin/test/testplugin/nptest_utils.cpp b/dom/plugins/test/testplugin/nptest_utils.cpp similarity index 100% rename from modules/plugin/test/testplugin/nptest_utils.cpp rename to dom/plugins/test/testplugin/nptest_utils.cpp diff --git a/modules/plugin/test/testplugin/nptest_utils.h b/dom/plugins/test/testplugin/nptest_utils.h similarity index 100% rename from modules/plugin/test/testplugin/nptest_utils.h rename to dom/plugins/test/testplugin/nptest_utils.h diff --git a/modules/plugin/test/testplugin/nptest_windows.cpp b/dom/plugins/test/testplugin/nptest_windows.cpp similarity index 100% rename from modules/plugin/test/testplugin/nptest_windows.cpp rename to dom/plugins/test/testplugin/nptest_windows.cpp diff --git a/modules/plugin/test/unit/head_plugins.js b/dom/plugins/test/unit/head_plugins.js similarity index 100% rename from modules/plugin/test/unit/head_plugins.js rename to dom/plugins/test/unit/head_plugins.js diff --git a/modules/plugin/test/unit/test_bug455213.js b/dom/plugins/test/unit/test_bug455213.js similarity index 100% rename from modules/plugin/test/unit/test_bug455213.js rename to dom/plugins/test/unit/test_bug455213.js diff --git a/modules/plugin/test/unit/test_bug471245.js b/dom/plugins/test/unit/test_bug471245.js similarity index 100% rename from modules/plugin/test/unit/test_bug471245.js rename to dom/plugins/test/unit/test_bug471245.js diff --git a/layout/reftests/reftest.list b/layout/reftests/reftest.list index 16b588acbc6d..3087378ad733 100644 --- a/layout/reftests/reftest.list +++ b/layout/reftests/reftest.list @@ -213,7 +213,7 @@ include percent-overflow-sizing/reftest.list include pixel-rounding/reftest.list # plugin/ -include ../../modules/plugin/test/reftest/reftest.list +include ../../dom/plugins/test/reftest/reftest.list # printing include printing/reftest.list diff --git a/modules/plugin/Makefile.in b/modules/plugin/Makefile.in deleted file mode 100644 index f5afdf3a467f..000000000000 --- a/modules/plugin/Makefile.in +++ /dev/null @@ -1,61 +0,0 @@ -# -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -DEPTH = ../.. -topsrcdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = @srcdir@ - -include $(DEPTH)/config/autoconf.mk - -MODULE = plugin - -# These subdirs rely on GTK libraries and header files, it is not -# buildable on other non-GTK unix builds - -ifdef ENABLE_TESTS -ifneq (,$(filter gtk2 cocoa windows android qt os2,$(MOZ_WIDGET_TOOLKIT))) -DIRS += test -endif -endif - -include $(topsrcdir)/config/rules.mk - -$(DIST)/bin/plugins: - $(NSINSTALL) -D $@ - -export:: $(DIST)/bin/plugins diff --git a/testing/crashtest/crashtests.list b/testing/crashtest/crashtests.list index f211bab466cf..7d21a6e41319 100644 --- a/testing/crashtest/crashtests.list +++ b/testing/crashtest/crashtests.list @@ -47,7 +47,7 @@ include ../../layout/xul/base/src/tree/src/crashtests/crashtests.list include ../../gfx/tests/crashtests/crashtests.list include ../../modules/libpr0n/test/crashtests/crashtests.list -include ../../modules/plugin/test/crashtests/crashtests.list +include ../../dom/plugins/test/crashtests/crashtests.list include ../../parser/htmlparser/tests/crashtests/crashtests.list diff --git a/testing/mochitest/runtests.py b/testing/mochitest/runtests.py index 7c80322ecc26..545928734421 100644 --- a/testing/mochitest/runtests.py +++ b/testing/mochitest/runtests.py @@ -438,7 +438,7 @@ class Mochitest(object): elif options.browserChrome: testURL = "about:blank" elif options.ipcplugins: - testURL = testHost + self.TEST_PATH + "modules/plugin/test" + testURL = testHost + self.TEST_PATH + "dom/plugins/test" return testURL def startWebSocketServer(self, options, debuggerInfo): diff --git a/testing/testsuite-targets.mk b/testing/testsuite-targets.mk index 48ac22c75bd8..f4287ed39b80 100644 --- a/testing/testsuite-targets.mk +++ b/testing/testsuite-targets.mk @@ -95,16 +95,16 @@ mochitest-a11y: mochitest-ipcplugins: ifeq (Darwin,$(OS_ARCH)) ifeq (i386,$(TARGET_CPU)) - $(RUN_MOCHITEST) --setpref=dom.ipc.plugins.enabled.i386.test.plugin=false --test-path=modules/plugin/test + $(RUN_MOCHITEST) --setpref=dom.ipc.plugins.enabled.i386.test.plugin=false --test-path=dom/plugins/test endif ifeq (x86_64,$(TARGET_CPU)) - $(RUN_MOCHITEST) --setpref=dom.ipc.plugins.enabled.x86_64.test.plugin=false --test-path=modules/plugin/test + $(RUN_MOCHITEST) --setpref=dom.ipc.plugins.enabled.x86_64.test.plugin=false --test-path=dom/plugins/test endif ifeq (powerpc,$(TARGET_CPU)) - $(RUN_MOCHITEST) --setpref=dom.ipc.plugins.enabled.ppc.test.plugin=false --test-path=modules/plugin/test + $(RUN_MOCHITEST) --setpref=dom.ipc.plugins.enabled.ppc.test.plugin=false --test-path=dom/plugins/test endif else - $(RUN_MOCHITEST) --setpref=dom.ipc.plugins.enabled=false --test-path=modules/plugin/test + $(RUN_MOCHITEST) --setpref=dom.ipc.plugins.enabled=false --test-path=dom/plugins/test endif $(CHECK_TEST_ERROR) diff --git a/toolkit/toolkit-makefiles.sh b/toolkit/toolkit-makefiles.sh index 2a8ea10cfb4e..d438bcef195c 100644 --- a/toolkit/toolkit-makefiles.sh +++ b/toolkit/toolkit-makefiles.sh @@ -85,6 +85,9 @@ MAKEFILES_dom=" dom/locales/Makefile dom/plugins/base/Makefile dom/plugins/ipc/Makefile + dom/plugins/test/Makefile + dom/plugins/test/mochitest/Makefile + dom/plugins/test/testplugin/Makefile js/jetpack/Makefile " @@ -354,10 +357,6 @@ MAKEFILES_libnestegg=" media/libnestegg/src/Makefile " -MAKEFILES_plugin=" - modules/plugin/Makefile -" - MAKEFILES_netwerk=" netwerk/Makefile netwerk/base/Makefile @@ -867,9 +866,6 @@ if [ "$ENABLE_TESTS" ]; then modules/libpr0n/test/Makefile modules/libpr0n/test/mochitest/Makefile modules/libpref/test/Makefile - modules/plugin/test/Makefile - modules/plugin/test/mochitest/Makefile - modules/plugin/test/testplugin/Makefile netwerk/test/httpserver/Makefile parser/htmlparser/tests/mochitest/Makefile parser/xml/test/Makefile diff --git a/toolkit/toolkit-tiers.mk b/toolkit/toolkit-tiers.mk index 6314ca0dc655..2e0df0c4baec 100644 --- a/toolkit/toolkit-tiers.mk +++ b/toolkit/toolkit-tiers.mk @@ -172,7 +172,6 @@ tier_platform_dirs += \ parser \ gfx \ modules/libpr0n \ - modules/plugin \ dom \ view \ widget \ From ab613a3519f05568759d7c238ee472e4bdbd49e0 Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Wed, 18 May 2011 11:28:56 -0700 Subject: [PATCH 187/282] Main patch - Switching channels is broken when an update is already downloading or downloaded - Bug 652016 - When switching channels, I get a failed update. r=mossop --- browser/base/content/aboutDialog.js | 3 +- toolkit/mozapps/update/nsUpdateService.js | 51 ++++++++++++++--------- 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/browser/base/content/aboutDialog.js b/browser/base/content/aboutDialog.js index 49ac1cd32ced..ce092540c0b0 100644 --- a/browser/base/content/aboutDialog.js +++ b/browser/base/content/aboutDialog.js @@ -359,7 +359,6 @@ appUpdater.prototype = // notified with the normal app update user interface so this is safe. gAppUpdater.isChecking = false; gAppUpdater.selectPanel("noUpdatesFound"); - return; }, /** @@ -613,6 +612,8 @@ var gChannelSelector = { // Change app update channel. Services.prefs.setCharPref("app.update.desiredChannel", this.channelValue); + // Stop any downloads in progress + gAppUpdater.aus.pauseDownload(); // App updater will look at app.update.desiredChannel for new channel value // and will clear it when the update is complete. gAppUpdater.isChecking = true; diff --git a/toolkit/mozapps/update/nsUpdateService.js b/toolkit/mozapps/update/nsUpdateService.js index 401843173f49..9a0845295c1e 100644 --- a/toolkit/mozapps/update/nsUpdateService.js +++ b/toolkit/mozapps/update/nsUpdateService.js @@ -495,7 +495,10 @@ function writeVersionFile(dir, version) { function createChannelChangeFile(dir) { var channelChangeFile = dir.clone(); channelChangeFile.append(FILE_CHANNELCHANGE); - channelChangeFile.create(Ci.nsILocalFile.NORMAL_FILE_TYPE, FileUtils.PERMS_FILE); + if (!channelChangeFile.exists()) { + channelChangeFile.create(Ci.nsILocalFile.NORMAL_FILE_TYPE, + FileUtils.PERMS_FILE); + } } /** @@ -536,7 +539,7 @@ function cleanUpUpdatesDir() { dir.path + " and rename it to " + FILE_LAST_LOG); } } - // Now, recursively remove this file. The recusive removal is really + // Now, recursively remove this file. The recursive removal is really // only needed on Mac OSX because this directory will contain a copy of // updater.app, which is itself a directory. try { @@ -1175,6 +1178,7 @@ UpdateService.prototype = { case "xpcom-shutdown": Services.obs.removeObserver(this, "xpcom-shutdown"); + this.pauseDownload(); // Prevent leaking the downloader (bug 454964) this._downloader = null; break; @@ -1372,8 +1376,8 @@ UpdateService.prototype = { return null; if (getDesiredChannel()) { - LOG("Checker:selectUpdate - skipping version checks for change change " + - "request"); + LOG("UpdateService:selectUpdate - skipping version checks for channel " + + "change request"); return updates[0]; } @@ -1388,8 +1392,9 @@ UpdateService.prototype = { if (vc.compare(aUpdate.appVersion, Services.appinfo.version) < 0 || vc.compare(aUpdate.appVersion, Services.appinfo.version) == 0 && aUpdate.buildID == Services.appinfo.appBuildID) { - LOG("Checker:selectUpdate - skipping update because the update's " + - "application version is less than the current application version"); + LOG("UpdateService:selectUpdate - skipping update because the " + + "update's application version is less than the current " + + "application version"); return; } @@ -1399,7 +1404,7 @@ UpdateService.prototype = { let neverPrefName = PREF_APP_UPDATE_NEVER_BRANCH + aUpdate.appVersion; if (aUpdate.showNeverForVersion && getPref("getBoolPref", neverPrefName, false)) { - LOG("Checker:selectUpdate - skipping update because the " + + LOG("UpdateService:selectUpdate - skipping update because the " + "preference " + neverPrefName + " is true"); return; } @@ -1418,7 +1423,7 @@ UpdateService.prototype = { minorUpdate = aUpdate; break; default: - LOG("Checker:selectUpdate - skipping unknown update type: " + + LOG("UpdateService:selectUpdate - skipping unknown update type: " + aUpdate.type); break; } @@ -1453,14 +1458,14 @@ UpdateService.prototype = { var updateEnabled = getPref("getBoolPref", PREF_APP_UPDATE_ENABLED, true); if (!updateEnabled) { - LOG("Checker:_selectAndInstallUpdate - not prompting because update is " + - "disabled"); + LOG("UpdateService:_selectAndInstallUpdate - not prompting because " + + "update is disabled"); return; } if (!gCanApplyUpdates) { - LOG("Checker:_selectAndInstallUpdate - the user is unable to apply " + - "updates... prompting"); + LOG("UpdateService:_selectAndInstallUpdate - the user is unable to " + + "apply updates... prompting"); this._showPrompt(update); return; } @@ -1492,14 +1497,14 @@ UpdateService.prototype = { # Minor 1 No Auto Install */ if (update.showPrompt) { - LOG("Checker:_selectAndInstallUpdate - prompting because the update " + - "snippet specified showPrompt"); + LOG("UpdateService:_selectAndInstallUpdate - prompting because the " + + "update snippet specified showPrompt"); this._showPrompt(update); return; } if (!getPref("getBoolPref", PREF_APP_UPDATE_AUTO, true)) { - LOG("Checker:_selectAndInstallUpdate - prompting because silent " + + LOG("UpdateService:_selectAndInstallUpdate - prompting because silent " + "install is disabled"); this._showPrompt(update); return; @@ -1653,8 +1658,8 @@ UpdateService.prototype = { return; if (this._incompatibleAddons.length > 0 || !gCanApplyUpdates) { - LOG("Checker:onUpdateEnded - prompting because there are incompatible " + - "add-ons"); + LOG("UpdateService:onUpdateEnded - prompting because there are " + + "incompatible add-ons"); this._showPrompt(this._update); } else { @@ -1742,6 +1747,7 @@ UpdateService.prototype = { return STATE_NONE; } + // If a download request is in progress vs. a download ready to resume if (this.isDownloading) { if (update.isCompleteUpdate == this._downloader.isCompleteUpdate && background == this._downloader.background) { @@ -2128,6 +2134,11 @@ Checker.prototype = { if (!url || (!this.enabled && !force)) return; + // If the user changes the update channel there can be leftover files from + // a previous download so clean the updates directory for manual checks. + if (force) + cleanUpUpdatesDir(); + this._request = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"]. createInstance(Ci.nsIXMLHttpRequest); this._request.open("GET", url, true); @@ -2730,7 +2741,8 @@ Downloader.prototype = { } } else if (status != Cr.NS_BINDING_ABORTED && - status != Cr.NS_ERROR_ABORT) { + status != Cr.NS_ERROR_ABORT && + status != Cr.NS_ERROR_DOCUMENT_NOT_CACHED) { LOG("Downloader:onStopRequest - non-verification failure"); // Some sort of other failure, log this in the |statusText| property state = STATE_DOWNLOAD_FAILED; @@ -2738,9 +2750,8 @@ Downloader.prototype = { // XXXben - if |request| (The Incremental Download) provided a means // for accessing the http channel we could do more here. - const NS_BINDING_FAILED = 2152398849; this._update.statusText = getStatusTextFromCode(status, - NS_BINDING_FAILED); + Cr.NS_BINDING_FAILED); // Destroy the updates directory, since we're done with it. cleanUpUpdatesDir(); From 64186bab5476ec716135ca44cbff7090234cf049 Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Wed, 18 May 2011 11:29:18 -0700 Subject: [PATCH 188/282] Tests - Switching channels is broken when an update is already downloading or downloaded - Bug 652016 - When switching channels, I get a failed update. r=mossop --- toolkit/mozapps/update/test/unit/test_0030_general.js | 5 +++++ .../update/test/unit/test_0070_update_dir_cleanup.js | 8 ++++++++ .../update/test/unit/test_0120_channelChange_complete.js | 6 +++--- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/toolkit/mozapps/update/test/unit/test_0030_general.js b/toolkit/mozapps/update/test/unit/test_0030_general.js index 7c71ac2fb1ef..3fcab51e4336 100644 --- a/toolkit/mozapps/update/test/unit/test_0030_general.js +++ b/toolkit/mozapps/update/test/unit/test_0030_general.js @@ -95,12 +95,17 @@ function run_test_helper_pt1(aMsg, aExpectedStatusResult, aNextRunFunc) { function check_test_helper_pt1_1() { do_check_eq(gUpdateCount, 1); + let channelchange = getUpdatesDir(); + channelchange.append("0"); + channelchange.append(CHANNEL_CHANGE_FILE); + do_check_false(channelchange.exists()); gCheckFunc = check_test_helper_pt1_2; var bestUpdate = gAUS.selectUpdate(gUpdates, gUpdateCount); var state = gAUS.downloadUpdate(bestUpdate, false); if (state == STATE_NONE || state == STATE_FAILED) do_throw("nsIApplicationUpdateService:downloadUpdate returned " + state); gAUS.addDownloadListener(downloadListener); + channelchange.create(AUS_Ci.nsIFile.FILE_TYPE, PERMS_FILE); } function check_test_helper_pt1_2() { diff --git a/toolkit/mozapps/update/test/unit/test_0070_update_dir_cleanup.js b/toolkit/mozapps/update/test/unit/test_0070_update_dir_cleanup.js index 212556ad0c28..b460b4549fe0 100644 --- a/toolkit/mozapps/update/test/unit/test_0070_update_dir_cleanup.js +++ b/toolkit/mozapps/update/test/unit/test_0070_update_dir_cleanup.js @@ -58,6 +58,11 @@ function run_test() { log.append(FILE_UPDATE_LOG); writeFile(log, "Last Update Log"); + let channelchange = dir.clone(); + channelchange.append("0"); + channelchange.append(CHANNEL_CHANGE_FILE); + channelchange.create(AUS_Ci.nsIFile.FILE_TYPE, PERMS_FILE); + standardInit(); logTestInfo("testing " + log.path + " shouldn't exist"); @@ -80,6 +85,9 @@ function run_test() { logTestInfo("testing " + dir.path + " should exist (bug 512994)"); do_check_true(dir.exists()); + logTestInfo("testing " + channelchange.path + " shouldn't exist"); + do_check_false(channelchange.exists()); + do_test_finished(); } diff --git a/toolkit/mozapps/update/test/unit/test_0120_channelChange_complete.js b/toolkit/mozapps/update/test/unit/test_0120_channelChange_complete.js index ce3eec4940a6..99809f673d13 100644 --- a/toolkit/mozapps/update/test/unit/test_0120_channelChange_complete.js +++ b/toolkit/mozapps/update/test/unit/test_0120_channelChange_complete.js @@ -247,9 +247,9 @@ function run_test() { // Check that trying to change channels for a complete update changes the // update channel (the channel-prefs.js file should be updated). - let force = updatesDir.clone(); - force.append(CHANNEL_CHANGE_FILE); - force.create(AUS_Ci.nsIFile.FILE_TYPE, PERMS_FILE); + let channelchange = updatesDir.clone(); + channelchange.append(CHANNEL_CHANGE_FILE); + channelchange.create(AUS_Ci.nsIFile.FILE_TYPE, PERMS_FILE); // For Mac OS X set the last modified time for the root directory to a date in // the past to test that the last modified time is updated on a successful From 5ea50063cb0d27f5aaa29d1a59d00d3c498382bc Mon Sep 17 00:00:00 2001 From: Benoit Jacob Date: Wed, 18 May 2011 15:28:34 -0400 Subject: [PATCH 189/282] Bug 648804 - fix DXSDK detection on WinXP and prefer June 2010 version if present - r=joedrew This patch implements logic preferring the June 2010 SDK if multiple DXSDK versions are found in the registry; also, it fixes DXSDK detection on WinXP where the registry value is in a different format. --- configure.in | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/configure.in b/configure.in index 771443cf80ae..c2110821da07 100644 --- a/configure.in +++ b/configure.in @@ -6140,8 +6140,15 @@ if test -n "$MOZ_ANGLE"; then fi # Get the SDK path from the registry. - MOZ_DIRECTX_SDK_REG_KEY=`reg query 'HKLM\Software\Microsoft\DirectX' //s | grep 'Microsoft DirectX SDK' | head -n 1` - MOZ_DIRECTX_SDK_PATH=`reg query "$MOZ_DIRECTX_SDK_REG_KEY" //v InstallPath | grep REG_SZ | sed 's, *, ,g' | cut -d' ' -f4-` + # First try to get the June 2010 SDK + MOZ_DIRECTX_SDK_REG_KEY=`reg query 'HKLM\Software\Microsoft\DirectX' //s | grep 'Microsoft DirectX SDK (June 2010)' | head -n 1` + if test -z "$MOZ_DIRECTX_SDK_REG_KEY" ; then + # Otherwise just take whatever comes first + MOZ_DIRECTX_SDK_REG_KEY=`reg query 'HKLM\Software\Microsoft\DirectX' //s | grep 'Microsoft DirectX SDK' | head -n 1` + fi + echo "MOZ_DIRECTX_SDK_REG_KEY=$MOZ_DIRECTX_SDK_REG_KEY" + MOZ_DIRECTX_SDK_PATH=`reg query "$MOZ_DIRECTX_SDK_REG_KEY" //v InstallPath | grep REG_SZ | sed 's/.*\([[a-zA-Z]]\)\\:\\\\/\\1\\:\\\\/'` + echo "MOZ_DIRECTX_SDK_PATH=$MOZ_DIRECTX_SDK_PATH" MOZ_ANGLE= From 5ec032af39f3610267dc5e52e5f4bc44d7fd03f3 Mon Sep 17 00:00:00 2001 From: Kyle Huey Date: Wed, 18 May 2011 12:30:28 -0700 Subject: [PATCH 190/282] Fix pymake build bustage. --- dom/Makefile.in | 1 - 1 file changed, 1 deletion(-) diff --git a/dom/Makefile.in b/dom/Makefile.in index d303dc8df198..dde4c60530be 100644 --- a/dom/Makefile.in +++ b/dom/Makefile.in @@ -81,7 +81,6 @@ DIRS += \ locales \ plugins/base \ plugins/ipc \ - plugins/test \ indexedDB \ system \ ipc \ From cee8a6285db303fca51b76b083c9ac2a4e21dbe1 Mon Sep 17 00:00:00 2001 From: Chris Pearce Date: Thu, 19 May 2011 09:12:25 +1200 Subject: [PATCH 191/282] Bug 652475 - Add media.volume_scale pref to scale output volume without changing reported volume. r=roc --- content/media/nsAudioStream.cpp | 41 ++++++++++++++++++++++++++++++--- modules/libpref/src/init/all.js | 3 +++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/content/media/nsAudioStream.cpp b/content/media/nsAudioStream.cpp index a63730e8eb88..6e07e10f1238 100644 --- a/content/media/nsAudioStream.cpp +++ b/content/media/nsAudioStream.cpp @@ -47,10 +47,13 @@ using namespace mozilla::dom; #include #include "prlog.h" #include "prmem.h" +#include "prdtoa.h" #include "nsAutoPtr.h" #include "nsAudioStream.h" #include "nsAlgorithm.h" #include "VideoUtils.h" +#include "nsContentUtils.h" +#include "mozilla/Mutex.h" extern "C" { #include "sydneyaudio/sydney_audio.h" } @@ -313,16 +316,47 @@ class AudioShutdownEvent : public nsRunnable nsRefPtr mAudioChild; }; +static mozilla::Mutex* gVolumeScaleLock = nsnull; + +static double gVolumeScale = 1.0; + +static int VolumeScaleChanged(const char* aPref, void *aClosure) { + mozilla::MutexAutoLock lock(*gVolumeScaleLock); + nsAdoptingString value = + nsContentUtils::GetStringPref("media.volume_scale"); + if (value.IsEmpty()) { + gVolumeScale = 1.0; + } else { + NS_ConvertUTF16toUTF8 utf8(value); + gVolumeScale = PR_MAX(0, PR_strtod(utf8.get(), nsnull)); + } + return 0; +} + +static double GetVolumeScale() { + mozilla::MutexAutoLock lock(*gVolumeScaleLock); + return gVolumeScale; +} void nsAudioStream::InitLibrary() { #ifdef PR_LOGGING gAudioStreamLog = PR_NewLogModule("nsAudioStream"); #endif + gVolumeScaleLock = new mozilla::Mutex("nsAudioStream::gVolumeScaleLock"); + VolumeScaleChanged(nsnull, nsnull); + nsContentUtils::RegisterPrefCallback("media.volume_scale", + VolumeScaleChanged, + nsnull); } void nsAudioStream::ShutdownLibrary() { + nsContentUtils::UnregisterPrefCallback("media.volume_scale", + VolumeScaleChanged, + nsnull); + delete gVolumeScaleLock; + gVolumeScaleLock = nsnull; } nsIThread * @@ -439,10 +473,11 @@ nsresult nsAudioStreamLocal::Write(const void* aBuf, PRUint32 aCount, PRBool aBl } mBufferOverflow.Clear(); + double scaled_volume = GetVolumeScale() * mVolume; switch (mFormat) { case FORMAT_U8: { const PRUint8* buf = static_cast(aBuf); - PRInt32 volume = PRInt32((1 << 16) * mVolume); + PRInt32 volume = PRInt32((1 << 16) * scaled_volume); for (PRUint32 i = 0; i < aCount; ++i) { s_data[i + offset] = short(((PRInt32(buf[i]) - 128) * volume) >> 8); } @@ -450,7 +485,7 @@ nsresult nsAudioStreamLocal::Write(const void* aBuf, PRUint32 aCount, PRBool aBl } case FORMAT_S16_LE: { const short* buf = static_cast(aBuf); - PRInt32 volume = PRInt32((1 << 16) * mVolume); + PRInt32 volume = PRInt32((1 << 16) * scaled_volume); for (PRUint32 i = 0; i < aCount; ++i) { short s = buf[i]; #if defined(IS_BIG_ENDIAN) @@ -463,7 +498,7 @@ nsresult nsAudioStreamLocal::Write(const void* aBuf, PRUint32 aCount, PRBool aBl case FORMAT_FLOAT32: { const float* buf = static_cast(aBuf); for (PRUint32 i = 0; i < aCount; ++i) { - float scaled_value = floorf(0.5 + 32768 * buf[i] * mVolume); + float scaled_value = floorf(0.5 + 32768 * buf[i] * scaled_volume); if (buf[i] < 0.0) { s_data[i + offset] = (scaled_value < -32768.0) ? -32768 : diff --git a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js index 4588456c443d..d71d25d435fa 100644 --- a/modules/libpref/src/init/all.js +++ b/modules/libpref/src/init/all.js @@ -169,6 +169,9 @@ pref("media.enforce_same_site_origin", false); // Media cache size in kilobytes pref("media.cache_size", 512000); +// Master HTML5 media volume scale. +pref("media.volume_scale", "1.0"); + #ifdef MOZ_RAW pref("media.raw.enabled", true); #endif From 0a73e9a8b8f65eb1aa3e3b8bac2f2f6e422e6fba Mon Sep 17 00:00:00 2001 From: Marco Perez Date: Thu, 19 May 2011 09:12:25 +1200 Subject: [PATCH 192/282] Bug 657715 - Unbreak build for FreeBSD (since it doesn't have libossaudio). r=kinetik --- layout/build/Makefile.in | 2 +- toolkit/library/Makefile.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/layout/build/Makefile.in b/layout/build/Makefile.in index 9dceb32a4c5e..da992a54000a 100644 --- a/layout/build/Makefile.in +++ b/layout/build/Makefile.in @@ -282,7 +282,7 @@ EXTRA_DSO_LDOPTS += $(XLDFLAGS) $(XLIBS) endif ifdef MOZ_SYDNEYAUDIO -ifneq (,$(filter DragonFly FreeBSD GNU GNU_% NetBSD OpenBSD,$(OS_ARCH))) +ifneq (,$(filter GNU GNU_% NetBSD OpenBSD,$(OS_ARCH))) EXTRA_DSO_LDOPTS += -lossaudio endif diff --git a/toolkit/library/Makefile.in b/toolkit/library/Makefile.in index 893ad1e4c3aa..9023dcb3aaec 100644 --- a/toolkit/library/Makefile.in +++ b/toolkit/library/Makefile.in @@ -177,7 +177,7 @@ EXTRA_DSO_LDOPTS += \ endif endif -ifneq (,$(filter DragonFly FreeBSD GNU GNU_% NetBSD OpenBSD,$(OS_ARCH))) +ifneq (,$(filter GNU GNU_% NetBSD OpenBSD,$(OS_ARCH))) ifdef MOZ_SYDNEYAUDIO EXTRA_DSO_LDOPTS += -lossaudio endif From 24c541facf5e713fdbe7691f086bcf65f44be6d6 Mon Sep 17 00:00:00 2001 From: Bas Schouten Date: Tue, 17 May 2011 23:10:09 +0000 Subject: [PATCH 193/282] Bug 620216 - Part 1: Use EXTEND_PAD when doing DrawImage. r=roc --- content/canvas/src/nsCanvasRenderingContext2D.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/content/canvas/src/nsCanvasRenderingContext2D.cpp b/content/canvas/src/nsCanvasRenderingContext2D.cpp index 4446a4888f54..035366d2adf7 100644 --- a/content/canvas/src/nsCanvasRenderingContext2D.cpp +++ b/content/canvas/src/nsCanvasRenderingContext2D.cpp @@ -3372,6 +3372,7 @@ nsCanvasRenderingContext2D::DrawImage(nsIDOMElement *imgElt, float a1, pattern = new gfxPattern(imgsurf); pattern->SetMatrix(matrix); + pattern->SetExtend(gfxPattern::EXTEND_PAD); if (CurrentState().imageSmoothingEnabled) pattern->SetFilter(gfxPattern::FILTER_GOOD); From 44c19ee0309acab1a4c7bf7f6bf4e925e5f9cae7 Mon Sep 17 00:00:00 2001 From: Bas Schouten Date: Wed, 18 May 2011 22:37:44 +0000 Subject: [PATCH 194/282] Bug 620216 - Part 2: Mark several reftests passing now. r=roc --- layout/reftests/svg/as-image/reftest.list | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/layout/reftests/svg/as-image/reftest.list b/layout/reftests/svg/as-image/reftest.list index 78e45ff5d718..e78797fd9d85 100644 --- a/layout/reftests/svg/as-image/reftest.list +++ b/layout/reftests/svg/as-image/reftest.list @@ -31,9 +31,9 @@ include zoom/reftest.list == canvas-drawImage-simple-1a.html lime100x100-ref.html == canvas-drawImage-simple-1b.html lime100x100-ref.html -fails-if(Android) fails-if(gtk2Widget) fails-if(winWidget) == canvas-drawImage-scale-1a.html lime100x100-ref.html # XXX top & left edges fuzzy -fails-if(Android) fails-if(gtk2Widget) fails-if(winWidget) == canvas-drawImage-scale-1b.html lime100x100-ref.html # XXX top & left edges fuzzy -fails-if(Android) fails-if(gtk2Widget) fails-if(winWidget) == canvas-drawImage-scale-1c.html lime100x100-ref.html # XXX all edges fuzzy +== canvas-drawImage-scale-1a.html lime100x100-ref.html +== canvas-drawImage-scale-1b.html lime100x100-ref.html +== canvas-drawImage-scale-1c.html lime100x100-ref.html fails == canvas-drawImage-scale-2a.html canvas-drawImage-scale-2-ref.html # XXX all edges fuzzy fails == canvas-drawImage-scale-2b.html canvas-drawImage-scale-2-ref.html # XXX all edges fuzzy From 2d4a3eb67aea60d20d54d6731b0af93dffb98497 Mon Sep 17 00:00:00 2001 From: Benjamin Stover Date: Wed, 18 May 2011 15:54:31 -0700 Subject: [PATCH 195/282] Bug 655864 Password field is not masked immediately and shows artifacts, when typing past the end of the field r=roc --- layout/base/FrameLayerBuilder.cpp | 31 +++++++++++++++++++++---------- layout/base/FrameLayerBuilder.h | 11 +++++++---- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/layout/base/FrameLayerBuilder.cpp b/layout/base/FrameLayerBuilder.cpp index b1dee08f15ac..8d9d2addab31 100644 --- a/layout/base/FrameLayerBuilder.cpp +++ b/layout/base/FrameLayerBuilder.cpp @@ -439,10 +439,11 @@ FrameLayerBuilder::Init(nsDisplayListBuilder* aBuilder) } PRBool -FrameLayerBuilder::DisplayItemDataEntry::HasContainerLayer() +FrameLayerBuilder::DisplayItemDataEntry::HasNonEmptyContainerLayer() { for (PRUint32 i = 0; i < mData.Length(); ++i) { - if (mData[i].mLayer->GetType() == Layer::TYPE_CONTAINER) + if (mData[i].mLayer->GetType() == Layer::TYPE_CONTAINER && + mData[i].mLayerState != LAYER_ACTIVE_EMPTY) return PR_TRUE; } return PR_FALSE; @@ -609,7 +610,7 @@ FrameLayerBuilder::UpdateDisplayItemDataForFrame(nsPtrHashKey* aEntry, return PL_DHASH_REMOVE; } - if (newDisplayItems->HasContainerLayer()) { + if (newDisplayItems->HasNonEmptyContainerLayer()) { // Reset or create the invalid region now so we can start collecting // new dirty areas. // Note that the NS_FRAME_HAS_CONTAINER_LAYER bit is set in @@ -1314,8 +1315,7 @@ ContainerState::ProcessDisplayItems(const nsDisplayList& aList, } mBounds.UnionRect(mBounds, itemContent); nsIntRect itemDrawRect = itemContent.ToOutsidePixels(appUnitsPerDevPixel); - nsDisplayItem::LayerState layerState = - item->GetLayerState(mBuilder, mManager); + LayerState layerState = item->GetLayerState(mBuilder, mManager); nsIFrame* activeScrolledRoot = nsLayoutUtils::GetActiveScrolledRootFor(item, mBuilder); @@ -1384,7 +1384,7 @@ ContainerState::ProcessDisplayItems(const nsDisplayList& aList, InvalidateForLayerChange(item, ownLayer); mNewChildLayers.AppendElement(ownLayer); - mBuilder->LayerBuilder()->AddLayerDisplayItem(ownLayer, item); + mBuilder->LayerBuilder()->AddLayerDisplayItem(ownLayer, item, layerState); } else { nsRefPtr thebesLayer = FindThebesLayerFor(item, itemVisibleRect, itemDrawRect, aClip, @@ -1462,7 +1462,7 @@ FrameLayerBuilder::AddThebesDisplayItem(ThebesLayer* aLayer, nsIFrame* aContainerLayerFrame, LayerState aLayerState) { - AddLayerDisplayItem(aLayer, aItem); + AddLayerDisplayItem(aLayer, aItem, aLayerState); ThebesLayerItemsEntry* entry = mThebesLayerItems.PutEntry(aLayer); if (entry) { @@ -1476,7 +1476,8 @@ FrameLayerBuilder::AddThebesDisplayItem(ThebesLayer* aLayer, void FrameLayerBuilder::AddLayerDisplayItem(Layer* aLayer, - nsDisplayItem* aItem) + nsDisplayItem* aItem, + LayerState aLayerState) { if (aLayer->Manager() != mRetainingManager) return; @@ -1484,7 +1485,7 @@ FrameLayerBuilder::AddLayerDisplayItem(Layer* aLayer, nsIFrame* f = aItem->GetUnderlyingFrame(); DisplayItemDataEntry* entry = mNewDisplayItemData.PutEntry(f); if (entry) { - entry->mData.AppendElement(DisplayItemData(aLayer, aItem->GetPerFrameKey())); + entry->mData.AppendElement(DisplayItemData(aLayer, aItem->GetPerFrameKey(), aLayerState)); } } @@ -1635,6 +1636,16 @@ FrameLayerBuilder::BuildContainerLayerFor(nsDisplayListBuilder* aBuilder, return nsnull; } + if (aContainerItem && + aContainerItem->GetLayerState(aBuilder, aManager) == LAYER_ACTIVE_EMPTY) { + // Empty layers only have metadata and should never have display items. We + // early exit because later, invalidation will walk up the frame tree to + // determine which thebes layer gets invalidated. Since an empty layer + // should never have anything to paint, it should never be invalidated. + NS_ASSERTION(aChildren.IsEmpty(), "Should have no children"); + return containerLayer.forget(); + } + ContainerState state(aBuilder, aManager, aContainerFrame, containerLayer); nscoord appUnitsPerDevPixel = aContainerFrame->PresContext()->AppUnitsPerDevPixel(); @@ -1642,7 +1653,7 @@ FrameLayerBuilder::BuildContainerLayerFor(nsDisplayListBuilder* aBuilder, DisplayItemDataEntry* entry = mNewDisplayItemData.PutEntry(aContainerFrame); if (entry) { entry->mData.AppendElement( - DisplayItemData(containerLayer, containerDisplayItemKey)); + DisplayItemData(containerLayer, containerDisplayItemKey, LAYER_ACTIVE)); } nsPoint* offsetAtLastPaint = static_cast diff --git a/layout/base/FrameLayerBuilder.h b/layout/base/FrameLayerBuilder.h index a3df8d37a375..2339854a8c9d 100644 --- a/layout/base/FrameLayerBuilder.h +++ b/layout/base/FrameLayerBuilder.h @@ -224,7 +224,9 @@ public: /** * Record aItem as a display item that is rendered by aLayer. */ - void AddLayerDisplayItem(Layer* aLayer, nsDisplayItem* aItem); + void AddLayerDisplayItem(Layer* aLayer, + nsDisplayItem* aItem, + LayerState aLayerState); /** * Record aItem as a display item that is rendered by the ThebesLayer @@ -382,11 +384,12 @@ protected: */ class DisplayItemData { public: - DisplayItemData(Layer* aLayer, PRUint32 aKey) - : mLayer(aLayer), mDisplayItemKey(aKey) {} + DisplayItemData(Layer* aLayer, PRUint32 aKey, LayerState aLayerState) + : mLayer(aLayer), mDisplayItemKey(aKey), mLayerState(aLayerState) {} nsRefPtr mLayer; PRUint32 mDisplayItemKey; + LayerState mLayerState; }; static void InternalDestroyDisplayItemData(nsIFrame* aFrame, @@ -416,7 +419,7 @@ protected: NS_ERROR("Should never be called, since we ALLOW_MEMMOVE"); } - PRBool HasContainerLayer(); + PRBool HasNonEmptyContainerLayer(); nsTArray mData; From 875fa5c16315223024992ef8d165c58f84fbb0a5 Mon Sep 17 00:00:00 2001 From: Benjamin Stover Date: Wed, 18 May 2011 15:54:32 -0700 Subject: [PATCH 196/282] Bug 655852 Typing past the boundaries of the textbox will start clearing the beginning characters, instead of scrolling r=mbrubeck --- mobile/chrome/content/bindings/browser.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mobile/chrome/content/bindings/browser.js b/mobile/chrome/content/bindings/browser.js index f59d1c3ebd28..8a20156b6595 100644 --- a/mobile/chrome/content/bindings/browser.js +++ b/mobile/chrome/content/bindings/browser.js @@ -337,6 +337,10 @@ let ContentScroll = { if (!element) break; + let binding = element.ownerDocument.getBindingParent(element); + if (binding instanceof Ci.nsIDOMHTMLInputElement && binding.mozIsTextField(false)) + break; + // Set the scroll offset for this element if specified if (json.scrollX >= 0 && json.scrollY >= 0) { this.setScrollOffsetForElement(element, json.scrollX, json.scrollY) From 00563b0d0710aeb9a27685ebc4e3d479ea39d182 Mon Sep 17 00:00:00 2001 From: Masayuki Nakano Date: Thu, 19 May 2011 08:12:16 +0900 Subject: [PATCH 197/282] Bug 657865 High resolution scrolling should be able to be disabled by pref r=smaug --- modules/libpref/src/init/all.js | 9 +++-- widget/src/windows/nsWindow.cpp | 63 ++++++++++++++++++--------------- widget/src/windows/nsWindow.h | 1 + 3 files changed, 42 insertions(+), 31 deletions(-) diff --git a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js index d71d25d435fa..e0f66e5ab3f8 100644 --- a/modules/libpref/src/init/all.js +++ b/modules/libpref/src/init/all.js @@ -1111,9 +1111,6 @@ pref("mousewheel.transaction.timeout", 1500); // mouse wheel scroll transaction is held even if the mouse cursor is moved. pref("mousewheel.transaction.ignoremovedelay", 100); -// Macbook touchpad two finger pixel scrolling -pref("mousewheel.enable_pixel_scrolling", true); - // prefs for app level mouse wheel scrolling acceleration. // number of mousewheel clicks when acceleration starts // acceleration can be turned off if pref is set to -1 @@ -1852,6 +1849,9 @@ pref("ui.panel.default_level_parent", false); pref("mousewheel.system_scroll_override_on_root_content.enabled", true); +// High resolution scrolling with supported mouse drivers on Vista or later. +pref("mousewheel.enable_pixel_scrolling", false); + // If your mouse drive sends WM_*SCROLL messages when you turn your mouse wheel, // set this to true. Then, gecko processes them as mouse wheel messages. pref("mousewheel.emulate_at_wm_scroll", false); @@ -2300,6 +2300,9 @@ pref("ui.plugin.cancel_composition_at_input_source_changed", false); pref("mousewheel.system_scroll_override_on_root_content.enabled", false); +// Macbook touchpad two finger pixel scrolling +pref("mousewheel.enable_pixel_scrolling", true); + # XP_MACOSX #endif diff --git a/widget/src/windows/nsWindow.cpp b/widget/src/windows/nsWindow.cpp index 79daf8bea828..c2271a30dd66 100644 --- a/widget/src/windows/nsWindow.cpp +++ b/widget/src/windows/nsWindow.cpp @@ -298,6 +298,7 @@ PRUint32 nsWindow::sOOPPPluginFocusEvent = MSG nsWindow::sRedirectedKeyDown; +PRBool nsWindow::sEnablePixelScrolling = PR_TRUE; PRBool nsWindow::sNeedsToInitMouseWheelSettings = PR_TRUE; ULONG nsWindow::sMouseWheelScrollLines = 0; ULONG nsWindow::sMouseWheelScrollChars = 0; @@ -667,6 +668,11 @@ nsWindow::Create(nsIWidget *aParent, if (NS_SUCCEEDED(prefBranch->GetBoolPref("mozilla.widget.disable-native-theme", &temp))) gDisableNativeTheme = temp; + + if (NS_SUCCEEDED(prefBranch->GetBoolPref("mousewheel.enable_pixel_scrolling", + &temp))) { + sEnablePixelScrolling = temp; + } } } } @@ -6411,27 +6417,33 @@ nsWindow::OnMouseWheel(UINT aMessage, WPARAM aWParam, LPARAM aLParam, sLastMouseWheelUnitIsPage = isPageScroll; sLastMouseWheelTime = now; - nsMouseScrollEvent testEvent(PR_TRUE, NS_MOUSE_SCROLL, this); - InitEvent(testEvent); - testEvent.scrollFlags = isPageScroll ? nsMouseScrollEvent::kIsFullPage : 0; - testEvent.scrollFlags |= isVertical ? nsMouseScrollEvent::kIsVertical : - nsMouseScrollEvent::kIsHorizontal; - testEvent.delta = sLastMouseWheelDeltaIsPositive ? -1 : 1; - nsQueryContentEvent queryEvent(PR_TRUE, NS_QUERY_SCROLL_TARGET_INFO, this); - InitEvent(queryEvent); - queryEvent.InitForQueryScrollTargetInfo(&testEvent); - DispatchWindowEvent(&queryEvent); - // If the necessary interger isn't larger than 0, we should assume that - // the event failed for us. - if (queryEvent.mSucceeded) { - if (isPageScroll) { - if (isVertical) { - queryEvent.mSucceeded = (queryEvent.mReply.mPageHeight > 0); + PRBool dispatchPixelScrollEvent = PR_FALSE; + PRInt32 pixelsPerUnit = 0; + + if (sEnablePixelScrolling) { + nsMouseScrollEvent testEvent(PR_TRUE, NS_MOUSE_SCROLL, this); + InitEvent(testEvent); + testEvent.scrollFlags = isPageScroll ? nsMouseScrollEvent::kIsFullPage : 0; + testEvent.scrollFlags |= isVertical ? nsMouseScrollEvent::kIsVertical : + nsMouseScrollEvent::kIsHorizontal; + testEvent.delta = sLastMouseWheelDeltaIsPositive ? -1 : 1; + nsQueryContentEvent queryEvent(PR_TRUE, NS_QUERY_SCROLL_TARGET_INFO, this); + InitEvent(queryEvent); + queryEvent.InitForQueryScrollTargetInfo(&testEvent); + DispatchWindowEvent(&queryEvent); + // If the necessary interger isn't larger than 0, we should assume that + // the event failed for us. + if (queryEvent.mSucceeded) { + if (isPageScroll) { + if (isVertical) { + pixelsPerUnit = queryEvent.mReply.mPageHeight; + } else { + pixelsPerUnit = queryEvent.mReply.mPageWidth; + } } else { - queryEvent.mSucceeded = (queryEvent.mReply.mPageWidth > 0); + pixelsPerUnit = queryEvent.mReply.mLineHeight; } - } else { - queryEvent.mSucceeded = (queryEvent.mReply.mLineHeight > 0); + dispatchPixelScrollEvent = (pixelsPerUnit > 0); } } @@ -6456,9 +6468,8 @@ nsWindow::OnMouseWheel(UINT aMessage, WPARAM aWParam, LPARAM aLParam, nsMouseScrollEvent scrollEvent(PR_TRUE, NS_MOUSE_SCROLL, this); InitEvent(scrollEvent); - // If the query event failed, we cannot send pixel events. scrollEvent.scrollFlags = - queryEvent.mSucceeded ? nsMouseScrollEvent::kHasPixels : 0; + dispatchPixelScrollEvent ? nsMouseScrollEvent::kHasPixels : 0; scrollEvent.isShift = modKeyState.mIsShiftDown; scrollEvent.isControl = isControl; scrollEvent.isMeta = PR_FALSE; @@ -6501,7 +6512,7 @@ nsWindow::OnMouseWheel(UINT aMessage, WPARAM aWParam, LPARAM aLParam, } // If the query event failed, we cannot send pixel events. - if (!queryEvent.mSucceeded) { + if (!dispatchPixelScrollEvent) { sRemainingDeltaForPixel = 0; return PR_FALSE; } @@ -6519,18 +6530,14 @@ nsWindow::OnMouseWheel(UINT aMessage, WPARAM aWParam, LPARAM aLParam, double deltaPerPixel; if (isPageScroll) { - if (isVertical) { - deltaPerPixel = (double)WHEEL_DELTA / queryEvent.mReply.mPageHeight; - } else { - deltaPerPixel = (double)WHEEL_DELTA / queryEvent.mReply.mPageWidth; - } + deltaPerPixel = (double)WHEEL_DELTA / pixelsPerUnit; } else { if (isVertical) { deltaPerPixel = (double)WHEEL_DELTA / sMouseWheelScrollLines; } else { deltaPerPixel = (double)WHEEL_DELTA / sMouseWheelScrollChars; } - deltaPerPixel /= queryEvent.mReply.mLineHeight; + deltaPerPixel /= pixelsPerUnit; } pixelEvent.delta = RoundDelta((double)nativeDeltaForPixel * orienter / deltaPerPixel); diff --git a/widget/src/windows/nsWindow.h b/widget/src/windows/nsWindow.h index d6d98ca5c63a..3279ed2798fe 100644 --- a/widget/src/windows/nsWindow.h +++ b/widget/src/windows/nsWindow.h @@ -616,6 +616,7 @@ protected: // was reirected to SendInput() API by OnKeyDown(). static MSG sRedirectedKeyDown; + static PRBool sEnablePixelScrolling; static PRBool sNeedsToInitMouseWheelSettings; static ULONG sMouseWheelScrollLines; static ULONG sMouseWheelScrollChars; From ccb26d7ac3fdb6d94e0c41e192a75ac9d3c3dc37 Mon Sep 17 00:00:00 2001 From: Masayuki Nakano Date: Thu, 19 May 2011 08:12:34 +0900 Subject: [PATCH 198/282] Bug 657648 Don't use high resolution scrolling when acceleration is enabled r=smaug --- content/events/src/nsEventStateManager.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/content/events/src/nsEventStateManager.cpp b/content/events/src/nsEventStateManager.cpp index b64732025582..c8770feec579 100644 --- a/content/events/src/nsEventStateManager.cpp +++ b/content/events/src/nsEventStateManager.cpp @@ -391,6 +391,7 @@ public: static PRInt32 AccelerateWheelDelta(PRInt32 aScrollLines, PRBool aIsHorizontal, PRBool aAllowScrollSpeedOverride, nsIScrollableFrame::ScrollUnit *aScrollQuantity); + static PRBool IsAccelerationEnabled(); enum { kScrollSeriesTimeout = 80 @@ -651,6 +652,12 @@ nsMouseWheelTransaction::GetIgnoreMoveDelayTime() nsContentUtils::GetIntPref("mousewheel.transaction.ignoremovedelay", 100); } +PRBool +nsMouseWheelTransaction::IsAccelerationEnabled() +{ + return GetAccelerationStart() >= 0 && GetAccelerationFactor() > 0; +} + PRInt32 nsMouseWheelTransaction::AccelerateWheelDelta(PRInt32 aScrollLines, PRBool aIsHorizontal, @@ -2651,6 +2658,12 @@ nsEventStateManager::DoScrollText(nsIFrame* aTargetFrame, if (!passToParent && frameToScroll) { if (aQueryEvent) { + // If acceleration is enabled, pixel scroll shouldn't be used for + // high resolution scrolling. + if (nsMouseWheelTransaction::IsAccelerationEnabled()) { + return NS_OK; + } + nscoord appUnitsPerDevPixel = aTargetFrame->PresContext()->AppUnitsPerDevPixel(); aQueryEvent->mReply.mLineHeight = From bd2912a79a6c801a6e29af241643af3235089eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A3o=20Gottwald?= Date: Wed, 18 May 2011 10:02:10 +0200 Subject: [PATCH 199/282] Bug 644746 - Call updateVisibility when constructing the tabs container rather than when addProgressListener is called for the first time. r=gavin --HG-- extra : rebase_source : e6ccbfe8274217fdca48ee5c53e5bf2eeca2d066 --- browser/base/content/tabbrowser.xml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/browser/base/content/tabbrowser.xml b/browser/base/content/tabbrowser.xml index 792bcb92069f..2c6d37d43bde 100644 --- a/browser/base/content/tabbrowser.xml +++ b/browser/base/content/tabbrowser.xml @@ -151,9 +151,6 @@ false #endif - - false - null @@ -1853,11 +1850,6 @@ "608628."); } - if (!this.mAddProgressListenerWasCalled) { - this.mAddProgressListenerWasCalled = true; - this.tabContainer.updateVisibility(); - } - this.mProgressListeners.push(aListener); ]]> @@ -2696,6 +2688,7 @@ Services.prefs.addObserver("browser.tabs.", this._prefObserver, false); window.addEventListener("resize", this, false); + this.updateVisibility(); if (window.TabsInTitlebar) TabsInTitlebar.allowedBy("tabs-visible", this.visible); ]]> From f3722b6322325d78fb17f943976772a19d112a99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A3o=20Gottwald?= Date: Wed, 18 May 2011 10:04:36 +0200 Subject: [PATCH 200/282] Bug 563337 - "Error: preview is undefined" and "this.preview is undefined" when closing the last tab with browser.tabs.closeWindowWithLastTab = false. r=gavin --HG-- extra : rebase_source : 84f1e724f6a05b13c10b102de2df1007163ceb74 --- browser/base/content/tabbrowser.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/browser/base/content/tabbrowser.xml b/browser/base/content/tabbrowser.xml index 2c6d37d43bde..925715565cf4 100644 --- a/browser/base/content/tabbrowser.xml +++ b/browser/base/content/tabbrowser.xml @@ -1537,8 +1537,10 @@ } this._removingTabs.push(aTab); - - this.tabContainer.updateVisibility(); + if (newTab) + this.addTab("about:blank", {skipAnimation: true}); + else + this.tabContainer.updateVisibility(); // We're committed to closing the tab now. // Dispatch a notification. @@ -1594,8 +1596,6 @@ // update the UI early for responsiveness aTab.collapsed = true; - if (aNewTab) - this.addTab("about:blank", {skipAnimation: true}); this.tabContainer._fillTrailingGap(); this._blurTab(aTab); From c779bfd35004376a2f27f414384a2bdd2c9b47bf Mon Sep 17 00:00:00 2001 From: Margaret Leibovic Date: Wed, 18 May 2011 08:33:39 -0700 Subject: [PATCH 201/282] tests for Bug 573176 - Implement Site-Specific Privacy Preferences, r=sdwilsh --- .../components/preferences/tests/Makefile.in | 1 + .../preferences/tests/browser_permissions.js | 300 ++++++++++++++++++ 2 files changed, 301 insertions(+) create mode 100644 browser/components/preferences/tests/browser_permissions.js diff --git a/browser/components/preferences/tests/Makefile.in b/browser/components/preferences/tests/Makefile.in index 2d93d86556cf..2f4f12cc163b 100644 --- a/browser/components/preferences/tests/Makefile.in +++ b/browser/components/preferences/tests/Makefile.in @@ -55,6 +55,7 @@ _BROWSER_FILES = \ browser_privacypane_6.js \ browser_privacypane_7.js \ browser_privacypane_8.js \ + browser_permissions.js \ $(NULL) libs:: $(_BROWSER_FILES) diff --git a/browser/components/preferences/tests/browser_permissions.js b/browser/components/preferences/tests/browser_permissions.js new file mode 100644 index 000000000000..e8fef26af043 --- /dev/null +++ b/browser/components/preferences/tests/browser_permissions.js @@ -0,0 +1,300 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +Components.utils.import("resource://gre/modules/Services.jsm"); +Components.utils.import("resource://gre/modules/PlacesUtils.jsm"); +Components.utils.import("resource://gre/modules/NetUtil.jsm"); + +const ABOUT_PERMISSIONS_SPEC = "about:permissions"; + +const TEST_URI_1 = NetUtil.newURI("http://mozilla.com/"); +const TEST_URI_2 = NetUtil.newURI("http://mozilla.org/"); + +// values from DefaultPermissions object +const PERM_UNKNOWN = 0; +const PERM_ALLOW = 1; +const PERM_DENY = 2; +const PERM_SESION = 8; + +// used to set permissions on test sites +const TEST_PERMS = { + "password": PERM_ALLOW, + "cookie": PERM_ALLOW, + "geo": PERM_UNKNOWN, + "indexedDB": PERM_UNKNOWN, + "popup": PERM_DENY +}; + +// number of managed permissions in the interface +const TEST_PERMS_COUNT = 5; + +function test() { + waitForExplicitFinish(); + registerCleanupFunction(cleanUp); + + // add test history visit + PlacesUtils.history.addVisit(TEST_URI_1, Date.now() * 1000, null, + Ci.nsINavHistoryService.TRANSITION_LINK, false, 0); + + // set permissions ourselves to avoid problems with different defaults + // from test harness configuration + for (let type in TEST_PERMS) { + if (type == "password") { + Services.logins.setLoginSavingEnabled(TEST_URI_2.prePath, true); + } else { + // set permissions on a site without history visits to test enumerateServices + Services.perms.add(TEST_URI_2, type, TEST_PERMS[type]); + } + } + + function observer() { + Services.obs.removeObserver(observer, "browser-permissions-initialized", false); + runNextTest(); + } + Services.obs.addObserver(observer, "browser-permissions-initialized", false); + + // open about:permissions + gBrowser.selectedTab = gBrowser.addTab("about:permissions"); +} + +function cleanUp() { + for (let type in TEST_PERMS) { + if (type != "password") { + Services.perms.remove(TEST_URI_1.host, type); + Services.perms.remove(TEST_URI_2.host, type); + } + } + + gBrowser.removeTab(gBrowser.selectedTab); +} + +function runNextTest() { + if (gTestIndex == tests.length) { + waitForClearHistory(finish); + return; + } + + let nextTest = tests[gTestIndex++]; + info("[" + nextTest.name + "] running test"); + nextTest(); +} + +var gSitesList; +var gHeaderDeck; +var gSiteLabel; + +var gTestIndex = 0; +var tests = [ + function test_page_load() { + is(gBrowser.currentURI.spec, ABOUT_PERMISSIONS_SPEC, "about:permissions loaded"); + + gSitesList = gBrowser.contentDocument.getElementById("sites-list"); + ok(gSitesList, "got sites list"); + + gHeaderDeck = gBrowser.contentDocument.getElementById("header-deck"); + ok(gHeaderDeck, "got header deck"); + + gSiteLabel = gBrowser.contentDocument.getElementById("site-label"); + ok(gSiteLabel, "got site label"); + + runNextTest(); + }, + + function test_sites_list() { + is(gSitesList.firstChild.id, "all-sites-item", + "all sites is the first item in the sites list"); + + ok(getSiteItem(TEST_URI_1.host), "site item from places db exists"); + ok(getSiteItem(TEST_URI_2.host), "site item from enumerating services exists"); + + runNextTest(); + }, + + function test_filter_sites_list() { + // set filter to test host + let sitesFilter = gBrowser.contentDocument.getElementById("sites-filter"); + sitesFilter.value = TEST_URI_1.host; + sitesFilter.doCommand(); + + // make sure correct sites are collapsed/showing + let testSite1 = getSiteItem(TEST_URI_1.host); + ok(!testSite1.collapsed, "test site 1 is not collapsed"); + let testSite2 = getSiteItem(TEST_URI_2.host); + ok(testSite2.collapsed, "test site 2 is collapsed"); + + // clear filter + sitesFilter.value = ""; + sitesFilter.doCommand(); + + runNextTest(); + }, + + function test_all_sites() { + // "All Sites" item should be selected when the page is first loaded + is(gSitesList.selectedItem, gBrowser.contentDocument.getElementById("all-sites-item"), + "all sites item is selected"); + + let defaultsHeader = gBrowser.contentDocument.getElementById("defaults-header"); + is(defaultsHeader, gHeaderDeck.selectedPanel, + "correct header shown for all sites"); + + ok(gBrowser.contentDocument.getElementById("passwords-count").hidden, + "passwords count is hidden"); + ok(gBrowser.contentDocument.getElementById("cookies-count").hidden, + "cookies count is hidden"); + + runNextTest(); + }, + + function test_all_sites_permission() { + // there should be no user-set pref for cookie behavior + is(Services.prefs.getIntPref("network.cookie.cookieBehavior"), PERM_UNKNOWN, + "network.cookie.cookieBehavior is expected default"); + + // the default behavior is to allow cookies + let cookieMenulist = getPermissionMenulist("cookie"); + is(cookieMenulist.value, PERM_ALLOW, + "menulist correctly shows that cookies are allowed"); + + // set the pref to block cookies + Services.prefs.setIntPref("network.cookie.cookieBehavior", PERM_DENY); + // check to make sure this change is reflected in the UI + is(cookieMenulist.value, PERM_DENY, "menulist correctly shows that cookies are blocked"); + + // clear the pref + Services.prefs.clearUserPref("network.cookie.cookieBehavior"); + + runNextTest(); + }, + + function test_manage_all_passwords() { + // make sure "Manage All Passwords..." button opens the correct dialog + addWindowListener("chrome://passwordmgr/content/passwordManager.xul", runNextTest); + gBrowser.contentDocument.getElementById("passwords-manage-all-button").doCommand(); + + }, + + function test_manage_all_cookies() { + // make sure "Manage All Cookies..." button opens the correct dialog + addWindowListener("chrome://browser/content/preferences/cookies.xul", runNextTest); + gBrowser.contentDocument.getElementById("cookies-manage-all-button").doCommand(); + }, + + function test_select_site() { + // select the site that has the permissions we set at the beginning of the test + let testSiteItem = getSiteItem(TEST_URI_2.host); + gSitesList.selectedItem = testSiteItem; + + let siteHeader = gBrowser.contentDocument.getElementById("site-header"); + is(siteHeader, gHeaderDeck.selectedPanel, + "correct header shown for a specific site"); + is(gSiteLabel.value, TEST_URI_2.host, "header updated for selected site"); + + ok(!gBrowser.contentDocument.getElementById("passwords-count").hidden, + "passwords count is not hidden"); + ok(!gBrowser.contentDocument.getElementById("cookies-count").hidden, + "cookies count is not hidden"); + + runNextTest(); + }, + + function test_permissions() { + let menulists = gBrowser.contentDocument.getElementsByClassName("pref-menulist"); + is(menulists.length, TEST_PERMS_COUNT, "got expected number of managed permissions"); + + for (let i = 0; i < menulists.length; i++) { + let permissionMenulist = menulists.item(i); + let permissionType = permissionMenulist.getAttribute("type"); + + // permissions should reflect what we set at the beginning of the test + is(permissionMenulist.value, TEST_PERMS[permissionType], + "got expected value for " + permissionType + " permission"); + } + + runNextTest(); + }, + + function test_permission_change() { + let geoMenulist = getPermissionMenulist("geo"); + is(geoMenulist.value, PERM_UNKNOWN, "menulist correctly shows that geolocation permission is unspecified"); + + // change a permission programatically + Services.perms.add(TEST_URI_2, "geo", PERM_DENY); + // check to make sure this change is reflected in the UI + is(geoMenulist.value, PERM_DENY, "menulist shows that geolocation is blocked"); + + // change a permisssion in the UI + let geoAllowItem = gBrowser.contentDocument.getElementById("geo-" + PERM_ALLOW); + geoMenulist.selectedItem = geoAllowItem; + geoMenulist.doCommand(); + // check to make sure this change is reflected in the permission manager + is(Services.perms.testPermission(TEST_URI_2, "geo"), PERM_ALLOW, + "permission manager shows that geolocation is allowed"); + + runNextTest(); + }, + + function test_forget_site() { + // click "Forget About This Site" button + gBrowser.contentDocument.getElementById("forget-site-button").doCommand(); + + is(gSiteLabel.value, "", "site label cleared"); + + // check to make sure site is gone from sites list + let testSiteItem = getSiteItem(TEST_URI_2.host); + ok(!testSiteItem, "site removed from sites list"); + + // check to make sure we forgot all permissions corresponding to site + for (let type in TEST_PERMS) { + if (type == "password") { + ok(Services.logins.getLoginSavingEnabled(TEST_URI_2.prePath), + "password saving should be enabled by default"); + } else { + is(Services.perms.testPermission(TEST_URI_2, type), PERM_UNKNOWN, + type + " permission should not be set for test site 2"); + } + } + + runNextTest(); + } +]; + +function getPermissionMenulist(aType) { + return gBrowser.contentDocument.getElementById(aType + "-menulist"); +} + +function getSiteItem(aHost) { + return gBrowser.contentDocument. + querySelector(".site[value='" + aHost + "']"); +} + +function addWindowListener(aURL, aCallback) { + Services.wm.addListener({ + onOpenWindow: function(aXULWindow) { + info("window opened, waiting for focus"); + Services.wm.removeListener(this); + + var domwindow = aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIDOMWindowInternal); + waitForFocus(function() { + is(domwindow.document.location.href, aURL, "should have seen the right window open"); + domwindow.close(); + aCallback(); + }, domwindow); + }, + onCloseWindow: function(aXULWindow) { }, + onWindowTitleChange: function(aXULWindow, aNewTitle) { } + }); +} + +// copied from toolkit/components/places/tests/head_common.js +function waitForClearHistory(aCallback) { + let observer = { + observe: function(aSubject, aTopic, aData) { + Services.obs.removeObserver(this, PlacesUtils.TOPIC_EXPIRATION_FINISHED); + aCallback(); + } + }; + Services.obs.addObserver(observer, PlacesUtils.TOPIC_EXPIRATION_FINISHED, false); + PlacesUtils.bhistory.removeAllPages(); +} From 3045b5d27c62338c71796423f7d0d146d884fb43 Mon Sep 17 00:00:00 2001 From: Tobias Markus Date: Thu, 19 May 2011 08:25:25 +0200 Subject: [PATCH 202/282] Bug 640530 - Add missing 'var'. r=Mossop --- toolkit/mozapps/extensions/content/extensions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/toolkit/mozapps/extensions/content/extensions.js b/toolkit/mozapps/extensions/content/extensions.js index bd7d92cd5c13..d725f7167537 100644 --- a/toolkit/mozapps/extensions/content/extensions.js +++ b/toolkit/mozapps/extensions/content/extensions.js @@ -1296,7 +1296,7 @@ function sortElements(aElements, aSortBy, aAscending) { if (aObj.hasAttribute(aKey)) return aObj.getAttribute(aKey); - addon = aObj.mAddon || aObj.mInstall; + var addon = aObj.mAddon || aObj.mInstall; if (!addon) return null; From eaaadb60406db087ad1667b8ef5553f944e425d5 Mon Sep 17 00:00:00 2001 From: Henri Sivonen Date: Thu, 19 May 2011 11:42:01 +0300 Subject: [PATCH 203/282] Bug 655682 - Perform discretionary flushes in the HTML parser even if the current node is foster-parenting. r=bzbarsky. --- parser/html/nsHtml5StreamParser.cpp | 24 +++++++------------ parser/html/nsHtml5TreeBuilderCppSupplement.h | 21 ++++++++-------- parser/html/nsHtml5TreeBuilderHSupplement.h | 4 +--- 3 files changed, 20 insertions(+), 29 deletions(-) diff --git a/parser/html/nsHtml5StreamParser.cpp b/parser/html/nsHtml5StreamParser.cpp index c6db920e291e..b4e2ef0ad43c 100644 --- a/parser/html/nsHtml5StreamParser.cpp +++ b/parser/html/nsHtml5StreamParser.cpp @@ -1159,13 +1159,11 @@ nsHtml5StreamParser::ContinueAfterScripts(nsHtml5Tokenizer* aTokenizer, mSpeculations.RemoveElementAt(0); if (mSpeculations.IsEmpty()) { // yes, it was still the only speculation. Now stop speculating - if (mTreeBuilder->IsDiscretionaryFlushSafe()) { - // However, before telling the executor to read from stage, flush - // any pending ops straight to the executor, because otherwise - // they remain unflushed until we get more data from the network. - mTreeBuilder->SetOpSink(mExecutor); - mTreeBuilder->Flush(); - } + // However, before telling the executor to read from stage, flush + // any pending ops straight to the executor, because otherwise + // they remain unflushed until we get more data from the network. + mTreeBuilder->SetOpSink(mExecutor); + mTreeBuilder->Flush(PR_TRUE); mTreeBuilder->SetOpSink(mExecutor->GetStage()); mExecutor->StartReadingFromStage(); mSpeculating = PR_FALSE; @@ -1268,15 +1266,9 @@ nsHtml5StreamParser::TimerFlush() // we aren't speculating and we don't know when new data is // going to arrive. Send data to the main thread. - // However, don't do if the current element on the stack is a - // foster-parenting element and there's pending text, because flushing in - // that case would make the tree shape dependent on where the flush points - // fall. - if (mTreeBuilder->IsDiscretionaryFlushSafe()) { - if (mTreeBuilder->Flush()) { - if (NS_FAILED(NS_DispatchToMainThread(mExecutorFlusher))) { - NS_WARNING("failed to dispatch executor flush event"); - } + if (mTreeBuilder->Flush(PR_TRUE)) { + if (NS_FAILED(NS_DispatchToMainThread(mExecutorFlusher))) { + NS_WARNING("failed to dispatch executor flush event"); } } } diff --git a/parser/html/nsHtml5TreeBuilderCppSupplement.h b/parser/html/nsHtml5TreeBuilderCppSupplement.h index faf13f173041..4282251e77f6 100644 --- a/parser/html/nsHtml5TreeBuilderCppSupplement.h +++ b/parser/html/nsHtml5TreeBuilderCppSupplement.h @@ -602,9 +602,18 @@ nsHtml5TreeBuilder::HasScript() } PRBool -nsHtml5TreeBuilder::Flush() +nsHtml5TreeBuilder::Flush(PRBool aDiscretionary) { - flushCharacters(); + if (!aDiscretionary || + !(charBufferLen && + currentPtr >= 0 && + stack[currentPtr]->isFosterParenting())) { + // Don't flush text on discretionary flushes if the current element on + // the stack is a foster-parenting element and there's pending text, + // because flushing in that case would make the tree shape dependent on + // where the flush points fall. + flushCharacters(); + } FlushLoads(); if (mOpSink) { PRBool hasOps = !mOpQueue.IsEmpty(); @@ -667,14 +676,6 @@ nsHtml5TreeBuilder::AddSnapshotToScript(nsAHtml5TreeBuilderState* aSnapshot, PRI mOpQueue.ElementAt(mOpQueue.Length() - 1).SetSnapshot(aSnapshot, aLine); } -PRBool -nsHtml5TreeBuilder::IsDiscretionaryFlushSafe() -{ - return !(charBufferLen && - currentPtr >= 0 && - stack[currentPtr]->isFosterParenting()); -} - void nsHtml5TreeBuilder::DropHandles() { diff --git a/parser/html/nsHtml5TreeBuilderHSupplement.h b/parser/html/nsHtml5TreeBuilderHSupplement.h index 8dff0c94fb41..90eac0b89552 100644 --- a/parser/html/nsHtml5TreeBuilderHSupplement.h +++ b/parser/html/nsHtml5TreeBuilderHSupplement.h @@ -72,8 +72,6 @@ ~nsHtml5TreeBuilder(); - PRBool IsDiscretionaryFlushSafe(); - PRBool HasScript(); void SetOpSink(nsAHtml5TreeOpSink* aOpSink) { @@ -84,7 +82,7 @@ mOpQueue.Clear(); } - PRBool Flush(); + PRBool Flush(PRBool aDiscretionary = PR_FALSE); void FlushLoads(); From f13ccdbf7557acdf149d6d66f9bf48f2c385c1d4 Mon Sep 17 00:00:00 2001 From: Chris Pearce Date: Thu, 19 May 2011 21:00:39 +1200 Subject: [PATCH 204/282] Bug 658177 - Fix potential deadlock in gVolumeScaleLock. r=roc --- content/media/nsAudioStream.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/media/nsAudioStream.cpp b/content/media/nsAudioStream.cpp index 6e07e10f1238..507b96e8498d 100644 --- a/content/media/nsAudioStream.cpp +++ b/content/media/nsAudioStream.cpp @@ -321,9 +321,9 @@ static mozilla::Mutex* gVolumeScaleLock = nsnull; static double gVolumeScale = 1.0; static int VolumeScaleChanged(const char* aPref, void *aClosure) { - mozilla::MutexAutoLock lock(*gVolumeScaleLock); nsAdoptingString value = nsContentUtils::GetStringPref("media.volume_scale"); + mozilla::MutexAutoLock lock(*gVolumeScaleLock); if (value.IsEmpty()) { gVolumeScale = 1.0; } else { From 63b69ec8f36f94978b1b64841220b627559321ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A3o=20Gottwald?= Date: Thu, 19 May 2011 11:53:27 +0200 Subject: [PATCH 205/282] Backed out changeset 63284a27cb1b --- browser/base/content/tabbrowser.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/browser/base/content/tabbrowser.xml b/browser/base/content/tabbrowser.xml index 2c6d37d43bde..792bcb92069f 100644 --- a/browser/base/content/tabbrowser.xml +++ b/browser/base/content/tabbrowser.xml @@ -151,6 +151,9 @@ false #endif + + false + null @@ -1850,6 +1853,11 @@ "608628."); } + if (!this.mAddProgressListenerWasCalled) { + this.mAddProgressListenerWasCalled = true; + this.tabContainer.updateVisibility(); + } + this.mProgressListeners.push(aListener); ]]> @@ -2688,7 +2696,6 @@ Services.prefs.addObserver("browser.tabs.", this._prefObserver, false); window.addEventListener("resize", this, false); - this.updateVisibility(); if (window.TabsInTitlebar) TabsInTitlebar.allowedBy("tabs-visible", this.visible); ]]> From a82b8d66297da68b27ce0f8e45d001e20231a7a7 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Thu, 19 May 2011 12:49:18 +0200 Subject: [PATCH 206/282] Bug 421865 - Handle zero dimensions correctly in canvas GetWidthHeight(). r=joe sr=roc --- content/canvas/src/WebGLContext.cpp | 6 +++ .../canvas/src/nsCanvasRenderingContext2D.cpp | 43 +++++++++++------- content/canvas/test/test_canvas.html | 45 +++++++++++++++++-- .../html/content/src/nsHTMLCanvasElement.cpp | 29 ++++++------ layout/reftests/canvas/reftest.list | 2 + .../reftests/canvas/zero-dimensions-ref.html | 8 ++++ layout/reftests/canvas/zero-dimensions.html | 9 ++++ 7 files changed, 105 insertions(+), 37 deletions(-) create mode 100644 layout/reftests/canvas/zero-dimensions-ref.html create mode 100644 layout/reftests/canvas/zero-dimensions.html diff --git a/content/canvas/src/WebGLContext.cpp b/content/canvas/src/WebGLContext.cpp index 00f14e01aac3..9f6933461f28 100644 --- a/content/canvas/src/WebGLContext.cpp +++ b/content/canvas/src/WebGLContext.cpp @@ -359,6 +359,12 @@ WebGLContext::SetDimensions(PRInt32 width, PRInt32 height) if (gl && mWidth == width && mHeight == height) return NS_OK; + // Zero-sized surfaces can cause problems. + if (width == 0 || height == 0) { + width = 1; + height = 1; + } + // If we already have a gl context, then we just need to resize // FB0. if (gl && diff --git a/content/canvas/src/nsCanvasRenderingContext2D.cpp b/content/canvas/src/nsCanvasRenderingContext2D.cpp index 4446a4888f54..92a2bb0d4c20 100644 --- a/content/canvas/src/nsCanvasRenderingContext2D.cpp +++ b/content/canvas/src/nsCanvasRenderingContext2D.cpp @@ -472,6 +472,7 @@ protected: // Member vars PRInt32 mWidth, mHeight; PRPackedBool mValid; + PRPackedBool mZero; PRPackedBool mOpaque; PRPackedBool mResetLayer; PRPackedBool mIPC; @@ -824,7 +825,7 @@ NS_NewCanvasRenderingContext2D(nsIDOMCanvasRenderingContext2D** aResult) } nsCanvasRenderingContext2D::nsCanvasRenderingContext2D() - : mValid(PR_FALSE), mOpaque(PR_FALSE), mResetLayer(PR_TRUE) + : mValid(PR_FALSE), mZero(PR_FALSE), mOpaque(PR_FALSE), mResetLayer(PR_TRUE) , mIPC(PR_FALSE) , mCanvasElement(nsnull) , mSaveCount(0), mIsEntireFrameInvalid(PR_FALSE) @@ -1090,6 +1091,12 @@ nsCanvasRenderingContext2D::SetDimensions(PRInt32 width, PRInt32 height) // Check that the dimensions are sane gfxIntSize size(width, height); if (gfxASurface::CheckSurfaceSize(size, 0xffff)) { + // Zero sized surfaces have problems, so just use a 1 by 1. + if (height == 0 || width == 0) { + mZero = PR_TRUE; + height = 1; + width = 1; + } gfxASurface::gfxImageFormat format = GetImageFormat(); @@ -3755,26 +3762,28 @@ nsCanvasRenderingContext2D::GetImageData_explicit(PRInt32 x, PRInt32 y, PRUint32 if (tmpctx->HasError()) return NS_ERROR_FAILURE; - gfxRect srcRect(0, 0, mWidth, mHeight); - gfxRect destRect(x, y, w, h); + if (!mZero) { + gfxRect srcRect(0, 0, mWidth, mHeight); + gfxRect destRect(x, y, w, h); - bool finishedPainting = false; - // In the common case, we want to avoid the Rectangle call. - if (!srcRect.Contains(destRect)) { - // If the requested area is entirely outside the canvas, we're done. - gfxRect tmp = srcRect.Intersect(destRect); - finishedPainting = tmp.IsEmpty(); + bool finishedPainting = false; + // In the common case, we want to avoid the Rectangle call. + if (!srcRect.Contains(destRect)) { + // If the requested area is entirely outside the canvas, we're done. + gfxRect tmp = srcRect.Intersect(destRect); + finishedPainting = tmp.IsEmpty(); - // Set clipping region if necessary. - if (!finishedPainting) { - tmpctx->Rectangle(tmp); + // Set clipping region if necessary. + if (!finishedPainting) { + tmpctx->Rectangle(tmp); + } } - } - if (!finishedPainting) { - tmpctx->SetOperator(gfxContext::OPERATOR_SOURCE); - tmpctx->SetSource(mSurface, gfxPoint(-x, -y)); - tmpctx->Paint(); + if (!finishedPainting) { + tmpctx->SetOperator(gfxContext::OPERATOR_SOURCE); + tmpctx->SetSource(mSurface, gfxPoint(-x, -y)); + tmpctx->Paint(); + } } // make sure sUnpremultiplyTable has been created diff --git a/content/canvas/test/test_canvas.html b/content/canvas/test/test_canvas.html index 012aae841f05..44943f5d8fb6 100644 --- a/content/canvas/test/test_canvas.html +++ b/content/canvas/test/test_canvas.html @@ -14962,10 +14962,10 @@ ctx.fillStyle = '#f00'; ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); -todo_isPixel(ctx, 1,1, 0,255,0,255, 0); -todo_isPixel(ctx, 98,1, 0,255,0,255, 0); -todo_isPixel(ctx, 1,48, 0,255,0,255, 0); -todo_isPixel(ctx, 98,48, 0,255,0,255, 0); +isPixel(ctx, 1,1, 0,255,0,255, 0); +isPixel(ctx, 98,1, 0,255,0,255, 0); +isPixel(ctx, 1,48, 0,255,0,255, 0); +isPixel(ctx, 98,48, 0,255,0,255, 0); } @@ -21294,6 +21294,33 @@ function test_2d_imageSmoothing() { +

    Canvas test: zero_dimensions

    + + + +

    Canvas test: zero_dimensions_image_data

    + + + + + + + +Mozilla Bug 652486 + +

    + +
    +
    +
    + + From de4233ccc7d2ea5b20d4c11d6ab67d9c73a3b2ef Mon Sep 17 00:00:00 2001 From: John Daggett Date: Fri, 20 May 2011 15:09:30 +0900 Subject: [PATCH 217/282] Bug 652754. Eliminate unnecessary font data enumerations at startup. r=jkew --- gfx/thebes/gfxFont.cpp | 5 ++++ gfx/thebes/gfxFont.h | 3 ++- gfx/thebes/gfxGDIFontList.cpp | 28 ++++++------------- gfx/thebes/gfxGDIFontList.h | 8 ++---- modules/libpref/src/init/all.js | 48 ++++++++++++++++----------------- 5 files changed, 41 insertions(+), 51 deletions(-) diff --git a/gfx/thebes/gfxFont.cpp b/gfx/thebes/gfxFont.cpp index e9e645bc477b..2abbfcd9eb9c 100644 --- a/gfx/thebes/gfxFont.cpp +++ b/gfx/thebes/gfxFont.cpp @@ -99,6 +99,11 @@ gfxFontEntry::~gfxFontEntry() delete mUserFontData; } +PRBool gfxFontEntry::IsSymbolFont() +{ + return mSymbolFont; +} + PRBool gfxFontEntry::TestCharacterMap(PRUint32 aCh) { if (!mCmapInitialized) { diff --git a/gfx/thebes/gfxFont.h b/gfx/thebes/gfxFont.h index 578f630a2760..815931d0cf1a 100644 --- a/gfx/thebes/gfxFont.h +++ b/gfx/thebes/gfxFont.h @@ -234,9 +234,10 @@ public: PRBool IsFixedPitch() const { return mFixedPitch; } PRBool IsItalic() const { return mItalic; } PRBool IsBold() const { return mWeight >= 600; } // bold == weights 600 and above - PRBool IsSymbolFont() const { return mSymbolFont; } PRBool IgnoreGDEF() const { return mIgnoreGDEF; } + virtual PRBool IsSymbolFont(); + inline PRBool HasCmapTable() { if (!mCmapInitialized) { ReadCMAP(); diff --git a/gfx/thebes/gfxGDIFontList.cpp b/gfx/thebes/gfxGDIFontList.cpp index 1faa70089a70..46462203a023 100644 --- a/gfx/thebes/gfxGDIFontList.cpp +++ b/gfx/thebes/gfxGDIFontList.cpp @@ -215,7 +215,6 @@ GDIFontEntry::GDIFontEntry(const nsAString& aFaceName, gfxWindowsFontType aFontT mWindowsFamily(0), mWindowsPitch(0), mFontType(aFontType), mForceGDI(PR_FALSE), mUnknownCMAP(PR_FALSE), - mUnicodeFont(PR_FALSE), mCharset(), mUnicodeRanges() { mUserFontData = aUserFontData; @@ -254,7 +253,6 @@ GDIFontEntry::ReadCMAP() nsresult rv = gfxFontUtils::ReadCMAP(cmap, buffer.Length(), mCharacterMap, mUVSOffset, unicodeFont, symbolFont); - mUnicodeFont = unicodeFont; mSymbolFont = symbolFont; mHasCmapTable = NS_SUCCEEDED(rv); @@ -265,6 +263,14 @@ GDIFontEntry::ReadCMAP() return rv; } +PRBool +GDIFontEntry::IsSymbolFont() +{ + // initialize cmap first + HasCmapTable(); + return mSymbolFont; +} + gfxFont * GDIFontEntry::CreateFontInstance(const gfxFontStyle* aFontStyle, PRBool aNeedsBold) { @@ -334,10 +340,6 @@ PRBool GDIFontEntry::TestCharacterMap(PRUint32 aCh) { if (ReadCMAP() != NS_OK) { - // Type1 fonts aren't necessarily Unicode but - // this is the best guess we can make here - mUnicodeFont = IsType1(); - // For fonts where we failed to read the character map, // we can take a slow path to look up glyphs character by character mUnknownCMAP = PR_TRUE; @@ -447,20 +449,6 @@ GDIFontEntry::CreateFontEntry(const nsAString& aName, gfxWindowsFontType aFontTy GDIFontEntry *fe = new GDIFontEntry(aName, aFontType, aItalic, aWeight, aUserFontData); - // ReadCMAP may change the values of mUnicodeFont and mSymbolFont - if (NS_FAILED(fe->ReadCMAP())) { - // Type1 fonts aren't necessarily Unicode but - // this is the best guess we can make here - if (fe->IsType1()) - fe->mUnicodeFont = PR_TRUE; - else - fe->mUnicodeFont = PR_FALSE; - - // For fonts where we failed to read the character map, - // we can take a slow path to look up glyphs character by character - fe->mUnknownCMAP = PR_TRUE; - } - return fe; } diff --git a/gfx/thebes/gfxGDIFontList.h b/gfx/thebes/gfxGDIFontList.h index f2840d21eada..35603629b463 100644 --- a/gfx/thebes/gfxGDIFontList.h +++ b/gfx/thebes/gfxGDIFontList.h @@ -144,6 +144,8 @@ public: nsresult ReadCMAP(); + virtual PRBool IsSymbolFont(); + void FillLogFont(LOGFONTW *aLogFont, PRBool aItalic, PRUint16 aWeight, gfxFloat aSize, PRBool aUseCleartype); @@ -179,11 +181,6 @@ public: mFontType == GFX_FONT_TYPE_TT_OPENTYPE); } - PRBool IsCrappyFont() const { - /* return if it is a bitmap not a unicode font */ - return (!mUnicodeFont || IsSymbolFont() || IsType1()); - } - virtual PRBool MatchesGenericFamily(const nsACString& aGeneric) const { if (aGeneric.IsEmpty()) { return PR_TRUE; @@ -293,7 +290,6 @@ public: gfxWindowsFontType mFontType; PRPackedBool mForceGDI : 1; PRPackedBool mUnknownCMAP : 1; - PRPackedBool mUnicodeFont : 1; gfxSparseBitSet mCharset; gfxSparseBitSet mUnicodeRanges; diff --git a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js index e0f66e5ab3f8..2771ddbc77c5 100644 --- a/modules/libpref/src/init/all.js +++ b/modules/libpref/src/init/all.js @@ -1432,22 +1432,22 @@ pref("font.name-list.serif.he", "Narkisim, David"); pref("font.name-list.monospace.he", "Fixed Miriam Transparent, Miriam Fixed, Rod, Courier New"); pref("font.name-list.cursive.he", "Guttman Yad, Ktav, Arial"); -pref("font.name.serif.ja", "ï¼­ï¼³ P明æœ"); // "MS PMincho" -pref("font.name.sans-serif.ja", "ï¼­ï¼³ Pゴシック"); // "MS PGothic" -pref("font.name.monospace.ja", "ï¼­ï¼³ ゴシック"); // "MS Gothic" +pref("font.name.serif.ja", "MS PMincho"); +pref("font.name.sans-serif.ja", "MS PGothic"); +pref("font.name.monospace.ja", "MS Gothic"); pref("font.name-list.serif.ja", "MS PMincho, MS Mincho, MS PGothic, MS Gothic"); pref("font.name-list.sans-serif.ja", "MS PGothic, MS Gothic, MS PMincho, MS Mincho"); pref("font.name-list.monospace.ja", "MS Gothic, MS Mincho, MS PGothic, MS PMincho"); -pref("font.name.serif.ko", "바탕"); // "Batang" -pref("font.name.sans-serif.ko", "굴림"); // "Gulim" -pref("font.name.monospace.ko", "굴림체"); // "GulimChe" -pref("font.name.cursive.ko", "ê¶ì„œ"); // "Gungseo" +pref("font.name.serif.ko", "Batang"); +pref("font.name.sans-serif.ko", "Gulim"); +pref("font.name.monospace.ko", "GulimChe"); +pref("font.name.cursive.ko", "Gungsuh"); -pref("font.name-list.serif.ko", "Batang, Gulim"); -pref("font.name-list.sans-serif.ko", "Gulim"); -pref("font.name-list.monospace.ko", "GulimChe"); -pref("font.name-list.cursive.ko", "Gungseo"); +pref("font.name-list.serif.ko", "Batang, Gulim"); +pref("font.name-list.sans-serif.ko", "Gulim"); +pref("font.name-list.monospace.ko", "GulimChe"); +pref("font.name-list.cursive.ko", "Gungsuh"); pref("font.name.serif.th", "Tahoma"); pref("font.name.sans-serif.th", "Tahoma"); @@ -1484,9 +1484,9 @@ pref("font.name.sans-serif.x-western", "Arial"); pref("font.name.monospace.x-western", "Courier New"); pref("font.name.cursive.x-western", "Comic Sans MS"); -pref("font.name.serif.zh-CN", "宋体"); //MS Song -pref("font.name.sans-serif.zh-CN", "宋体"); //MS Song -pref("font.name.monospace.zh-CN", "宋体"); //MS Song +pref("font.name.serif.zh-CN", "SimSun"); +pref("font.name.sans-serif.zh-CN", "SimSun"); +pref("font.name.monospace.zh-CN", "SimSun"); pref("font.name-list.serif.zh-CN", "MS Song, SimSun"); pref("font.name-list.sans-serif.zh-CN", "MS Song, SimSun"); pref("font.name-list.monospace.zh-CN", "MS Song, SimSun"); @@ -1495,18 +1495,18 @@ pref("font.name-list.monospace.zh-CN", "MS Song, SimSun"); // rendering Latin letters. (bug 88579) pref("font.name.serif.zh-TW", "Times New Roman"); pref("font.name.sans-serif.zh-TW", "Arial"); -pref("font.name.monospace.zh-TW", "細明體"); // MingLiU +pref("font.name.monospace.zh-TW", "MingLiU"); pref("font.name-list.serif.zh-TW", "PMingLiu, MingLiU"); pref("font.name-list.sans-serif.zh-TW", "PMingLiU, MingLiU"); pref("font.name-list.monospace.zh-TW", "MingLiU"); -// hkscsm3u.ttf (HKSCS-2001) : http://www.microsoft.com/hk/hkscs -// Hong Kong users have the same demand about glyphs for Latin letters (bug 88579) -pref("font.name.serif.zh-HK", "Times New Roman"); +// hkscsm3u.ttf (HKSCS-2001) : http://www.microsoft.com/hk/hkscs +// Hong Kong users have the same demand about glyphs for Latin letters (bug 88579) +pref("font.name.serif.zh-HK", "Times New Roman"); pref("font.name.sans-serif.zh-HK", "Arial"); -pref("font.name.monospace.zh-HK", "細明體_HKSCS"); -pref("font.name-list.serif.zh-HK", "MingLiu_HKSCS, Ming(for ISO10646), MingLiU"); -pref("font.name-list.sans-serif.zh-HK", "MingLiU_HKSCS, Ming(for ISO10646), MingLiU"); +pref("font.name.monospace.zh-HK", "MingLiu_HKSCS"); +pref("font.name-list.serif.zh-HK", "MingLiu_HKSCS, Ming(for ISO10646), MingLiU"); +pref("font.name-list.sans-serif.zh-HK", "MingLiU_HKSCS, Ming(for ISO10646), MingLiU"); pref("font.name-list.monospace.zh-HK", "MingLiU_HKSCS, Ming(for ISO10646), MingLiU"); pref("font.name.serif.x-devanagari", "Mangal"); @@ -1552,19 +1552,19 @@ pref("font.name-list.monospace.x-ethi", "Ethiopia Jiret, Code2000"); pref("font.name.serif.x-geor", "Sylfaen"); pref("font.name.sans-serif.x-geor", "BPG Classic 99U"); pref("font.name.monospace.x-geor", "Code2000"); -pref("font.name-list.serif.x-geor", "Sylfaen, BPG Paata Khutsuri U, TITUS Cyberbit Basic"); +pref("font.name-list.serif.x-geor", "Sylfaen, BPG Paata Khutsuri U, TITUS Cyberbit Basic"); pref("font.name-list.monospace.x-geor", "BPG Classic 99U, Code2000, Arial Unicode MS"); pref("font.name.serif.x-gujr", "Shruti"); pref("font.name.sans-serif.x-gujr", "Shruti"); pref("font.name.monospace.x-gujr", "Code2000"); -pref("font.name-list.serif.x-gujr", "Shruti, Code2000, Arial Unicode MS"); +pref("font.name-list.serif.x-gujr", "Shruti, Code2000, Arial Unicode MS"); pref("font.name-list.monospace.x-gujr", "Code2000, Shruti, Arial Unicode MS"); pref("font.name.serif.x-guru", "Raavi"); pref("font.name.sans-serif.x-guru", "Code2000"); pref("font.name.monospace.x-guru", "Code2000"); -pref("font.name-list.serif.x-guru", "Raavi, Saab, Code2000, Arial Unicode MS"); +pref("font.name-list.serif.x-guru", "Raavi, Saab, Code2000, Arial Unicode MS"); pref("font.name-list.monospace.x-guru", "Code2000, Raavi, Saab, Arial Unicode MS"); pref("font.name.serif.x-khmr", "PhnomPenh OT"); From 4e65ac9cf3dfd9a754ef3beeaa1c37339311d999 Mon Sep 17 00:00:00 2001 From: John Daggett Date: Fri, 20 May 2011 16:13:01 +0900 Subject: [PATCH 218/282] Backout 2e0e36b0feae due to odd Linux bustage --- gfx/thebes/gfxFont.cpp | 5 ---- gfx/thebes/gfxFont.h | 3 +-- gfx/thebes/gfxGDIFontList.cpp | 28 +++++++++++++------ gfx/thebes/gfxGDIFontList.h | 8 ++++-- modules/libpref/src/init/all.js | 48 ++++++++++++++++----------------- 5 files changed, 51 insertions(+), 41 deletions(-) diff --git a/gfx/thebes/gfxFont.cpp b/gfx/thebes/gfxFont.cpp index 2abbfcd9eb9c..e9e645bc477b 100644 --- a/gfx/thebes/gfxFont.cpp +++ b/gfx/thebes/gfxFont.cpp @@ -99,11 +99,6 @@ gfxFontEntry::~gfxFontEntry() delete mUserFontData; } -PRBool gfxFontEntry::IsSymbolFont() -{ - return mSymbolFont; -} - PRBool gfxFontEntry::TestCharacterMap(PRUint32 aCh) { if (!mCmapInitialized) { diff --git a/gfx/thebes/gfxFont.h b/gfx/thebes/gfxFont.h index 815931d0cf1a..578f630a2760 100644 --- a/gfx/thebes/gfxFont.h +++ b/gfx/thebes/gfxFont.h @@ -234,10 +234,9 @@ public: PRBool IsFixedPitch() const { return mFixedPitch; } PRBool IsItalic() const { return mItalic; } PRBool IsBold() const { return mWeight >= 600; } // bold == weights 600 and above + PRBool IsSymbolFont() const { return mSymbolFont; } PRBool IgnoreGDEF() const { return mIgnoreGDEF; } - virtual PRBool IsSymbolFont(); - inline PRBool HasCmapTable() { if (!mCmapInitialized) { ReadCMAP(); diff --git a/gfx/thebes/gfxGDIFontList.cpp b/gfx/thebes/gfxGDIFontList.cpp index 46462203a023..1faa70089a70 100644 --- a/gfx/thebes/gfxGDIFontList.cpp +++ b/gfx/thebes/gfxGDIFontList.cpp @@ -215,6 +215,7 @@ GDIFontEntry::GDIFontEntry(const nsAString& aFaceName, gfxWindowsFontType aFontT mWindowsFamily(0), mWindowsPitch(0), mFontType(aFontType), mForceGDI(PR_FALSE), mUnknownCMAP(PR_FALSE), + mUnicodeFont(PR_FALSE), mCharset(), mUnicodeRanges() { mUserFontData = aUserFontData; @@ -253,6 +254,7 @@ GDIFontEntry::ReadCMAP() nsresult rv = gfxFontUtils::ReadCMAP(cmap, buffer.Length(), mCharacterMap, mUVSOffset, unicodeFont, symbolFont); + mUnicodeFont = unicodeFont; mSymbolFont = symbolFont; mHasCmapTable = NS_SUCCEEDED(rv); @@ -263,14 +265,6 @@ GDIFontEntry::ReadCMAP() return rv; } -PRBool -GDIFontEntry::IsSymbolFont() -{ - // initialize cmap first - HasCmapTable(); - return mSymbolFont; -} - gfxFont * GDIFontEntry::CreateFontInstance(const gfxFontStyle* aFontStyle, PRBool aNeedsBold) { @@ -340,6 +334,10 @@ PRBool GDIFontEntry::TestCharacterMap(PRUint32 aCh) { if (ReadCMAP() != NS_OK) { + // Type1 fonts aren't necessarily Unicode but + // this is the best guess we can make here + mUnicodeFont = IsType1(); + // For fonts where we failed to read the character map, // we can take a slow path to look up glyphs character by character mUnknownCMAP = PR_TRUE; @@ -449,6 +447,20 @@ GDIFontEntry::CreateFontEntry(const nsAString& aName, gfxWindowsFontType aFontTy GDIFontEntry *fe = new GDIFontEntry(aName, aFontType, aItalic, aWeight, aUserFontData); + // ReadCMAP may change the values of mUnicodeFont and mSymbolFont + if (NS_FAILED(fe->ReadCMAP())) { + // Type1 fonts aren't necessarily Unicode but + // this is the best guess we can make here + if (fe->IsType1()) + fe->mUnicodeFont = PR_TRUE; + else + fe->mUnicodeFont = PR_FALSE; + + // For fonts where we failed to read the character map, + // we can take a slow path to look up glyphs character by character + fe->mUnknownCMAP = PR_TRUE; + } + return fe; } diff --git a/gfx/thebes/gfxGDIFontList.h b/gfx/thebes/gfxGDIFontList.h index 35603629b463..f2840d21eada 100644 --- a/gfx/thebes/gfxGDIFontList.h +++ b/gfx/thebes/gfxGDIFontList.h @@ -144,8 +144,6 @@ public: nsresult ReadCMAP(); - virtual PRBool IsSymbolFont(); - void FillLogFont(LOGFONTW *aLogFont, PRBool aItalic, PRUint16 aWeight, gfxFloat aSize, PRBool aUseCleartype); @@ -181,6 +179,11 @@ public: mFontType == GFX_FONT_TYPE_TT_OPENTYPE); } + PRBool IsCrappyFont() const { + /* return if it is a bitmap not a unicode font */ + return (!mUnicodeFont || IsSymbolFont() || IsType1()); + } + virtual PRBool MatchesGenericFamily(const nsACString& aGeneric) const { if (aGeneric.IsEmpty()) { return PR_TRUE; @@ -290,6 +293,7 @@ public: gfxWindowsFontType mFontType; PRPackedBool mForceGDI : 1; PRPackedBool mUnknownCMAP : 1; + PRPackedBool mUnicodeFont : 1; gfxSparseBitSet mCharset; gfxSparseBitSet mUnicodeRanges; diff --git a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js index 2771ddbc77c5..e0f66e5ab3f8 100644 --- a/modules/libpref/src/init/all.js +++ b/modules/libpref/src/init/all.js @@ -1432,22 +1432,22 @@ pref("font.name-list.serif.he", "Narkisim, David"); pref("font.name-list.monospace.he", "Fixed Miriam Transparent, Miriam Fixed, Rod, Courier New"); pref("font.name-list.cursive.he", "Guttman Yad, Ktav, Arial"); -pref("font.name.serif.ja", "MS PMincho"); -pref("font.name.sans-serif.ja", "MS PGothic"); -pref("font.name.monospace.ja", "MS Gothic"); +pref("font.name.serif.ja", "ï¼­ï¼³ P明æœ"); // "MS PMincho" +pref("font.name.sans-serif.ja", "ï¼­ï¼³ Pゴシック"); // "MS PGothic" +pref("font.name.monospace.ja", "ï¼­ï¼³ ゴシック"); // "MS Gothic" pref("font.name-list.serif.ja", "MS PMincho, MS Mincho, MS PGothic, MS Gothic"); pref("font.name-list.sans-serif.ja", "MS PGothic, MS Gothic, MS PMincho, MS Mincho"); pref("font.name-list.monospace.ja", "MS Gothic, MS Mincho, MS PGothic, MS PMincho"); -pref("font.name.serif.ko", "Batang"); -pref("font.name.sans-serif.ko", "Gulim"); -pref("font.name.monospace.ko", "GulimChe"); -pref("font.name.cursive.ko", "Gungsuh"); +pref("font.name.serif.ko", "바탕"); // "Batang" +pref("font.name.sans-serif.ko", "굴림"); // "Gulim" +pref("font.name.monospace.ko", "굴림체"); // "GulimChe" +pref("font.name.cursive.ko", "ê¶ì„œ"); // "Gungseo" -pref("font.name-list.serif.ko", "Batang, Gulim"); -pref("font.name-list.sans-serif.ko", "Gulim"); -pref("font.name-list.monospace.ko", "GulimChe"); -pref("font.name-list.cursive.ko", "Gungsuh"); +pref("font.name-list.serif.ko", "Batang, Gulim"); +pref("font.name-list.sans-serif.ko", "Gulim"); +pref("font.name-list.monospace.ko", "GulimChe"); +pref("font.name-list.cursive.ko", "Gungseo"); pref("font.name.serif.th", "Tahoma"); pref("font.name.sans-serif.th", "Tahoma"); @@ -1484,9 +1484,9 @@ pref("font.name.sans-serif.x-western", "Arial"); pref("font.name.monospace.x-western", "Courier New"); pref("font.name.cursive.x-western", "Comic Sans MS"); -pref("font.name.serif.zh-CN", "SimSun"); -pref("font.name.sans-serif.zh-CN", "SimSun"); -pref("font.name.monospace.zh-CN", "SimSun"); +pref("font.name.serif.zh-CN", "宋体"); //MS Song +pref("font.name.sans-serif.zh-CN", "宋体"); //MS Song +pref("font.name.monospace.zh-CN", "宋体"); //MS Song pref("font.name-list.serif.zh-CN", "MS Song, SimSun"); pref("font.name-list.sans-serif.zh-CN", "MS Song, SimSun"); pref("font.name-list.monospace.zh-CN", "MS Song, SimSun"); @@ -1495,18 +1495,18 @@ pref("font.name-list.monospace.zh-CN", "MS Song, SimSun"); // rendering Latin letters. (bug 88579) pref("font.name.serif.zh-TW", "Times New Roman"); pref("font.name.sans-serif.zh-TW", "Arial"); -pref("font.name.monospace.zh-TW", "MingLiU"); +pref("font.name.monospace.zh-TW", "細明體"); // MingLiU pref("font.name-list.serif.zh-TW", "PMingLiu, MingLiU"); pref("font.name-list.sans-serif.zh-TW", "PMingLiU, MingLiU"); pref("font.name-list.monospace.zh-TW", "MingLiU"); -// hkscsm3u.ttf (HKSCS-2001) : http://www.microsoft.com/hk/hkscs -// Hong Kong users have the same demand about glyphs for Latin letters (bug 88579) -pref("font.name.serif.zh-HK", "Times New Roman"); +// hkscsm3u.ttf (HKSCS-2001) : http://www.microsoft.com/hk/hkscs +// Hong Kong users have the same demand about glyphs for Latin letters (bug 88579) +pref("font.name.serif.zh-HK", "Times New Roman"); pref("font.name.sans-serif.zh-HK", "Arial"); -pref("font.name.monospace.zh-HK", "MingLiu_HKSCS"); -pref("font.name-list.serif.zh-HK", "MingLiu_HKSCS, Ming(for ISO10646), MingLiU"); -pref("font.name-list.sans-serif.zh-HK", "MingLiU_HKSCS, Ming(for ISO10646), MingLiU"); +pref("font.name.monospace.zh-HK", "細明體_HKSCS"); +pref("font.name-list.serif.zh-HK", "MingLiu_HKSCS, Ming(for ISO10646), MingLiU"); +pref("font.name-list.sans-serif.zh-HK", "MingLiU_HKSCS, Ming(for ISO10646), MingLiU"); pref("font.name-list.monospace.zh-HK", "MingLiU_HKSCS, Ming(for ISO10646), MingLiU"); pref("font.name.serif.x-devanagari", "Mangal"); @@ -1552,19 +1552,19 @@ pref("font.name-list.monospace.x-ethi", "Ethiopia Jiret, Code2000"); pref("font.name.serif.x-geor", "Sylfaen"); pref("font.name.sans-serif.x-geor", "BPG Classic 99U"); pref("font.name.monospace.x-geor", "Code2000"); -pref("font.name-list.serif.x-geor", "Sylfaen, BPG Paata Khutsuri U, TITUS Cyberbit Basic"); +pref("font.name-list.serif.x-geor", "Sylfaen, BPG Paata Khutsuri U, TITUS Cyberbit Basic"); pref("font.name-list.monospace.x-geor", "BPG Classic 99U, Code2000, Arial Unicode MS"); pref("font.name.serif.x-gujr", "Shruti"); pref("font.name.sans-serif.x-gujr", "Shruti"); pref("font.name.monospace.x-gujr", "Code2000"); -pref("font.name-list.serif.x-gujr", "Shruti, Code2000, Arial Unicode MS"); +pref("font.name-list.serif.x-gujr", "Shruti, Code2000, Arial Unicode MS"); pref("font.name-list.monospace.x-gujr", "Code2000, Shruti, Arial Unicode MS"); pref("font.name.serif.x-guru", "Raavi"); pref("font.name.sans-serif.x-guru", "Code2000"); pref("font.name.monospace.x-guru", "Code2000"); -pref("font.name-list.serif.x-guru", "Raavi, Saab, Code2000, Arial Unicode MS"); +pref("font.name-list.serif.x-guru", "Raavi, Saab, Code2000, Arial Unicode MS"); pref("font.name-list.monospace.x-guru", "Code2000, Raavi, Saab, Arial Unicode MS"); pref("font.name.serif.x-khmr", "PhnomPenh OT"); From b7257afee6f089488e7518a0125939de1e57be2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A3o=20Gottwald?= Date: Fri, 20 May 2011 11:20:53 +0200 Subject: [PATCH 219/282] Bug 631954 - Right-clicking on back button menu item opens additional back button menu. r=gavin --- browser/base/content/browser.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index dd17107a84ea..9281c70d70d0 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -306,22 +306,28 @@ function SetClickAndHoldHandlers() { aElm.addEventListener("click", clickHandler, true); } - // Bug 414797: Clone the dropmarker's menu into both the back and - // the forward buttons. + // Bug 414797: Clone unified-back-forward-button's context menu into both the + // back and the forward buttons. var unifiedButton = document.getElementById("unified-back-forward-button"); if (unifiedButton && !unifiedButton._clickHandlersAttached) { - var popup = document.getElementById("backForwardMenu").cloneNode(true); + unifiedButton._clickHandlersAttached = true; + + let popup = document.getElementById("backForwardMenu").cloneNode(true); popup.removeAttribute("id"); - var backButton = document.getElementById("back-button"); + // Prevent the context attribute on unified-back-forward-button from being + // inherited. + popup.setAttribute("context", ""); + + let backButton = document.getElementById("back-button"); backButton.setAttribute("type", "menu"); backButton.appendChild(popup); _addClickAndHoldListenersOnElement(backButton); - var forwardButton = document.getElementById("forward-button"); + + let forwardButton = document.getElementById("forward-button"); popup = popup.cloneNode(true); forwardButton.setAttribute("type", "menu"); forwardButton.appendChild(popup); _addClickAndHoldListenersOnElement(forwardButton); - unifiedButton._clickHandlersAttached = true; } } From 8a3f0ad8f749af08c08b676f3216015922bca875 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Wed, 18 May 2011 20:10:49 -0700 Subject: [PATCH 220/282] Bug 658143 - Part 1: Changes nsCOMPtr to nsRefPtr. r=roc --- accessible/src/html/nsHyperTextAccessible.cpp | 4 ++-- content/base/src/nsGenericElement.cpp | 2 +- content/events/src/nsContentEventHandler.cpp | 4 ++-- content/events/src/nsEventStateManager.cpp | 6 +++--- content/html/content/src/nsTextEditorState.cpp | 4 ++-- dom/base/nsFocusManager.cpp | 11 +++++------ dom/base/nsGlobalWindow.cpp | 2 +- editor/libeditor/html/nsHTMLEditRules.cpp | 2 +- editor/libeditor/text/nsTextEditRules.cpp | 2 +- editor/libeditor/text/nsTextEditRulesBidi.cpp | 2 +- layout/base/nsCaret.cpp | 10 +++++----- layout/base/nsPresShell.cpp | 4 ++-- layout/generic/nsFrame.cpp | 4 ++-- layout/generic/nsObjectFrame.cpp | 2 +- layout/svg/base/src/nsSVGGlyphFrame.cpp | 15 +-------------- layout/tables/nsTableCellFrame.cpp | 2 +- 16 files changed, 31 insertions(+), 45 deletions(-) diff --git a/accessible/src/html/nsHyperTextAccessible.cpp b/accessible/src/html/nsHyperTextAccessible.cpp index ae826053be8b..b4dcf5a5b1d3 100644 --- a/accessible/src/html/nsHyperTextAccessible.cpp +++ b/accessible/src/html/nsHyperTextAccessible.cpp @@ -916,7 +916,7 @@ nsresult nsHyperTextAccessible::GetTextHelper(EGetTextType aType, nsAccessibleTe NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr privateSelection(do_QueryInterface(domSel)); - nsCOMPtr frameSelection; + nsRefPtr frameSelection; rv = privateSelection->GetFrameSelection(getter_AddRefs(frameSelection)); NS_ENSURE_SUCCESS(rv, rv); @@ -1680,7 +1680,7 @@ PRInt32 nsHyperTextAccessible::GetCaretLineNumber() getter_AddRefs(domSel)); nsCOMPtr privateSelection(do_QueryInterface(domSel)); NS_ENSURE_TRUE(privateSelection, -1); - nsCOMPtr frameSelection; + nsRefPtr frameSelection; privateSelection->GetFrameSelection(getter_AddRefs(frameSelection)); NS_ENSURE_TRUE(frameSelection, -1); diff --git a/content/base/src/nsGenericElement.cpp b/content/base/src/nsGenericElement.cpp index 947d980bca0a..1e092fd553af 100644 --- a/content/base/src/nsGenericElement.cpp +++ b/content/base/src/nsGenericElement.cpp @@ -390,7 +390,7 @@ nsINode::GetSelectionRootContent(nsIPresShell* aPresShell) } } - nsCOMPtr fs = aPresShell->FrameSelection(); + nsRefPtr fs = aPresShell->FrameSelection(); nsIContent* content = fs->GetLimiter(); if (!content) { content = fs->GetAncestorLimiter(); diff --git a/content/events/src/nsContentEventHandler.cpp b/content/events/src/nsContentEventHandler.cpp index 50160b5ab6b0..2f32498d82ce 100644 --- a/content/events/src/nsContentEventHandler.cpp +++ b/content/events/src/nsContentEventHandler.cpp @@ -304,7 +304,7 @@ nsContentEventHandler::ExpandToClusterBoundary(nsIContent* aContent, NS_ASSERTION(*aXPOffset >= 0 && *aXPOffset <= aContent->TextLength(), "offset is out of range."); - nsCOMPtr fs = mPresShell->FrameSelection(); + nsRefPtr fs = mPresShell->FrameSelection(); PRInt32 offsetInFrame; nsFrameSelection::HINT hint = aForward ? nsFrameSelection::HINTLEFT : nsFrameSelection::HINTRIGHT; @@ -921,7 +921,7 @@ nsContentEventHandler::GetStartFrameAndOffset(nsIRange* aRange, content = static_cast(node); NS_ASSERTION(content, "the start node doesn't have nsIContent!"); - nsCOMPtr fs = mPresShell->FrameSelection(); + nsRefPtr fs = mPresShell->FrameSelection(); *aFrame = fs->GetFrameForNodeOffset(content, aRange->StartOffset(), fs->GetHint(), aOffsetInFrame); NS_ENSURE_TRUE((*aFrame), NS_ERROR_FAILURE); diff --git a/content/events/src/nsEventStateManager.cpp b/content/events/src/nsEventStateManager.cpp index c8770feec579..f1d7499779ff 100644 --- a/content/events/src/nsEventStateManager.cpp +++ b/content/events/src/nsEventStateManager.cpp @@ -1866,7 +1866,7 @@ nsEventStateManager::FireContextClick() // stop selection tracking, we're in control now if (mCurrentTarget) { - nsCOMPtr frameSel = + nsRefPtr frameSel = mCurrentTarget->GetFrameSelection(); if (frameSel && frameSel->GetMouseDownState()) { @@ -1991,7 +1991,7 @@ nsEventStateManager::GenerateDragGesture(nsPresContext* aPresContext, // don't interfere! if (mCurrentTarget) { - nsCOMPtr frameSel = mCurrentTarget->GetFrameSelection(); + nsRefPtr frameSel = mCurrentTarget->GetFrameSelection(); if (frameSel && frameSel->GetMouseDownState()) { StopTrackingDragGesture(); return; @@ -3034,7 +3034,7 @@ nsEventStateManager::PostHandleEvent(nsPresContext* aPresContext, nsIPresShell *shell = presContext->GetPresShell(); if (shell) { - nsCOMPtr frameSelection = shell->FrameSelection(); + nsRefPtr frameSelection = shell->FrameSelection(); frameSelection->SetMouseDownState(PR_FALSE); } } diff --git a/content/html/content/src/nsTextEditorState.cpp b/content/html/content/src/nsTextEditorState.cpp index a1f5daa48d6e..09cd588132fc 100644 --- a/content/html/content/src/nsTextEditorState.cpp +++ b/content/html/content/src/nsTextEditorState.cpp @@ -218,7 +218,7 @@ public: NS_IMETHOD CheckVisibility(nsIDOMNode *node, PRInt16 startOffset, PRInt16 EndOffset, PRBool *_retval); private: - nsCOMPtr mFrameSelection; + nsRefPtr mFrameSelection; nsCOMPtr mLimiter; nsIScrollableFrame *mScrollFrame; nsWeakPtr mPresShellWeak; @@ -1091,7 +1091,7 @@ nsTextEditorState::BindToFrame(nsTextControlFrame* aFrame) // Create selection nsresult rv; - nsCOMPtr frameSel; + nsRefPtr frameSel; frameSel = do_CreateInstance(kFrameSelectionCID, &rv); NS_ENSURE_SUCCESS(rv, rv); diff --git a/dom/base/nsFocusManager.cpp b/dom/base/nsFocusManager.cpp index e09335db05cd..43f972e49af1 100644 --- a/dom/base/nsFocusManager.cpp +++ b/dom/base/nsFocusManager.cpp @@ -728,7 +728,7 @@ nsFocusManager::WindowRaised(nsIDOMWindow* aWindow) if (presShell) { // disable selection mousedown state on activation // XXXndeakin P3 not sure if this is necessary, but it doesn't hurt - nsCOMPtr frameSelection = presShell->FrameSelection(); + nsRefPtr frameSelection = presShell->FrameSelection(); frameSelection->SetMouseDownState(PR_FALSE); } @@ -2012,7 +2012,7 @@ nsFocusManager::MoveCaretToFocus(nsIPresShell* aPresShell, nsIContent* aContent) // domDoc is a document interface we can create a range with nsCOMPtr domDoc = do_QueryInterface(aPresShell->GetDocument()); if (domDoc) { - nsCOMPtr frameSelection = aPresShell->FrameSelection(); + nsRefPtr frameSelection = aPresShell->FrameSelection(); nsCOMPtr domSelection = frameSelection-> GetSelection(nsISelectionController::SELECTION_NORMAL); if (domSelection) { @@ -2062,7 +2062,7 @@ nsFocusManager::SetCaretVisible(nsIPresShell* aPresShell, if (!aVisible && !caretVisible) return NS_OK; - nsCOMPtr frameSelection; + nsRefPtr frameSelection; if (aContent) { NS_ASSERTION(aContent->GetDocument() == aPresShell->GetDocument(), "Wrong document?"); @@ -2071,7 +2071,7 @@ nsFocusManager::SetCaretVisible(nsIPresShell* aPresShell, frameSelection = focusFrame->GetFrameSelection(); } - nsCOMPtr docFrameSelection = aPresShell->FrameSelection(); + nsRefPtr docFrameSelection = aPresShell->FrameSelection(); if (docFrameSelection && caret && (frameSelection == docFrameSelection || !aContent)) { @@ -2112,8 +2112,7 @@ nsFocusManager::GetSelectionLocation(nsIDocument* aDocument, nsPresContext* presContext = aPresShell->GetPresContext(); NS_ASSERTION(presContext, "mPresContent is null!!"); - nsCOMPtr frameSelection; - frameSelection = aPresShell->FrameSelection(); + nsRefPtr frameSelection = aPresShell->FrameSelection(); nsCOMPtr domSelection; if (frameSelection) { diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp index f8ccf1254c2f..f5f8af7f8a6c 100644 --- a/dom/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -6327,7 +6327,7 @@ nsGlobalWindow::EnterModalState() activeShell->SetCapturingContent(nsnull, 0); if (activeShell) { - nsCOMPtr frameSelection = activeShell->FrameSelection(); + nsRefPtr frameSelection = activeShell->FrameSelection(); frameSelection->SetMouseDownState(PR_FALSE); } } diff --git a/editor/libeditor/html/nsHTMLEditRules.cpp b/editor/libeditor/html/nsHTMLEditRules.cpp index 32ed4fd4d84a..677f1d773ebc 100644 --- a/editor/libeditor/html/nsHTMLEditRules.cpp +++ b/editor/libeditor/html/nsHTMLEditRules.cpp @@ -412,7 +412,7 @@ nsHTMLEditRules::AfterEdit(PRInt32 action, nsIEditor::EDirection aDirection) nsresult res = mHTMLEditor->GetSelection(getter_AddRefs(selection)); NS_ENSURE_SUCCESS(res, res); nsCOMPtr privateSelection(do_QueryInterface(selection)); - nsCOMPtr frameSelection; + nsRefPtr frameSelection; privateSelection->GetFrameSelection(getter_AddRefs(frameSelection)); if (frameSelection) { frameSelection->UndefineCaretBidiLevel(); diff --git a/editor/libeditor/text/nsTextEditRules.cpp b/editor/libeditor/text/nsTextEditRules.cpp index 1db57dd6eadd..e8c9340c2e30 100644 --- a/editor/libeditor/text/nsTextEditRules.cpp +++ b/editor/libeditor/text/nsTextEditRules.cpp @@ -244,7 +244,7 @@ nsTextEditRules::AfterEdit(PRInt32 action, nsIEditor::EDirection aDirection) if (action == nsEditor::kOpInsertText || action == nsEditor::kOpInsertIMEText) { nsCOMPtr privateSelection(do_QueryInterface(selection)); - nsCOMPtr frameSelection; + nsRefPtr frameSelection; privateSelection->GetFrameSelection(getter_AddRefs(frameSelection)); if (frameSelection) { frameSelection->UndefineCaretBidiLevel(); diff --git a/editor/libeditor/text/nsTextEditRulesBidi.cpp b/editor/libeditor/text/nsTextEditRulesBidi.cpp index 7fcfa787ad4b..2117f7edb104 100644 --- a/editor/libeditor/text/nsTextEditRulesBidi.cpp +++ b/editor/libeditor/text/nsTextEditRulesBidi.cpp @@ -76,7 +76,7 @@ nsTextEditRules::CheckBidiLevelForDeletion(nsISelection *aSelection, nsCOMPtr privateSelection(do_QueryInterface(aSelection)); NS_ENSURE_TRUE(privateSelection, NS_ERROR_NULL_POINTER); - nsCOMPtr frameSelection; + nsRefPtr frameSelection; privateSelection->GetFrameSelection(getter_AddRefs(frameSelection)); NS_ENSURE_TRUE(frameSelection, NS_ERROR_NULL_POINTER); diff --git a/layout/base/nsCaret.cpp b/layout/base/nsCaret.cpp index 0019a33de49d..04023e9200b0 100644 --- a/layout/base/nsCaret.cpp +++ b/layout/base/nsCaret.cpp @@ -408,7 +408,7 @@ nsIFrame* nsCaret::GetGeometry(nsISelection* aSelection, nsRect* aRect, if (!contentNode) return nsnull; - nsCOMPtr frameSelection = GetFrameSelection(); + nsRefPtr frameSelection = GetFrameSelection(); if (!frameSelection) return nsnull; PRUint8 bidiLevel = frameSelection->GetCaretBidiLevel(); @@ -461,7 +461,7 @@ nsresult nsCaret::DrawAtPosition(nsIDOMNode* aNode, PRInt32 aOffset) NS_ENSURE_ARG(aNode); PRUint8 bidiLevel; - nsCOMPtr frameSelection = GetFrameSelection(); + nsRefPtr frameSelection = GetFrameSelection(); if (!frameSelection) return NS_ERROR_FAILURE; bidiLevel = frameSelection->GetCaretBidiLevel(); @@ -702,7 +702,7 @@ nsCaret::DrawAtPositionWithHint(nsIDOMNode* aNode, // If there has been a reflow, set the caret Bidi level to the level of the current frame if (aBidiLevel & BIDI_LEVEL_UNDEFINED) { - nsCOMPtr frameSelection = GetFrameSelection(); + nsRefPtr frameSelection = GetFrameSelection(); if (!frameSelection) return PR_FALSE; frameSelection->SetCaretBidiLevel(NS_GET_EMBEDDING_LEVEL(theFrame)); @@ -737,7 +737,7 @@ nsCaret::GetCaretFrameForNodeOffset(nsIContent* aContentNode, presShell->GetDocument() != aContentNode->GetCurrentDoc()) return NS_ERROR_FAILURE; - nsCOMPtr frameSelection = GetFrameSelection(); + nsRefPtr frameSelection = GetFrameSelection(); if (!frameSelection) return NS_ERROR_FAILURE; @@ -1044,7 +1044,7 @@ void nsCaret::DrawCaret(PRBool aInvalidate) if (NS_FAILED(domSelection->GetFocusOffset(&offset))) return; - nsCOMPtr frameSelection = GetFrameSelection(); + nsRefPtr frameSelection = GetFrameSelection(); if (!frameSelection) return; diff --git a/layout/base/nsPresShell.cpp b/layout/base/nsPresShell.cpp index 9828a2363e99..c9f45744b044 100644 --- a/layout/base/nsPresShell.cpp +++ b/layout/base/nsPresShell.cpp @@ -1125,7 +1125,7 @@ protected: void MaybeReleaseCapturingContent() { - nsCOMPtr frameSelection = FrameSelection(); + nsRefPtr frameSelection = FrameSelection(); if (frameSelection) { frameSelection->SetMouseDownState(PR_FALSE); } @@ -5679,7 +5679,7 @@ PresShell::PaintRangePaintInfo(nsTArray >* aItems, // temporarily hide the selection so that text is drawn normally. If a // selection is being rendered, use that, otherwise use the presshell's // selection. - nsCOMPtr frameSelection; + nsRefPtr frameSelection; if (aSelection) { nsCOMPtr selpriv = do_QueryInterface(aSelection); selpriv->GetFrameSelection(getter_AddRefs(frameSelection)); diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp index e2b7f55eff08..34f1bce5c129 100644 --- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -2217,7 +2217,7 @@ nsFrame::HandlePress(nsPresContext* aPresContext, PRBool control = me->isControl; #endif - nsCOMPtr fc = const_cast(frameselection); + nsRefPtr fc = const_cast(frameselection); if (me->clickCount >1 ) { // These methods aren't const but can't actually delete anything, @@ -2487,7 +2487,7 @@ NS_IMETHODIMP nsFrame::HandleDrag(nsPresContext* aPresContext, } nsIPresShell *presShell = aPresContext->PresShell(); - nsCOMPtr frameselection = GetFrameSelection(); + nsRefPtr frameselection = GetFrameSelection(); PRBool mouseDown = frameselection->GetMouseDownState(); if (!mouseDown) return NS_OK; diff --git a/layout/generic/nsObjectFrame.cpp b/layout/generic/nsObjectFrame.cpp index 406013d176d3..159d67855024 100644 --- a/layout/generic/nsObjectFrame.cpp +++ b/layout/generic/nsObjectFrame.cpp @@ -5311,7 +5311,7 @@ nsEventStatus nsPluginInstanceOwner::ProcessEvent(const nsGUIEvent& anEvent) { // Ignore mouse-moved events that happen as part of a dragging // operation that started over another frame. See bug 525078. - nsCOMPtr frameselection = mObjectFrame->GetFrameSelection(); + nsRefPtr frameselection = mObjectFrame->GetFrameSelection(); if (!frameselection->GetMouseDownState() || (nsIPresShell::GetCapturingContent() == mObjectFrame->GetContent())) { #ifndef NP_NO_CARBON diff --git a/layout/svg/base/src/nsSVGGlyphFrame.cpp b/layout/svg/base/src/nsSVGGlyphFrame.cpp index e47380733245..9b8dadf8b931 100644 --- a/layout/svg/base/src/nsSVGGlyphFrame.cpp +++ b/layout/svg/base/src/nsSVGGlyphFrame.cpp @@ -968,20 +968,7 @@ nsSVGGlyphFrame::GetHighlight(PRUint32 *charnum, PRUint32 *nchars, // get the selection details SelectionDetails *details = nsnull; { - nsCOMPtr frameSelection; - { - nsCOMPtr controller; - GetSelectionController(presContext, getter_AddRefs(controller)); - - if (!controller) { - NS_ERROR("no selection controller"); - return NS_ERROR_FAILURE; - } - frameSelection = do_QueryInterface(controller); - } - if (!frameSelection) { - frameSelection = presContext->PresShell()->FrameSelection(); - } + nsRefPtr frameSelection = presContext->PresShell()->FrameSelection(); if (!frameSelection) { NS_ERROR("no frameselection interface"); return NS_ERROR_FAILURE; diff --git a/layout/tables/nsTableCellFrame.cpp b/layout/tables/nsTableCellFrame.cpp index 3565f3dde932..2598ae28711a 100644 --- a/layout/tables/nsTableCellFrame.cpp +++ b/layout/tables/nsTableCellFrame.cpp @@ -319,7 +319,7 @@ nsTableCellFrame::DecorateForSelection(nsRenderingContext& aRenderingContext, nsPresContext* presContext = PresContext(); displaySelection = DisplaySelection(presContext); if (displaySelection) { - nsCOMPtr frameSelection = + nsRefPtr frameSelection = presContext->PresShell()->FrameSelection(); if (frameSelection->GetTableCellSelection()) { From b2ace2c16ddb9cddcabf6022712e0d4b3c7c40ff Mon Sep 17 00:00:00 2001 From: Masatoshi Kimura Date: Thu, 19 May 2011 01:11:51 -0400 Subject: [PATCH 221/282] Bug 649133 followup. Remove the 'moz' prefix on response/responseType, since Chrome has already shipped these unprefixed. r=sicking --- content/base/public/nsIXMLHttpRequest.idl | 6 ++-- content/base/src/nsXMLHttpRequest.cpp | 6 ++-- content/base/test/test_XHR.html | 34 +++++++++++------------ dom/src/threads/nsDOMWorkerXHR.cpp | 6 ++-- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/content/base/public/nsIXMLHttpRequest.idl b/content/base/public/nsIXMLHttpRequest.idl index f0de1f27d99a..7bbf3acbdfea 100644 --- a/content/base/public/nsIXMLHttpRequest.idl +++ b/content/base/public/nsIXMLHttpRequest.idl @@ -110,7 +110,7 @@ interface nsIXMLHttpRequestUpload : nsIXMLHttpRequestEventTarget { * you're aware of all the security implications. And then think twice about * it. */ -[scriptable, uuid(a05a6424-a644-461a-a1ff-c7bbe96ea9e2)] +[scriptable, uuid(5cf8d518-51d0-4cd6-a69a-c3674c2de599)] interface nsIXMLHttpRequest : nsISupports { /** @@ -148,14 +148,14 @@ interface nsIXMLHttpRequest : nsISupports * "blob": as a File API Blob. * "document": as a DOM Document object. */ - attribute AString mozResponseType; + attribute AString responseType; /** * The response to the request as a specified format by responseType. * NULL if the request is unsuccessful or * has not yet been sent. */ - [implicit_jscontext] readonly attribute jsval /* any */ mozResponse; + [implicit_jscontext] readonly attribute jsval /* any */ response; /** * The status of the response to the request for HTTP requests. diff --git a/content/base/src/nsXMLHttpRequest.cpp b/content/base/src/nsXMLHttpRequest.cpp index 607cb412fedf..5b8395f17214 100644 --- a/content/base/src/nsXMLHttpRequest.cpp +++ b/content/base/src/nsXMLHttpRequest.cpp @@ -868,7 +868,7 @@ nsresult nsXMLHttpRequest::GetResponseArrayBuffer(jsval *aResult) } /* attribute AString responseType; */ -NS_IMETHODIMP nsXMLHttpRequest::GetMozResponseType(nsAString& aResponseType) +NS_IMETHODIMP nsXMLHttpRequest::GetResponseType(nsAString& aResponseType) { switch (mResponseType) { case XML_HTTP_RESPONSE_TYPE_DEFAULT: @@ -894,7 +894,7 @@ NS_IMETHODIMP nsXMLHttpRequest::GetMozResponseType(nsAString& aResponseType) } /* attribute AString responseType; */ -NS_IMETHODIMP nsXMLHttpRequest::SetMozResponseType(const nsAString& aResponseType) +NS_IMETHODIMP nsXMLHttpRequest::SetResponseType(const nsAString& aResponseType) { // If the state is not OPENED or HEADERS_RECEIVED raise an // INVALID_STATE_ERR exception and terminate these steps. @@ -933,7 +933,7 @@ NS_IMETHODIMP nsXMLHttpRequest::SetMozResponseType(const nsAString& aResponseTyp } /* readonly attribute jsval response; */ -NS_IMETHODIMP nsXMLHttpRequest::GetMozResponse(JSContext *aCx, jsval *aResult) +NS_IMETHODIMP nsXMLHttpRequest::GetResponse(JSContext *aCx, jsval *aResult) { nsresult rv = NS_OK; diff --git a/content/base/test/test_XHR.html b/content/base/test/test_XHR.html index 73914b225397..9052729e6b53 100644 --- a/content/base/test/test_XHR.html +++ b/content/base/test/test_XHR.html @@ -29,7 +29,7 @@ var failFiles = [['//example.com' + path + 'file_XHR_pass1.xml', 'GET'], for (i = 0; i < passFiles.length; ++i) { xhr = new XMLHttpRequest(); - is(xhr.mozResponseType, "", "wrong initial responseType"); + is(xhr.responseType, "", "wrong initial responseType"); xhr.open(passFiles[i][1], passFiles[i][0], false); xhr.send(null); is(xhr.status, 200, "wrong status"); @@ -37,11 +37,11 @@ for (i = 0; i < passFiles.length; ++i) { is((new XMLSerializer()).serializeToString(xhr.responseXML.documentElement), "hello", "wrong responseXML"); - is(xhr.mozResponse, "hello\n", "wrong response"); + is(xhr.response, "hello\n", "wrong response"); } else { is(xhr.responseText, "hello pass\n", "wrong responseText"); - is(xhr.mozResponse, "hello pass\n", "wrong response"); + is(xhr.response, "hello pass\n", "wrong response"); } } @@ -77,30 +77,30 @@ function checkResponseXMLAccessThrows(xhr) { } function checkSetResponseTypeThrows(xhr) { var didthrow = false; - try { xhr.mozResponseType = 'document'; } catch (e) { didthrow = true; } + try { xhr.responseType = 'document'; } catch (e) { didthrow = true; } ok(didthrow, "should have thrown when accessing responseType"); } xhr = new XMLHttpRequest(); checkSetResponseTypeThrows(xhr); xhr.open("GET", 'file_XHR_pass1.xml', false); -xhr.mozResponseType = 'document'; +xhr.responseType = 'document'; xhr.send(null); checkSetResponseTypeThrows(xhr); is(xhr.status, 200, "wrong status"); checkResponseTextAccessThrows(xhr); -is((new XMLSerializer()).serializeToString(xhr.mozResponse.documentElement), +is((new XMLSerializer()).serializeToString(xhr.response.documentElement), "hello", "wrong response"); // test response (responseType='text') xhr = new XMLHttpRequest(); xhr.open("GET", 'file_XHR_pass2.txt', false); -xhr.mozResponseType = 'text'; +xhr.responseType = 'text'; xhr.send(null); is(xhr.status, 200, "wrong status"); checkResponseXMLAccessThrows(xhr); -is(xhr.mozResponse, "hello pass\n", "wrong response"); +is(xhr.response, "hello pass\n", "wrong response"); // test response (responseType='arraybuffer') function arraybuffer_equals_to(ab, s) { @@ -113,24 +113,24 @@ function arraybuffer_equals_to(ab, s) { // with a simple text file xhr = new XMLHttpRequest(); xhr.open("GET", 'file_XHR_pass2.txt', false); -xhr.mozResponseType = 'arraybuffer'; +xhr.responseType = 'arraybuffer'; xhr.send(null); is(xhr.status, 200, "wrong status"); checkResponseTextAccessThrows(xhr); checkResponseXMLAccessThrows(xhr); -ab = xhr.mozResponse; +ab = xhr.response; ok(ab != null, "should have a non-null arraybuffer"); arraybuffer_equals_to(ab, "hello pass\n"); // with a binary file xhr = new XMLHttpRequest(); xhr.open("GET", 'file_XHR_binary1.bin', false); -xhr.mozResponseType = 'arraybuffer'; +xhr.responseType = 'arraybuffer'; xhr.send(null) is(xhr.status, 200, "wrong status"); checkResponseTextAccessThrows(xhr); checkResponseXMLAccessThrows(xhr); -ab = xhr.mozResponse; +ab = xhr.response; ok(ab != null, "should have a non-null arraybuffer"); arraybuffer_equals_to(ab, "\xaa\xee\0\x03\xff\xff\xff\xff\xbb\xbb\xbb\xbb"); @@ -143,12 +143,12 @@ function checkOnloadCount() { // with a simple text file xhr = new XMLHttpRequest(); xhr.open("GET", 'file_XHR_pass2.txt', false); -xhr.mozResponseType = 'blob'; +xhr.responseType = 'blob'; xhr.send(null); is(xhr.status, 200, "wrong status"); checkResponseTextAccessThrows(xhr); checkResponseXMLAccessThrows(xhr); -b = xhr.mozResponse; +b = xhr.response; ok(b, "should have a non-null blob"); is(b.size, "hello pass\n".length, "wrong blob size"); @@ -165,10 +165,10 @@ xhr.onreadystatechange = function() { switch (xhr.readyState) { case 2: is(xhr.status, 200, "wrong status"); - xhr.mozResponseType = 'blob'; + xhr.responseType = 'blob'; break; case 4: - b = xhr.mozResponse; + b = xhr.response; ok(b != null, "should have a non-null blob"); is(b.size, 12, "wrong blob size"); @@ -192,7 +192,7 @@ client.onreadystatechange = function() { try { is(client.responseXML, null, "responseXML should be null."); is(client.responseText, "", "responseText should be empty string."); - is(client.mozResponse, "", "response should be empty string."); + is(client.response, "", "response should be empty string."); is(client.status, 0, "status should be 0."); is(client.statusText, "", "statusText should be empty string."); is(client.getAllResponseHeaders(), "", diff --git a/dom/src/threads/nsDOMWorkerXHR.cpp b/dom/src/threads/nsDOMWorkerXHR.cpp index e0b970914aa6..57dad473ac92 100644 --- a/dom/src/threads/nsDOMWorkerXHR.cpp +++ b/dom/src/threads/nsDOMWorkerXHR.cpp @@ -903,20 +903,20 @@ nsDOMWorkerXHR::SetWithCredentials(PRBool aWithCredentials) } NS_IMETHODIMP -nsDOMWorkerXHR::GetMozResponseType(nsAString& aResponseText) +nsDOMWorkerXHR::GetResponseType(nsAString& aResponseText) { return NS_ERROR_NOT_IMPLEMENTED; } NS_IMETHODIMP -nsDOMWorkerXHR::SetMozResponseType(const nsAString& aResponseText) +nsDOMWorkerXHR::SetResponseType(const nsAString& aResponseText) { return NS_ERROR_NOT_IMPLEMENTED; } /* readonly attribute jsval response; */ NS_IMETHODIMP -nsDOMWorkerXHR::GetMozResponse(JSContext *aCx, jsval *aResult) +nsDOMWorkerXHR::GetResponse(JSContext *aCx, jsval *aResult) { return NS_ERROR_NOT_IMPLEMENTED; } From 03142a505fa2345c07f797522a4d4e0f020a7d44 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Wed, 18 May 2011 22:26:45 -0700 Subject: [PATCH 222/282] Bug 658143 - Part 2: Don't use createInstance for nsFrameSelection. r=roc --- content/html/content/src/nsTextEditorState.cpp | 8 ++------ layout/base/nsPresShell.cpp | 9 +-------- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/content/html/content/src/nsTextEditorState.cpp b/content/html/content/src/nsTextEditorState.cpp index 09cd588132fc..ddb7968d6ba0 100644 --- a/content/html/content/src/nsTextEditorState.cpp +++ b/content/html/content/src/nsTextEditorState.cpp @@ -70,7 +70,6 @@ using namespace mozilla::dom; static NS_DEFINE_CID(kTextEditorCID, NS_TEXTEDITOR_CID); -static NS_DEFINE_CID(kFrameSelectionCID, NS_FRAMESELECTION_CID); static nsINativeKeyBindings *sNativeInputBindings = nsnull; static nsINativeKeyBindings *sNativeTextAreaBindings = nsnull; @@ -1090,10 +1089,7 @@ nsTextEditorState::BindToFrame(nsTextControlFrame* aFrame) NS_ENSURE_TRUE(shell, NS_ERROR_FAILURE); // Create selection - nsresult rv; - nsRefPtr frameSel; - frameSel = do_CreateInstance(kFrameSelectionCID, &rv); - NS_ENSURE_SUCCESS(rv, rv); + nsRefPtr frameSel = new nsFrameSelection(); // Create a SelectionController mSelCon = new nsTextInputSelectionImpl(frameSel, shell, rootNode); @@ -1131,7 +1127,7 @@ nsTextEditorState::BindToFrame(nsTextControlFrame* aFrame) // Set the correct direction on the newly created root node PRUint32 flags; - rv = mEditor->GetFlags(&flags); + nsresult rv = mEditor->GetFlags(&flags); NS_ENSURE_SUCCESS(rv, rv); if (flags & nsIPlaintextEditor::eEditorRightToLeft) { rootNode->SetAttr(kNameSpaceID_None, nsGkAtoms::dir, NS_LITERAL_STRING("rtl"), PR_FALSE); diff --git a/layout/base/nsPresShell.cpp b/layout/base/nsPresShell.cpp index c9f45744b044..cf5f1c835c51 100644 --- a/layout/base/nsPresShell.cpp +++ b/layout/base/nsPresShell.cpp @@ -260,9 +260,6 @@ ChangeFlag(PRUint32 aFlags, PRBool aOnOff, PRUint32 aFlag) // * - initially created for bugs 31816, 20760, 22963 static void ColorToString(nscolor aColor, nsAutoString &aString); -// Class ID's -static NS_DEFINE_CID(kFrameSelectionCID, NS_FRAMESELECTION_CID); - // RangePaintInfo is used to paint ranges to offscreen buffers struct RangePaintInfo { nsCOMPtr mRange; @@ -1831,11 +1828,7 @@ PresShell::Init(nsIDocument* aDocument, // before creating any frames. SetPreferenceStyleRules(PR_FALSE); - result = CallCreateInstance(kFrameSelectionCID, &mSelection); - if (NS_FAILED(result)) { - mStyleSet = nsnull; - return result; - } + NS_ADDREF(mSelection = new nsFrameSelection()); // Create and initialize the frame manager result = FrameManager()->Init(this, mStyleSet); From 6d35e0da33622b0d9a64e9db308a73facfbce280 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Wed, 18 May 2011 22:28:54 -0700 Subject: [PATCH 223/282] Bug 658143 - Part 3: Remove nsFrameSelection QI and createInstance support. r=roc --- layout/build/nsLayoutCID.h | 4 ---- layout/build/nsLayoutModule.cpp | 5 ----- layout/generic/nsFrameSelection.h | 5 +---- layout/generic/nsSelection.cpp | 11 ----------- 4 files changed, 1 insertion(+), 24 deletions(-) diff --git a/layout/build/nsLayoutCID.h b/layout/build/nsLayoutCID.h index cd7989442fb4..d13349429a83 100644 --- a/layout/build/nsLayoutCID.h +++ b/layout/build/nsLayoutCID.h @@ -54,10 +54,6 @@ #define NS_PRESSHELL_CID \ { 0xe6fd9940, 0x899d, 0x11d2, { 0x8e, 0xae, 0x0, 0x80, 0x5f, 0x29, 0xf3, 0x70 } } -#define NS_FRAMESELECTION_CID \ -{/* {905F80F1-8A7B-11d2-918C-0080C8E44DB5}*/ \ - 0x905f80f1, 0x8a7b, 0x11d2, { 0x91, 0x8c, 0x0, 0x80, 0xc8, 0xe4, 0x4d, 0xb5 } } - #define NS_DOMSELECTION_CID \ {/* {C87A37FC-8109-4ce2-A322-8CDEC925379F}*/ \ 0xc87a37fc, 0x8109, 0x4ce2, { 0xa3, 0x22, 0x8c, 0xde, 0xc9, 0x25, 0x37, 0x9f } } diff --git a/layout/build/nsLayoutModule.cpp b/layout/build/nsLayoutModule.cpp index 023e740ebd3d..a13b8ff09348 100644 --- a/layout/build/nsLayoutModule.cpp +++ b/layout/build/nsLayoutModule.cpp @@ -63,7 +63,6 @@ #include "nsIDocumentViewer.h" #include "nsIEventListenerManager.h" #include "nsIFactory.h" -#include "nsFrameSelection.h" #include "nsIFrameUtil.h" #include "nsIFragmentContentSink.h" #include "nsHTMLStyleSheet.h" @@ -448,7 +447,6 @@ nsresult NS_NewCanvasRenderingContextWebGL(nsIDOMWebGLRenderingContext** aResult nsresult NS_CreateFrameTraversal(nsIFrameTraversal** aResult); -nsresult NS_NewSelection(nsFrameSelection** aResult); nsresult NS_NewDomSelection(nsISelection** aResult); nsresult NS_NewDocumentViewer(nsIDocumentViewer** aResult); nsresult NS_NewRange(nsIDOMRange** aResult); @@ -526,7 +524,6 @@ MAKE_CTOR(CreateSVGDocument, nsIDocument, NS_NewSVG #endif MAKE_CTOR(CreateImageDocument, nsIDocument, NS_NewImageDocument) MAKE_CTOR(CreateDOMSelection, nsISelection, NS_NewDomSelection) -MAKE_CTOR(CreateSelection, nsFrameSelection, NS_NewSelection) MAKE_CTOR(CreateRange, nsIDOMRange, NS_NewRange) MAKE_CTOR(CreateRangeUtils, nsIRangeUtils, NS_NewRangeUtils) MAKE_CTOR(CreateContentIterator, nsIContentIterator, NS_NewContentIterator) @@ -775,7 +772,6 @@ NS_DEFINE_NAMED_CID(NS_SVGDOCUMENT_CID); #endif NS_DEFINE_NAMED_CID(NS_IMAGEDOCUMENT_CID); NS_DEFINE_NAMED_CID(NS_DOMSELECTION_CID); -NS_DEFINE_NAMED_CID(NS_FRAMESELECTION_CID); NS_DEFINE_NAMED_CID(NS_RANGE_CID); NS_DEFINE_NAMED_CID(NS_RANGEUTILS_CID); NS_DEFINE_NAMED_CID(NS_CONTENTITERATOR_CID); @@ -924,7 +920,6 @@ static const mozilla::Module::CIDEntry kLayoutCIDs[] = { #endif { &kNS_IMAGEDOCUMENT_CID, false, NULL, CreateImageDocument }, { &kNS_DOMSELECTION_CID, false, NULL, CreateDOMSelection }, - { &kNS_FRAMESELECTION_CID, false, NULL, CreateSelection }, { &kNS_RANGE_CID, false, NULL, CreateRange }, { &kNS_RANGEUTILS_CID, false, NULL, CreateRangeUtils }, { &kNS_CONTENTITERATOR_CID, false, NULL, CreateContentIterator }, diff --git a/layout/generic/nsFrameSelection.h b/layout/generic/nsFrameSelection.h index b7e5d86603c8..5a9553a7f269 100644 --- a/layout/generic/nsFrameSelection.h +++ b/layout/generic/nsFrameSelection.h @@ -210,9 +210,8 @@ class nsIScrollableFrame; * or they may cause other objects to be deleted. */ -class nsFrameSelection : public nsISupports { +class NS_FINAL_CLASS nsFrameSelection : public nsISupports { public: - NS_DECLARE_STATIC_IID_ACCESSOR(NS_FRAME_SELECTION_IID) enum HINT { HINTLEFT = 0, HINTRIGHT = 1}; //end of this line or beginning of next /*interfaces for addref and release and queryinterface*/ @@ -741,6 +740,4 @@ private: PRInt8 mCaretMovementStyle; }; -NS_DEFINE_STATIC_IID_ACCESSOR(nsFrameSelection, NS_FRAME_SELECTION_IID) - #endif /* nsFrameSelection_h___ */ diff --git a/layout/generic/nsSelection.cpp b/layout/generic/nsSelection.cpp index e4b850f7b881..8b9f5af1ee35 100644 --- a/layout/generic/nsSelection.cpp +++ b/layout/generic/nsSelection.cpp @@ -503,16 +503,6 @@ private: NS_IMPL_ISUPPORTS1(nsAutoScrollTimer, nsITimerCallback) -nsresult NS_NewSelection(nsFrameSelection **aFrameSelection) -{ - nsFrameSelection *rlist = new nsFrameSelection; - if (!rlist) - return NS_ERROR_OUT_OF_MEMORY; - *aFrameSelection = rlist; - NS_ADDREF(rlist); - return NS_OK; -} - nsresult NS_NewDomSelection(nsISelection **aDomSelection) { nsTypedSelection *rlist = new nsTypedSelection; @@ -793,7 +783,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END NS_IMPL_CYCLE_COLLECTING_ADDREF(nsFrameSelection) NS_IMPL_CYCLE_COLLECTING_RELEASE(nsFrameSelection) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsFrameSelection) - NS_INTERFACE_MAP_ENTRY(nsFrameSelection) NS_INTERFACE_MAP_ENTRY(nsISupports) NS_INTERFACE_MAP_END From b6c98913c8338e83d996b57f8b33695521206f9c Mon Sep 17 00:00:00 2001 From: Walter Meinl Date: Thu, 19 May 2011 12:43:21 +0200 Subject: [PATCH 224/282] Bug 657868 - Fix OS/2 build after nsIPluginInstance removal. r=joshmoz --- dom/plugins/base/nsPluginNativeWindowOS2.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/dom/plugins/base/nsPluginNativeWindowOS2.cpp b/dom/plugins/base/nsPluginNativeWindowOS2.cpp index fd3e16c226b8..ce3601dff4b5 100644 --- a/dom/plugins/base/nsPluginNativeWindowOS2.cpp +++ b/dom/plugins/base/nsPluginNativeWindowOS2.cpp @@ -139,14 +139,14 @@ void PluginWindowEvent::Init(const PluginWindowWeakRef &ref, HWND aWnd, class nsDelayedPopupsEnabledEvent : public nsRunnable { public: - nsDelayedPopupsEnabledEvent(nsIPluginInstance *inst) + nsDelayedPopupsEnabledEvent(nsNPAPIPluginInstance *inst) : mInst(inst) {} NS_DECL_NSIRUNNABLE private: - nsCOMPtr mInst; + nsRefPtr mInst; }; NS_IMETHODIMP nsDelayedPopupsEnabledEvent::Run() @@ -173,7 +173,7 @@ public: nsPluginNativeWindowOS2(); virtual ~nsPluginNativeWindowOS2(); - virtual nsresult CallSetWindow(nsCOMPtr &aPluginInstance); + virtual nsresult CallSetWindow(nsRefPtr &aPluginInstance); private: nsresult SubclassAndAssociateWindow(); @@ -199,7 +199,7 @@ public: /*****************************************************************************/ static PRBool ProcessFlashMessageDelayed(nsPluginNativeWindowOS2 * aWin, - nsIPluginInstance * aInst, + nsNPAPIPluginInstance * aInst, HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { @@ -240,7 +240,7 @@ static MRESULT EXPENTRY PluginWndProc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM m // The DispatchEvent(NS_PLUGIN_ACTIVATE) below can trigger a reentrant focus // event which might destroy us. Hold a strong ref on the plugin instance // to prevent that, bug 374229. - nsCOMPtr inst; + nsRefPtr inst; win->GetPluginInstance(inst); // check plugin mime type and cache whether it is Flash or java-vm or not; @@ -421,7 +421,7 @@ NS_IMETHODIMP PluginWindowEvent::Run() if (!hWnd) return NS_OK; - nsCOMPtr inst; + nsRefPtr inst; win->GetPluginInstance(inst); if (GetMsg() == WM_USER_FLASH) @@ -472,7 +472,7 @@ nsPluginNativeWindowOS2::GetPluginWindowEvent(HWND aWnd, ULONG aMsg, MPARAM aMp1 return event; } -nsresult nsPluginNativeWindowOS2::CallSetWindow(nsCOMPtr &aPluginInstance) +nsresult nsPluginNativeWindowOS2::CallSetWindow(nsRefPtr &aPluginInstance) { // check the incoming instance, null indicates that window is going away and we are // not interested in subclassing business any more, undo and don't subclass From 3b62225eb00d24469dcc03efc56b1b227afdd089 Mon Sep 17 00:00:00 2001 From: Bjarne Date: Thu, 19 May 2011 12:45:51 +0200 Subject: [PATCH 225/282] Bug 654926 - Hang in nsDiskCacheStreamIO::CloseOutputStream while downloading WebM video from YouTube. r=michal --- netwerk/cache/nsCacheEntryDescriptor.cpp | 34 ++++++++++++++++-------- netwerk/cache/nsCacheEntryDescriptor.h | 21 ++++++++------- netwerk/cache/nsDiskCacheStreams.cpp | 7 ++++- 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/netwerk/cache/nsCacheEntryDescriptor.cpp b/netwerk/cache/nsCacheEntryDescriptor.cpp index 0b2ed96c7eb6..a8c2196255e7 100644 --- a/netwerk/cache/nsCacheEntryDescriptor.cpp +++ b/netwerk/cache/nsCacheEntryDescriptor.cpp @@ -609,22 +609,34 @@ nsOutputStreamWrapper::LazyInit() nsCacheEntry* cacheEntry = mDescriptor->CacheEntry(); if (!cacheEntry) return NS_ERROR_NOT_AVAILABLE; - rv = nsCacheService::OpenOutputStreamForEntry(cacheEntry, mode, mStartOffset, - getter_AddRefs(mOutput)); - if (NS_FAILED(rv)) return rv; + NS_ASSERTION(mOutput == nsnull, "mOutput set in LazyInit"); - mDescriptor->mOutput = mOutput; + nsCOMPtr stream; + rv = nsCacheService::OpenOutputStreamForEntry(cacheEntry, mode, mStartOffset, + getter_AddRefs(stream)); + if (NS_FAILED(rv)) + return rv; nsCacheDevice* device = cacheEntry->CacheDevice(); - if (!device) return NS_ERROR_NOT_AVAILABLE; + if (device) { + // the entry has been truncated to mStartOffset bytes, inform device + PRInt32 size = cacheEntry->DataSize(); + rv = device->OnDataSizeChange(cacheEntry, mStartOffset - size); + if (NS_SUCCEEDED(rv)) + cacheEntry->SetDataSize(mStartOffset); + } else { + rv = NS_ERROR_NOT_AVAILABLE; + } - // the entry has been truncated to mStartOffset bytes, inform the device. - PRInt32 size = cacheEntry->DataSize(); - rv = device->OnDataSizeChange(cacheEntry, mStartOffset - size); - if (NS_FAILED(rv)) return rv; - - cacheEntry->SetDataSize(mStartOffset); + // If anything above failed, clean up internal state and get out of here + // (see bug #654926)... + if (NS_FAILED(rv)) { + mDescriptor->InternalCleanup(stream); + return rv; + } + // ... otherwise, set members and mark initialized + mDescriptor->mOutput = mOutput = stream; mInitialized = PR_TRUE; return NS_OK; } diff --git a/netwerk/cache/nsCacheEntryDescriptor.h b/netwerk/cache/nsCacheEntryDescriptor.h index c74ed5345744..4416c5b9c9c5 100644 --- a/netwerk/cache/nsCacheEntryDescriptor.h +++ b/netwerk/cache/nsCacheEntryDescriptor.h @@ -77,18 +77,21 @@ public: void CloseOutput(void) { - if (mOutput) { - nsCOMPtr tmp (do_QueryInterface(mOutput)); - if (tmp) - tmp->CloseInternal(); - else - mOutput->Close(); - - mOutput = nsnull; - } + InternalCleanup(mOutput); + mOutput = nsnull; } private: + void InternalCleanup(nsIOutputStream *stream) + { + if (stream) { + nsCOMPtr tmp (do_QueryInterface(stream)); + if (tmp) + tmp->CloseInternal(); + else + stream->Close(); + } + } /************************************************************************* diff --git a/netwerk/cache/nsDiskCacheStreams.cpp b/netwerk/cache/nsDiskCacheStreams.cpp index 36cd1eaea427..30bc6e60af65 100644 --- a/netwerk/cache/nsDiskCacheStreams.cpp +++ b/netwerk/cache/nsDiskCacheStreams.cpp @@ -484,8 +484,13 @@ nsDiskCacheStreamIO::Flush() CACHE_LOG_DEBUG(("CACHE: Flush [%x doomed=%u]\n", mBinding->mRecord.HashNumber(), mBinding->mDoomed)); - if (!mBufDirty) + if (!mBufDirty) { + if (mFD) { + (void) PR_Close(mFD); + mFD = nsnull; + } return NS_OK; + } // write data to cache blocks, or flush mBuffer to file nsDiskCacheMap *cacheMap = mDevice->CacheMap(); // get map reference From 083ab03e5542298aaf3d3678ac8a3050c8e83dce Mon Sep 17 00:00:00 2001 From: Bjarne Date: Thu, 19 May 2011 12:54:02 +0200 Subject: [PATCH 226/282] Tests for bug 654926. r=michal --- netwerk/test/unit/test_bug654926.js | 101 ++++++++++++++++++ .../test/unit/test_bug654926_doom_and_read.js | 100 +++++++++++++++++ netwerk/test/unit/test_bug654926_test_seek.js | 87 +++++++++++++++ 3 files changed, 288 insertions(+) create mode 100644 netwerk/test/unit/test_bug654926.js create mode 100644 netwerk/test/unit/test_bug654926_doom_and_read.js create mode 100644 netwerk/test/unit/test_bug654926_test_seek.js diff --git a/netwerk/test/unit/test_bug654926.js b/netwerk/test/unit/test_bug654926.js new file mode 100644 index 000000000000..769521b60c77 --- /dev/null +++ b/netwerk/test/unit/test_bug654926.js @@ -0,0 +1,101 @@ +const Cc = Components.classes; +const Ci = Components.interfaces; +const Cr = Components.results; + +var _CSvc; +function get_cache_service() { + if (_CSvc) + return _CSvc; + + return _CSvc = Cc["@mozilla.org/network/cache-service;1"]. + getService(Ci.nsICacheService); +} + +function get_ostream_for_entry(key, asFile, append, entryRef) +{ + var cache = get_cache_service(); + var session = cache.createSession( + "HTTP", + asFile ? Ci.nsICache.STORE_ON_DISK_AS_FILE + : Ci.nsICache.STORE_ON_DISK, + Ci.nsICache.STREAM_BASED); + var cacheEntry = session.openCacheEntry( + key, + append ? Ci.nsICache.ACCESS_READ_WRITE + : Ci.nsICache.ACCESS_WRITE, + true); + var oStream = cacheEntry.openOutputStream(append ? cacheEntry.dataSize : 0); + entryRef.value = cacheEntry; + return oStream; +} + +function gen_1MiB() +{ + var i; + var data="x"; + for (i=0 ; i < 20 ; i++) + data+=data; + return data; +} + +function write_and_check(str, data, len) +{ + var written = str.write(data, len); + if (written != len) { + do_throw("str.write has not written all data!\n" + + " Expected: " + len + "\n" + + " Actual: " + written + "\n"); + } +} + +function write_datafile() +{ + var entry = {}; + var oStr = get_ostream_for_entry("data", true, false, entry); + var data = gen_1MiB(); + + // 6MiB + var i; + for (i=0 ; i<6 ; i++) + write_and_check(oStr, data, data.length); + + oStr.close(); + entry.value.close(); +} + +function append_datafile() +{ + var entry = {}; + var oStr = get_ostream_for_entry("data", false, true, entry); + var data = gen_1MiB(); + + + // append 1MiB + try { + write_and_check(oStr, data, data.length); + do_throw(); + } + catch (ex) { } + + // closing the ostream should fail in this case + try { + oStr.close(); + do_throw(); + } + catch (ex) { } + + entry.value.close(); +} + +function run_test() { + do_get_profile(); + + // clear the cache + get_cache_service().evictEntries(Ci.nsICache.STORE_ANYWHERE); + + // force to write file bigger than 5MiB + write_datafile(); + + // try to append the entry + append_datafile(); +} diff --git a/netwerk/test/unit/test_bug654926_doom_and_read.js b/netwerk/test/unit/test_bug654926_doom_and_read.js new file mode 100644 index 000000000000..c180972f83b5 --- /dev/null +++ b/netwerk/test/unit/test_bug654926_doom_and_read.js @@ -0,0 +1,100 @@ +const Cc = Components.classes; +const Ci = Components.interfaces; +const Cr = Components.results; + +var _CSvc; +function get_cache_service() { + if (_CSvc) + return _CSvc; + + return _CSvc = Cc["@mozilla.org/network/cache-service;1"]. + getService(Ci.nsICacheService); +} + +function get_ostream_for_entry(key, asFile, append, entryRef) +{ + var cache = get_cache_service(); + var session = cache.createSession( + "HTTP", + asFile ? Ci.nsICache.STORE_ON_DISK_AS_FILE + : Ci.nsICache.STORE_ON_DISK, + Ci.nsICache.STREAM_BASED); + var cacheEntry = session.openCacheEntry( + key, + append ? Ci.nsICache.ACCESS_READ_WRITE + : Ci.nsICache.ACCESS_WRITE, + true); + var oStream = cacheEntry.openOutputStream(append ? cacheEntry.dataSize : 0); + entryRef.value = cacheEntry; + return oStream; +} + +function gen_1MiB() +{ + var i; + var data="x"; + for (i=0 ; i < 20 ; i++) + data+=data; + return data; +} + +function write_and_check(str, data, len) +{ + var written = str.write(data, len); + if (written != len) { + do_throw("str.write has not written all data!\n" + + " Expected: " + len + "\n" + + " Actual: " + written + "\n"); + } +} + +function make_input_stream_scriptable(input) { + var wrapper = Cc["@mozilla.org/scriptableinputstream;1"]. + createInstance(Ci.nsIScriptableInputStream); + wrapper.init(input); + return wrapper; +} + +function write_datafile() +{ + var entry = {}; + var oStr = get_ostream_for_entry("data", true, false, entry); + var data = gen_1MiB(); + + write_and_check(oStr, data, data.length); + + oStr.close(); + entry.value.close(); +} + +function test_read_after_doom() +{ + var entry = {}; + var oStr = get_ostream_for_entry("data", false, true, entry); + var data = gen_1MiB(); + + entry.value.doom(); + write_and_check(oStr, data, data.length); + + oStr.close(); + + var iStr = make_input_stream_scriptable(entry.value.openInputStream(0)); + var read = iStr.read(iStr.available()); + do_check_eq(read.length, 2*1024*1024); + iStr.close(); + + entry.value.close(); +} + +function run_test() { + do_get_profile(); + + // clear the cache + get_cache_service().evictEntries(Ci.nsICache.STORE_ANYWHERE); + + // force to write file bigger than 5MiB + write_datafile(); + + // open, doom, append, read + test_read_after_doom(); +} diff --git a/netwerk/test/unit/test_bug654926_test_seek.js b/netwerk/test/unit/test_bug654926_test_seek.js new file mode 100644 index 000000000000..61b70b99bb1c --- /dev/null +++ b/netwerk/test/unit/test_bug654926_test_seek.js @@ -0,0 +1,87 @@ +const Cc = Components.classes; +const Ci = Components.interfaces; +const Cr = Components.results; + +var _CSvc; +function get_cache_service() { + if (_CSvc) + return _CSvc; + + return _CSvc = Cc["@mozilla.org/network/cache-service;1"]. + getService(Ci.nsICacheService); +} + +function get_ostream_for_entry(key, asFile, append, entryRef) +{ + var cache = get_cache_service(); + var session = cache.createSession( + "HTTP", + asFile ? Ci.nsICache.STORE_ON_DISK_AS_FILE + : Ci.nsICache.STORE_ON_DISK, + Ci.nsICache.STREAM_BASED); + var cacheEntry = session.openCacheEntry( + key, + append ? Ci.nsICache.ACCESS_READ_WRITE + : Ci.nsICache.ACCESS_WRITE, + true); + var oStream = cacheEntry.openOutputStream(append ? cacheEntry.dataSize : 0); + entryRef.value = cacheEntry; + return oStream; +} + +function gen_1MiB() +{ + var i; + var data="x"; + for (i=0 ; i < 20 ; i++) + data+=data; + return data; +} + +function write_and_check(str, data, len) +{ + var written = str.write(data, len); + if (written != len) { + do_throw("str.write has not written all data!\n" + + " Expected: " + len + "\n" + + " Actual: " + written + "\n"); + } +} + +function write_datafile() +{ + var entry = {}; + var oStr = get_ostream_for_entry("data", true, false, entry); + var data = gen_1MiB(); + + write_and_check(oStr, data, data.length); + + oStr.close(); + entry.value.close(); +} + +function open_for_readwrite() +{ + var entry = {}; + var oStr = get_ostream_for_entry("data", false, true, entry); + + // Opening the entry for appending data calls nsDiskCacheStreamIO::Seek() + // which initializes mFD. If no data is written then mBufDirty is false and + // mFD won't be closed in nsDiskCacheStreamIO::Flush(). + + oStr.close(); + entry.value.close(); +} + +function run_test() { + do_get_profile(); + + // clear the cache + get_cache_service().evictEntries(Ci.nsICache.STORE_ANYWHERE); + + // force to write file bigger than 5MiB + write_datafile(); + + // try to open the entry for appending + open_for_readwrite(); +} From f278c210557704a7c33801cdb5b5106029e9a9be Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Fri, 20 May 2011 09:45:42 -0700 Subject: [PATCH 227/282] Bug 658259 - Incorrect function tested in browser/components/sessionstore/test/browser/browser_345898.js [r=zpao] --- .../components/sessionstore/test/browser/browser_345898.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/browser/components/sessionstore/test/browser/browser_345898.js b/browser/components/sessionstore/test/browser/browser_345898.js index 9b4a6534dc40..367c792cff2f 100644 --- a/browser/components/sessionstore/test/browser/browser_345898.js +++ b/browser/components/sessionstore/test/browser/browser_345898.js @@ -72,9 +72,7 @@ function test() { "Invalid index for undoCloseTab throws"); ok(test(function() ss.getWindowValue({}, "")), "Invalid window for getWindowValue throws"); - ok(test(function() ss.getWindowValue({}, "")), - "Invalid window for getWindowValue throws"); - ok(test(function() ss.getWindowValue({}, "", "")), + ok(test(function() ss.setWindowValue({}, "", "")), "Invalid window for setWindowValue throws"); ok(test(function() ss.deleteWindowValue({}, "")), "Invalid window for deleteWindowValue throws"); From c8ffc571b92a69bb907d84ab4dde1f098c33ad10 Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Fri, 20 May 2011 09:45:42 -0700 Subject: [PATCH 228/282] Bug 657501 - Unofficial branding for Fennec [r=blassey,mfinkle] --- embedding/android/Makefile.in | 4 +- mobile/branding/unofficial/Makefile.in | 49 ++++++++++++ .../branding/unofficial/android-resources.mn | 3 + mobile/branding/unofficial/configure.sh | 3 + .../branding/unofficial/content/Makefile.in | 25 ++++++ mobile/branding/unofficial/content/about.png | Bin 0 -> 16858 bytes .../branding/unofficial/content/favicon32.png | Bin 0 -> 1761 bytes .../unofficial/content/fennec_26x26.png | Bin 0 -> 1677 bytes .../unofficial/content/fennec_40x40.png | Bin 0 -> 2997 bytes .../unofficial/content/fennec_48x48.png | Bin 0 -> 3258 bytes .../unofficial/content/fennec_72x72.png | Bin 0 -> 7223 bytes .../content/fennec_maemo_icon26.txt | 74 ++++++++++++++++++ .../unofficial/content/fennec_scalable.png | Bin 0 -> 5937 bytes mobile/branding/unofficial/content/jar.mn | 6 ++ mobile/branding/unofficial/content/logo.png | Bin 0 -> 19844 bytes .../unofficial/content/logoWordmark.png | Bin 0 -> 15088 bytes mobile/branding/unofficial/content/splash.png | Bin 0 -> 19766 bytes .../branding/unofficial/locales/Makefile.in | 48 ++++++++++++ .../unofficial/locales/en-US/brand.dtd | 4 + .../unofficial/locales/en-US/brand.properties | 2 + mobile/branding/unofficial/locales/jar.mn | 7 ++ mobile/confvars.sh | 2 +- 22 files changed, 225 insertions(+), 2 deletions(-) create mode 100644 mobile/branding/unofficial/Makefile.in create mode 100644 mobile/branding/unofficial/android-resources.mn create mode 100644 mobile/branding/unofficial/configure.sh create mode 100644 mobile/branding/unofficial/content/Makefile.in create mode 100644 mobile/branding/unofficial/content/about.png create mode 100644 mobile/branding/unofficial/content/favicon32.png create mode 100644 mobile/branding/unofficial/content/fennec_26x26.png create mode 100644 mobile/branding/unofficial/content/fennec_40x40.png create mode 100644 mobile/branding/unofficial/content/fennec_48x48.png create mode 100644 mobile/branding/unofficial/content/fennec_72x72.png create mode 100644 mobile/branding/unofficial/content/fennec_maemo_icon26.txt create mode 100644 mobile/branding/unofficial/content/fennec_scalable.png create mode 100644 mobile/branding/unofficial/content/jar.mn create mode 100644 mobile/branding/unofficial/content/logo.png create mode 100644 mobile/branding/unofficial/content/logoWordmark.png create mode 100644 mobile/branding/unofficial/content/splash.png create mode 100644 mobile/branding/unofficial/locales/Makefile.in create mode 100644 mobile/branding/unofficial/locales/en-US/brand.dtd create mode 100644 mobile/branding/unofficial/locales/en-US/brand.properties create mode 100644 mobile/branding/unofficial/locales/jar.mn diff --git a/embedding/android/Makefile.in b/embedding/android/Makefile.in index 0f60939c1fbb..6e68c3012ffc 100644 --- a/embedding/android/Makefile.in +++ b/embedding/android/Makefile.in @@ -98,7 +98,9 @@ GARBAGE_DIRS += classes res ifeq ($(MOZ_APP_NAME),fennec) ICON_PATH = $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/content/fennec_48x48.png ICON_PATH_HDPI = $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/content/fennec_72x72.png -ifeq (,$(MOZ_OFFICIAL_BRANDING)) +ifeq (org.mozilla.fennec_unofficial,$(ANDROID_PACKAGE_NAME)) +DEFINES += -DMOZ_ANDROID_SHARED_ID="org.mozilla.fennec_unofficial.sharedID" +else ifeq (,$(MOZ_OFFICIAL_BRANDING)) DEFINES += -DMOZ_ANDROID_SHARED_ID="org.mozilla.fennec.sharedID" else DEFINES += -DMOZ_ANDROID_SHARED_ID="org.mozilla.firefox.sharedID" diff --git a/mobile/branding/unofficial/Makefile.in b/mobile/branding/unofficial/Makefile.in new file mode 100644 index 000000000000..bdf28e61f920 --- /dev/null +++ b/mobile/branding/unofficial/Makefile.in @@ -0,0 +1,49 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is Mozilla Corporation. +# Portions created by the Initial Developer are Copyright (C) 2009 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Justin Dolske (original author) +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +DIRS = \ + content \ + locales \ + $(NULL) + +include $(topsrcdir)/config/rules.mk diff --git a/mobile/branding/unofficial/android-resources.mn b/mobile/branding/unofficial/android-resources.mn new file mode 100644 index 000000000000..265b0fb2cdb6 --- /dev/null +++ b/mobile/branding/unofficial/android-resources.mn @@ -0,0 +1,3 @@ +mobile/app/android/drawable/alertaddons.png +mobile/app/android/drawable/alertdownloads.png +mobile/branding/unofficial/content/splash.png diff --git a/mobile/branding/unofficial/configure.sh b/mobile/branding/unofficial/configure.sh new file mode 100644 index 000000000000..435e1c9596e9 --- /dev/null +++ b/mobile/branding/unofficial/configure.sh @@ -0,0 +1,3 @@ +ANDROID_PACKAGE_NAME=org.mozilla.fennec_unofficial +MOZ_APP_DISPLAYNAME=Fennec +MOZ_UPDATER= diff --git a/mobile/branding/unofficial/content/Makefile.in b/mobile/branding/unofficial/content/Makefile.in new file mode 100644 index 000000000000..973bfd053d8d --- /dev/null +++ b/mobile/branding/unofficial/content/Makefile.in @@ -0,0 +1,25 @@ +# Branding Makefile +# - jars chrome artwork + +DEPTH = ../../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +include $(topsrcdir)/config/rules.mk + +LINUX_BRANDING_FILES = \ + fennec_26x26.png \ + fennec_40x40.png \ + fennec_48x48.png \ + fennec_72x72.png \ + fennec_scalable.png \ + fennec_maemo_icon26.txt \ + $(NULL) + +export:: + $(NSINSTALL) -D $(DIST)/branding + cp $(addprefix $(srcdir)/, $(LINUX_BRANDING_FILES)) $(DIST)/branding/ + $(NSINSTALL) -D $(DIST)/install diff --git a/mobile/branding/unofficial/content/about.png b/mobile/branding/unofficial/content/about.png new file mode 100644 index 0000000000000000000000000000000000000000..3819f6337a171cf8ab8e5171bbab6f787b5f77ae GIT binary patch literal 16858 zcmafa^;;D08}+a(u=LUmOGtN@uyl7z3rL5AsMIbE@}avy=@O9cE+qscB&8c^q+Y)7 z`v<(&H8aorH1pg~+;h&k&qQf!D&b;LVgUevtD-Eg3jipf=X(nX`tx=_CZya6h0O0*%j-I`~-X7`8 z>y-;xwMay=n!7Fu1g0zd2|=8|%ubI9RgI)CSRm2qAy7~NQw`@wqQ=G|Vn}p2aiX#2 zF*fN7V?#biMvvaD`+au))qcJGK|O+ zwyskxCxY$-4+gBpY+i2w+FXDYOVIW-fXKPY@IwJilj%uN@)H0U zkzJ%b;2;51P8dcj0LHuk@f)>%F<_nx;8ihtqYQj)0=mbc*mVE|2jJC-3}XYpet^|5 zBjbA@Gy@=3JTsE~%TW#8VSgT}j5^5{CNTx1DTM1ShLI6BE$g@n83(bjHOM*>&fWVV zgMuF^h`)CJ9RTtZNS>oTe|SHRS3N#19NUOz$+h2w{>1S5^~U4YM1=<&0M@+&ryeM0Qt=m^)x!WYM22Mg?cpX*O=>hR$WK>psM(YeR}#zvtazGY!yYjbm6wO`iMdekW3 z(Z1KR+vvgNHc;~Z`f{!F4-=B#9H|7pS?m3NpAng3>7HhqpcPIZ5)PGR>hG0>%3|3fs6DONDuZQN!+(6GVYlL$fzt?f>o|lbdEjyP z8Z_g*^uYgT4ax0cZAW5)WriU{*7S>!D6gZ98Dk-28DTf{J<4FhPfW0pNMaoZwFDt$ zKHX@2n1M3Q*-KB5ScI8kYl6fuz#n`c-mb)#jI7gnIfK(6*HS7%8LC)_J!$LBml;Qz zpEc?Ejq+uTaKX-Gg#-R#oRr)UZ}%=ahCsgyFZW=dY^^9KW|GZVEkh+v#USNZ!%Eb) zs7srPT3;|BQlT4D80;$xv!<0%HdZ&*oL4S|Q8Nh=EMkgaqK4}9vM?l-s(oW_CAjS; zf6dPqVXVx__=_-(hzIHyDc3K;L>MK<&(abPQmOr-|C8{i;!ihS#y!rmEJ0;T#-x!& zTjx3qv1Cpd$8gwY&Su}Hz$Vou{h29N&TIJFFE@IBSanC8R4KNgTY_8YcIo^w2A?x^ zmrD!u354Qa$yOCK>elE)loAR0WQzR=AyrW;swzyGrgR{4xOS}B^=>6tPNCIIn>6}4 zwx_h4wu^elKXdJm1^;*K zZRrm*ZJ%D2mlcS~38)Gf)$5)ozmdk+NPl~i?X8Kq!&;Jd9vHnse8TpJjjC8sy@k)t z%(*-@E!DU}xk9Hx>7YZn`luwQxI>}Mid8x6=ZVtL|R1@}XnrA9VoFgZ_i-zmiKO9Aor)947SNIOF7! z143`zC24que*e{xGw*}T6%!3v`k5Uo>lx$5kJOp&}@Tg!*$Sg@G~xmAcJW z#U{s%?QUVO#7v5e4PKeoD^}%Hz4+Bu)mB1K(xRE9S&{q8zVGYb#*xOdCW^0H^XR{; z8(kX%tnFWu**6VT_Z=s7Bn7kv{P*w@12|^PGfs52V z9(&^n=)}ChMkCP}TfbwDUe>gdJ(+!rSIBwfrzo}HG43=e?kuXo<>8J^RqxBU=IbAS zUgl)gXZ0SH{;oL|K6X5gSjzh@n8%iDBH%UIH!QcNvo$4+otMJvyjmHkC8ve7Z`fhv zvEfNDs+#-SRODNJZGA!}btUDQw;{D5DYC-9Vq*DSq`PUjX-uonJ=Zd9RW69}$@b~v z(-csGc!6S%8ikZWnu6|bKKj#l#Y&6+w!5lZIFgCUZ;>I9i3_d@-s-8McNjj5ucE)+ zNgq!bcf-ex3cB* z8cB`z`}W&!-i=k-h1ER{xP5Bkp-sUUajuWAL^I*SYLqSB)qll0$Bt2FZ)fzT>qpe6 zSZYNs$B(1$^`pPzMY2!wo{k863D*-Fi^A26xM+;GJ1U*T>LlNO_>Hweg2oYUh+Zk# z9Noz7I;&N2WRzAN*unf!!x?GOGaB5}fZ}|BZGg2E7I3gMcVw<*%ww|JVEr#Vhf0bh zD!Q8ZH(44<&^+tX`z@*n_tCD5rQ~mA75y!?6K{UL+1p;>$~DDHEl=A{!*j!3Sp0^& zYWVHw@=D=1PudUG-)$j{axI^`B%9mqN=C+iNJ#5{(ZA6Dr!Rc`bGgBK?#6BEn98sH zO7L*@w`u$JgVadpZvzwqjoCM|c6Taw_1DtXQRRC#sdujCRhq7EkA_fxqCQ|S;x*2- z%*@jKe5tP+_lx5|32%t5^D*bdmkU=I*WkbG!9R>1@*g($t}$1yX>r9D-^KV0mh+;aS}qrvaZ^&VBO$oTR_$A`b9Prqh!#a=FVoPTt`9=N_- zC0!2mWO*1LYg_PTIj(BgYPYpGLBjpLanLU^rpGu!9NIOeQ z>T>ljdf4wips4vh*gHtuIr3hB&*H-H?x@Fi$(QEj^D4g9ravr*^~vG3_EK-Mey`|5;N_S0LBVKfp#Tbwsc>CFN76;-FAJYJukpK~j;4LXqSk55 zz4-n+e<_jKh8(|xO{vv$$yIx?P%k_!$-kR%reJq0$-n(X_>lkqRgLMINOm~m-gKDB z(hECp)7d`sy%>FNHZe>zge0#yH;J;Q#d60$b)v#zM@VWTiiH-M9S&$$9rnNT8WtUT z{|jCfV(^khsJn+qOA_{;%;@P=G>@nf(@%mJ`C_5S!met^f4$*WqO|J(vK*f;T%GQ|TUA75@@ zNes>tw4b{CwB?m*9^p7$BalV8Lta~Yn5G~YVJjG6Cx~vVUU6-0;Rh*%5F3OaMPLm( zF)I?I_9>t;DiAT-K)ukoukq6#JCOmEU3X;{-PNm?7nRc8VgfEO-XRq9Ktl8Izc;ZX z-y1N%x#|?qk zX4Kd4+9Y^%vshc017n$e=_J>TheY(4;6nJM*+~fNtF#eOUcq9d?g1grXu>R8t1edK zmHpfI4mgro3a}icsA#G^D(b;>fCSy)o<&y}pLuOhw>Ju^1SW!)b~5qpHu;dJfh6p7 z(-tHX#^B~3c%+q?c~Ha3zAvRPD@-T8RDTr3GI#WTcWM=HVYLb!c(r9o7bg}#{EUh- z+wKL(RLRUQ4Q$@++&QwsZWMym77L9RXchE~rJUkhOJkIkE8ka@>Jmp2XZEoFa2%Wz z$?QAu^Q-j>;<+%RmCRFuWt2!}eEjHQwG;R8qlG^e;ur+>0>R&xm|>v6Q+X_)H}gJ0 z;@7=fYTIPk1E(~;E0@~tmeM(hzEebZQW75cg@V~re~4w)ve*U{fMmrwy$#S$?ss8N zSy=Wdy}Px1`S|@j?#XR=eSIowpwJU0>prBjau0bm)PJ{U;FI z8q6rvn3rFX{<6D3ZbDL<6R!v$ukNetVLY`l7MrzV0iZmcR&Vc<<}3wH?(KFge*OC8 z>Bze)twr4bQPJ^hTbuiV!Q4vSA}`J>n?NJp+biJE2aruk4Xpir^W0Pkj@WqRC)j!IA zVgH15BBMTegb;$l?H0AR_~83(^2C}yi5u>+5?bC?2^s~Q;Jmm{)r1L> z(=4);-dyttgc*Tk34+%Hd0sU#)$~+bV*kJmWV+Im8+4`ohw3Sm6132=BmcC@6L1y% zLX9-gWAMT;?H_9ALS`Y>Krm=pkRFN>3O!uuc3M6HR(*3eH+R2vF8#DsL)W_V z7}3O0UaaY{QCEJB1%Oqs?j|~R8?~ItEN&*k76kU2ZO#AG74u4o)}RE#^XsF6l9hpw zw-DJEguFoXh&6wcbGHn6M7Jo!?)28q|K{bV9?uVlzu%HmQ)heiBCz+fNTs2tERS2= zJ(kh~Vq~t9Kh2{xosH2*NDT|QnO6hH{yTSXehd-OIB>XAHaD;Ao5W?yQDuCYTKAn) z77jrnB8Na)@h%U+(67jdn7$wFdY-?YvvMpbkORsgyHNSpL9p5{j4I?$b z59<;p&ATJ1V&nEQM}xw>1Q8W)Sn_$@_<{^d4Ibptk%MB&4X+@GHO67*%1V)B5ObK7 zE~FUKEprW6@f-L+F3umLZ^0I@y!l3sb>;7o!p`zitKVGEQ#Rjc#Al+6B|{lUZkwsd zr@K`%uc;Ixv-={)>E9~{=eNDlg;rnP0aYCoE4D5e)GxLwLEWitPT1`w2xe=_&^`45 zzaJGvs~7~KCX>+@`Y$eq=~`G=M0h|>W>|`1jXK;7ZeYNQhL%}QpZB96o&%N}Sy0xn z;Jfkx+wfsS`g`YDl8C><^2_VTd+ETl^P!dP>;s{00EnC*!{;;$9GkmsU+_Ks$~mk` zkgV%5=<#?cij&l9Rq6eK$WBsl$j%|gV3E49*j6yQU8bkG$Td3?7LGDCDWi_M#0&HR zC||utINSLX!(nRqCEN5<$ zOO~{tmX3}~E!(`qX?@&)<&I(d^Is8QkZdTSolK+<3?p9CE>Y|Lv4{_lNwe-VyC0KZ zNXmWh*$dZRuXkU%dS|`*D97{8`VM*T^ zvc?M=KI8svZFb-L=~Z*P;`{h`hHu&Sub}I;t&MKJ<4L;?3kMdB@?k15t7}wzvCCG~ z3`&e9rE0AkjerO$Q@6B(A_-xyuz68n5CjaG{^kQ84u--FDmZ#1Ru_MIbCLoTP0peK z5QPY>Z4iGeMQO!z+eK8%@!|*y_iIa6q2$b&V{z%hPpH}w(x+nw(F9(|e0-vb(e1Q3 z(4za3O-ijf5XB4u(KoH0MVT}Otxx>=p11m;>M-dcSr-Q%$J*sRPK*HbHyVHn<8A&V zlVkrfAmq*~jG-2ZSlFO4&_UOd%pio7u3_eyKJ8zP@t7Bk)NP8eh9yiTXxOct-$Auz z=q<>UIBDfLX+s>zm01MHX~`9Za}@lPBzhA(4)-fo?~1(0est}xAm#$yOce5o(71n9!*K2AVL3c7kfDfR zA{2~Z+Krj@rX$W-pN!WXWr2e8#h43fxns<9Wy^zb!h*31_n_XmW+HGb%EtQ}Hb^1B zRgxcY>km*zg-w6Coohc)8@S({M+Rs~x=s{Y_v7xIRzbn2$5H~P+bp9T;Ho}GyoM?C2OSd9< z-<4Qau)RGg5g@k}DLy-*)_#pN z)(*8KwF+iThxCwLZcG}Yh1rtIPj?&8gaV2(95pk{TojN0jlH=Yr)c|EaeLUkwzf8y z1Kc+)T_jNW23}rC?0nDhNqF7}HaLuOjO2$@V4ImO(EKQm@!SY`1Z=(&2?xdt$}=A? z&Vxj8y4}xF6J34ODZ!mr4K+Ej*UO%OIiP!W4n}AKSuE#U?m>6IbGLJC%Sa+5%E2Nj zBNXNlA6G(Y_|{^OeCXpJl z`L?eG10>jr9KH35PIhA5B0b!3f~>!@1+LnZFkxP`+a75=V{eq7^xFvse8hY)#TWTaJr; z_gFkQ#1FsFSl{J5E5EuEuSXkN?6_EiDf;}SH@d&c4SHNZo5i-r3I@3J01dLWv=`q^ z_{eCmi{*&X!27bw-&o?+>)rAl*ChHxU=L;m8f35%8~)26teaT z;*huEE$pB|dhS2CBD~8Qa>Ui=!Qo@zDd0MYQAda!Ln#Ky4H)c=z-EqBkz`-N+#Hbl=%>}g* zRwi$aI}Ekd5bXGu@H8ei=Ff9T`OIhpV1)6T&h97@Oeipp3HHds zhXTI|Ve&w&SV%}jD@NnViu9|4C(yTneuCIpiw zRN@d_;>rz)l*3s}MWI(B2vafvFO4j&zkqvG(`5H0+kL;CEXr?1ks%~-iZmsK+O1{N z(`Vk?{}g>AqNLUri}#<^>hXhBGAJ16G4uxEDON%XP|?5RqQB^W4G?u>4$)csu3P0* zU%q_OHb2zI1#KXEs;oCQY%G%60-jy6QkZ{}ib{-gBwV89=n^*sJBKR?}a8iT% z^<(0-ZLicxRrP@$4OuQxyo{HKUVfL9W#sNhv<8v+d(~&E8=;q zPR2WS(-)8)qTo^T8GnKpekMvnSSXD0Y{QF8c>Pg>aXx8>^g|EVCxizm$1AFdc+z*@{=3kuG2u-PHl;6Rh`!|R@%B>FKzc@q#lIQ#8xCVE3DLx!sJbBFJ9DS*6BTb}8+K3A&09f^F{?iviPoSPO$J4Y4HmhFR%4YL6Cg*+2eJB7;HiRnu` zMl4?g6IjJzUyHDoX07wuQY1Q{CxUY{E3*3U;c~7j_u%}FAW9JmL4!quSnYUmi871j zrUgqC&@zidGK!DbcSSu|sLJ~jUQ1d9B8 z9}LJa{W{R(kJa9zOm0U0M1A|fYk>lZees;|=m`(}p%8f!_7F;&wVA+g%g6~HHT_qh zzR&aZUU4Z;R;B<50+xkB(4jS-7;_^TssA$`<%wR4kuxyZ^!z|vC&sEk5~IUASnE2J z+o$vqBaw9nS5&F0d}w1GV|!k;bMG>i>7LZta`Mip6jkoVI>Of?$mH+lukt#(73rLB(?M*kT*eh*=p)7 zq9%}iJ9hTbyRl!juPDi}z2nF={mlX)M4`{Y$x&8L5A_)(VP=bN3~zZV#}>zH*cX&L zVNQbYeAAij@Spx=xHkTAP6Ch{QMBH(?{me`dA|O-Tzr#u+c{cPT47dkvrOcHo0QT3 zxP9$GGvE$pDS<+?6*P5r6qkZZ{cI1emJfJLTkdTD3;~Tzelgo=ll&&Sx`~KZdFtnh zj#T{ozh3C65wRArZeo+~)AbIYl9$R5K+xc9&om#9SCKU@!~-Vv$p&{)Mb__vcIC!B z;N7)Y)EwQ7P-T<7D2|WXJ;bg1mx^~v31gcH4l#_GktV6ilA-#(bmT(Tn{4m8?wPkM zMe!3Sj6fi1@<$hwm!#e^Y2jR(*z+wu7~bX)tkI?J>Q;;29hI5(VX9kYvqChCeT?K3 z)W~wDA}l!+@Y49I?N`wdb3Z&BmyZWW7G!{fXzO7{ZoYztWTI&7#LGXRXkSWtV>eS4 z3**0n4A>u1^2$*s>0aG!>Wz`|G>a4Cg^O;n{=LJ|{)B~&rGRsR2cyRP+)_pHqv}UI zQ(1Djq}RB54BmgTY@|JGA&!}%{%gG3T$vFbqApx0u0G8l%A)-&=nyhyq$mW37iNFz zz{(^1u+ZdPWTG=%TXlYKv60M4M+Se#A!i}n*oFp#LNPO0IVv|8f4C?2jXt(GgJvy8 zW({YKySy*D+uCIWj@M(pa}3yhAC3f*P4jYSonu$9BV7=9DC@p9E%eHzKt++^|!s_VH~C>X$c@ z2roR9HLG$gkJ!f!bMhsvXZq4DIQtH*bk-PdV7-{v=J^JEV);`?*He}4U1tM!Fss$= zD7JQ5Y5fhFsi213Gm^u(#P1Qr8B45Pz{1nt#*IHyKUofPxVb*Cl;FjK=(nM>)PLB2 zzkOTP7!_!r(l%+wu}eAU?3?=qYT1h>m=!lI{?`@@0f>r+I?Rg{|J#TNysSVwm*Bw- z1L^o$p!jZ)h_1^Qm9DMjhU~ul89|XFFezL`QpozsaX3mG3_^K+zx6Yj$GD>I7uy++ zu*!Ovt4fbT4KZ<{&~@?c=3d}Zz&7(oWO2$LNd{|kM(RIVv4tv&g(OTY=%7{{nh-0* z&`N>i*#6XQoqJ4=F2pm{f|&!B10393Wlfb#qwwDXuk(EYB|KVWv6CTWYEOI3gG|_N zguLF2iVCOH@$BhwRxgX(#?2XC)kDHs!J`Qmlmp-`Mz<^#UAVoY<9@T6Ko!@c zv*a99ToG;W!9YIdn#jBU2l8tknB6KnE^C0iPw`v(I=^_eeCH?ZzT9$Lmog^3KmG!! z=M2@=L~;mQauV0t54qu7T-Y4JQ*+5UJ0ZwSaN5`49rX8LaYSWbl+7s^ZpuaqPed z&(abS_`ZE>=%zb0Qa9wz>RU1QOQ2Ot(^hW$OqtE+A$q%H$IBW$LI=*8N0pIVve} zjE_Mmr6c+5SZ6Jg{AD<23++DKcdbIpyj_nxPgggCP48%cc%(sSQeB)Nf*R3|i`=Jb9akq?C~!YJUz4FzdsipO8+IUkP;<^y~z@4w^Dt=uGBuW~~fzG78( z|5WN)#b02NyBdMYqZC`q&Uu%XqZ{ZzV-;I91_V*%&rn15Cx>roWF)z#Cgc$^P>gbRYf8aAL}#$mcS0-Z>HDXe<2s|q2I2&ATqZuGqVQr-B zD`c=9%bTohE6D3$yxQK<|1tspanH|<075_mWep<{3$fO=)fN9ag45a-3r~FUEYrRI zSBdxBz=;*W!6@BsPKiG@^PSN@;$1$Ys?_0@+xk~;&r{C-(rLMejI6UOaHCStf0>be z-<~Iri}fN2UEq@N?Jg18{n1WMPYd>&g*y>wdU2Gx_$LR+SI^UeJz0uh&emrOVzq~a zk_Xp?=d06W!M)5Sb`MEeql0S`_;9Xp3yrlaTj;5I+Rp}$cPu_WAYR7B){&XZTXQ)h zJ~UOaoS;LksIR+GP|*-4(m_|dtr;|~*knA}zGZsen=2Rv-}V>5S;hOi2gh>mzI6M9 zZ@=eCU{@VAQo&Rq;lXQ5i_+^Ja|GXC+Q-_hdBx(JzvaI2!Qb%B!Z$ial~R#c<3yy& zga3Y|qwfOi5a&BGduAf_HG8yMBfq^yWE2lzXk)2XeT>Yi?jWS=y29cpn&(!fq@oRD zRe2$TltCzlJjWPAz&j2jjP`&lX!FY`--?t+V;LA&@1ox$f#>uan@~XTOw)FcDadc9 zLY~ek?J6BOf~L?wZZHoPLJgl|1WT^7N6Z`At?Cv{Fuj!$RF%8;;wm-PJ>Y1}S6GPo zO-gTgFl2#Fmh}~WkSNxIrEpD|qb$dE!bFVhh&>eNW>U&bZC2Ksp1ytk1f@S5Y5YIYu53hF& z^YrdMRnLLxmDLzh=5X81X#?%C zr{%ACV#cuZB6cX>pSb}@KQ(@q;59s!L12cR%s!Xr9I6VjOA46L&SCiIBG$*C1^o+Y}~?P-_`ZNSTi z$iYHo!G=CMcZ@KXFljc07M!dFyD{n+!Ga0};yRVmFlxaU_)g^c#prTe2%TrXop~+U zd=+N@tE=_5;gu6~xEqV4wJ(gw6Ez7XxXAM9ue^qQtWxXRz}bZ8!c`SdHu2n=F#)(F zrK$bH-7%`P>D}f-(BHDSz^Rj@zShJD!|w~n$d1HdI8-6@HRg}Qn|7K@%j zG7iV!%5rR0wuAHa4Ir-#RQSgiceXi}30YC2S-}tY3m} zK5s#so<#*paVkGiE7;4+-ta1)zw;B)k3G`2l}u4cEa+F~Fp8q#62*8bD#eLT*GQ4Z zLYr|0rp({;BT`J65^!aVZ~l~@1MUi(Lxzj%hwZ%}N{m~!MbUV2l;DhDFLWJ`ahqTP zBKc$)ApI3>u?4FFdA2s=+Y}yr{Qr7wLB%}H!+}QUv z5pBL2#$FeD@M0yNcHB@p)wk@+n`s{s|W3uFL}ky ztYLLXuyO#=>;I0{vSrw86DW_B-h81OFk57|R}|~&5mf(oBf#Spa5FdIQU*f&g~R2J z*yY~C*GBfx!5+7jiX;iUhy9G6<6%R&fz}(7yXpVPL;^OaYn7X81tFg&Q$UHTC?iP5 zc>loXWiu)2Dom*13JZqx@piL@utuGZ@H43>ws&FFosA>>CAF)p6N?61oCRLYC@ zp3bxESN+cx(pI+Z!hDmZMPg00&CU8X8DXbOAbbe(7DGHcwhRDsnQwO8={}u*>AU2) zQBvI0G)^Fo@~BNb^^Y`k;}R0e5YI%%WP-j!UF_J+k~$Vxrc%IpBc%FS}1xHhX-U^n$1#xDRo`Kr(zUBdr3+aZ(Io z3SkV?S}^j4(Gpy9CB7_q`Yc7hwD4-u`~&fKM=yKdoh%1f4dtSuHYOUGg2vZli5)~6 z9?+NS#`VzfA)2JnZZu#v0)Q(Q|HGI5*CyiEcsMU{tw+}a5-1i*a}I$Z53ym;sDe&A z@qJSXDAtfF+fZm0FMo$svCcZFXd6k2X=&QVo<5g;Bd>3WjL!mpZEt3%*RB&DlL*A} z+w8wenDN%g+N1$m*?M5i1&t!N5NLW*l~hhVX{aVQ5ZCnG;Y4hVkNfMGmZ%?#Z$(SkOo^5TQ1l7dLK(a`SBQu!j8FS zM86%vfNnZh6g$9<_!$S1A0NolCk0oN%4pDJ^EtF4jYN)m-267DoPTr6Ndpc!e^&f0_d z0-uJl-lGsbpXDE29%9z>FkB^YWdX!xAZJb6Gvzv_2ke`3teO*LkL}rhbE6LXe<3+N z#BQkInA%%<&DHW_Ymq`@Fwg_Z$djE28P+rM_`d&9%0BJ|w8^m7&qzL<=BB9ec63lg zg@YGMn$n`qBXxWc(4$e0Gr0>!P8h8@j9%TqMlZC(YKPiWjMm_t8qIb z?O~7WOx}H=%j^_VQODzC(-VeB_+nrsH;3WSI@%2d0A^Wy=U=a(SzJ!cA~wEbl<&D3 zYBS33T2B3usim?;k+b#@vnWS~$pD2u6E($~Z8jN5M}(Jv zb5$7Bw-877!F^*=(0Z#iyQwxeOSL9rwZUtDUHF>0 z2b!k$35vasg?XQTbwk$F-`pWb#G((@P+s|mw{4*7+_k4!Th9NIu)woc+B7PxB%F?~ zTBV6`q(^$(ukHdi`;2P(4bsdJu~%x4$!rt(SDm2 z^kY25@kYn&BzE}M*fTK*>t_dN_W|jLha=IS%W?L3K{ON9tD(pOCefXEyH1v@xo~an z7wAO*bwTmnM!WKR^Q;PWewx1%r*b#M;&`{<{@SzXnnWPsm<~EW;e8E+nYt= zGlnyjXUToJm`%tSG0=uv^i&YKD^^=~z9fH^S0#UNB6ni{cD7AA;0~@v zoJ!r*v!$&*42$N~bgqlgMQFXum~BX{Q{TGL6XGFiLCw-xAe377q;K`0rW#k)^R_V{ zV=5wrZ{ZY&@CIjt)k`$j=xFab=0a5`P*g z5iO+*DJ6xzBV&|3RAc~$>N%7nWo5#uv({ohYYzu!rieijJfP15K=x^SqJJf%8 zgSjN|;jpkGm-B#Dp)0y$-}@H~mixwpPt7Iqik!mJS~|&Vu*+ zq8%C)&sE^Z*g9IEL6b0v(mwINFUw4edbT9-2G0L&?#uZ}jEbV&7KC)+_!KmhYuG|+r=A4WndE1C*ta#Q%2{F=aYWeG^acF6k`dsWOUFRS`P zR+SV*o1>z+mw~r5RPJTSaLj)UPO|KRgZH1UZ! z$rVf}z8TCY&4_Yg!=9jgvn@0J8510geW&!Z`6O-PwUuaCoTb+X#|l1Kgt0j)98l1) zPRD6$!}!}l_dv$oW{W1})pth_7j8}w(Xe=*ibT8(7im21X-yM;J=W-IENYKl{b7{^ zqG%IuOEF-EUI;^UulzBe{ySNdJEZ1*SXW4qEkpQ0QK$ZZwJ3ufV4eAjJ|14#6XkY8 zG%_h++9>gVJBnkp9fJZAA&>celk6q#^m8d-^3*N}HZwwg`g=#j`nd9)nP-nIfG8k^ zM#}?G`PY2BdVL2q9pSC-Y0lUOh$cFa2htuC{!%T}Qq)6CFhJO435lC^Et?$Rpgbct z>)roHC$v{*xGu)u6CA7zizFnsd4ITvYy9+&TY|NRo-lLn@?KnHE}ZX{cYV(Zle%KJ z)R{2audu6($Ue~VT>l65IO(VSR0FI0y3YwN2@&5W1ih}|17rb6Z5A8q1B(yXX%^nJ zVA*`O4^Uay9qO|^rLSd&3;t&zE&e+@uQ!c^FCAjo$NzrOplJGxGEG+WYf}YP*ZT`L zL7^tuL^~+bYVVJi$I8zEh?31(_UCvF+0@EC3TlpLzQ?A6rPBlY3?WpCUrAPHe;H?iQ^vz%V()=Po;gLoBjU9gs!ycztWomjk z&R;5`F9N?{XV}{No6w*0CV!9@DObqhd7q#laozKjA1p-|%1q(#4#F_s{N$~hPzOLs zY|LlV5xGdmb_?&+ew48Y~Pd#mb7lCFDI~9#lF2e_=TMfL`I!F z!ItBB5x7(q5wG;2pZc{|B~d?GSAKCfh((dDMK=przD$?upvjO$adqWtKCDxNR^)}l zzYqXDYY82&wRo3L`7JH9xV12?;=x$rPYWVA)8rE95d9`b5sqGDjKpPfyoo?Oe8wl! zqa8CNVI`XM4H&VBonPC48Va2e`UW`EcJ&rGE8zH?^eLa9L?&vtzBbUA^7$gNAm-e9 z^F!jq_`}J>ug>P03cqG7aCsH7o=sO^b3QFw~h3k!W#BZLbt zxc~^|t71m6dGoirAQ+*0C=c|x`W;?uwKl2A>m)m;?=V1JTK4RoiR9jwPh@a#s>FX7 zdcf~`x8|XhrZ6;P^2Hoc^4A@fU-F)H<^M1v3}t>889q`DNx*m(fMd(+5Bhp6OY5{v-6P7$zAwqvR9Yof1FKf#$5g+6f^vAKg;BT>E~S!{{Bixczv$bbI4o*_7?85j$*t z4E&piPLH8)zrufQ4{pagy828x7?Ua_^i%zYMQ-K&!3Wdd$z64V#&f}-LLXcbGD7$4 z@FipSGOH0@oYV<2NB$JU^V{HF@{&*}^B5t1gj`RS+s)bljq8uiyw0bM2-c#8RvgC- zME3#+?99Sz`L-R+pcZ>836T+Lb&QoFtn`Qtt-yZ@E}1SmXh{ILZ9_4mO0~O z`OwckBxLI@?>?S(uV0MSxb5Hd9hjnDQHu%+r;ZY9uf#54dXa8SMSd91HjzTcGvqYq z@4Ea)=-o5=w#z3w>&93?KIf~dPgHgVnZcPDb*Q*B04My+TCBXccC#jSJ;U^iNb;_OMa~T5))O z3jlCKJ#IpQN@0gUbCG0A$+LqW?k-D<50=s`C;J>LZ6C$y!H@9L*U})9tG*~nTRq16 z)h^$;m6Q85>87n`f4KA3ocWGN*EW+Bo5AK9oejnxZsXaHL>awJnm=(YLh9}1W}k6K zo9otbb~k@IYpX|}?Y4<1F0%)}NyPC{pWfGh6D@HUNI9ie_xsHf+7Gw4t90wxArNp3 zpSF{`shbkbPn(cKXUm5Qji;LZne z+gs`9iFHO7zJ%_7Z`}~f)s+y zx&GX(-d@G}(cWwcI~|F|*P!qV4K=RTxJkXDd2wSiO56U!0!8a$u-%KFxk7{o82wK} zB(M9uh$edWmucIxC6kD6qc2JuiEWdA7u_8(TG1^&Rx|!HUw!=L?*6o7|MdKpamBLC z;`O4PT-uxQuI0PpWr=Rr5GQtm)_%{uqY#}oB6wBpyRy=|^}zPQXrO(*eA*R#e& zx}`KK^ZqeZ0d=bx`~TywOFL%PZDh{8Z*_j!4pzh`EsWpisQM)7`Gyth6&XJ);iAjj zLGJuLpDlOWv06<{g65ltL2wGapo{K4=hel(SBR?aSq=H63V$CZ`sqvGOK0K|mF83O zqwgjEE^=7iaq8Oliw}FF+zCC4$Mk=E60oo*@o=pcS}9waTeAgZeD2Qo#ldC!?ie`! zZZH6vE7Z~P5Pl&2C^R770Y}s#kBtKV?$*o|P!nkDjH8y~p&5n%Rd4l`AS*tftoZN5 z-v1fdJEY84MW!E2y~PD5`%&ooDqMZ0{`VR9-uLohyRoV9-urLeR?~q~!OqBP&0S8_ zX7Lz~vKtpY_8F8;IURjHG)6z3@A7L9p6j^Z=O|>w zIb5oj&ik=N;-}uEpuOz!ZSh5^;k%}vZBN@m-QS6{#>vHU%tBsO%U;@CZkM}>^k`6` zTiLF&Y|4*;Hd0x%0>v#tX1}kAj| zI}_RM&OHQg`f{ydT)FViRfmAr7r_qXUfZ0kxs#n?UPaTYGfv=rXTgwtXOsV1GsLyE W8+~_f-T>S@$KdJe=d#Wzp$Py9N-@;{ literal 0 HcmV?d00001 diff --git a/mobile/branding/unofficial/content/favicon32.png b/mobile/branding/unofficial/content/favicon32.png new file mode 100644 index 0000000000000000000000000000000000000000..3f04acd50d303235149c6a2822003ed94f8a51a7 GIT binary patch literal 1761 zcmV<71|Io|P))7|&*Vo=_uaTmvg|%oxXs`6h(z)lH=e+NEpZC0$ zl}aUi9VW-uWU^m8+4Yq+_~WbRzgZsNDltn?5tL6K-X;4gp*9hOtGJQb3Hu101*uqD zES6+48A=M4Dbm=7gtHWO|BV)3Js?AK3M<6TYK`{gREm>SN_K?CJ|XlFa#z4i8F^RvSEr#*=lYjm>4qUff%XK3@#D#G>j^AM?LHysuX zBY&B`zgZ@JYUe%oKHGKo4#z?)n)G{pbLV?M3X&(MXu-#2FR!E>KbBkv*FV0;Ei)U` zU|2b797e>#X^6atnK3{9^88U)6p29BcHQx^_k`*)q26fPc;L_@POU~~Du|Nol^2hl zC-O(icNI+}64_i%fW4vKesPc6~ZJWAv(Yf(c~ zNLb1Wh!LsG$Y5qXfRRrJz-4$e?%AvBayQ$KJoR{s@AGlhsDBcLf`oFJx_D_YP%H?4 zpiqxjJZ6~^KQ$FhS*>Q{r2!B8z6tEQdmB2puG9bHuP*%h^#BAu4?$5xe0dp6o`FnG zf}q`&Q#@o1wa~6#hYcN@@yww%>~QH!@0|VsIU$eQx*DjIN~F`v#n?h5YBFg0S7cE> z%-?5cL(aDK-!hslCe+kg5sk)C6eZZ!Sn%w=Iy`g2k9=5yLal^c$v{rT93@w3HiDVK zVYnaOho=v;qSL8?-#do8c5Q=NqsA5AB$g5>T)Oo6Jdu`FlUN}x+u6Br@P{M52^VRE z%?mlKZE;{Hd7VsfXt$ejxYL3^y*><3z;NZ*P8L$BllD6XwQ@Ay+ z;0-W4??q-YKp~yMllwcMx3)kgD%gCQgbJ6FLsZ592=CDO0L8vrZXpFT;1xG-KLX!Izw0bkRM3^cO zQ-MYlk&`4ygymEM94`qop{W6*UUiH}-@3MhmUVpXSeQgU5nW7dezp6bO%lHZXQLTX zI)DsGN#F(WnGCpO3}U{3f>@}K@!T9lNsjm5eGkw7?)O-TO!}R6%TXfjzR@dlJ?pQp zsp?fJ7TTH{Of{j=p^9#;)y7IO5DOwo(tkP^mMu$*!EA_#^IpUPvsj2PX7=vrn4{09 zZ}ezf&*K%#*460TC(rcPa~#Ju+M5wi10LTMSd3cas7#6!-j6PL5Q*_%DcSl5hH&!j zPjKIM=b))d{pZzLd^7LyMWbH*QddXAh0&>qU?j4&Z5wg&jrTDZi6cuH&1Ld<<7^+c z+_@75g9?2^V`ytOT&}a}Ph9U_Z>AAAWi@I2KmW+L3i=cx`m zFxcPAz5CW{;i6Q?DHUu{E|dL@ye)p&reAc&D>flXVy{-CJXOdGLqq-N9kzOxZhF*f z0Hch*_R0$vO9kPDLY_aJ<1_CN=?DL-F7x)RP&gXOXx(+Hw6999`VEow-AdDTv*yvN z*Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXW1 z6+0Cdy1Bjp00s?7L_t(Y$K{r9Ok7nO#-DR%?)>ErFw8&^1`rTztLz4X#0ICtQtAe< z)^^*{Xi;mT+3ZH6apR`jCAzMyA2!+DxOO*cS8TP|O10Z!Td1|5P?8p~Eg*lkLm8Nv zGB9(8xifd}+(&4H*?&4;80i1s74Pfs z`%cZ7?vvlC(SOnP4y$_cpWw0M4B`MluZw2`!5n88~$?$6~+* zS<`)C(W(|S?1{d85+8r)uxLDiH-?kci^0=POYz$poI{DUqsKXnc6)(3j)^~vYg z)VXr>O5$;0nQtblVw92!=0)x~eIzQyEUbE!s{GxIjzP&C#bu0M_sUd6{@Ha=%rUKY zL0a_FNP&SE({%Vsh(QA&XK3(+Q$$HfR0>DPV2X9u=8?bZrLe_68^};oGK@weHF?URe)4A(@Vl|scbx9@{&(9&Fj0MzbB~fSyDGF{RWCX<|LUIxj z28gDo5mH-8n~IENXQ9T8k4%`72?eZ?1;Y>$7IhvzrtT#G@X@<(+?U44r)@U9#g@(? zF2unwz^Xe7@xs6|I%Xv>W&<=<2cjc@2FUY4D6;_=OY-nQi5>gba2Oh%z=~WaSXPJ7 zB9DcTfH;%>lF3>2YdrwSnRgB?`!AhY4hJ`B8m0M#xg_T{2ma>qV{fes^K+v(_f-fM zvk57N0BQ>2=R=S~VN_YG@#fPHLR=QG`tDLpPkRycErO;r$ZT35VXz$A(bSM)9xDg7 zHQz5%F6Z^6O5&=bz&GbdVEzUi&J1{Ge0cRorN|SOz+V}IIxzuhY7(*%L#9E(?{?k; zBcb53oJbiQC@3z0-I+zjWQrz;?a;0#pSS`5q`T)V8rIhX06PBir&k2;*lx4ULGAfP zBrD4fgSrT)NuHiW<7A`aY6ax&|&409Ye*W;?WG z99l905C+6i37Bk{zC47fkpaY(7NB>y7FN3-{6Sq!#lndbC(zv73Me9f^( zpL%A8X3OiCoSBE;>p{>r150`a5=j}+a2S!mb?`wyqR|9IF$tVJDiKo4-cTKUh@1z8+_~d$6HlJ;uG^mxo8L-5=)p>=hXXYKqwj z)l|r`ij1z2{%})c zWANsh%*_|4PIZG2Lfa3$`&w8w41Romgu04L=%`Ob*STTDq6r8Q5l6Z%VAL0fGj|1! zoE;_skp#E4Y-?+3Yz(%w?YX7-Z*|mh_7A4s~^P|K1S*Y;V~C04T`K_N*+w zW3Q;{2F6A%hRW}%0x?(!mvtM-FDfEqUtUsUnqjJ@y7IU))6ot9Yu&ZCJn}Cc0l?w* zx6#tN3yT^h#}6IOW|D%vw7mS~rSXef^cFKzi*tCH=bw!$WX_eF!*AU5(DHwru01C| zy5*DXdEwdK-~4L#%;3;a?#=pxZ|(o@BmI-ETjRR(Sm*y|I642>r{C;*d(VHrCpG*X X<(k9cQX-E500000NkvXXu0mjf(W4)q literal 0 HcmV?d00001 diff --git a/mobile/branding/unofficial/content/fennec_40x40.png b/mobile/branding/unofficial/content/fennec_40x40.png new file mode 100644 index 0000000000000000000000000000000000000000..13532c21c13455285573a8fb062f7b9cd6cd172b GIT binary patch literal 2997 zcmV;m3rh5fP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXW1 z6+14bu~3=-01GuqL_t(o!|j-Ba1_^-$A7oG=b;&mMx!Sn3lIeH67Q!V1|b0!$Pr)` z5<790TC&;fZk3(aW~<_CYHN4xWK*flCb8ormDp^|f&m8z#tv^p1O|b4o3{i4Jx3ai z=An6XPj}z_pu|bau@}3Xt^L5is=sudKKFO~oO|y%7ar(=9_Y`fe|h=U`?7oMMB|4Z zLwuNzjvYV7;*T!|AkucG@IX_~`s3%@mPZUZN!2q}z^!!8pEjzgd_w-V>2nvK2l(1^ zkMW(a@BDCphjwq8l$0JVDhfNET)iaxUdBz$$Cx*J2<*AHJI$VF3(p-y_Tt5ZF zbD1!`kVvo2oz@uLU0rbd9ur;3;F3uNo1fgc@Y#I-_<_b_4LrQK>W}<39BH7lvyo3f z`A_e>d**vDy1w|tLR|nf@B4XwZnh^cC7pCdj0?h*^K3Gjcw_at^(lZOhYu4B>OB6$ zN=`K#D)`Bv_RX97vmdFPSt{q17hzjMWP26LN?h0i+V1J3(iV!IV%w&@GThWGK36}3 z>g7{w>sHq77h))I4Tld=RkIXEN)EiRBg^T|S}e@?mjYg`S}_gn?T%!r1~3pel6g7K zJUbSn*u`{TK-*#FyL)!L`irgWKK0ozSJ%`4Fc|C{wfL($PMvd)7&d=VnJg>G6+MQH zL=uWaz;q%Ml|IuVVVby82CG-j6USp=`O44siKgb3eQHMh6!@Dr_wJ&qW+^Yc@N)62 z$vb~AdU(#Va8FOb7AA@z>5p5srTIz)z|Ji%{boXu{jk5#kIUsD5)Pv|oYI$@D=xQ2 zBf*&bOPA^v-+kru_Tv%NsTJijtF96}E^>1mgku@XOFa|?TmancND~gHC{lFnmJY<- zyPS_jk$%4{m6mvVLFvCKS)TtY4P;h5ROJ4yiwrk!v`AIagywMIc53ocYuHo^Cr%dt zufMT>jX!mLr>00O+rsDbQZa1;v3OEC9Gd8jr0g%f*v#nxRf%_mquPU>c zHr&Im*AAiqZkHQpmJ4sT8>d^tNM*PkvKdi6dv^7b#b>q3%E}>^?t<-!Xk@+Dt;#H~ zTNIZRlb@GMXL}DVx9`%|KS0IwiEOF%vvg}asy_=f6{#uMnm{TFiU5Iv*%L-7@RMx3 zh!r0suw*u=gvl?K<}U6YHkM4u+)LF<7N33B zM*Zr`KkCfZgCk7aMo$~KvYgDAGnJCkV%qO^(0cP8RW)eLGIZ#!#pYgW8(u?D_VmL4txsOG_7Rt!)$+7ocbgk#LMq zPd~O$81$CKHvH8_|Dl72ShjrG?*aE8I7qh7E84DHIIRranT7J2nXyYP&f{p%?+E9&~YLvq=&>URU~+5JoESFdIF z_E*;jZ#8cd8C_~Fk8t?{3>!O;pa?SXXk|O4J@guV%Lss|Jilr)YC>XCf#12aAx_*$uDNwf+ge?6?47m0Hpy7Pj(ijCDDAt zP&5UZF)`vn6l{dzWH6mX`lgUKVkCouac-VH#l2gXu`>pV=m0_p)M4YIV<%3VTD!dF z-qB+XEct_C;(g1l9ox75d&h;QugUa)43vx(xy2=nshCS3zkn>C54*bwW3V5~0vmzL zm4lfX#5PS3Hma)N^cCTLXaR|Mj8L$hj+>V-QfVUL5W%hvnLD~7Icmb>i7S>aZEt8e zLRD4uA2BHJ1-Ebi0oJX5{2%ki&wB01`8y&M43Ze=XCT;xZe~dJwUP|?pr*#3{J#7*Xb&&|&21SrDOw!2|{XLz$d8kp6H%5#cJHBqk(xvVD4!;`? zKzlF1+DDcH;Pqy0>^3ZjgzTQ5}jE%1Aq|-WST_>fdNgF!4p_4Y!=(>TKv554?xp(mt z(XJabpT9&bk(7^qVnxF53w-V)Dfy+8-mgCWR4~@v;vHR_hs&W6$S)$xn?+$!4sN%= z%veZig9ITIR81w7vIzGN5(`I(#lx5;v~>2#U`i2x{kNb0QGNZYzyJOD%?JO30DJbl zi4Y>OxTa>!>6=0MAFu3}9=yuibsva>B;7MTMqE%$+yMob&s80wQBYM3U^hE!c#YCJ%H`!%BR4Bd7Pl?$tiD=X*s-tV}|{TkNR)(*``SVugbY#a_Zy{#9x z*7%x?M+PXLHlJi#M^Rn)@(Sq>c5|&^J0jhKFV|0?AcvAX@9E0Q`MrDh?!E7}Q~Mx2 z>RZ1#!ti3p^Ve^ut_4HEjfrr4v?mgskW;4T`17-*qPhgC3q{prB%TnL??#EF#a)NP z)93T$wfcR|=K&sl^wB?WEKT3^k#{iQIqAp&Yu2< zMvhu;+u}-LQGq#s?pzyS^Ur_GXEuI;k37VGN=7XvU0%Q|eaMop(AN#_!;O4+Qs-Y1htQ(%ltQzWl|f_I~GE&s{&-a4hiu>JsVr r@y0*g)B!kj_{f9XwFi2j{|o&OgmNT&uA_ID00000NkvXXu0mjf=w{`= literal 0 HcmV?d00001 diff --git a/mobile/branding/unofficial/content/fennec_48x48.png b/mobile/branding/unofficial/content/fennec_48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..6e01e7aec57e36b910270ff2cf3f634fdfb2e6dd GIT binary patch literal 3258 zcmV;r3`O&aP)7$k4|T5wXLJhC}16RoFdUyt5hL` z3LgKcF*bieY@de#Ztr>nc@`-{-x2CxWV~xSEHE zt9)D|aE-t<0$2GEuGB(JtDbZ#B_*p>bIC%xQPXa9*yl>N^mkO8;%d?s6vP3-Dl1!u^9O!;^yCjM2N?w7a5#g$Eq15GI;2D|q zM8x|k;9C-H^ETw`>RV>kJF#?j<$npY)T)JpNU-yBoO85(!U$&(=A&i^$lOkRLO?T7#iznt%!yM3vSmLdh1+hm#qEnT+yz zh=~M*L=1u`pmB0FeEtyhc1ufj>#XhM`wK`Efv?M?Gwwm}8N?znkg*wX@+O!^cZdXd z)2MG0M-Ci?Z*Z6|T<5NZUavzgmuKs&q1i)=wKLgNEos@1%ctyWU<_q)452e4@cG7& z&1Yb-0&y~epjD7T4#89wp>!63cozOh8iG!RvCN1-IELXtKbKTG7=^8|8jd*)Ew1aQ zY%c!$_ z-|9Z?d0{|l`S{t_V4c>8>9@5(8Hpez1G5)QgWja$24M37kEjz<<@0#=K|~Ip#K^G$ zjQYl5a9A+o``?1bsKZT~c-IeCPH)M{Is1`A#}OP4ajQ#AGNQy~E|CXBNes_he6NE? znJmklbaA!9nJEYb!WbvU)wPwFGJP`Stjslc`-1wGl9O@#A-EWp`U;3T(zrzjr`d!I zStOgvK%j?#k>CUb&f{#ytEf<3 z9wdue=R+;n0J*{mt;u2(oPa2ZPZ0Rk3_Np@Qaldy4{;(hW;G+7&cN=pW8q{ou(S!! z>7Hwyfwoh8@}Q+P*^wDE9Extbppfl)^Z6cEd1;G@7Ic+45sSrjXf+Bqb z_W)VSNhHcEoS5A@gI^B?!xTs%^!6OVjO(VMeXEC2#G>P)0YoBEOm1%EpMU{((y2lZQ}QaP>fy|3AI)JnsJ}4~A$C1W7Bdlu*>yI&xw{Xk zWD5CA2Kg+_bQ-zhlxZrtEW!gsAWP>oRl3Jw)Zm3jRzlAb0S#U87!F3@8yevWq@k%E zREu~@k5FtBt=;kB=C_Ytw3&N-!|%6~$l96CYZ|IiRZ{_1xszLn$;d_v#-a(bQUvbF z^)Qwg(S2|Tzj$uPS?jalo$$a!6r||>k=|a?yv)6@`PrZ0>+_mX(&Ela#| z2mE6g_MSpA8sgTc(Y37O;YH`;)qIiw0qrmt^*u7>;l3j$ar96h?iwC1k3PET8Tuuvbok%+e{%GSB z{4|`>#RzPEYrE&pn{KdE*_kg$8d#l`q<1UzM>1!vH(6jQtwvdG6QZFYbQ*={>m0A< zEbU7?cv*E%#mA6Ngb1X}Wy6eOt(pUKX%!|CMv|Jmpx?)9NH$GgNU<4bid%c{gX^EZ z7*6T4`tQ!IJKtG)^NjS2Pk$Ch z>3?k^-uTx}kDSv+rp=nQq`ID}uto!|PG6Wrf>qgc$V=%m!NId;Fh^RJ(=6?YWc?7Y ztOf97ZB^yO6_wfq$;iLwS|-bL57EbDPC_uF`{M%-{pxpDWKUdOaicq(>FZxe{mYU? zZD?qo36t3hXGJwkQk=9ME=Z$T{8(yKi=8JUcz$CiiiKW@rA4E|4Z+|-EF8q?zC##1 zbsTTLvjg29_ClxCHV*p-y;p2gUt+4*l2^0Kjnuf^d_yaK)Ug~j_0=4lk}GtvDz|jO z!UX~-5-7d`5ejXFSR}yPV!ahddi(I#mpbw8&X15HNoh6W##lVqaVfZ@OWyrM+(Qpu zvvO%WR@|`w1|mXvnLsPNOJrGuZ!{R0^Nz|{`4qIz$Q9dRBw|UDScFom9*$Bg_Ii#X zo=C!E(5*@P&=hMBwI& znMW<2v)_!21kr!8AEP5<7#a3c3&Jcf;Yi=<^`XdE=NI-~$Y^kEFDWs$fBV)p%%3}z z`lAZ!S!Usb_jjV_$Z@P%(nkG~t{4aBJ&2yvLsk8~?tQpt)e5Q|Q*mf-cVVa3wGTV? z^ioF3bj9L8gs=d z^W)*;UcC199*j_H?5e1O*Phe(JHYR)n>-V)s(PftLl`=`8wskkCA61dqeiRoPzP+k zTpX88K%>>T$@*(2KGT-4T~0@qQRCObK3g0v%1k*P%nUpyO-*1tIOH*y3|(aX2wn41 zYwo5^3wveg`BJ>@CQ!?1hDL|_)fb;wr*3)vag~j9GSNTKyR-dE|NjB1%q)j5Vkwl> z21AL3ika;3pWNBnF!RQ)FFk=G3D3x2|9V!$67d*zZQHuGe)f_uuC{Ua-QV3pbIlj} sADV0b=)Oka8i8vBt`Yb=<39on0FnHhOv@)XWdHyG07*qoM6N<$f(Ic#qW}N^ literal 0 HcmV?d00001 diff --git a/mobile/branding/unofficial/content/fennec_72x72.png b/mobile/branding/unofficial/content/fennec_72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..c7874013f6af9174fda8b201f513ea0baaba9e00 GIT binary patch literal 7223 zcmV-79LVE|P)vJt^p+6=hjiS8#ps9&>{&om5X3k{L1A{#Yi_S7uwhjCvzWYU;-`RrZSOxV z)CFw>De*z=7#Lpr&y3Ll!vJ{y8Y@-*xHc{b6orj1t48|GN`J6tri>nG8!>aXnweW6 z6b+l9DhfqSuifx~T2y&%db$;JtFthzECXgq;GZ?ob7`^W=59|6uKrl^8vWro_B8ik z{g(akb#y{(?}Xaf@=9;V+W!qk9gQ%E9zhf%0t^s@go_DD7gLkK40wsgYIZ2P%%~=4 z%r-NC=zo~T^ogPn(Et(*wvDToJ~C=V#eZ3?7MN44a5#JG4jpdY@Z*Pn|Bv+>wzbj8 zJ~}zb!4k#K1PaNS;oz84EoGG%^S=KxW$dJ@Vm2Et9F>FFm01LgW+Z1WJzLBoiVH0X z=O!0Z(AgEyxJ=g)&l@(G+x!Z8|@ z0EW3Z{m_}DFwe2jk#f#CGmGzCbmQD{HN$7yQ>^3cR!il!od^Cn_3Z0@DvF|8(r?VL zb;rJg^m`%4<1kswbEZ$MnX_*FYxlc5x_7+(=KIgyddEX+=(8@mGoPx6QI#1l z3cBN}+$82wh$|_DIWx~T&cF5P*zn;+a$LqYCl(NE(&rR*iHqhSy(SMPo!Dn$z#CthnaRdXbcjqvt~`5 z{Pv4ato8eY2>L^0u*?sW(TI|=BBT`Mk;8?9Yd+fahk2LW^gLatmktk2G4ls7oLJ<7 ztlEn!FTT<^BaAq^RmMK_Hn^RzWTazMei^!aA&ub#QbGq3L9-y&1UDIsfg}SoMR57!++oB>2!=?I zoSQ(RqjE$EQtTuJ#d+|xIZ%A&_`LG?8SiZR>%*6Y755H0y-$xO>_^%U@4k8BeT%;R zKvrqtxkOKNHMF9;!=WXDl1MV93AKS{s-vslO}_+~l(0FMbd`-CJlx!U@Zgcn(NOr3 zSd4t$WJF#;F7k;z?1+aV=<0MpBE$)M|#74i2X7|OAvW!M)c5mie#a~1glj-R+IrcX4h6DV_2~*9>4FUEiXT|APVn3Ix)gn z)4YGx!xc5dZ(;-ayPP<%=MWT`+}9v-cCskKvM^B*xF*&&9N9?cdFhWVIO!RdCjY_R z`x@4BN1+b}eE~EcXvB_n+tAa|4as6cNo6StN{irg^m0weD$JX-W&P`Qzj*krYbgj! zAAR}4HwvZ>7lgh(#QXbTl@!O)0|L}5)pLB52XTnVKmCitUK{fO~r z$s)jN7m%86Kt+WGSp_L57+V4%&4Rw(ez+Wc2oNJ(`n(CVnjo|Rseb}*S7s8PUxh}~EX`IZSncK@sQWM`^wRRl=Leha4 z&uZA4BF(HS%OqgR@V%cb+bh!vak^-XK#*f>AWGsaMvNXe3h6l+g9;U0plLQow ztS>FUbK@>_ZQ2VPY1Y_<^N^NmMf9i(9#0s#l|>jap@fL9ML~5?E~O@3aH9s2(?qV! z{@k{s5l7eWf#46ItLZ4ZI$ZoS8P#Q|x$#o6!+?OpgE{e*efQo!e=K8Pq~C+x1di87 ztQNGOLeYs#rq>4TVA^9Ok74&Y@$7{c(~WWcVV{!{*&`Vkr2#!hJDqifdD(NgkSbcV zVbU5PDsNuD9p%GHP(88|1{39#k+?=alL-qKOw2Dk=*7=HmB^?lK=!B#a#I@KXdu@T zcs89sEE@qjN6R{Okhszg&e)RyI+@_{cj!51OgW;#Fq&6xL{C>AESYHt_PSAa-gL@l z42Xtf`0=Hsm^EU|SfU2PeO|2lcr%}99&LF@6nXK($JeU`#h~!<8=6|T^WY;0!9;Q_ zCG%@`r>fxFx}$#8Wfz<^M+=XNCZ;?rYXWe3tWBLU8D_JQs2+fg@+NbdjSNf0 zgYzr##M&Ojqw!=uZ?7&v?pPy2EGmVgJo4~did{Fs!s9bx&Lmxg6g_a$Sm|Siq10x9 zkJvK$#!H~kbz%{AM6q~QHfB}ZStLd0kyh;9zMtGl;ozvMfd-)bj0v(VYGof43<|SF zkE*Y{xq3Oh=_Z@PNkX$fNG6Ns%bJ^2ZFu*&t&%~oMWec#vD_uDxf;uJ6f!_G2pB$s z*piu!Kp;eVl1a5hI=`_`8oV4NMq4AXNF){+jS_`Yk<%LnfrG>kAvr+m##CiEAw`BFM*7rB>{*~!=?4G@S>7Rk*N^ixE8Yx0Deg(bssU`??h zgWWh8=%EZYKsl0=1lQ5sgT1>BpmKOQzi30| zGSI9`bO;gyhh15_0SL!-3y!b(x{0;!4ku!PAj+rJ!bsUZ(?%9;W8_x%&Mm}Q)hV0_ zzFrU3lUp%B%#`$%4l6OAKy!nxTm`p?tT|SlpLDr{f{^7c#E#(AjABL zLM18EyxpO)Y?jeaPN^AHIeE#i?yX}59aS_qyC@I^4`> zP$Gk36oJM~u7NErmEYjY8#?g9#!jw920BL~ozU_Qoju~j|NjZn(MCyOPAlo&E~S$O-y3)|Ye))ITVh&^(`E@^P@gOxH0#sB()jYp2O zb$wD%S}+@WvD-tTy_=Y$$U9J4QG%NBqmV|-nwUL-YlDks;GiFVOK>Bp; z%wilo+K;t|`#4BO9UwNl!e`ZUqMmus|E~Q9Y4#MfY&0N)N+3BJq-)2}-_nf!iei|v zGVu*6U*^_ib9T$&2tIy)116t22~{J9CEYee8d<;l0NPqQwCF|GW-L|*@^)<5b#P@{ zdq*P~<{?{>;3PH3MCCxDZs9eNtk_2mubBF$Uo8HR-8`qVEb|0Qjw{+T=}~!ADaK8# zp`69W2a6Mv>h~N(Bpk-nv!-wsF|l6oYet_#8ddj=5Vz#Uq%0U>f} zE=G*mN}Sh-yb>oiUVYP5cwzeu5Il7FNK->o+p-arrPt_1n^p*` zT2iIZGox%neIsfojX~|yaXj%VCV%&Oyl_$~pI4j@iJ0`{^^2F{2nT8b~ZJ zN$QW7upx2Kgb-^ItqG=S@pz28ab8Iw{^z<$ddosP$|;FWv^LtB+p&AwK3FUkjI61G zg*2EeOL=k;r$UQZvk?5tpSA_lu|RYa?%qI-oBFb z#l|8>oJBNZPX8*NF?JCnUR!ejkG{HD zcQZDdf(DQ%40JFP(TwFLRKd4y*@lSMtGSS(iE^9(s(bAxm^OVh(Nj)_=tM&-LK!ui zWRuyH)V1EO9t6q0a45u?-%O&<>>GoXwNY{>ErvbJaH7oQ2n8% zh7Z?o`{ntwr~QmkkyW~7Bg)84L}X@WP}oeTsFjkOML%V&QI_Y>KL+N3y$u*oVhPfp z1@mgKV&g$kO8e^Lm#=doJ=_e zLo%2_11th}A=dPwAEnPce*g1D`MI;=WMGVF&RE3sAWnM41h14tb3{!w@<~kD$zfto zS9>=cBaUAY#D?rrq=>_(>l`QO}74y|z#X!aGknxUC|Z>gss=mH|{dx*Xf< z{-Eg&F^UC-Oe%eN2boUr#q2b;nIbRcK4Khpa|9VSDssL36xLnnZ1194&dv4bKx50= z#XtYU{ba-;vcp9arV5|2IPocf2D_Rb_ESezmrr{5?(e*6F&Xn?tTtoda7~CKEvJwh z?{;-lK4G8?dm@HamcvCUfQJ~>+v6e~s77udxL)VjQ?ImD7CCn!PkiKxkYB5C-=||2L7tXo(y36N1 z$KJE&6d|jmnsms7w5&YxXA9R8*5&iLoCtfJD9AA(;B~|2@$pQ1@)@;UG?@wenmYLe zj2Xs6Je@R&ZrWh}bh)9%(AL_HmG6Iyug$DQd07EBj)BhDP*F1#lD(K*ip^u314;R{ zCQY(7$$gHaJkN1E+R=aXFb@W||MYj?b~t)B5zShOJs~lveK;|Ik}QH&e-S85k@GJ- z@2rb%xZ?b07;~5&$ecwo%+?fSRQq_?c!iAiT)32SN&2SzJ_c&P+ePZwGb z?Lj{Q6ZE=xLdcRqNiuS8{`247ec+?@+utPvTL>Jls0WG9Tgv)efIg*1ifSg13hue( z>N}@R7=3p<#tJ`5;_}Pr{FLPSQalzxRm~*i7M60Lm>~OI4(wd_F2+w70W+}(i9(nT zqdkvG4;#4zV?m7T4pX3z*Fh5#8%QQ~gj}u=ibv0;u_Z04QhvlzH&1^rj_ljc!AhLN zq`=+XN+KQN;=g3sI}g@v+_{oYK0?5_KTmf~7@*@<1qdXnYUQG9=AV1zMRTV=&N#*j zMnN(!nCP1=ea`rM7N23usVjLLeVBIZ^a2{=f+u1>hYk)I{q41Yi zS3J0O^R887NHc*$Igh9uAJRW}>G_{N5@iUJQ4wJkhR$VgfAG57=XYOm-mE80lF`Oy zp4Cade#$reUX+d)hm_QGn%x-X8svr)aV!KHGbTcSCYtt~nWQsOj}xHJM~Y5UE*1@ zM0)E-sAsR%R#Ei+lD>GyB*|bj(_uj*;MNQiwbCPzn~2{-8v8(>#`Gd^0s?x8oAFMmgOD=&ego+vmc1<cyzO;XX$HOQOJD|Tdnv@fxwF3U`khpL&p&4dW=`=Sv-tqYhY=|mIaIWs2}9JSH^>uFQ5m!p ztR`zHS&1IkR2)bg1%26Dr6cI+Bv%SSNG&JonUGOfLGCXhDp;^|=_^=Ow~6285}9kq)(pqx7tF+LDq4&3GQnE527|U*py-FJ zgTe}2{w%AyaBlTedu@fArK7m?qq}}V(0!Q z9PMx*J2M?VpSL|8i@qWlq#izrUl5!x1&}tARD}qvHtjr2P~ASIcIpdZGPcj{=YpNM z=NP@`@kQYAMqo>^ASWkEzx=`ybhx}2H?kCS&X~YE0*a#Qb(9Ve>oyXznBD|JVJuy~ z1~H0Omt1rqY9~%YPggtTTm2lMa3qG8mVb;5I}S4SA#)~^UmRoSDwQbJW*U;$#36ox8u-`MtrhyC(_c=F{Zjq zXON=rXJP=c^(uikxSo3MZS2~6fTBqp3l@9>#TC`?_Bkl=G;weiJ@PEqIwntYJoG&A z>se8fItV?#_$9$PCA(Z1Kq7B)vBfsAOI1U+DX~}`Gw!_)w`naCp4+I%$j(9S_!=BJ zT+fTwKfU-4j&?h^+pyY>w@~x~Sf-5ou_u?JwZq9vmUCxML3!nH(z6`+`nqAWS+TNi zCkKgl9ta#t6`vJELo2zLN7NUvzdGB1*+>R4NORUsrRHsl9C*rVHIv??lZ%fI{1gguQ(-d1v3u_!UR26@OPAGla-443XoH#RGm{X(S!dMX&O2_w_^D^W z(Q$;=X%>r_#xrQ(%faWUDqKR8ZKR;#V*Q;{bz5I35BjVJ*AJ#Atk!~>R#RPG`|JN+ z^kzzmEr%zGbWE6aF>;EAp~uk)e}6Y`?pKYTj4kgkL%`Rs2{m6z6>$F5--WBU7kxb) zNJ~#gS#>QLE2HlJp5*|tJSY$dYV1^sOfj87GEy^h zU`a{ix;0|dSQHkO@xIdLRez;YLIB%G$&R*8XWI{MSx|E6d9$q~$UcGZEISPw$yJ=9 zZ$9(nPUMoX{Jpw29$tLQdaK!(E+@(hIy}xJ=xYzBQ0I_PS?%XUonZa+<4Zs2{T7kmCnd7DMxnae5QQ<7>3UwpEI` zf-1&IZ+*$_{wn*92HT^o+J5-pW1W9{YxT-4n>Ig7f}6+iOYF{1fb;yHpM2vx-@SVY zz1gPisukJB#W+utaLh6h`woY4s=+xeA}u60Lh!9_YVt7fgVkyB&{o9wm^Zk2%&lW*QaE?$2chb258Y4pE#R$|GV+`eBF}62a+a!1D zUF@`c9co~WX<&Pc4w!xzn3yx5oLe_-+Oy=DKR<5J*Xvoa(A;>i^VaVzevt-fq|bDd z3x(M^iT#D*;9Vhl$MJN4bILX71ik|_@Ffx``qu;4>aALS^L5ueXGyWoWRb3J?YevR z9Xk9DV;N=VVQ~-urwfR$#24xYRw$tDIORQOF~V4~aqE^Jb@zI9@7#arv3-Xc*D!X8 zgTN6^BTK$A4En6^ZRssnk)BfNw=|t4KK+pY6RbIHQS4-ON*!Pod7J9hzD>l1i+$5j z`A>tBWYEy#E22R|01W{&1kli92%sT=h5-6^KK@^T0RW$Dl$MaKrnCS6002ovPDHLk FV1ld%%{c%7 literal 0 HcmV?d00001 diff --git a/mobile/branding/unofficial/content/fennec_maemo_icon26.txt b/mobile/branding/unofficial/content/fennec_maemo_icon26.txt new file mode 100644 index 000000000000..8428b289f456 --- /dev/null +++ b/mobile/branding/unofficial/content/fennec_maemo_icon26.txt @@ -0,0 +1,74 @@ + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0 + d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADFxJREFUeNrsWWtwVOUZfs45 + e89es5v7bQMh3DGBtpJWIRQvaEWg0FFbOyX9oR3bjtDRTjuditjpj05narWt + o84oYB11nCLRVqtUIYQKImiWS7gFyIaETbLJ3u97ds/p+3274WLFUsQZmeGb + fHPO7jn7ned53+e9fCeCqqq4moeIq3xcI3CNwDUCV/kQrtRCTauedCslJatV + c8lCu1HTbnXZYauxI+0LIBZKYiSSCguZjEc6M/S6zjvU2XvsGe8VIZAa/2iN + VqvxaGzXdV0m8Ha5vm6dzWltn99cjmkVZtiNWlgtGpTatQiGZURjOX7v0ZEo + Pug5Dp+nF8LQaKcukln7eYjkIvvdwuHdr4Us1hK7qcQEm8PaSd+/TrOTCIU/ + 68czp95vT9yyeJ1ita65bpILK+ZUXnDdbtPCbtXwc/94FslUHqCiKaSTOH70 + FDo3b0NmcBQaWVh/vG/To5cKmA7Ls5nsskQ82ZJMpCAc6H51uySJ7UpegaQR + 4apwodTlYOAZmfVExPsp4FsSbfM25OvqW2bWO7F0duV/CbPUqoWDSLDzsUAW + sQR5QVHI5QmINEcGfNj45KtQZRmSoPUYJPMi8kb4IsBX0+HBeCzREhwLgsBD + FEWIktSlMZoMHrOlpN1WaoOcIUsRq0HvkN3msK222iyr6cd/LBIJT4DP1jm3 + i8jYlZAfM75ag6FomoAKF0SV1ipCyRbOh5MZhJmM8nmIiQSERAyCKKBxcjV8 + /hD0dktLdeus7eT7C0gUga/LpDPuQe8ZxCIxkLEZcPImmEd3iAR406hvFEcO + HIVvcJgvXOeuhV6vQy6XZ+usodlDi7Uz2VQtadmQy6fsamAMZXIMoTMj8PnG + kM1nYLECcTKCoFWQQQ7BVBahdBaBeBb+SBqCToWxzIhAOIbhQT+XVDoYha2x + Go45DS2u66dsLwJvodlDpxsIk/vAvkNgls+TAfKkFH5U+HkXt9eH72wKMdkq + 5OI8gTZbzahtqGExcYEr3+o+7XlhQGn5+NnXYJ3WiOm3tUEZiSAlA7MXTIPe + pOMGYPMCj6gTU+XzePdBRA6fxMixAYz6xmFwWDDj+9+CxqjDTZp41w9XTm/J + yTn7kUPHERwPcatLTDKixGUukQdESQzPW3yvg0eZLMuddHG1wpkpCAXCGCfG + 1bWVmDJ9MuSszDV3+4L6lpKTcfwhuBiW+gqIOtK4RQen2YQMWSSbykCgh4GR + 4AQEzuNsx6uoUGlWzpuCOK2fOXYazhmNcDQ3QGsx4t5ZFtw2ta6dwGPv7h4k + i1rnQy3YALnCCa3JYhScgCiITxD41Qw8c5FSPA70D3EiM2Y1I53OwO60Y+Fk + M7C0Cc/sC5GlRWhcNgh6LcKJNLMKJ8C+v8ALYMDZQeEEVDKUY/5MTHFXQUfk + 8wT4vlYrFrhNiJK8PtrjAemea52BtlN88qClNdmRGTQcim66oJDtevP5Hld5 + aYuJFnSVORGLxZEiUIHxIA/scspO2WwWTdMmcRd2nYziqV1+iFoNJJqiVuIP + FCVa8iyBcwqCUvDE4ff2QKIPjW1zoeZyBD6PB64vw8JJZg7s/a49XOPVNZWo + qClHqdMB5pExfwABMiYLZFrHs2DZfa1nPcAGMX6CIn0D9wBZykkkyiucmN06 + g18PBcMUSCH09hzBjOumoX2yFSeGo/j7wbFz4DXSWesLZ2UEeHuOIUYPd9aU + ITLgRS6ZhBwLo6Z1NpbOdJ0Fv49kM2mKG/WNtfx3zHgf79mPcQLPvMusz7MQ + KeZTW4mtr/ypn+TjVs6Tkt6gRzPFwcSi46MBRCJRTG5u5J9//rIHB4eiEDRM + PlIRvFgAz/8E+A6fQKD/NMknz1Opmpcp4I24fXk7Hu+Yz9dhub2EvM9GJBTF + Ic9hCuAwByxMBHGBhPeWu37aOIFZOp/Ad+5YPECHuxXSqUIPU/IqqOrhzGkf + zWE4qL8xECF2PUsWMxGI2XU2vLm7D6lkCvlMBvkszXQaueKUaSq5LMIDRCBL + 5zRVusdi1OCFR1ZCzxIBDV3xGA5G4Bsa4QmkoakeVIt4So9QbBSt3fHi5reP + XrSZe33D77eTyNqZzmsaqlFVUwFXuZNbiMnIRgvGogmyUgTuyfUwlhjRfXAI + v3hux1nrs+Cd8MBEFKTo/pHeXtK8zL2w+dmf4evzmnlcCMI5GIoqIC1LvHIH + /GMY9p5CMhri1qfRtazj4UXn49V8kgAB7TAY9T0y5eG+Iydx9FAf5V4JZUSi + uq6K0qcFBqOBNJvFqT4vps6aggWzanHL7Cr8Y9excyn0EwQysSiy8QivAw/d + fyfa5k4Ba1/S5CHWh6VzRiSyOqSyInRSGmaTCkO5DjqUo78viXQqHU6lMh2X + 1E6/8pffLBcFYQvRhr2igfRqRonNiWQsBK2koqbKClHJUJCFQK0IVe4aHi+P + PrsVU+rLMLWhCs3ualjoGhs9fT4MDY/hva07YDUb8NjD3+MByaTirKyFoq9G + lncaOejFFDKySnbIIzA6gtCwl7JhFOFAZMVdP/515yXvB17+82OrKZ1tYHrX + 6o0wWUthLydJ1TfBbHNQA5ZHzH8Kgyd60UQBzaq3qhQD31xBUtLx1VXKaCyQ + c3KSYiRGX+S41EJB6muMVbBXToLM0inNNHWqw94TCPrPkGwCSJPHCvlf7Ljn + J49s/DSc0sUIbH5ru+fOm26wU9mZL0gaWJ2VpHcr9UcyZ603WWAprUZZbROi + oSB0GoXn6xyv5iztSzx4WXVPxceQToQIpMxlw4xirZoDc2kVJhJGkpq8oN/H + a0g2TV5IsRlnilt774Prn74YTumz+u/OrTvfWXrzjQO5bGZ5ZHyEgPr591Zn + BcWFltcLjVYPq8OBVGSYg2cNoJyhTCPoCHCGYiVFlgzzFkUpTlaNzWXUotC9 + GcpyskyTMti47zR8pw4jHgkgHhpjAunoeOi3T38WRul/bSLe+NdOj5zTRqbN + mrWkup6qsEYDrU5fmESCVdl0yEvpMsHBs2YwR1qW0yztiWT9EK+sBfBkbVXl + xBWV2gTJyL/nWibLcw/Rx2ROQjCj++MDD/3qd1dkT1xdcaM7nenrX0j9y5JF + bWhongmT2QpnRTVMUpy0HS5Io1j8WGpUi50nI3h+YyeKhV6JpUWjww3B4EIs + HMTpvkMYPHUcb76zA90f9kKn1TYO+we9V2xTX2Kq2JJXs8uN1LjdfEMrftSx + HDX11Ryckit0sSq3dMHCBQIoEii+AhEKbYZYJMDbYr0VR3r78NeXOvHuzo+Q + IklpNeLGWDzYcSm4pEve/UPcQw9es3JpO1bcsQAGIkJ5mUArvEtkWYRvNBiZ + 847KWfkUtM/IFdthJGJJkliEUqsejlIr9nqOIZ5IwmTQrUimEuErSiCvZMPl + rjKhdbq73UobjxCVfNYdhkNxJBJZrn8N9UMF8IWN0UTg5ouZRy2es9+MjATR + f7IfoyNjGBn2UwvCLC/hSN/p9aHIWOcX9l7IaHBsLykxtn/71jbMnzuV+qMK + 6llm4YP3d6LnyHGsWtJG/ZKuGAfnPYie1ENV/b3ufbhn1QqqHVNxaG93YafX + tQ879vRSRsp0xeKBRV/omzmqlisSyZTnpTe6MXBmDAIVptpJzSirKMfenl48 + 9+q7iMYSlBpzxSnz4+HjXrz29h6MUGvsqqiC2WKBiVqSrf/ej7e7Pew+T4XL + uuILf7WYpUae9L6Iik9ngjbtIpWsvJzG3Ou/gVu/+TXSdQQfHzhWKGoEnh0F + Ct5/vruLWgsJq1bcijlfaaO2JEg9kBHD/iBJK9dZVmpedMLbH/5/8Vz2q8Vt + f3tqDbXUD1Kj57bYXZjdtoTiIoh4eIy2npXw7HyDKmqa31vbNBPlddOon/Gh + sq4JmXgAvXu38WD2B8Jho1bTuvK+X17WGzrN5RIwW0o2UsD+gGldkRPY370Z + NmcVgW2hSl2FsupJ8B47wO+tmzwTrqp6pMJDGDq6GwmqtCW0l2CjRqvxUAds + v1wcl01Ao9W4yfprJz7TlrBdTkeWUePXwj5bHC7KTDkezAw8J01NYDw45DGY + DF1k/Qhd81Jr7qZNC3tl6PlSvO4mUMtphkaH+tUXn1inbnn+cZWNdDLRP9C7 + s/1L//8Bqswshy9iKZTVBkOJhYqZ7PGf3NnaMPPGri89gSIJz8hg/3pWxBLx + GHZt27q2fvaSMK62cffd391Cc80X+h+aa//ovkbgGoFrBK4R+DzjPwIMAJH8 + nEzLJzdlAAAAAElFTkSuQmCC + diff --git a/mobile/branding/unofficial/content/fennec_scalable.png b/mobile/branding/unofficial/content/fennec_scalable.png new file mode 100644 index 0000000000000000000000000000000000000000..b940df9b1e90d2c077bf2111c5ed942a30ca06ff GIT binary patch literal 5937 zcmV-17tZL3P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOQ2 z4jC3$C;6KI02Z-HL_t(|+U=Tol%2(S=6_Y+_uYNzzP+z%wYs$-0TKd(7Ft3Afw7H= zV>1SC9DD58vE$54CNqh1W+plIEcVRAah&mt6Z;(7B*qilU@#J5lRzMZ5Su_-x3*UA z>%D#VZ>g&J<2D#(#tC2r&!Xp?I^Q4n+*|cNRqyjX?|Ta_;vz2MA}-=0F5)8oKZW>p zP5kV^$0M%i#f-6xutFtE3L~TluD*Js`G1ap=bnDjnk&1##frP_)al}~^HZ}|lw7gI zm#RU!f$Ioik|8m+v^{gaqqF{nM8Z1YgrY~H5jnSU(-!l8EdftF^+a-Zyt4C&!O1Va zFs0TEE(CRMJVmm(j^@@BjjJ-aQ+Y;*ip=MV6z8%ei#gUtJ$*%IWb%qNJ$o~a;(O6> za_^RF2ZDbv0`B_mU&Onb;-9dbCxPCa#;`QhyWuIMi7e$mb8blBxnJFFF8L}q3VG&E_eaQUOLU*-H&5UPSR;> zK6LAqrFB;>`${IA`udiEt(7+u^y7OUw}PP3S1lKAjE909nPlWDl$)@Pik+US{EPSA z_NlK5fc^U(%h<)ULv=Bk(b`~)BA!YRPuDY@t1vND8u4`a2jNuuzec06(M=mS|8I9; z_s<```8$scesg!euBVcSaQX5UHm~kPNP_?j27v$s%X^}PEil5u^*zpxdics9b%0%U zaVk}^Ba__o{d>?8(}aS6OTlcbU0$}eWk2ZSqgJ)NCrxHqODis&k^-xBWu1nG0)yhn+ z%Fysap{kge?QYLSr~FT%zPEETwQN6`WFuP^HZ5$@4t+!+Qw%J{rmLt5)(`w{1Du(viG* z$M&74-w^m?k0#3b>DwDK;os|OODqcsUrvrrP%U`~DY2!6WeKKpE)!mAu(PXYP3;8i zeaAs`B_d57tYzShJTevCVwn! zLt(b`k+1*d-mg7Yu+uu3fmnpguDy(8Qvzk#fF|TfloBWdosAAXZ85+gkOW$Bep)d; zQ^wIQQMZbnD-bRg373kzbl^D(E4opq#)#aonI*3r=g#fR4!5?oeQd|}t;hF0b}&>f zjPA%J&7UmmtXrRm+T!e)VRG|Xq_B`uV%Zj!5J<~n=zJD0vE;EO-Ca9u0LQl6Kt`U- zm-9=iZkegMERJo_)Y8bZ!Q6i(evyp0WDx|*Z3)TPOt zljNQq$63hX6w8$F-A7-R1n*)>Xa9&7EzD@XXi( z&%SsXO@I^<%UYCr1xO3f%$F6JO!&aYjT?;wxcZt+CY)%vKVQ~bDTPs*N~OxVGv|5s z;0sJm&eGn|!irUWEMylDDqvtkmsrthuYCCN=T{$0rfjKQB84o;?ljHYEG(zGKt6rtO{0@$ku)PV>r(ui#dz=s=@&Z78KsN)aecsZ_xi zF%t_%_5j$g=1(*leq>?RTBr*L^~!+O3Z*oj7jXRO5Mv{gtX{i_n5|YZLLj980Y=n>P`uuSm_>~+24M`s zKx} z4oI6L!$q3AR(|^fAN}l|Ne_<@)}5s+B7H9z95HYLqsADPS{2u@v0sR zMUQjEnCa(Je|>UVE>-~0aTmlCk&p-1}WM@}40>ulO+ zg)#=MG)ilPCFtsIW5wz|Vu=WD#ba_}nvvmg1cGa}tOMKO?nA?TY3~?;6GBLVwq@=0 zC@h4O7%9-gAcQ~~fi{|%T~A^BfM`nwsRD{)Q%I%BT(O#PYb&>}i1Ow4tU+Qpu>UZX zipz#8*HWKJqO{=LnGsGL9im#UVhM?5*+^N_0bxs~^9ottJKo;Warutxcg*~q)!@B< z`#0ZoXU_h1RJe--D3p5j&7crM(zl|QOV_W!aU`XM3P)caL|B3=uf7Z=H2>`G!~FPo z5p9961V&1PkRat^8oauIngSFLzCvX-hY=c~6-EU}ZHTvK*fww}-~Zee61HJ*9D3#j7IOJo&_dK4pZtaRDIpjshUn~D^RI7x|NH*r?=6QPdias$Gv|&U zjJi|x+Gw<*_BK!oV+=|KXsvN#5jI_WB~A57ip3)1<1^GZH_+A9Ot#{4>wkKPQwwS_ zXjv1!MIAuYa$f*OKy_@Ag_CD7T7lM}1Eex^_cZg+fB7uSniF6wwDGY7Xe~K>_!Z`6 zW@&0_AQ}xLErA~>iVG!XCT20lU|ANEB}JrV#rcko?)5u%Y@2&i{eYj}`{OUq48V6Whxbq{*`@1A{K{+X1VP@KZuKk zkrqOj+9?pAXH`0ed0_}YChAca5) ziM6PHLJD4AQfk0L)H7Q)%uE@iY#|bj z=K!LkHMi&@vEZE4q2iCFBf-f~B1_XGFeG;{96Pfc+;Vw8tg2D502l-4M% zh{dBUzod`LFI|c6drVKwGdVFyTW32#==;RMW6$U z6_;XF<5gU8L#Gi&arv?q9{m0vQCF9skk4b3qOKv0N0>rTN7-`_rb1n)Ow0+;fs5-^ zDHUAKoEqiKsk0PZi*W18d|Ow?z)d@MzWA02*uQ_j%uY{zdG_ope?VmxG(_r}i8r*7 zOlJ^I2;XyYiwi8wj?>$jq@|^S+(MD;Y?jN`ts$L`F_A0r<^T2o{oNThty{seo=#%n zRLv|2(1B)hF3Sr?PjTq*agH86$)En4J6Yb@M8$*Qv*+mOU4otNrliv7Kx0wH#>WdZ zrDB<}^XJITOi`E~#doWCA_S=p-L-W2KY7o4-}8;P-4ooqZ(l4sHFnSR>6dR1ZfVgO zYOq2?Q)!yJ`)Td%r>VJ}N~uJC>NK)4Np3caF#+$|cmnN1q8~+ z2(T5nZVuz-K^SZt5H<%6K10XSRkSUC7fOcl14UpIzFTJE)F~!LhR9BipsE!>U<-wB zIRw!TI(wIWzoDt=lUx6ee&U;Iiazr2BW>BK(fg;*9Jzu@5#JcXc8E|ijg%pLtw^Nm zS#jAFboQ=9NSGTw%E=d==8_eyG&MG(P&IK!;G|l?i6C_a?Q5hERP$2^9bid;77n&l zOw2A&@akB7`2ftdST*xB{5YoX& z^}50Z=?d@Jv!{1{dhEfOQ%C!CIg8R7846L~)In26FI~%4;%iMfo}#(AiBQN!RZHZ@ zULskJ6Q)BbZJ9hlS@cc4ZZCb+CmlciQ zP+BN98n;|iTPKWV8FIOKBJm{Y`bLb=1V-UR<2X8xUtXxy$kOSMvm} zi`JkP)61AzO<=|9k+Ei6*Tr>RylREQ+!T|;Cn(NM)$D}h;QAhAA4FX{9ZOd}Q{U9` z8#nCOKKW+il5eH8yz_?ZPiLCj-`mi)cKE5|qiErvgMfU#NDyeM#XNqwfFVF@aEr54 z<|haOMc^9(PvHjvf#*{#X7Q>ERLVts-^2HP0$<~MhQK#?o~AfIj#r$+*FFe^8EMQ3Y=sE)k=k8eu3ks$I$Us+LrVkZ)j+|^~UYjjlJ2J?6=xqzv22FryltEu74>K zjeqkWzjvRwY4bYP^fZH4L1Hl2G>aY*ks>O02IEyxT4S_8zixMpG5CJ)hK|Uq$6u+M zhnKoYe(VT|j!W@~Ff(?Nq2~`VeSQeM663ilyZ1kj4#oMxmYr@xeZy~EfBlY$w-V1= zCIBFriu`ozz?K*GJh*554_ux2rF@hM2z*5l z1o-~zhmYrZuRUv@`*^-j;05?fp#mQjC~zxSg%RrPEHA(E9RKzk-{rvb#|Y50wY9Ke z!-jG)p8Df!uDRwd|7&FNHu0Iye0s26#=0Ezu7F$d$>rv1JwzlLO?^B>XLCK7 zrWQ7ASU;6YrM~iZ<9ORA0N}Hq{mf`%Q*&hBf#a)Rh)2N$=-|~J!=ff=&{~7mxH`n(nHh2mC6+8-O~?tekexvagXe3WJbaQz z4jrRVt#HT3KjwFKcKpG+-+l8#Z#M?{s}Qhx^JbH2sQc=tKK1dZI=Z`g{@5_zy=O1R za)?A6TDrPfx@rycg%aQS(JsFIqeq!va0!Bdz|$ySp?poS_&hy2&$s@17k~bp|IX;d z3`~a5RK3Lj2{ukMrpBgOvS%58QqS-QAscrBdl{|0*&3N(2CG-MTH`*wl3U z7k}pqFZcF!GdW-8$lwU^SeU@~$+UNH&6cZiEX`~&;BW8WkMAo2-zV?`0^dh@0Sm<< zKlsVREL04s#uPW)bRC)24l1P_@mQ2+kDO#;c7a49%E#~g7?-VC^FUoX@y`baezki8 z78d|_-E~*~bD#U{6L1{xE6Xc2|n$l5z_X{6o{pKB1ih0f)d4`Z}aqQG6^Ch2;eDn_1U4H4IhK9_C zc3i)6?*FJ8A`jgEvro=tY{#LcXEkfD*?~41@5QmNw?YR&RO642Az`+UT%PB&$e6kJ20 ztO){%6?iO+4Pks2%XUblGYBV!?|FEErmcG!NQ*=&MQM7N^5hxfA&ADK*mjgqD8l+n zm(g4oCTxj)8#i9Kn`9UC1YEOan|}0xyFaE(?7CvPbZ4bp>3556TFsT5bVRYCI|9N& zAV@W|GM%488HlGdHES$wL@2_UGeu?#3MFi8J4!eb_F~cKNV2~1o@{ph;DucC1tkDr z`_2F8G;n(V{{7!kN+o>XZ*^Vws$#Kt=Mx8yT$`^7`|>NUB9&=id{ARhL=tI~^4R;( z&w2Uf%(m^RP$)DpFfdTO(CfY61iXqZTefH*zc>c>?|<@# z3#s%6PM$dary$zHp)f%ZpwZZl;QpWfn6dE*)7`sjPo|;%_af2IvCSK|{DWVbe8+E! z?%KU)LvCjLzB)&@oqpi}KG1jhH4IPY=v>nOtxRLxKOGntsJ>I{k?%AC@4jj0;rhnr zJI_zgm!BORGVTO`c~hWXz7~lTE3>#)!YB0 zOs3)ETes~fzSC>@wOy75czoYuDG&{|gfSP%hGRQQ6(PtiXhN(2$aFAxy|p@cwy^xn%Q*L%O) z+g@ho|2*$IGdsJtM}mNaFDy)UZ+B;Q=AF;`JfEk&f}$w!+2gav2YHz3AFDm(n0F{H zE{3kIu5s_@=jTITU*CJ~s{wZDk|nTt^JW>&?hTj9o%5uTb@UZ^3@w17})s^Xj(a}--OU5x0 zprWDzT3cK7@8sp>LVy2&{=Ogx#|3!8!9WZ|pN@x;@KOgfeL{*jBSTk(u`C?kW1qO$*>KhV9ge{joA z{K&6}CZ8gTAv}SQAaZH-e;H8bar0JDGy(oe29GGqGF}@3N0w95Qc8+*GG~8YEUP^m ziYw{KYqw}ag#=nP7(P@to<0EL+X%|m_&Mr7!AhoEW5htEL>nnaLFiXeo* z6hf0S%_GB0ZC%|FZgNkArK`{ALFmYaWyidubmiu^Im}3A! z(T_I(pDp~GAkoF*4l)r)zMr751FN(5xUdq~g~}*-6f1%!4Z)LHT6@LS=Be|(AE~W% z1=3J8$s9O#q{~wa(_vacIzBrB0|z=rVAvOhs1*-TjDXEfH;LZ-3v)Y4F3cT0<&f8XB-kf+@MMwXqj= zG;~61y9ZB4Lb)hHw8#mNX{}2eNq=yXv*w`J)AUeJ|GRG}ig`#81P`jbD6{Q9X5hp? z!zPr7&omf>51gDhL2-UDBUKOsq6j`5g0ObpX5CwXU-XQ)&zw|K{;e5x)$qMo$z1uc#-?!=OH{7uf0p-KZk4FmN7RK2W#luE5K+y^Occc?4E=5Mdj24zGWfbS0 zajx~`bM6e!KA|j1;E|C|<4v?7zqw#)0h~~l$<&dg!~@4@_`5PJD2YTBWJci)knOTS zM!Fe>Mk3%3Ncu5!Pn5dT2^CpzVrd4nb{D|&t9Qakz>lX#{wNtDX*g1%y*|xW|6o;G z$=k!jJAXeq*02*N_~`KHa6kkGrvEZ<6pg%?@U@8>Ac_s&L5o#Mec-pZ&YCl`etJo9 z{#2(Uwcc*AOj)yb+Yi5R)eoLPu@p(3{bk@D96orUq2;Z2)^1&Y>(76`1MlOQLV!Zi+}+a?5mD_as<-Z=0h2C$%m|>g zbbCov&g9SEDxbRK(okLw9~6{41ehrW4!C@FG1w7EOzMC}ppz>QpI>4UCoR=9p8w%L zW;{+ot`$bcqA)TVF&HB17Z`9km@4u!;N~wagw-1lz^b)-*k_^&rmz?W!6crZn>+v1 z3}@|M+B#l%5ES!(EQn(`!y`tA7LDPDCE<-~Tj4^3_#;Uh0!|8^q~pf#er3|NSDt@v zX-UD!**RG!%8`iKJwlFPKX^tw5HOoy{l=ZZzE4t=`Nv`)qG=_sd1rI?#pj*QPF#*k z5Qs!kj0a($cM$9;HptG)uAe`DcK!SXbG~!)jb9mUYwuZe&+i|9eA#2q9zqG|kwn2y z;!Y4aml8OdJ|q&Z0!WsuIK4BA^UnC3efr}67hEvkrC3Z{`jGlUz+67NNS8ixg36lc z5emx?49Vj_WHcl~NUFt&ZjhqRaMA_%qi7w%k`rs8ATtG?U9lb_L76xM1Cjz!2ucyN z*_wXCwgQp+WPLQ+6spt+0zD1(DX z71v38)=4p%nPCQ3rX?xh=o&m;2~}Dc#t8>{1Jx&>#V1Np1PeV&_>Ax2iS*(mT=vAP z5FYaY-6S;efQv20F~BA|q%rrwANCEbe;Gv60EnVrWZrNtiT;zYhtYL`6H8zQlPuc_ zI5&Rxnkhg0&edNpDauFAItrPsYc=1X7%1fRQxeeefS8H9e)YBCq6( z`yvZZJ2zTbfWkDY6J^>inpFf-OPmmhDr~+VP5LB)$cvIFT~4m@=u9IBh#-xUkVI5T zT%|E-gQ`nJ04Y&C7y`3Ie!Qpkd;1{Fm@sWfIv)_)$Ay3?|$u3 z0nGifD0)Q-t^5a)M;{Ye5m6A3)JenNbZ%Vp^wm@AYc5T9Ij3o+sei-`-Ccd)^Z2;b z5x5CYwim;aN(At-pto;QT&>A`mP=%95Z|C7z*!WD zM4+pq8+L8o3tcUpAfxC*z?h253YR?k$gf^(-uLRVKmFlnmxCmg<9;qlmQzq-nBJdB z%K(IgPj)!$MU#t4&R!XvKkwW~dI~5(Kk65h{Lu&-kD7c3)S@Ni!<+2Gn@B+N5tl{D0KKDO1d+t0krv*k zAC*X*Ng!$}ElT5uk`gzO-p6sAGP4?XZP^b)odevm6V&t6EJcd~uBw{ztKm!OO>O`D z0p7SyMFck(ETIXd595DCmSs{~Y3H1^sN#Wpe|$r2ZPhiXkIYPc64;R>w>7te$L--# z2QNxLk7TYzibty-ZrrhVH|~VI7Z60&cuqvAAfz`@+Bk7ACLP}L@2ysw4IJrdfI0+H zQd0CQ4TaFm_4(P!jNyrljgH08i-YORbVB8%a!8{%l)!Z>UId-^nk%lo<*rSecQxbR zBgh5(q9{a>6Di|4k#54LrP+&Xi%ZT~F4dKn%ju~I8XO}Nazpk^Kr%ypWdWRASBOj= zFPMH$&E^n}5kT~h(_w~+VmsG16Flg0$i(j(3WFD|IsN!_gGeGq!(hT^5jWyT3VScg z)UJtugg`s8uNmHbZ6jDy?O?$zFyw}mtPHTD%A0h_Vo1YD*!<6R(6eFtJ5BBXdlQn{ z4rH}%WG2x>PNbXY$QQ}aM|4RsPVnSL+-A0XIk;t zsGF%Xv(>`*PlhW4tTqd78IXyui%JV|d?W^@p@AV79vFd9BxXA{jX+stDU?^20{Ok^ z&XiY_EZ+F$lMB~w*uHGhSzq}RUVa}A>sUueXDB1XDaU+F+=?I)?MNxDDk?s6d8jO> zoIToQWcjVhs;QanlCPf z;srBctgR1rKKL922Hos94^pxf*en7bRB8t`BEKSeGO#Rv&;qN zX`dhfOO8WClDECP@11GR$}2TV8%B$wqqPg#n>!&BXH0f(7G!2;vJXvW6S(j-ZBPf$ z*VB)ryB}H_+n~R15bCB)W)h7tenBuVTzJyAy!~4~f8PU7-2SWod3c>HD#LEK+ehB; z*u<7?q|b};&v;5G&n=gcd@9I)M3U5a2g&nJeiy|o;WgU8gfl(p_v0);?T1ndXA3^_ z6e0TARGSFdnPx~!F+tY=N)ewFH%>+QHq_&COpPUROAzRK2SU)^6X3JdIM#S`Y@!S^ z<`hAH#|ZQ_^?@7=Bd1156p1oW2@x)x2uK-eHrV^u70~v^76zWEKft88&E;fjk*wm< zi|5e|K0O#3ysoQn^`FQvX=!co3S4;@q>tpd@ylcQE*VLRF)`5`A6QdJ*$1|4 z-?wR6UFDV9;K{nhqQJ<|D3drAlt{&8MUY#N6Gss9Q5@$N=0PwJWI)=ob{o{xSEFPq z;qevRP}P4YYs&5+pNZAdd;6YL!J3Q*#6&dKQodZYZc9%Sp>H_E{&YGl z;0vJjlxac`Ni66bCwdYdE|(cd8w3LJMpJ%{70L?IksKpH3Y?Hxkb%5s5V{YvBliz7 zjwFU-(kU%HmHmLHqu=mj3j5nxS%{!inA@WCf|J1CJ#v$xL`S;&-~Kz^t*A^PD48Ny zatcYG-J71jX~wk4H!v z?%>5;!s+ShaXX2|nMNqW1BdQ^_^EY>Vm4iwL{#`i2@nHQC>VmqL(Q;b!!GFW9nc3u zGcRpOc1a2?JaYlFN8&)3J!k4wzW%K%ul@3cr{HYPljW#Wjzlxd3eW#W z&aAp~vgcMqiYpz=w^&Tw6I^@@O8lN1D`L% zz!9PiEhbV|PNxZ`O-_Y^d@Ga|S)r~b6?Ft!W@vFm@M85%O0wbmld4i7J;MU&P79Qm zrNHbN=}=T)gD5+Ogd6@2N}TjU7v$BI;A9Fz$RCCPo^#M2!t)9tmQ-&?+$JC|N>_b!khU!5_t{>LQY)f>g`!r=pruxH19 z{GDh_^$ALx1*aKEMq-}$ndaIVc6+?*HtuXfIFW@Fb-7UU;5LCeQ+W~UzK)*$cS{QM z7Bhd5EE{|f@!`oJ4$cug>DHzWsGeNGRGp4^`T?^UswP$7;02+py@%x>r)N4CPa>m$ zd`yo&{L5!gJN1OSzWUAESGt@t>oQ9x-=2T^RQ9`LIQ1iA9uSe2v7m|tnN*4hQx?wz z--riX84mC?bfF3}v2eR&B8v^Bl4ybKtn3(X5d{5)k!a7!GIK{gnHo`^=A$J~3lm8r z)pcD~V&nTN!1q=CD4Kp0IKhOry{!;H;F}Rtq|OwQMz}@kZ^LiV@49MA7`axW5;K!Y zCD9NHRuhz6GT-d`^T-3EzUC`%P=^2dr(d6P-8C0Kgg<2As*B$hvXr;sr1p5cU=l^$ z)6P_qsQn?t7@uqaapI-QoLbVOskLhx{uUZTLV!Dug*et|PGW(OO7k9WY~NB+n7ddb zyt2W29YZONyu^7EN{D^C4lwdPskRbDwj<8ePC-kgysCtONl_EuNGgfkJ8Hi6D;M2a zKe=MT6<577wcyNIR*`^!vwyUy3zR^J>u(EJVTIGH&|(lFBhLjsw-+2)4shmYLg&Fw zh$>;U&@5m^oZ9Rrlps+K4nf;gsjKJ32;)&B96jSUJ_!!=8_DmyzyKy#P)!CScyq%{ zohcCxBCp3k?r(^DOETMdF*Y!L6x5IFb{A^%#rW;I^ZD85D6 zno3(+JB$l^7^^*G9{0(pDlMG-@4x+K4QVxrtOg^9WZksXPf}7X0Umxp3!|nSN^w9) z66s>o7(FKyB?{`zRBtH$yiYwd1!Lo#d1pzMq}kXcs1Zxl@x z+@}~N+x|CqLcoh$$IOX!{lY2W#KG4{q;8T4#-u94`$ibOmnS{J|O2Ikx)Umb2}6TtPwGAv$N z18Pi1OG1Til<=g!XgowUOu=}N8n)03fjCp%@EIM1-3uZ19vy>B`v{8Klg|0-g@W0% z3*YO-Pb1p!Ojzxqj&rD~t*aZ&x~+u;IVZvd`qCJ3(9o==t3mUTR_N;Jfmw5>GwV$M zj=+zh1^28rs}3?!R|{t3KuK{r-11T<<1(&E(yHoXaf+iHm0nZir|)xKUD# z^$ip2M6e;Dt|Vbk{Mzy9l0|C9|P> z#}OphIEfKd!7(qp_Pm*spnvy~*#5Xp{mSRSglb!k%Bm3oOd6wc3HO{=3}x9?<}lP< z6ZjL&N7~@f-oxysbJwyEBhNyjlfo#GVi%?vPXr`ISL*z;#+FV}Wy3f^0s309`DIS- zR1>HiX6#U7>stgOeXJ$`5EuxXp0Pz4ZK%37tl13Jb(K(!Dh^Z?D3J=pV}&DOHlS$? zWLoe=fwC+sJa|bN{CZU{vXtFz4i%C?d@e4s-C(7RJqrvo9knW1KUPQZH^<*$r*( zD2jNVjzDP%Y}T2$$YmhGXA4T8RI8awDjh4T$J`*s!62FR*oBaUNGF?ei36y_1+ENI zB_>_yWCT?#L~%T}E?WU+yOnvTHA%xrG*eru3d6CcEQ&Ix8SXs?0b~(lKd(-R9b5K5 zXM4Bmc~(8pntIYFhrraEQB4Ud025Uk2_>u)ZCzd6y@P9u@^co)RNAoth> zyZG$&_|VFcASW-&z?}p(c=vv;2yT6a1BtugdC8$5i-zn%3J6O$RTO5G02@%?yg(Lo zH700!9|VI{BE)4BD8ey>OXAcRx6%{?SJH#5>N7JUWSO}cN>7`kx;Ye@e&MshMpcoRq=`^=*-VL23fkaMzX<`{AL`(uvHYW!MlaQ8nX0g$3r zjKs3(fJvTBYq!Fr`YOoH&EfB>KpGqMFcUSuC{On{(LYp$aqoFW@Y7d&5J(ZyWlUXi z1D4BW4M^b#g2+Vfe3|9x=w&{l0Vtw@8^!UVL*JaVhT^9b>cU*_Yma4c{Eb4+E*Gsfyq4Pnu6Z5hr3=4QH4C#HK`+V)keBpkqp*}A*dKntP@^CqNyKm?JLR5 zdj;ZBZeg62#%2fuNK}(ds_UOkGN#6OCIr1Nt9-7^#Q|g=2Oxo&@Et9kOl1q|_%j~E zJS`eY<`Tz36d}_ISvf9nW~AfaR(zc~J|c+!yNBE`I^u>saSqkI2`ExQl! zNCHHrPoJi|Z%G82<53hwx9>gl=qV@8xS71r6wZ`1(RG+mp8;1sm!S1lLi|0TRbcuAw(gOJQ@@5EzP-oLX5>HaI z1Y})ZagM}dMIz4}G;#v&qc@oPLJU0bD=*yW7gF^g<>++mZh*3xwGa)4Shk?6v=BtI zr~-$3{yCrwyb-UPIA^)biX5mYIe^yhfY#SW02#m zsJKAo1zc4gIn)FxI4BOvAyQ(=^5r>pxbvKH_|fviAmeYE$VwwH>A(?VAW6uP5k(_l z5*&{cd9M@IJgN)ds2A+1DeRg-&GaOaYImd%@#E5lN!=)nb$3JW!A8i&8x5L;t4kqr zgGpfN}`zMDvM|>xXw9k-f2I(@!Ee;#-pU( zY+ijK>tq{bKA<$X1qh~+@?suKOB8|Xy`mf-0t*e4)9GLZ01*TfNhC7;=`nZy98{fF z-S482;ME5P;Ww`}v+xI(NSeeE4JN(1gK7qAW~|Yh8#iO$i&HcF2++3Y2=p9jXM>Yn zjFYCi6w-59t~*3=V(nS+CP)$)gzq_m+rWHH* zcq%c#j*N`L>Xq-Jq<9swwF&C8-mX_M`lvro*k!+uhG54iRQ;LdBv4 z5SNt3lJP|fZ-IQ}4L|>C@8HOK{H#+gQcTK+q)7OvoJe!f$#@d}*Vb%2aLuLXyi-(= za~c>-d!u7ZRtq^PdfeXD1#PXJkb>N)7B9RIC5?qjdz6@AlbV(SGf$WXGv`i&md17% zM5!cbz{Jrc3AJHG%!2jS4(BgiY&1{7)p zRdYjdZ+5IL7aweH@bY7buzm0T*Lntqnh{iE6uCKb=~CrrwQtANT845+$kcoMnO7eE z*^SqnW(;u{eMO0}0wz*@LD;!@H|#a-hpO5NsHv+4v&9te0mlC;Q9RQ&*gpiV2&hmf z%t)gf`PBYBhZxutgEd5+?Vo&ZG92!9L-PRgEKzktnuItYK~n2X(6yH)785PBap4a2 zI1(BSN+hUyb-6j;!V3B%B+_FL!i_uZ)c~o?lgvV6L6A|Ra1JChX?yncd{{ayPxUFq zekvS_!0QO0AX-W_bye)zSq_qJ^+8OM;B!BY*&!tK18VXacQA@Na16YC36r zl>o#$AvG_zYQ~etx~8s@`HIXI%eb;;O)7Mu9;f)5*Xv`Z@01yJP&K(C7H0#lxdz-J z_{t-jAP|;VO&lYKy7&g&I*Th&O7^!whb86J>i4}vBhXA7MGGUaYn2QhYBk3~&B5Yk zz62$6W`P;4+Z30JWgJ%Krov<2oTmdwG4xtl`_?8jKzwlWsdIV8Xo7D>n-qSe16$T_ zXA@83f}&2A4PJVKLs1XPsw!TyWX+-pw(dE&@+WsabdM;S4ht;xgS-I#+sigF)075;SuqB6CKy4ZSLF%`4o2a< z{fz2ye1oIVykUDh2UleMT0!#0w+6|6b)%rv; zo@&6R&Za(r8@Z+u*XG{iCSPNG%DX>MIf;LHZcLq)TCmfyh}@ z2sUR1+;P!#$jz|p^=F2#8x$1hgUx20kTmzBslMTztq|}9I3N^WKwuJ7=dQp*8cZ4s z3M+k%NgiIrEogK@b$Qc&8+Ywn+1}ZA1OY@HNW;|N^;r7=9Frt66vvrxR%O=Jl+AkJ z&hNj*0<(IqQG5*)@H!|xAgP^@q-N}aUKq)Vba8nhoO0Spj5zY(Y!tUJdnT)gthM2x zQI_Mq_?(6DYK=7!65;Cm-+;#MF&3=lVj2=8k`M!nFg~A1I7(WhcATbln<3=!s>k7_ zqKT472NanbYCyGc)-3q?CG+9?UzovCI%MS-TJjhy$KBiZvAiJy4>^8ma*+#!5&$(R zqZt4`pO0lxkdKZG9iyZIy&Q-KT0`N8_xx*bzDf{HdvU_`;8%jj0;2ZTmSdMh2A&{M z@!`QEZOsQ7TArC&TXj`zz~wjzqytDb`!#=x9^sDT0t$-fpjwSHz|goBy%a? zmmN4*q_U`*B(EqpE{sJ)`*+tZfXnZB75qrbNkq$r=js<8yXQ@-#hO9HQ5u&zt2L5RqseMo2&j!0^vp;t#n2McBS3&ShhrS?ndrvo zVFUgh0!GKy9S}w!F&OE!^|5PK)VLUZH!Z~qtNw8t)Yq1B&$Xf)D~4DZRzXpI62dRU zxdcXs+|buI0MrhK#%gqgOCixTK3#-)`f(c=7-_xcrn_!H^}iP-Q@_LE2+uqDhZp}T){Uqx~L=QJ<2 ztg0yrbyQTB@%WO=NndJO8iFYma<#CC5|=V)xK9cT5>j;tiEwh+M*VrIjTtyAhORQDUlb ziy)!qy>lXJ$qk8VdR;fY7P8f_LrkrSu;WlSTz%KSm?UCE+n8SjiB=iJ%8HIIiS?*G zSwZgZZWwB6HmI6ddIyb%Bh?0t8y{ibc}b;P(3ZulnAvzJ_XSKYrdz z>909CIq$18TW@#Q`&Va4Np@5F;aA?;_{)pVUGzJ3ZmOI|(NM}m4Z4{xvrZF47QLPp z7CVEt6jqi!bw(Yl;U_>D9gyVVCW&OVTERW)W`SE->qvaG}-gwG_NCc2Z)I*XL!IJ`kh)vJo(yR%)B?{@b2sl$B?A-F4g-|oO zi0$o1%ZySzT933r9};R>F~Ss!ZBPM&{JUk(-i_8;n@CCcyc8%-eZ3zr{l^{k)f9p- z%FB_*o_*!j`kIQ9YO6}FkYfZ~W%!1LS`;bXJFCcQrGWxN10(S6>haYZ#9m81xz zw`OFfGoMf_#KK1_AfE8!O+U^IpAn>l54eG;GC*Md1xU&1^b{p`oGws7K^~q|V~h8gR9SqPpVg zKi=`8-EJ?I)p!vP^ecK9cB~}ZV6|xtGkH51uI|+OZF0QLoi`f_P~`=KK~{!L@g#a3 z#%D@?BQow8^TXsR)lgAYYVcVpOttxNpGDt%1bnCxW8PbcrCgBfAk7AK<#~{vW`+8) zoTRajL#+eg354Ka+W>fdVU=g0`P|nFqaE$Bq7Y`%EAY7`bK%)XZ{g8;B?chcnh*2# zFqv8DY(khVW_BJyISu?#Cq!jYt$>Y5b&D7Vr`-p3b2LezrNG=Cq~1qRN^AK>lsiOf zt*|%`2Kt84U>Smzj-G8lyz9Z+@cjmgk)@>AgOt&jl=mIw5uwud4+R77cP~gZJ0%cB6C~fGr2Q;9yHHyz%-v zfb=ZrJGhrko@uoeu>EP$?1T(gI!o*m%qifPTo9J5`h?SB zj#RysZuPPPg;3POtlm(>q)$$2Kt|2SLP)AZ0en5&1K#0&HHvRiNi+|Qczl6@+wNQT zqn?4G%{ZaDNebblmuXV|Cyx&eM4GjRn+>H(!TC#1IrrL&&wiKyz{-rMRN7>Lg6bLI z%q~C^G&?RaTqC=p7WdII_voUB2Vk(LjRC5wrGZJC+S+QIsS5WW;S8c^KQ))2XDWo8 zec}wBZ>@W@`LhQl(&H;O!@OzbaMILry;&%b^@2B1G}$?L)OIxS;u`cE6j2T6vPun^ zQh$S}rNgjc+X49Z%C(SzAin*^D^$N3#3JtakB_OA15AyjBge~hxxk)Pfp)bsuKL9o zxTap|QQ6EbU!${DEyd!+5He0Y53|m+2|0>Z+F<)3mau1{jwyJ-cR%>#kM=Y)zk}qu z70+i3iL~@V?z>hp^r3(VG$*7&k$$=4hu2^B%>}ck-b5h|Nsg7o@Y%y(r=T>lSgeqd zTLcbQ4me$TkeZ$mOCB>MQHi`n1KJMnfe{>>ET_Ocwh5A>>mSnd2o-JCZu z3(W)%J^8|&Z*ShY3g2tSa~e)}I3na)_#lrDWSvdGv`LebZP|m&e_7@auPdmnD!oD{ z)q)|8M!DB+PU1%TyE*BkCQqs9kY7>-C6lH@W=?*bbB_kGqHY#c*3U*W)(ydt4wR?8 z*XeLW&ae)tJ>5F5KFa(25bq`-b$T%Xo^3$Q*S6 z2>XXwcUZmfPZSI}JgS3FP4+slw}E9MSWr@BmrP+BMfG)YmDplIwMP^+Y~%O1p=JMe z81C%^&*-2Y2a9ED3d|K?5@QKwg4*Kvt@Ya*6o2>q@5fNG*BGk_Aha&xnxer7EPkSxbri^iZQ?r%wPfjK3UndGdIxpo)Slocr& zV(OSX7e$7nkaq~Au-0QzjD_8dX%>bmQ<6d}Uw8vbD#~H@!t)^o`IF{HV%A+;WijZn zM*?JP!!BstyB*v^ecaE(!u6tF$)f!hPkZISqEr}OLuP`vHtzV_U;g>h6Zm-}es>Vh zDnviva3CkO+dojp{tx7AJUY<^3+nF-g@AO&4G$FLWG!N~@rI`5dO%i=#hGN;m{$}N z>lL*#puBDd`$d&okdSbr#g^g9 zhLqGaR^>?*7$%cetSB-|#EqaEYTpg647;JRx3P~vf;2*6ZL;U^n;@!^j=~ayEvS0( z5a@OUa{xk~!B}2yTwF^q>+2rEyDY_$; z-WVGmgzlyTj6-@x2lPq}QOgrj0Yqc5X49^}|Ml5dp5i1LdfBQ__~YlEdrll_|DcbR zFTM036YHeWUnPvvW0Y>!Pk!^4AKY;D1z(*vv;MnU{F6^UK~GoqjShhqXIICeT`VG< zTUv!gy9Np>YIN?Ik)6lBPd*|_RwFMgg+r+CrIyD-qTeP?2H#LK^8qVLLbhdM6>FFh z{k?cjDADXGY}S)hBcMkk$cfC54jhfIPItSnMq$cUaLM3VzH}8B#blfAR9n4a)FZS zdZ?Uo0;D-J&a`f9N{kb!Jgl9oOD$}iV#-}|=6{6H|Q0Vpox6h8a~4nOkMs5y`zf|7O=r)2bR z&%gF$@4!&kd5h=W;YhI;$_CY9M-yM;N9nkc)^O#O>O6_eTLP3ViTb4*5~6h4sKojN z1jqVR&LNEFLkf%s7JKbyX(Z{cBJLI-NraqCibiy`Vw65$NYRD37Iub-!35nf*c|!H zm&H5iCclY6{}>E(cR*T32FyS23QnXILq@2oiV0i+p9lF+H@F9SpsTZeVA-=Pe{-O* zZ5>MfcB*?ME9~NnE>fQV_rE{#RWbi7OPX^W2~ott80zoHYiqZ@akvGFmMkdw+59<^ zz?q#7xn;GGlIGBZp;-mRaWjyufLK_@E8dielDRl{@(y+2&G+#xAql3v5=W{HT|Brr zVt)j@BM4T`rzF-}F&dYX1_BrWB&ZV9kN^+HiVNg3eU0F-Wa`8?*+irN98MRcI$XND zLy2n#sIcU{F$56hRr$t-m?6?Q5P`yy+O`9Y4{a6&QyT#YP4^HBWqgSI=VJ$vVYbpJ z2FToO?%4c7?+e{O-F>Ld{FRFr;jHRa(_@vm8}G_5LU3h378364f>I>9PSCo+X++tW z_NvHH2)oPxLlCf^JOE|ARf9D1F<}O6_9cp)RzVRXRNCg~yk_4J{qr-av5VZozEs z!Oz^R&=khy`RTu>O}#O&##nFP;uF>nquMVMZX0 zqBSz2bU|M`&StdUvhqui8_fobErs%Qnb~im5SW?YjNsrwoT)**$yVZeZ4l>!g1GiL z#!>fshE*R{Vs5N4ao^yt(YuRqwyWr!$W)_Yun9z4CWw|)_6F;6rk0E|^{0NfyY&e4 z;?~pAh+Hb9`+m5i(ZrtL+^`2$tlq{lKCKpID^AKjwb(FRUS6t9RBn_Aq)#k}*o9D3 zQK1(9^7D!uSrQCN@X+61fytGHaNT8RLRMxvlS*V2mDSHdo>Yhc%GEO$$($vNhMIrM zBIWPUswBuYyv-noJccH&vH?8GI4dn_`h%|8; zy%U_pvr$#1=`Id|^$Qw>#ywl0{qR2KTx6gTwV<@9oAM1UU9jSf&2YG-TkjUD$l+I! zA`GdHL@80y8I#Nsf%KtqC)|Of8B{1oo7R1~F^R#cWkO>Kp0&I|F*MOhhV+9nQU!n*L|gMo=@jY&b3 z5Q;E1(*lSu6wu0>Z4MCAE7-~kikh24fmQFwAS2Gif7)7FVZ-+Q@aDT)pu4*#1|Zfa zSO$|AeKZ^iK7<3&g70~hV?@V?1)}#=i~o^;h>}ZX*^y?=pB|P1@1Sln#Z}BwctAC? z2}}!4s7G~Iq$k1C3P&}QD_HzTid*n_;ssFR8kg!KD2em&*bRkoe8XsM#kKk4YFtm# z;A@PSAtc*j-;SLy(%;L|UQkVux>~(%C+s}X%lkABEJzoNgWsf3? zeVNXT@PES+Gd_j}`afO}8KhBuimmwWNYs6ez}tYu6*p=Xuw=cI78StVw|))g&6~;k zMryG*J&>yxMkaPEiC1mLZnxvWqW~NYO2P!oI2e0E8=ES`fk}vO0Z721Yozt$mOZ%w zUR|>d+_Va%VA3l!#DqTFG>NQc`Gr8p|0~60YQ|4IPG^Sv-@bpx2Z+c_ktLKy1=GXP zz`G#ICQWi^;GpNJbrtZ9uUr6UpK&rPh@@JsC~J}chBOM^r6k!3+KH99N}@V5q+sYP z^Gr0WlSb_mq)@_ZV>2zSzcwe#q8|I=&E8G0{KdE6uTQ=N`x{z$&74V8`wgivMCON* zJaW{3og@gG6+!GPE-DUx*sAJS9$GEF3L-mvTo3wrL`6Q_GUNBoQt~d|Q zJ##)>e&JHc%Swmlj$ZJ1{a~|Lpr|05H6lo*#!qSkO-Ysw7TEYK!KA7!!5Q~{Z$L6N z7T>)-CY3~E{*TrIPi^ZW3R*5S@7ziyQa!zc@aPjO;I%h5LuYrtt_CS(1-a0&a5(r7 zN+F7md5VgP<^Q%SJH9}~Q}WUv5-GFTvR+pNxr9c4YF#CCcJ)F3;3$;j=fM0qbufEs z6(iY3l|zG0sj^vFnXEP~-I=BWh&Py$<%CAKK$jOAFqC6-r%!O^c4nc4K2)iCpl>5U0 z&ozq0ycf|pfKn*(aR4X@h*IF=eBe3IlAT#LbM|?XB0o;+)RHQjKdTOwoH7$i3Ubu= zQKEw|W<=4=N_S?m*UpSo$jo%8oo8iTJu321thBhL>L*rbMq@20sWx<~CDl7J;$>w` zlOTnTS-q=)ScXD-@xTqbew_&#zhENin zxnL%|y=iCP(9qzYkPLRxnk%U(snL%UIL94`R3OQUVDjN4?rLZ{bgdw!yl%EyOf*g; z*0T{z=Px-4PC22DRW&FHt?KA@XXfOA#byITcRyB_PF=$kGpaf<3Ltr7`QQElrhiYN&!4v@eOQDF$Y0S^?Hl(Fnf?GXz2VX&_=-qWom+9PiY zgu<|T{chN>{U8GmcX`Nc@o_;8-ige+1ts}iynNRl_>&S(K)4W9C* zDS_fHwQ_YF7$iPiI{r%ZD;PrR5fXC}WBJ2i--3kk4)w7i)9T}Nw(|7>}dplVU zxV~7OTAA^e|6K*^w;f>KX_ML_kanS5CbLO;EEEbY#}B$mjXBaB(($6kw1;?n2_p8N z!V=5P=0QaX{8f&IAD|9ox^qsXMwL;x=i%iLLTkrrF|(>t@~wn|en@qsLt0uoq|)Ya zu*L}CPyia6njix|qh-zm5r9Aa{Z+1+Q~@NbiSx3dj9E_Dv~nlCn+PK6@5|qWy+^vB zAin^zU0L8vONEY}J|=N&b~`&C?VPA8gH{Hhg@P$J++sDuzgKOB_1h1q#RlrC0Bm`L z2!dSM6bc2N!h^Nr0J!ZoJDKxJGXK|SAR2E)6OfP}nR^u}uq+x0{ee)K!CSig$DXQc}{u&bCxWYG=%u4Z*QNc={htvyQ82X=#w1odsk52t4=7 zT9)^tTWVU7rB>RMuxb6MwRKFEzx+0A-gO9^nHi8lb@iz!U`29YKr1H|<$((UYg5m| zmYNEl(S8md1U;QMk>?jyZDbQe0}m_gj6~1~P&NmA-aAk{HRA`Qw?c{F`M9^^SDnR> zL}UP2u-GjVkodbdn#~rzU@m^Vbx$LF4{wMd32ePHO0A%Jth~}nHC(}!C@6q2RAB^c zTEd)CJLa7*6)LMsp|o-mN=jZJ*xT8}YWm63uH_1C-`mJlo7Qgtk4psxR*SNU0Hl~q zP58w@{2+MIg%=$c=KLpv6U76G%2GWzKf5F;@F=h{Eae9lYKD#g@dtyvag#{3^deJ1 zL%nTKQdOrfUQ=E(1Hxl=xbf>>f}h{>2)J#dyrYN|VJ%|*^u)hlX8lk2iq1!KII0Vs z(OMYWb{#-z<_Fuz2y-aX{$8J#d6>U+>3LwWXCR2G^qQW*o_3T#W<733>dr^)fYksi zSC;7dhijsqtl_<>5f>Y*9 zgQn&VsG$`gjUMbIAkwTd#gYcOsKPEj>r{Aq^DgM=>tTFt&h$F?{XIW|;^IOuIckvS z@LZvwZwz``8;}o~W2vrc^G*7kH7mz6vY6z@gTdh65kPHtz#&%hLn2rCXiI)R1t4Ok zmW0%0Or$cfXz1Uf5b2jf(R;7D@WLX|WafP!Rj;*zCR4+XwJ`VeFX)3kdHQ^4Jh&ac z{*AA|*RH(;-dVdDylx*TNZ5ONhhgc3Uxq{5R)GbNr6epb6!R@AJYyC=TYAxzkXJSZ z*1f(QzI^GqY`M(hk^;ypDqvk*Bc^P~&o9zj%k0^-%Fui?78Y4@>TLMuzu!U$1s)J0 z_XL8{o18?8qqJDz*RH!xd34#biOUbnhoX_79CfNkJZ* zf8HWfRb}x--@5g;Z{hET1VxaFONy05@Fa`39XAvFV@uS3zdDV#^fSNqCEXL~U4L{C~ zMcn10ul)qfR_l8nXQ-zQ0kj!B?g70fE-_Zt)Z97p$H$+0;q>`)tfw!SQ*XCe>|1vo z_}(x7@V9mNc?1%c%uL47KJLfIo~Zx+LBvx=(2B966_$x&A@|4Mx%!J={QTnE^n`rl zO-}%m*=%Ly*&0dB$SH*Ky18+`@!Imo!9UW&^Oy~b!)S3fS6(rkap5&_`*bz!fuZge zeR00gf$q4)YLlgWfEsh_9~|-i=D{a_zj521wQPYFlQ@9yk7*z}9!a$E@xInOJD$K# zB%7XZxbD*W%fGPXmUz=#>-D25poBCJ??}I@mSm`#yJXzKa|Ww=Le#-PM6zlHnc z7L||Nr=VgAbR5~i*L_7G(NbH2A?+h>87%z;=UqjGxsH2(cEfE?FMsX+KmTLJv-o|J z_Qk5Is^c0!pHN~Q!^!=>x^ec|i%$NBmcJA48#MMIQpPVYiYhNNw-lvs>bT!1s;GvB zoo_P^qxT@vlG<>~E3O!~j|nZhqROez*Lolp6EiHAF2pT?6}NZ@``d1}nQ%hfQd3!) zdGr4~{980debnqk;hsg%d&%8K)*73SwuF`tYY153}!PkQ{q;!^O8`M~9J@^xL+YEqWN9hD%b zpg8G%uG|tB={cfiAc{JeBH@VKKRnvr+dJ4A2t_<*lR!&ZD1z41SW!g!Zf#Zhv~$lo z<(f&Ar4<){^Y$;{Cn2BDCw)@x%O_2p(ani2zWCd}LBWtlZa;RrOeRTdSlu@?Dn9i1 z@(n-*0E$A%MQKF^xrN{P+7}nkn=|d~lA`=-@^Vk~NYBb;jnDN~NvZ^+#pX!rBzq92 zr201sWeg3E^>5j^@9lM4_Uv5#;%YMYe8AUJr7a44g=Z}})1)kBP> zCW$@*0MWQcD7TpIYplI7TZ1OnvRq+-C<<|z5CYcjfuXkB|L2i?C{q4$?G>Ltt5Ds%TO{R8}>4!t?SBwnIZ>+qS@86z72WNa{^E;7n4geF6n)Y&HmK%YcOq^QHg~-=2G=|B2^bS@Yt*p1c113oiO{;uw@y*Fw|YjVfqkMU?(P@}&zJ_iye0 z#V>yG*wZhpT7!S~B5;QBJiH7%C^ZFbwPm$qSxQO@O0_@|P0eAImX@Yamcj9EnZ->! z_=G+LVSJ%r+#TVcDXf)^C`6Ei2SmX%j4G!axyzA@F1`HzTW`DVMxSTQZ9Hy7l9Hx9 z6qJs)%vS#E@on{UPQBro6|0xyaSw>1sTH65@VCYg4Ah4Sr6%$q-cBcZQKR8JAqF_* z6C{W}xgdIGBQ~|t?`BLbo}=I`(Imf_Bq%1{r(>9yMaJR2M#OYmiQVaR%^UN z_TfMN<{uYa`K@2bva$~kOiLZ~i;UAS;K&nsmXFortbB4X^yvUmqV&RlDQr$H@%y%I z+qUP@OD?=wq80Aco6J*YjZH%p2!{1aWq9n7-#vfh%|Cw%KcpVf)K=c(NOMHEM1fD; zLxfM^L-plQ=--cj4!r*6+nevc`>xyAfQV|tD#h5bE#~8S=k?_WzH#HNkK_A|#DU2A z%E``&ev*jrXCV4;fkf$#e!Tnrzr6dNmv`;lzLG8V!1HtUtN;!!6O0Y_c(3}}_wG|< zr3sJFPo({GpF2;EsUYPu5Pe#KB=RLJ2Yz<@?aM;JfZEbUU=7CAYG_sj@X#NAzp|%q z=n%fyk01H6vRpEJ_W0yE8$SvlQGgy*-r8N5oBh;`nvyR^)t*RNdG?F1tnxnf z%yZA-9zE1%QT63~YNgL-AWCAtq16^f7Bsx<>1Xdd|Ge|c(o)kGX`Sn3MV6ZmA9!G3 z*xi6qY81a8Nn9D-sM3T_8M_ug1CRy;)%*vs@6f(IzcwQU;;R;l(BISb_Z@o=ypAf4 z(f|UP85wd$Mg}wg*R9*Yy5v(Rh2GPE^l6e%pMfY2NI*`>v8ImhL%a9xzlkkR74&U* zcf-af@O3+W?zY=m0pU219M9DlpQ*F|IzLiE~>5?UizJ~1tR+&-ie45nS|1ZD*41VOD%c0%y00000NkvXXu0mjf=TEtt literal 0 HcmV?d00001 diff --git a/mobile/branding/unofficial/content/logoWordmark.png b/mobile/branding/unofficial/content/logoWordmark.png new file mode 100644 index 0000000000000000000000000000000000000000..a3017f59ecf02808ee8793f118d02bd04b2bae8a GIT binary patch literal 15088 zcmX9_b8sc?)4jpQwry{0+}L)qv2AX!akA0I$;R4P8{6jH*tX64<^6qCGxJo z000DK8*yBGVCpT*+XEIrFaWZFDCrcZ93jn}-C0pG}L;V;>=yBr?C?6S=EbpX- z4M(O1j0wU@q+uY3N0W;r&tJw??M0WAgeDxxi-d}c3;Kzz%7he+umrnDUJw^j7#ThG zy6snJx6tu;F!|BAD12CXo82%C+XIJ`D#M}56@*jdSJT%5Z)j}I6#kLRu3Cd1Q_)Mm|*}B6bjMfp2#Z?7lZ{6^^F6T z07RuAg0j1A3;=5bFVONB}m~$S`^Uv>(8Dgp$%55SjtN zlDg3ryk@LMJ7oCuR7SmED;1w)us$5K3#_&_3kltnEG{D!w+W<4rYK9FPX<1FFemEP z?F0ajmx%po?d`kw6iW5f6n9(`iV^ckHw>7<)O7b_f4ah16ad(E519R6Vr?J@5`YPE z_$Z*hfVTdInCI~rV_A0Qe?B#iB9RATkUG07&EoGt`O^-u2=!^}rDI zep%~9d^6?_1yT+40nva6=0QZR#`KjxfOO%LwZsg@tp7xbIeS#C!;_p*So$Wxn#boMQf00 z$`IcOxkBMW`G+$V)~GA-!s5ehJx6%390T@jEJOXkI$kFDB(w24ib|x4A%a@1N~rdzd$Z{} zFKCQl$sTxaXfGg{35l4Dj)IQTlFT16A}UVw6?h(as8H2DT8gAU@_%XC(4PnJOxeFi z=*TcpE?~rCvZDD#iVyHmVMK|u)3zo+%GMQW%wfz)%{i)39y66?amo--CXKF`+ttJJ zB{PvRj)d)H@AdC->=Evf-{>P`n~J&=J*n@|sg2pn;qRmEbMC`fq_c}@7G|og|H;=t z=Ze<@R^>OT)u=}N!Q}MFY&-g??r6BGtS)quq`nGDI`{25%;EJLHORk6^9=n!3qle@}+?^mpR+ z7@_jAd_HjwIS%axwcBJ%5!l^ym#5$EO7MqtrD?YT(HmHo^gHx~C7cSaUo8ym%2U%) zbt+^kR4b%UJGraROS4NlCEImhgHgnWDkr z%sRY!ttxKVFDhPal46p!9h%rWD_A%$6)T1M(`LwEmulBx$YH3E28M>5Mqcqm@gh@A zv9*N0L_k46VR&+4vS4x{gDXqu>mvJM)?wCS)@HM@p0^%T)1Rgm3)%WTy%ODvrVht2 zJwDxH9ZfyM2C1s-D(Z#ys`gU!(pIG;rHY&dtNz;SrqQOdX8hXyC79LfCWof)CRV1n zR?UOe{TE4{N#EPP$G!`}B1bHvR1oVC2e|!p#p2iE-^iT$eIfFF@GkY3)k-W@Uh~xN@*n;~^!h8Ec|;)naXP zu~+${$tAAvgRpDvuJEoP&j$O3uF(WfPxDCgxN^T!j#1dAcpxR%9PA681(XI+Ls&sY z1&amiL%u%w`jdCZiSVylJk&3ri~Y=N6~h*b|55d0zqg9qdgLsjiu~~~eJXLv1|>`- z;Amk6*5tq>rau6QHY_4cJ6t5rIZ}sU_G=oK*X)|O+or^eM5@F_mep5fz8YpZE(YOp z7F)p;o;J=lks%gK-HCafY#mv9c_Ka*hH7p{`>xHm^V^7>>>b2iKiqWI5kqI6{HeaX zuu_~d77Ql-R8fUUCEnyKF*JrhI6tXxFukbb5PbTG`>ZHfXSru1m&6SiNR)157!-Yf zoh5c~`A`jV6f^C&hSHWLbSNMztY`7(;ADD|Ij{@ycYY1|m6+fHEGJh?YO*@9I6l)l?iVugy%XbI@67%U3Vx;Q!C_vx;#@ne zI-rxrSJ5u`TkqJ9-bM(!Q$$UK{jl$+Ym4WG$~vsNn~f$f;n{@3*iq5dSgW{c*nvxQ zYu@{W5l&;>8EeUZ%PIz1&8IErERPR1m~-?|Qp?j0(oh_cmskEGZ)*KLzkiTiWlfu; zTWt?%5^pW+7HsLTC>@=e6cEuU(zw%j(cr$ATW>U3d~%$VW(~iQ!-@Ne;71ZjdAR*|duDa3 zfnDo`Z)c;Q<>N774$sv3U8m1A4tQZchfip|^VZktaq#he6K6fZmG*sVynWe=_M)mo zxx?sA^jvINd_7`bME_%L>2fX5w#O^)c6Lqr5hg5T`Xli^9##BHd`A3uICA)D4zDmD z-;Rju`|(?;__X;nO%Coy!N+(tE)HwJ)BNe;)NJ}}e%ei1Qn!PD@%u^7DSplBP~Q+q z*Qhtg*Kc=Pujjp9YhJ{cg`23#d;VmBbYSb}x_kAR($^&Xq$DsjRQm0k83*&~C*LG9 zlTlLy0DP$dfS?cn;2He69s>X#YyiNCF#y1y4glaf{W2Pq0szXGqeAO|kctV@DYXxwSn-67@IN5}Par(<95 zPfI|Gkw;YLf^ajuCI|!G3D==kqYHu>Ddid=w$%cgei!%;0fE2WY}%O3yuKrw%*TUCa0N zQwi>Ft&tLaKVRsMoXz|D1YV{B7Nf|zbWmHYD9N1~%ZWiIC zIPHg0Spil2Lhp8ot%E*h!mm(a9i(?cqStE3M_ckD3rHZidn1q1`Sfqde5`C-im$S~ zID9O{E2u;pk7ptsYjbmg>C^ksr<)J?eP6y8Bm?Q4V(lGYDjR+8g*>ga)&17?+BUGX zy=blDBSeEKsdF?qsXaKwjWvamgH&V+=`B=P#x+9V>S&) zhi-{TxwG;Qn>!<5)hd>Yc&XLwn6HujtY9jeOiTZ_CG%1=(`>a9ge_$PPzCuRREeWN zT-Lw8`kDHmW{nCK2ZzZo)9RGlGEcY>MsM5G6p2?C6F^5xkU-$+y&c4t9J}Jb5<8t6 zH(eskHTunBc>Gzbg=<~au^aAK`f?0$UcZV@mk<{3*^rQndpN&1*d+N7)%)Noi_YIh zhH`HB=<;ZLPiMkZ{k&Z{_#**~p*1~zsQ_j|Nh z`22XZKcX@{!Lr9KQ+kk+{gO(VDEGAB1gJ>f@;xcSzic7N*-eNJd+rfnDdnoXZpi)k z0i=l_UuVHRv@0QL)#SU`5Qha@PHQf{Wx4&3qz^mvkyXTeFLOT$H)ps;$&Y$$ZffRC zL!@RZjo#%y%2b*!*9xgi>7^!c=H4^t{W+n)s&L1AImD@0bXQw}atpehP@Kk)r#d>a z-CSy}_bW_3+2oIVO$wO~1p7riq6)nd<~|oLYy0)|LK)$nvbI|l+B>~Z@7vY*#;>l0 z(xtT))I?=1Hkm;!*N5m(%z?#rp@ULk)gJRJZPdoqlZC=c;8idLqnw2pJW~=948G4Z zFtkF(zdgxT4kDCS7HEK;^zYwtKxlPqXT~O;_~o_>jcyHrcj$dZ_c?2fNFI zvd;~x?9OacmNUK}v{H;E9ks=k*c_o}o7M@!heE(!{iq;E=A&iXRd;i91Hxt4%UQQo zQx*?+7&2JI0INr4@=bn?@@98tm!-Ua?{-*ySWi*ACyhIMy9V>{3BPOD*@0wVRh0XJ z^TE`Bh3fYS&A&z9Io*agUvq3O9(j2`4#KojdY@>uWhqRu6d*ksFb|$oc~O(ISb<@z z-&6TWO)&@w-c@&6TLQs+UaUgvt019`Haz@bPv$qRnv4CO3$eagHplrP`&ff)`{S32 z*s|%sfJ?@}YqXw~lMQu5m{HU1R2jei@<53Ao9{e-blGU^OyruUYpS`{F|`erWhPUAmLMV9Z+LLM25x5Bi$4#bzi zQH-(!;JFJWBi1v7p#sE2IASTtemCB(qu`nEw^*_=i;zj^MH=bkV$z(Ug;bi-`Ot9t zAtG5`e|S--<$q}4eZyXFN(jSf(d1ktk1pt}ikd=ZjCycqd)yJzuEh3ijSmZ{Wvr zK)^q0gUAd|#!!SyrnxE_o=uGUE?RGy2uq;OU7{~O^=0DdwuY!SjtHMvo_d!!?wpJ> z)|yH|T|T-b)w0c(|MWQ-gWoPQ?6-pn zHy_K`MV*G79=NLvKRha^T{}~l^8`@Tc)tE-kgdsB1LDXZ8HYv<0gKdO6ydWKHq2Pe zc712E5eo663(oVgQfWe>6=hPpV#H}rg$Ujx78;w;` zox~A^zq3x?5a7OV9~=Wa|BnCeezdfC-uAN44tV-7dN0k%&jvqTFT|xzm$a{H%dVQd z&9JHOs%yyMNR3GFAP06cz8}gfLMf6bhnuwvUQbl#0~83YLlp^b+Io;$t8q#A`MK+! zGsmmvk%<>w==TuJIdmtkZ8G(|HGc%$~q1=NoX3Df0z@ZY!Zi)*~!y+hY#W!H3)o#inn&#P4ElXCTYz5>0aBHio5 z;uhdCQF74o@MWOOXoC0ogUe@AoAMxKia41TDe*aEhCDFfp$r$%Op^S$mAR8>X|S4h z)iQL=O+3*jldLmEwS+j;3s2VxwbLxw!4@fRJ>7UD;L*40;choOPK=L2>1Xnj0(<8in>NBt^psDqgN+kbjypfh2x$0d*YP;)gLZZaTqP*M!gr*GN% z$dSY;{oH^2OH@^3Z2O9dp6S$iqorBq|2+8G%`w+paQL|D%MY9IE5j@aiI^lmfz_CR zCftTBaVxk4OAaJzOZH|VZcQ+k)X{M`bG2rw1#Pw(R8L+*sGuxIkBSn<5*MpDRioct zZzva~hEXgEa>r6(NTZKS*7-d?(_WBuu|F=u$+f-AJ(t3p8f$X$*WI)8@-g7jbI#9I zkV{PhHR5=w_Se)Tp|xQ%5r=Jo2WR3W7M)eY-9t&#fOs-9Y%x~fyy#=LC;~W%KmI(b zB?O2IIjl~1ED+=jQ6}@yn3R=C8MucRwk&C&TtI}&s82pOr{Q*~GNNB3u(u^WA z@BGHOcmGMNwdR``l?88a^5-j3n;EecJj)=R%77q`qSM6513H{&bDRdGN<&$ulmRye z9qbsD5h|kCneOuJO^4|G3R#kN3yvuF-xB=ckdWh&cT%g6wg0l86`o7+&hY`Y| z5;71JEhiI;9CBN;gGq4Yk)GTjzg_H~0xX!~yG1;ApoYqnn}34DSqq8Z=H;8LlYVjM zt|jlqRqz9WJgU|G+wc89k%(_iIFOSuWU#FzbAdCQ;Ps*#T*S#kM}L2QFYBwNzsY0p zsZmM4g`3|aoH(JfShu=2r-&aNCpk;5^)V;PQA^bQ9S=8pu8Jh+!+>8} z4}#D>@o?AsCvkRO0&BhHIzaIlE9W$kIaRhq$aKKkF79U8%N-L@`S!@A)&bWLB+7FY zN;Q{CL4-j51#6re2tv;kJ?hIn<5DckW-|(=o<94h;p4|T#s6Z&Pp(V`CC)EDf zvo(OcXxKV;Z%|ZvWe`OxRFq6RNC0tAf=h=pR;kzU>tKP#VA#UZHm+&P6Qd08d{Xse z-@}1dne=d5*IFs`YiPtBXSpWqVp86*HIR%G)jhc6m`npu;=~Y5%_M1vqFAd(Cvrf? ziLAJ&3Rjfu9frVeKKC7@Nmq7Nj*?kYm)>wRH@4ppm3hYW z+DxBEMWz@Y8TP9esp-`gTh3{O2$BUxthBX*Q*mo+lm@>n6G=athl&bA>ga*1Ml?>& zVScjd^hbV_c>nNF@D083x5~=g!r0?i#)7Xx^fB!ZBz*kbUsFigernXI^uc9NVSLS; zqyMbXbcJVPuzuJsQ{+xIu(gl8O$ZK44UHZ~yL&dOHkK0!vG<+azf0_X<)3p2I4og7 zK#jke^N&05#^WR%BM1V5W;laOY`RRbx~!J8xoMr)B>~kI0->fR$)Ri4x-hvLVXpQ+ z6O=AXkpDi^^f2p_Q4dDTD=fcFDP|jVS3`xOWDa#@zw*_-qE(+J$WU8fT3hHE;W{`l zhnk^J$UqZCOqiyQ)_q}*;j}_k7Uq+yFWWHq9fdpLss}dHe+$4`a7cw)OnVny2 z@x%}67%es)!QQ?n&d~)+eyw|q=uAAAJu4h^Ap3*=mwjJOkH4x+%QCAwW;~uZ)#I!0 zU&MHL>tD(Iyv`{xqG~P0MTExNWt%xor260tOZAvs?q=BBhOI{T5xuJ;W}pc^eiR%7 z2tvenWBgE%;^gRKdU+Srt~+9^$G9h!J|ow$woN;z;MC{&@Y{xn_ppG|(o$z7<@WY- z>mM~$CalrJ8=~Cw9U0z<`W%*2)VoA`MNrmH(EPe=v1uJ|_sGPxZV8R0C>*!r3IIXt zvG{pywY~MSm%N@Y%X>*@E?qByjFGeZOC&}Y)E}4w*`Z1_rZ~k~HhxJ@|6gIVW>f;1 z=yMSJKa!Iztwxneh81Y&aHIXtPPi{R+F<+HL^<&II43@Yr15mxf8A?WQYS_hM!aFQ zyLOE{jX;|f?&@F@(o?rp=byH94`L(a`->7U?jIk1BO&1D=8G~)_|A}i2)SQ~9J`#L z-pd4wS;70c2fgoc2*6&x#0pfys02qeSxPY|t1>0?`Wq+I&BFU?yEnK_%KcJ=#|T#v z#4l{6o~$d}RUpZtz<_VC?6(d5)#30Rm(+;vYF=8JuH8gI9aUi&(6?fxXvflOE=ipB z!&wlrI_ww0;4%B)@oq4O422=8qRb5ks3jkcw4*70vm<~nQ3sA{LQ(0zG`YWQ36HZN z4u-GVU3Nt4C!#hQDYWCyWSI%g_1Lp|vz9j@F5`@gQ?fK#b92^_(*+@;|f2RM=(g?5J zLQO&7yc{qQZB{24`~AB_Av(=)Y1E+UUFDe+?vF=<)#!p3^C>F#1uiP z7ng^V|9s5tL~IBM5T>hxN}d^HeFL7;?pPPy_yXL2uEMlE4G3t1R&x3p3`9-B6{}lb z*ePaJ&=Ay!NJXZ)(opNznuAL0Li@;}yNb8yaTVd*)uq)bX7U0~cH(GrMcj>@-I;>w zbzn>63(Jeh4ul(6kD2(Xp>$~Gw{h#<@wEj|zKVVRnB^y2E z1IFt=MXBEFDEv=I5*inP4+BaRs0to$^RvvCi`S`;<&LUXt%%`Cn@tB(a!hyo8_UpZ z0&aSjQjALR{lqNBo6bvVIEdC=E*A<9eWrtNJBPE5`EdO@lv=?DTOX760Y5(3fYA8^ zb)+I1{1W3_coRT0GEh;ohqJODLzF5Q3 zHJDSTWX`30EuQrw1e)zFP9gshZoC={Of;+A#cacIaa-DR0ZL=f_cv<*!eae z3}k<|m^F#h5jcq%jf@?gBW+pYZv?^bLD3fE$)>9d0?&n;U^qD9nv*xzmjtxr8)}AB z$#QxzPV`%|ye4@T{Q?~(vlPbUaf|3y$YN9YVVBR%&vnofyvWlHp6FNZx)NkV`3b=6 zQ2>;Aln<@dJG?slrtUQ!?$jTARb@qp^dVGf=Z4Zh4Q#&1 z$O^gqCs0ZP=(^UcPhy#OV|noIjC+Ohr}PGAm;NY&LeGOg0;EDQ26bg|JFVS?DQ|k% zQJ`}f4oiaESNQd8&h5!bV$e}CBzC?QTszM|h$T+rq-W<0&wTer45Rq;(C(7^BXePe zAHFpLz0k)CEbH~5i0>B;dt-vO%ez?#SBC~ zw5hS+^X>S_=6Ac7xZduaKDG|E=1HL9zAR$ZqUn%4lo8yT{%EyWePD$!;*&m{T>w=r z1wSm20A~D8B>oGU_K-_|>U3|bB!#Qrup5644bHCHL?2;Woc?p3LAOhV&7?#gm!GY( z6y^4Q_xq_=$NSW(qaJH0P4eNkH_K4<9&~Ak+5#mp=_lYxn$@ftzuD%>k_+k1RcM+l z%;;j;28E0)G7)6aA@vMP`xyHMaX{`63tjVuFZ^@pT`l)e_P(ny8u^j5)UAU=aSmqb z0obXuiVTjwB`d-d_+*#i(b=&&9e!Q72d8?6t?pSi44)g zVA#w>Slp6a{IH&TrcdYF&tI5>_wGeEY(E*`3*`o`66B11OymX;GFrck4GLhtcV zf9BhU{Qd73p>JHb_c^yMmuYsFhJg}45NI@!Ck*nCF+_KIwvL`217B`CNx@fs+|vEz zn3H6`tjXt_emZkXQDstL#iB=1&mdz4Q#JEW_ucWf_CYc;tGaLJ+Xcj({@dfMllU1| z&E4^9F!gjXDKfmSoSX1PKzAXPCfOE(15$2R0v2lfGBV{yv?NQe)!P$JPM`^Dc*)ZU z>_)Ji?owQV3Z1k46JC@CB=ee_ZljqWP0kHk3m!k7FPwBHmK@1^y=1XLp2mp!n6Abc z&i)$3{+eK0NyFpJ)m}V_kFOKJlx9hJ!A}0s|L^{%^+w~D>s`AWRq-$t4{1|3ov@G% z)>g*f*0C!OCaq?a9s!Sr62@?OElb8Z5C7#4r1W&!H%Y<(z9j)GNY-;94>A!ICyHDY z1)fM7oF7@#kns+Cbyl7zja)p`n~xV+3lR!;K+EvAKF+zMqkJ?=UMay8n)x*`d2Q75 zb)maTgAg+TEOyXQc_>BQ>#`_MT9v&tyyUVgT}s8$JVVGUYT;kFs!r{^K|hybBgHD4JbZG4 zVe%~cUm3aN90JGUIukoO)STpR|Ag|LYpt_(b2IqT$nyHrmWIVeQwyX>`;7cgY7vW z?%Y_@Az4jEn}RdD)-f0dh=~#0L+;)W;{@Yu$L1CUCE<$a*wwYqI z^!(4S{zIl9N~a#apY6IR#;}T=hbu1mS4pZCaF&K&n>)$&+|u3|)zc=}Pp^ov&uor6ePi@9<~P|a7qN;!Gg>vo1KcwgpMRp*^SQ>uo%z`PuO zGT5;BBw?JTmRBIQf=bb0{jWPduV;!YxqPF>00ZuoAYn0d2<0x~=G%vO&Cj2txhOd0 zUyM<}f5Mn(F%VcR{Kgs->!ppTbDD28FJAR}3|vohci)ZDB5oiB4^8729cl`gNre_g z-V}zfd_43(1D6aWC_sk%XwCWV_kQVzR5|QJL#NFS2J<5+at>)#CgX6*&^{N8W1PA3 zb|JRD1!^>U8-n6jeaIC|?9ES6?C>9pNeq zWoWSG)Yh_QsAHa>lg(ureDEDrrsK?VbEb^CfL0k1mM^2h;$Txn9&}l%5>th!rDybD zhD&rSl2UP~VHFuCG6>1V+}!>`KqSC@^Jw6odmiy&@G@XRq1IWm$lAXnO6;D&cvs*N<5iU)2D3a+8+%n{nRa)o|ijF4SUJK30SC*zULFB-?L0n2bhGmk#G%HukmMjuqiMO{yy!~a>mmw*}LYSIBd5C zv>k5<)=gRoXfS{+B{7gsIw}@|9kM#ukM5lDp^=D$WY($k0-<`P_J_M0 zq8vTLpy2YdZ1SOr)J`ZRI+7E5voq16o2X3yUeN+KW|)yhN$S{yU`>}MBW=iNlp`!q zru*5oG1>r65)$8Keap1~g)Q!QI zYvFoCmT5Ax*c~0r#pt2|KYc$yNmugFy7!36XWg^MwP=ihP#FOmggh#Vc!Nw7e zBUM^LfL@#FtXy1Oo^aIrXJJT);QJgoiH|GpuoaH8L7KG=QYzyfWRgc4%0wo7`@ih1 zbsobS62F7zAtu`qYS;#;kUfc=-eb5~!Ra~i{C|JgVi^$zqaXHSUVU61Ay(#WF8m)o zI^G?$Kg(KKKWS(StHj6r)+w$^4y8DC0<;~O4(*y2SRlFWt=btd*k(ireEr5Mnsun?B>dkm_?_|#!7zE@F)6eh*u z|4ZOOngI3c7D^&MWYM6N>&3M9ZI?iRlHtjX``c0s+~)NzmRzB-stx2hF$V8HRngvC zs(&x@a^2#6YNgPkvYVCn`t9W$qWHZ2w(mbeuU@aW9(U0j1AuVu7PIRaWcbIHu9gHG zMI0R6GR5}ju~I5(vd68jMQV+_`}Wze4{3P@AdxGn%vyozotdYbPg1|Jn7)$c-Vx{O zs4IhuG@-uzSLu2oJUCs$(V!P%I%$#l)E=Esi`7ckj-Xl1Wb;Bi&p*9jmTj~IYt|ZC z5tokq+F%-1H9JT{7L1$x>-SpxdLS{mgmYK)<<)Fx_#9T-Hfa~5&>yXL;GymOHK9CW ztT)pbGmoR`eUB>%cyJskP5~q4h@;r`7(ly|avOXgh@AX>g1n(eA~Y^x=jiM`I(%wx z?AWzrywHCP4X)Z9<~Dmup;MfuQg1Q zs~b70+ucL3=qovBt8P@6)2+bKDK z4$eHN)GRO$u2f@BlCu`@<|cHbB_Lr&>Zbtn8Jqy0xRf&ooMHa4@lpXYqDVt()Rgb`I~qd-QY} z_ei_GAgrMx;ds=aKjEd7YjyoSa#9E3q!`%kn%UJ4P z?)S*GuIt#Lm^R;*-6C^E8X^*}TdA!QPGtp^cYH~5?gAeK@!!s#d$x0BJnb3!IarBJ zHhWEgbu?O)oxc~RF39K&P4Ea3Ye)TQrsGKh;{3Wl9{ul~0!HFWzY!Ttm_INS*EbG^ zVcw_Uat3b!Wout@n4Q0~jIPH+dxSdaeu514Uk*Nf&uJkmeL%=7@?zjH?{v2=Oj0wE z!U0i&svPz0-~_s13=N{3Vbkl@A3T2UL8q?E^R<9mnz0o2@O;qRhAhK+U*8!~CjK@o zsz~p^6Yrz{8&At~+c+AX!L;sFeaer09H(jtxFnhr{1%cqW(g34zcJ1%c&~%ctFEs z^XrtU@OtB?%5WZRM(Gv~@2R~WO7tHa=GoYhela||_6_2&LYoijYTqbAR)aW=Y3_zy z3+OUlSaix+xhI2{5YkT1&|vla2*^Lc4oX>sj$HCXNARMcB(v%WkreW{a9 z&&rW9xmt32wU!%Pt}RE63S>iT{1E9P#UY1|JFVS4HWX~UWot9RhzfFR zkV7S>RxG3PLnYny1K%N9;DtwOugLM)%pR!)-)HC%Vl;#{b7wXB!ln z{C>bcT4$HdPeie}m-34?L3wqDH6DC2_g6^otm*nRVia3JjyG4v@l4(K;?D}8Q@I@w z=*GOzcKWuy6~ixL=(G1@ompfsVJt=QISe<>m9>!c^Ei*H z&@Acg9Q;gAX@+SX-PT!he@C&|5FA@SvZ_)#-qm!yb+m{r&;Gbbn|c4G{Ba%&oX`Dpe`G9;dmInTGb9*>F+d z^d818Si$(k01oqxF0K0aDKp;3QQ$+1%Y3VKH@&RVfnDE?X|x<4AKe z11!M3+W(@O=t~#07rZDF77ZJ(H5>Qu*6s*}mj5emzH8Qsw4Mt-7(Ko-5D^B}4cmPx zXU+e`5nWA9Ouy0_4wdvY;RGpoGEl4gAw#76apr)pSb~WNA;W9U_dObQ)5mViqf?Dr z8;++~J^YYYfn+@bAECj1-xnC=`PUiKE=vnTz64@qQZXSrR}9Xhpj?7JwaP$V|B!v- zIk>%U>`SQSr`|HSM%4eBLn*=|OOXf(Q5-#Z@^Nu;-fXa|Rawt1$erOu)C}{9giVzy zUM2ga0T=Vl23~ooEIvX95F1Ehyv zM!vCEq{yO1b4@$`w1dqbuep#{*PCGV-cK?mn}>Y_-Ik>mmGaqv-L@U}NNQg5p6nsM zY|Gzda~Gl7;isFXo?nx6(BZgq$$BI#Rg#6>}UU1GU$f0|21 z6t&C8z1#|KP%1|*FunEZ^yQ^5D^>9gDN*!7DwH4b9< z`qt!hHIz5#Z4*4*wD`CA?T&QgwFHD92HUg>>9o~DkGVx>#mBL$t;%xXJ@4Zlcx?YU zJ9p>)J#|XoEa#VbfNfMd%u%bqYM=!;app4MhVl~JbI$XqO*GudsA)mahJz61P7dVN zirW=$@Xj%xEb&5@Z-z>cX-1D8pvPv1`;v1y^KVX!jtG&vHF`Np%yI|?J#JveJ-g%p zCt0N>&PXm*j(VVq$Km4bS)DaC$JgYsuHHh?IaRIt6+9l;LWh#8EkDv7RG*}c=nLL_ zPBx31iwoU<}%Z22z3@WRw}_)R>~cM?A*l$ z!(R($om(mjx#kuYh>pK4pc^iO(CscSKw0fCsVHc2MVau@W_ujB*8DAT;uOnm8XFer zCNB&2MakJf4uylmhKGN5>0I6E9#}1zGey<#$~>G-#umyu)sNk;(M})zA*?8IO21bq z24Fg3zF3G8xU#rz7%y;PZaINZNh_2;+C?gq-4`L$7ymA)vz~3d54f?iZspP};H0-F zZV8yqk8SL65iXWEF8O<$N(=D(Wzo->0ZgdC_5a-Qaa0kkLYFO4@{Ks#=~!ueRdJl| zEzIaGG#d<&mXb^2xW%ToU`|$t#%U8+y;-z3xLk?TKiyT|+UpYf96;8Gno!@z;;j%} zPGTnwN*GY~<~da`f|`ktrajx9jhYCF7ZT`v9MSnSq@VTCVa;6;>n+4qNO>C`7sMGQ zQ7Av{_i-%E82H>+qbT@s=jK+33EBs+jYi3(6Qqaja@?v9Tjh|TPApN-K86(MGZWre zqMw_t-TlvS^`1Y)XBJmxS%|^?#a&rGBy`yFDShvo0b55xxvytkR=K_%aA=BDs=%jn zNzQC%DwLiOkvGR}M58C3*GupPYJ8lMg4K^shp#Q#shANT|H`FoM~`WX*C5IvEW|hF z2pTpPdq)T72LZ_|*EiH}G;{e|2yO*+?t86i-#kCwal8L~TnKD-vg0UAs(b`XlEH;h z3cfyx7mK{jHGO}L|H%ZMupA6i`F{2<;~(`@0<7QH?EjpWg|2YYQ%OzwFOLa^#-Rme z43GANA5(NE1J|oH@M9jF+V(1bsgH|t3{>Yw2N}ECt9%TLd?bZ@K5+tiCher!6<~%u zMNm7)AFEr%;qy8AZN$fRdde*c02ZT+=s_Jj6DKQ*5{O(ReQa*NJR~-`|DEiygPOTz zK^3|`947I52{ZGkov#+8T~uB8Ysvha599LvbTpiEPaAfEpH_w0P!Jh-2AaDd07j^t{#c*2Ae;keLWa>7zG-ba^^z?{+1i@#FVc=Fr^ z`;nU3p-LVrJL3fmRNHqOyPyTVWGpB*_hX&*_lStWlN83(M)!wGe0)JyYsatpF=A8B z1u=%m6PZnwur&|I^PS55$qpk~S_9PnLm9$$c?(lgQLuUq#5&=mk7o!91{?tH@ngTP zROLcs<@4lfrQ2>Jj4B^^jzEIBne-Z)T%V>Aop*?f2FRD{{^?=S&!-I88U0Q z@?&adn~>Y8d^*jB&4{sOgI=#%xH#T;6AwWc_f%ntDF8+}MO#F^2*OO9z_?3E)J_(j zT8THx+_+>RtG-dKYR4|L{&V&|$R~J<3C6Ng8`hSYCeu!IIib1y4Gaa?*l!p87wh)< Q8vy_yE2$(=4K)7of2pjRH~;_u literal 0 HcmV?d00001 diff --git a/mobile/branding/unofficial/content/splash.png b/mobile/branding/unofficial/content/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..25a0830eac7003d6dec6992b18b9f17a0f27d723 GIT binary patch literal 19766 zcmbTcb95z9w=cS5+v(WOj*X6OTRXOGt7CR-+crDsbZm8Oqm!5KoO|wjf86oj7_Y{t zTD7X?oWIF6R;^W0N(z!l@c8fm002o^N=)Ue9sfEfU?IM)%4>0OUk#qCxR$G`gSo4R zu`>wp-ORxRL?UfxYynaM8Jl@IO@R0T00?s{H7!>yc{yHF2RkO?|Ijdb+Btr40|5L& zo{q+*HXv6L6Oe_Ky#U!&S05RPm6-sUCWkyw-cb}}X(i?D3{v%0P&4(mG37BM6A~oh z_vHN&U|E-jkyb_71gENSPg9*rJ z3giTmaI!G5u(5M-aWRmv0$G5}KvrfJRz?;sUN%-d4E??BU_TTKoc zYUN;0@*j!DCJt_{0%TvB{xQI|3_*UH7`dHvkJ(?!Ohw9D<0j0Q^%WFjTQLVyH#?BM ztF)K^+1DE;Gb=M*b{19%Ha0PFR#sLZCpQZV4-1e-f=!fNl$Ar|tIPdAGX77zVxkh9 z+^j5|EF7$2EG*(cZWazU9x+Z80VEaEApk(Rb>fmDO;7B5>%1$D0Y-(lypZ;ISC|IKUm|Ho&{U&=85CprEf$?`vszB2GXxBol!zdHZBctG}F732I> z8jsZo_g@tUP?A#<|0*wJWR$_GWC#sgaBy%$B;%*1M(9l3u zc1$d6MkW@s>2=PM?$6IpNQH1!MR{5}23S})KzqfbybPP;xO~0_QacDDINl3|9**H}?Hd%67h1(`AbQD{2A}W6Pl2K5a4(y|2 zU}$@%P*Kyh^*1qFCm|pp0;t4kldHt76L4K)h=@t4VvFu~29x&AzY!3gEOxAnH52(J z_0*SU z5<&=wh(Cu`Mmrn8L6J1H^lma#^LI4aY6cp5AUx~CJ z_ul#v004J+vX4nD#UkSY0RaKXpMAUDu1^o1Y0U)ypwt}Q*%@fZ8#3t`nO6qOz`((y z=T6)6qJbH;I}>%BVdba0vr{9zc!4>*Mt0X5eGFuz^u8qk!?d)ieR2X^Zk-Utvhkze ztz4`O%AGUBRNpVJZ+?$d0nixrOS_-;N9H>6&(1Hf(2z?0-n<=82=H>EAz}cC1$KY; zPzc&LnZ=r{=NvY1)eUS8jNYVwg_5$)!;i3q=`x@K7PtWuH@Q<77H0|3wv zFf^1D+dI2sbr}HjB64aTY*ch?RP4EdCQ?~FLJU+Qd_vKmgQ#%GY#dyOuy8>|-4$6e z45O=`*Yj-5%%Vw+t!3E^^h_*F^!j5f!VRlx^$Tdu(deGZBQ*Jv?Ov?hE=p@XHrKGa z+WLGvI?e>>H?5~O&-`+a{47{`0{8lQ9i4BlD6TwmkKW$Bj&hFBLb*5#-_tQa4jT-a zx=LWseRk$*(EXzYP%$6B6Mc3c_mB1Ekn=ugD+bDsnf~}0aZKy2pmIVRXRn^sHMTWv z5J|U7PAWBc<@>xn4d|Gkt6ufxL8Xep4#DsytqgB)(f&Y&V%4vp5JYn~YLSG+5^&5B zM0E%rDCl!LR^%@=vSu%iTfjQEgJvyPJMVvO%%|4(-eG~IKwuUP$TW65MlEN5qQS^0 z4*emMZ#3VQPWW!qu0nI3j(st!04F`rRJtv}HlL8yK?=gee8lo8Zqptp)usapW8X{7 zD`fe01ynUF1`qwQRbuL`-j*QgRS_S0Tu6LXNnr4$T^lW<=zJh6wsoy)eQlGWf*d=9 zUPp*|y=XS-Ex}I+6X~Piq>M4JUKl1L0vk9Y1mBxG(1jc(U8S9dwKVQ{&ZT^H2ZEF; zz_sU|WT&w~$8Wmqcro_kV&##~-Q>S@S^wcM2G`B|h2dFv^yBpi!2b=v)udxWr$Q(w zxkqU*eXwBIV~dWfv*wiV#o9@h(wlGn9f1LY8BUL(?qMul!GXi!YhqQlm(q=eekRf! z){TRl%guluz9cujG7TVaIoYXF&|>l_rC-s7GMoF$N<7e)-Jlaq!ooja;ArnAf`?pm1-V7yXtXp^oIElT$D?@#Y_u z^F4&8s?OPO8 zR`dlr)(kT7!(r1B+SfZ9DBKNpa5($pfp6pmsM~M`O=0@nm^bJ|n^X}d9vS}BELK`fBUOCv0aqOnL?Q?g zu6Sgb^nq`(5q+6bQ?R((w)pVQd8>TRG-!<>z5cX}xg!-0bKo#im_l-9QX8u4EX2@`GJWg*AG3{9W2T zl$P~JH-V6vaxt5QuPg67CDC(xtUo>>0~O+|aM?T+M#=uLHHWw(0+e**K_I>aR;fXa zb+A5Epp|Da83TQKI3BqkI1`5wsqTR_L8E`L)Ruu|i}qTP(=6`rqs3^-j)35N4;&G7 z(&FKEl9hy1mpHqK6^eRE+$83Ayk^K69dQ!istR0S3jVpmw>-`&C*QJ2cvvZN%U{AA z-!YZhYLy~|`RBzh1F740;Uk^HnR*pnnUuqnnbxR6_A-yBclma+dnATLy@%$TZGhT* z%l$7?!NCh@vR0e{-Q*2?*WO5CMQSei$68>$q&1?EsH8rG1N-0xVRxY=xA7y(?1YM* zeziA={jBBw_#@3S4YW5IBu^!Hzi1lOCC=dSp_+b&YP3|snoEzp#039jgcIRhNB_Or zJXgpU7zvD4uLom2%~M}c?zzYARCZ-lPM%J;h_NMQ-jm$ia((Q5yvF#HRIAOwU(kpn zbNg;jCO-|mbK^?LsD#v9lo*mtH{GXCCoRJC4d=jF8+8(-J2%y7lsXlyG&w0kk(~-a zlgbAaV%&oh1SnhVB6y8)$6U%YR~xEKQFkA~SpQ(Jc`fzp=jD$)62$mXJ9_y@-(5S6Eo+3k6PZjZ7tcqYB32q1?y36*J z3ie9(XBk~ymJb#8Yu&ThkK24PbZrs3WG~xq=6Kj(zHM3!7f{teA+!Cx?1mN8gvpQbQ+DVxrgC&W$bEi_FRhBA| zD@dt?Yf+N{s?v^$o1HkTD@|&v&dHR-=4-fMX8{qBvyRDv0x7U1vAy_rncbm60~m3( zxnSYPh<*Y6%g;q?xc$Sj6!>sm1FzfWMf~P&$La$d! zI_Gu1{>^e}qKQY~?!li62*+p{?9Psn-%EZ2MC8=h@Sw>U)p&UdAcRt76ll~NMT%5{ zxB|;%9)joS(n0Q+#UjXpRq8|iP=Dw}m5V2qfINzY3bI+HFLlww)SWw^3}Jy$l<}bP zAY7zx`>qs`sZ|O){QZ~(GKZ(2?+WT-5n$!ufX8IH$E$RDP)h8&LP^52(WLb%9UV2U zy|m;V^~eGy64$=%>Xdnqqbu2dT_Ihxqt0jqk&nN9g;wlIKT0DW=ZKq8%}#O)KCe>` z{9n2pMroB+J#<^{Ir|co5V-U(wMJyXby=v825ZHT;?RYwwMdVO$V7X8dNYZ0#R_hG zP;GF4_=5^!(MTb0qElhcstdZZ!o+jJ#O*e%_RkZ}kx1oaeh0BJr8@2Misye+rxB#M z4}U^qPE{{mL#sLd3vR}_NPwF1TZ zf27Ak>k6C0GnS*p=n_A1AZdPDP3(#!t}%RGo3Wn3zulMChT#9Hv`Ud!0;5;=$iYnL zP&;Y&X2r9jh-o!o&?zyQKXXskXv?;9?~>@$!gRT2?;SaJl>_8L$wF%&MiQg_QK5|| z4XBAb!7oj+497$MWq*eUg?3QY?nz71d2qe4)Rdt?OXcOFL{AZE0H{<{`;ITus)xGv zkbldPj%M;`pgNW!zc|hWwb8+Kh2Gr((c{dI&C`e z1SQJQ4k)!)3t&az%0ooS9T>2h441jsN4&%8a_6fruk@gEk1&I@O352(UiZbDDt?&OfVikN zT7u80Ns~bvU`i*w7j{nJ6OJ`e=IYw4L@o@p8Uy=Yv@HAN-J?^dsd(@0&1}dtkW84M z$}+E>9LwZ1#{@Jw^j^Y3j2#FyM;7S8q<%neHc##VlW%@+F;b7qU2_a05?kyyZ|RV< zTxZ=1$uQI-L$1l;4_51_}-#rgt}KxIMPC zPVwI%`Y=O70aOPL3j?pIN3zuAG!p16+2_#5WGVBzD%t26I1w8;YZ+{M^Ky^t7QKGc zMiTK;x3Cg8%ciZaYMOhnwcuyaV@=0IGt9!}Z-P*|B}AFrlZCIy@}-u1NCM~QnM7H< z&$XaF7cdChFVNG7x|?A2POTjg<>*&W+7$?SP=Xp1Mq?a@7oc@Zxj?if8_7x&_#<<`&Qqo5+IHeX$uSvRVu<0&RkuQ?uRNV(Bl*YQB-3=rrbyK zmko1L^@a_m_bNQtXMcQp^my`U0y7l~SmJ#SWk$q=3&1Bm9~p z7KjABNYYF-9-dp@S;H* zOA&i3tZW#C^ZniZiwG&72?mQQsg)M4Nmw--7favZ)ad5YfzgL$M1Bkt^UA0)%nsNC z4Z^^L=4Q1LvLyG49q~$@;aza~6)TMSWhWk_@^Lg*dCo#!ts2s(wgrHuB~|Tg_5O`8Cgjc z^ky}4{AD@HK0C>vQM;BfjU}-ZjdqP{Xg3rhshK|VxIp|&j}m!Zd6q97}lNpyabYW)1vVvDNDT z&|t`*3HYrp@ac7tNTaa}Xy%vLT~q1RsIgqfI6kXCVLsx#`}Y$|HfwXELIux(C+m%4 zv6pHx%0=^Xn&E6_%?z_-T@4*8x_i3bQ};cO+OhlJ#N-W2L`1;UlceDC;sQs!SW=Iv z)bo8|&?V=Xq}C5qT7=8G<6J|;b!%y21}c;_RTT-xgo-V*KA9$xWr4C6G$ea-S0jPcL7m^4#TYfhqIDKz-SN8pQG#cZxhE2 zhYR@$O5Wa-c{J7>`P~6?PqZ!evo~}5i@o_Z`%5P1oYh9yDYamAdDbWlqLEEg;qUKB#Brc7BCQR zp^P{nnuJ~`*iAoJgg3&8sH5$=kZ@%w{NmiPl|T|ElUBof&7Xd7e{8dOJMX|?MpN4n z3Jvzc+4b4m=k+v#v+c)4v&!sCQ*1ca@A|`pB9mr((*%t{x+1Ak)RkI8c9DCA6#||p z>Q%bxIP`B-y9#$6JSAN;$fXh?^SMx6==!=_p;jkYvH7e*Mmk1KICX^gx;ts-{@NJP z1(&${APE(j7&bP28%Y=dC#=1N1K;_oP@O(|5@p|ZzDhgCBVvmi;w1@#c=L-YV?6iD_(tWcp8!CA2hS(-dI^kwE1r?4%*gxA|&w{a+5WxcgEE}luiBa z%`p2J3H$LPD>4MLhj2)5_);YFdM*O#ycO5x^bfuohqd>Qgx8q}RW_Z)p{4g`$u~}d ztw#5$z7Q}wd?&v8Dg`QnGDMk?hH9gEDI0v~13*BByYJ1x!9mc_RGPr^U_eS^V_C>R z<@oqrAu|e7{9Rd;sW8R%Uv9uS@jnhQo~!O}0fz`si4=E6;Vub_At$%@GL?GIF)>7X zoG!M$&dxW_I@b_!;RHYR#v?DRfY2%<0t&j#&)G$3VA7GDxPlgEOEn0s@pf9R=c#Tv zSs2WPLUs2h5cjyf7niC#&y#J6*s!qyAmN#=8=NudNY<i@s2>{9S)+4wv+4T35{%g0h^>b3GgXDnw2}S=~LpT_c7r`TbQar|^pqmPJrc51= z%|_6aM(j}AAPZ#TbmZ8}?=*ZCkTPLpt!FaE$E1zv@C*QwUJV|%* z5b<7je+jd=pttMKI|J&dy!9Gze>vzqzu)1;>4m8JZF9WC*bBbe32rIY@!w5T3tb1H zywk@LJ0<=k76G5cngaRY1RbQy%M)dBIea4pOJw+fNz)F}j146STdvE@VASAvA)gr>&vdMf$`-?=yRGQ zWZ!D|TKWBRzU=0PZI=HosPCiSaOipHZq6~M@AfpznBv7b(P&z)>u#=FFlnOZ7^9yS ze*m43LgAv-eX?5LxmxOzQqi{ffnBSsLl@_Ki#J@0bDF>Xd2YP6x1ip6-wqYOE3yZ`14mAFo zM_z`ch!;pXSG=*PEy&PFs`s&_uIK(%mbvGC;Hl>b|M}r}*DJR{;mxgNUdNO8;7y*t z>()!Y&QZVC^S}AkZ)noC3s0z{(>0Qk67G+QfnpjZHc&*9rq-az$55_|;z-u^QA!?R zx6C>t*-VLo#~f)u@cRnqXug~sAz1-KS9y$7xWn5zajv2iw&3S1kcs;!>uJbynTOf$ zy5#9;493tKE_c9(__=5HLm;+~EZ!F~P|xw>DFSTbc3zw26v?zJ{&H<3fnZOH>ht@L zCZLm|Y%IiP&HzSUbXEQ@=Z*S#^o>@$h{()U#;G|Em%^(J9tWY*0imy$z4GDCby&)cU+P{YtefTzbVjjA{Efx+P+FxiRzXPKf6-g8r)WMgrhGqkiOj zB5U}%ixTjB_7w`NXOFd;y#O!*L&_#MLHL7U1b+ngF;aF@Ig-Qn8SGB41 zbpQm{{jymei^CYhuCv-M|L6OPF`sun=8yC`|A(r8LBfd_l7v)xoR5I?L~dl1Uy>wX z=wy?vH33Z8H+lscY=dZ~RAf5w9+e9nI*@t+RP|6<+VlsN9p(suKmu}d$sf7gPDWG< zb(u8DptsBR)5E8#?|sB^7O&C@g@S5jCAFuq*Z{Y2}5Rv$I-A%yfNuA$A_Z`#oE*94| zRDk=U`qK=>--|6-Vceu5uq3bb5Ba0{F4M6ATKv6cH<(>CSbQvXLUtWb4r)ij?gHs5 z-2_JBESym=;lD mdup1OH-QRRa&`!VgaCnr>z^39nz5ahSSaDNSA{t1c<$?N?g= zW5Y8m54(fZ;f-`b=~?(@G;%ma?PuH_gzlSO2K7xQPuNQW}Gh#2~XKn93vU$BQ(X@b_uDmep zgs;L&(Xry+8gOZL;V~DeO`-K6axtmewFKnwWcQZE_(-&>MMK_HcI^nco|Kx2Ph@m3 zg2-T_=`m&kA^z5Y3+^X|CxezGa_V?2%MXuuq7t628+OF=#K^hAO-K7CgsW7Ng z?HFd(I$gE`ex**Wsz|4AUi*@xhKlLbx=upQLsw3j2!;IwBCOi-=;j~@14iMHA%e~~ z`FL7E7kd+op`m7tNjH%BK%nMZLT&F)f0&REl3W-6>GcLP4$@UVkB@>8Q<(I5?r!&+ z;G8DsRp$=uViKl|YV!qlJ6XR}`iXwX?D29xRHL)XfomYf@~Hv4Q9=y#P`^1k)TDdFNi_o08*iJ|QR zl=Yk-BEg*aUyrc@_sF??z4-iQ1_*7I&R05v15O7-N!fh&j^TRrDvD1JZGTN8DkxgD zFpTG~F^*jr%Kz=qk!ZHlZWW($ey!+1XQ>1fC*`=@hdR_fUJ~l?B?p{=Ii_}nyZ;^n z<-OddJGAeH|Cnok)G_3?t?q_H^?m2+>)59Xyg7~_62~?Cn3V%aE)lHqj%2cMHhQ}O z%s%F#^v`6k9~M1n#=#-z*Qm58fwD6d)!1UgHIZ_94#lKOQI;Qcpd!7`#ahzsOS0J~ zg;%A~zd5*BUD;xd=S_Y8a7AtguALaAqXNH7EQ1@1xP&3-`-d3TrCMcieqX}UY6GKf zyqy=A^9Mm9)G(}QwbA%^__2L6*U`|_r*z$VYS^t>lH*F+B0-lCM<;cH{1 zP^EXD-5l_|+f@AgJ4F1EA!HAWI`AwXxF`Cw9q>ur>$WgPRNN<6pDJrQw8SBaDup{S z=UcQU?VdnB{>WY&UdGWC9jr0McX)l6ZZk$#L}=Ttr~1S%sfMsl%#4hhXPQM zVqIF2>pk0ER$hBn2^bFJp9%(u$2OB+L?JrrtHZEvo7W)bJvIU32_emXWfiHyLYk!7 zQ6E1uy`5um4Lx7~BK`pGp8WVB;Qjdz5i-`n@2qqdNZ@O`!f861SRmTW&+A}T_rpxO zLIv`Tm{T)pzdQj#2dMuo7&F6FR&`St)rTKAXqV4>#H&Ps)CXF{)WxvuVqDPT5GvLL zKsfem#V7;YpP?8|y|4e$!@|dH&-I~%Bp7YHA5-JP2Hw=nGNSCSIC@^zj)-|;X9j8# z2Rmd5eZqL+C1y{U^-FOqoJa)eku~&KNsuwh^IZ4~FMp-F6|h#5M_jmtu0+LdYy$uj z!2&TF6@m(7T0JN?8{j|2SKIHzwsRs{=pBM9|875_629f>zkx|d+R5k$B1;Xq`%5g;`!&z+kfjO!+4V$BzZr@`QN?AZ zyRh}VSWuI;QLTP9Vqd7MjUo&f`}%}iYH5a*gLWM`@W&i)6@?j(Rp==aswI)T&#U*_ zb7B85Li0+to$-I(ILh_8-1s$?c>x|(ErW#-QVB~2=|OuIarkIn!D8A>%s{aH>$myTh*i%(@_#PP-f~*tQ{W&10Y7$J&aaS( zf8IK6_@8N8fW_+e@ik}dG5x8*E46D5TEh1I`fCc3Iuv6Ft}*kssdv6`CBhTig%l(? zCY#u!$aq|!wHrp1*bR09ESet@NhTPkw!jQ_m?iGWL{#yXx15-!s&X;0+AB z;DZ3wL`wuutnL*bg5!oapDY*3PwrshG*{jz{@h*}cW_A+q-4Ti%;_2`ovflx;~7s9 zv{YolJv=}X1<8w;)1mCqZvua(7#=a6&_yqHdO*QEQyo6rK>Lt{mNN16#pEn~K@RezHoY_c$DU5sC z4R}H3zl^wz&Nqcz;Mr<7$?s4CBeHqio=YW#6!uG*{cl+D4d2N|b)EutRr6l=g$zRJ zrB&Ieaef4u_dMnLppMtXUVnRZ_?jaR%tcM;%P#$^&aUe}Z}PksSF7RDzX#(sS%s$2 z>oAxt1z+%auaM<3^gbz36ad;R{iHO7c_Plx13H*p4$u0M#-VX;Q0B zB!&VlH@wMPWkeb=OpX4=o#tCVnDh*z04B1?v*!nYJ`j{Y`dMtY`Q6>{h}yu7&y7dZ z{`|KB+721^9Qku`g*0mV1?^&e^y+s18r^_#H#)ZEL%Bl|MIs$YWs!rh?+tK1AdczL zs>ac%q2nHgZg+M9pCA$#nei_aB79s(5&*E`zbzILZs7D@_m{i@;HUR;eQGzJ{&Y`l z-bpA-Z}*st7z-lzdc3y(yAF9Td7*CYxgFj|g#FHA^VYkMlF(Wx_Q9Arb{9qMWEObt zTx{*PQG|f_936)tezr zD}X}oLEDDO4>?Hh<$2%YiXf}cn>rYPX=?hGzBL2=Pq3YMbj4qUjdOq4PY5K8I@ud@ z9Af?gzM68rEB&NZr(263p6ZoMvCOV)f2>Ya=;}u@CIKc5J4W#Q`KJT&pzKGUK)^#h z3ph*oojGc*uk*=;>7XNASmD{xW>!qZ6E0Wx?1um{P4Lz>hp?>gNebrmJ~{S8*!Qt2aom*+_)A}};W;+EV* zOueX%sLGNN_F%}Y4tqyo!*)`b;Fop1KKnH#Niv5X5spC155yVm_1R9Cz<$UpT{+yx zq2^_>&=Oe`{*L>J7GNt77znlXhzr&M^NT2-`>7(P-M(g3Ef#5kGg9rBWtEZd{*8H& z#=^hj^hEtq)Rk}C$;SorgTwG0b`WDh=NRz|LL;dSan?|-^m$Jnb_8d3w;Tw)|G168 zrd$s9fkOxm+doKJcmAMkcs>3uQ6yUFbF~ZDu|XV9oz}~7yL@OehoV^hL#VG%w(-5C zA41bvV)%kt(k7n~4b24OK&bXbjFnOS!I5Wt02U3At+<<-d54yfC+BX+697(O+yxnK znr;3f?8x6j7!>#dp2+|rK^+TfvDkh&$l0$uCnhEq0{R1>eRf&q7>r0MJD362Hoc^!tmWde~20#|p`}o)K%ymh^-+6z3-eo_=mduuO!1`mhQ^ zIJ93)`e=DNU*6!w{>{$yle!!jLr>5u{3&w}9u4`H1~t-Pl*K@ZM%^6L0s}`AvJ027 zvecg|U$V*Y98Xb|U8qOa>aw}U-GzMhf@3rp>ksR-L?1~m+~Br$Y|7(^;yrX!D;W^Y zz4S@wtM#}t8mHG3ABSz@)SxW?f|=PGeot^h?skWLwJ?m7G|S=#{Ca`S;x+wvy<3-I zZ>hGl<(0S3SXI!HFIC(GDk4Fb)$F1@@vH{&Ar|!h?=uUASJT&@_vLlkMN!4X`3Kjm zP!%9f_+dBHOXUNlQQ|GIRov!~ zr>6@yDgzS=S`ISn&LrZwnz$jPk5-F3Kg(ZxEukSw&(15Hc0dM1cq+sw~`m2s^{tCZ$}7^IuviS=zC z3)NTltKjUC1mj^wT-2BJ@Zmqg)M7(fd)=o97KCCa4!`-4NZb3`U?-^7VTi;36|=08 zUJvI6y{=lp$pwO1emchPX;UQ?>%{DbpGQgLAUZY#29Yl_nn^3568+X7)Or5{;nK#4 zTh=q9i}MWpn_~iGKxmg6U9Q~}YIR$jg~1KZQm+MR`>K?^2Dd6)Iy&|R?lo6S@$DPx zop-cza#=Q~#6~eGJ4lq9)%}uEshIdRlW+fvC~WRFfd6(J$6i~~cAMoBb!b4DAdB9)h+4{hI{+uS!#sHXzqfYbPbhiIu zt;q!LL^l8NG`4g^h8Nitp%ggXy;#d~QX z+ACC5O73F3im|m8J@43$)ZW;u5JZxru+_H9X{{( zb(f%|Nc8o=wa;d}e9Q3T^t&Y7p_KlrD!c^}x6Nj-So~vbE8pCW^9zrSUy|>M)V3dS zgp!t19mXA|-63-R8Df&jH)?-_O6<$zURBHaIrhGc2cT9RV;S9?!~=F za*?z8c;dS+VNJEIKkjI!x==f4v>=B(6wpRLpH@=zWgU^>LwdFbq0rNAM1VAJi#gg` z@1P~|Sc7Q=Yg13Nzi{E5nVS_Q=NFVtl$i$c4H{n7F=Yl!T3D9K?vj@a|0oFOb& zQ;~7Cd2s4)-fcLY3Shkf?foCI33{D`qpx^pf-Og5qU}Yn9-cWn`^V#zpLb!BAHIta z*I&Q!?H-NI3d*Lnwec%4uxpF6Nw#V}K{ff;1!BD zS+#l<=rlnGnSw?BJ+%x{4VOAm7bLd5j({VmV!0CBAJ5_tZ5z~bTP54Qnrw@$Cp7T= zT7Yakwh(&Dn-%Oj6%cWh&#;zq`V&8XI@*0jc&do0bm{w2>pVz6(vOkx;4 zrQ>@2s^|7P=&Lqzk^NE986PKzhEPZY9Zm~cUtn>&(ugtceUl3Pv>1yg=galn%cW-0 zc{(S5J>OODdiLk*B{WTKaB3xef8xo`^W2Lfl#D;mz#2sZ3TTg*^{lAH!LMxb@_tC+ z_Y{o7?KP9)Sap?Eh>URAL?!mu@=!ewL)+&im`%&b6dGyvf4Md6o&7LNU@~DxJHLt8 zXRkr_Nsu15?{#(dDAaM9IP30wTb;MC-umisjA%XHq6FKCV5kWOlip#6!*sLp@5oty zf_3P-FjBX1zuRJ?-3_~LYoR^#hMy6ZBeVOOJ9rvkcY`3eqmt!N=7CxEbjs{%Yf;wU zYu6OV-jJXA^}H{zC;RNGeaJ8ya`)&{^?54sO5bxgtZ!I=x{c)f^mhVG(1{5)R@JW8 zFLWTqSS9ZW=`F{ie>+x`nZj25p0V?9W~LODeTn2{mE|DHlQfb{+%h!|Hn>TsJrsQy zQK?4dU4&*usO46JOgQVi>MpCLjgO2zc-ou&P1C0@B#dS#*aY!~m&2wvNFMiU-7rM1 z?fC;W)>YcJn=Bcr3jFGraLYj5Wf2W}HWpOykO!n}Mz|9qNE)coBUCRQ9bj|5M76Y%M{FZw}nC*|& zCzsOirbM~JO|j|$0(X>=pDQS@>)mb>yYFRZZj}0H7U9`Da17>1Ln^ipwaAPm3UbN7?Z_i)aQv;62 z=M&wEf_5njk8H}dv|BXfs8m~bO8vsQogBmWh&~7Ty&QLyZ%ge4G*~Z;9;RY&q1SH@ zIRh!3#2p=PzJ}0ZJU%@4Q8Z%5VZE83yiKY!%nc3wsq{T4o@Y}ehBx}L6Cw{*CT zDr)+0nvad){DtgD0rcilYM{$fkJu4Q55=Y;Q)3utSg?Th57F@Q3$c`C7Hx zr}cHD=J!bfmx?A$fA{fd4!9r+rSiloTm|GAG<>h4t5AtyDK@{U>eT{aaO$4@Nsk8G z6;+m%gLUl=XBrW`=SJm~tQYyOciQkBU7B_bj;5ml8 zW^xS_;0?`wq|GX`(Q~((M1j#H4B@x-G}m8N$=7lks8~7!nMLZ4W4)t8+?1Y&GKKKa zX8fQlAS_iza!tU2ge;RxgET<*;pIU#u_@iHR3Z{XpSP z3VkYiW^I;S>=U!~7}}p5?zC-J+Uz%k=GjZyN28P2D_7I8_p|K@s9V|9pd)>Zq`_iy z&Ev**&m5T|sT;lT7GYD_5=~fU2WZr`WyJ$wFtn~Cy{6f=7Cp;yXDgh-i==59kPW#q zLB|8Gi}foCC1M=b&{d9e&byX-to%iuyUfeNTP*uvqwl(%=Q{6k5bE4OO1Yu$C*^KH zEqo1B@SaAQRR(Mn>k=D&V+W4x0g%RJC`V0}D)%bVOukYOY*0EZo1^h`@GzvD6r`=A z9_oPWiB8#i%~%7n$!^G*m!FQZ;Ha^y6;&4xNIF)WJNDXBU(EPZwFoW31Fqn^r>5YbuRL8HH2kHOyDs7Md&eL?-SvA3Y(-) zm2j%dfwb+{uPbV`Og_b=)iPVn@h9DjvJS^sNTi%E?Nyg6B>Y+`>5KIX=K{-RZ34rr za9FNSN21#i%yl@*4ja@F$E*Eth^~gi6)XR$1@#TI_k^YrG2jstTyW6QGB6nq?sWwJ z33ZM3hFNhE!cneP$_WkPRWlwsZ1o+x3eu(cA14+ZI*%ejD zoN{p7pw%w3a=x2Kust2Pq4QUv+t3h!JD1tTDYC`BVSkmdRuhV$OtVs_x?dxC`5Px= zA3*|EXDkI!+ZZ%noGD9~`4e*Zg;4XPn$}Z?3n%pUC zrFpHAi*nC@E^|+cHG?TAv(Wx^syXr2(2Z0)QWH@l(HnlngPyR^cMVVwNs>b6+3^Q} zeNWx=w_nTf5(;!upG%}JSRK?L;?&%K`nSH(3IpLN*Z^-89qWV9CkP7VgX@)V^mk`Q_?3D(Sqeq^quDBoI<7FMVD zo-LMIvm&9@c325Q0$5F&@It-V5uk)^O2bm7VIWh8cZn&8k)ejFndf`6XZOYW!cH{q zguuhgBdSed<%lK?=4vsfFbjTpd2Re+bi<{#Sp8{5V|InBN>;pE)BsPg((Q=>b0Q@J z4en3ZI&kh=brE+4FWYAHKb+^3@{!Uy6ZZ40$rFthnsgv(sq`r)uxubZMQqQ)F99{A z(B*$4qUYhKtvRQ*CZ95sB)rhM^{?4ZLt8_11f6OL>S7gt2x$=->a*pjT2vacnT#y+ zW<#)|)lG}MG@jY;WL>fC&eg!Q!%}}kLRDk?^muaR!8p5tU~5&t7uh&e9zyzo84H$Ay@UD<5{^zUx2TnH>JcO)HwH0$X`2` zYTfYCi)Mf+%U1ln!s{_$mZt>ybol0Krq?X{2mrDijvB(9+N#o`#n-`$&Oju@q0LD2 z8`9obvaQ-`)7U|RYsU0Br=bivoBVGTjoC@){%Xy1RE9Ih9cL%3Mfgk#N9SFR)$ zX)v{gs#GRT?5OqoYj@ad&QPH{C!YSJ^6D|{4~302AQCS~M~ACN((lkmVA;9!(0%(o!D)I+BJe+5truk`cowh~~E!M7Ah(ct(~1?D#11serotIA+-RR|D; zTBl=s*-FY43Ru}+D`AHcl@&2{d8KmI#^oY?JFjYOi6P58yV%fN_uooZrt0cuCU0^fSF zV^gK_cB-Dn8k03LS2i`up{|gud^H#?zeujuuc3GPYW|Y+NML`t`Hga(L~ZKh#?{NN z6Cs1>ES+<`72wJ+)Vn>jbacYSzKl@W(y>NV}&R)4| zin7mi-w{foCHT{~Qwc5!4~qY{SWf0LGYlyX*0ZGk3JvT?)kLW@%HRdC#H@K~#+-7i-ufPNTRE{IJa$FLF;PW&E}4sQa2- zYWoE8{B~X%&@Bf`Yj`NX5jA%K{avVkvni0|(rt9wePK^&cr! zas;9YF5E?xGC&$a73d`tO4K>31|J+JwQ4t-)Df2Tfr_?xiL-uZF2Q>ZB+)(ng`wb# zoy&Pb4KG+z5R>&btT8JiVS#CoO13Jv*iNWMeMnLh07e!NOr1Ky)DZ->ijhI3a+nK5 zgh-Ye4nb-lr7_)MM~F50LL{8&{vKvExKuYPomq<>$u|vtkA*gquSiBDL+TaL)6^Bl z#y%uXa4A`8sKVOYU~i!b?8<>XdTOZ}W*XoxQrLaSz?57Os@Vqii=w7*2Da$Kg$6Cn zdRej6YKyP*20ay&P_K(KYnsIGt2_|qJZVwS!e|^fxp)S)p%Jl?yp^je*uDy-LM?8v zbyeZyu1QY4F48Mb8PiPccV$;Wpc?h(F{xLY*pSI%u>gxV+koTgS1)tVtZkAX9s3TR zJ4T1C1}m)L5NnwwvR0I+3I?_bj92LZn}Wr9k~FAwRnW%@crDQbvz!&EUzddGfK2`^`QWI< zE5$3p*=XfVuiBIPhHDSEdk*&}EDUD-aE%PcUbwhz>#UOtuBhplcp1D!9k_k!^=6{~ zr#q~Toru;}1-F4+#fTcz4N@>!j}z96Yr^K8hP{_?5)qHAi?4dp&3uw)a6E_ zKA&yYXBNp~)~H*Mj4j+mjAF6fL#X>6-4RPU>=y<6)={I79*nk#W07}@mM<_rvspN8KQK`|E z8S00a13^%mL~8RWV+%_WyE}T=5)uxHNSgx4n8>W5O`DxEl>9z#K|80{)$=$YJYTGc zS}o>JShs1i@D`bS6T`a+R4=VYEy8qxH`inxDit>MMwJ?GY8Z&1vDFC!e2biJV|y%v zilH}IOHy{ykhSRUcMyz*Ru#__M<6}F>6^w>RijNtQJHLtj6o!8;Mz=M=O)w=5qq{# zr&A->!l{EvKv;3?8JflfKu1=jb+Wj)Rz@73z^1$q2Z<~TV$GVk`;dG;81;nLIRYG# z>gNHxcb&u1Mrs|)I)5YUy#~6-ChJ7o#tw8A>vT$8T%7{-L$xv16p>Dt24G~UrSTxh zwD;1amC+1KYul^d9?IK??K z2_r-HkkTHD_X_oU>MGNW&l_o??Yl;g9~ORi*fpmrg+U7Oq(!GGO@o?zQyWt;+z4DE zHR@xqaVLdiuy*cbtXMxZvLF)Es%SDNIyWF6*;TgZ9xkihB4sUSGYL2q?O^=_L@{i){Z##WbbjgXbN0UN_%4K$# zvS5kC!sgU8DUDQ-!)?4l-Ju)V@Ly5L)QV)LD0zyq9?dOgtGFw7ooVYnZ=%yY`yl=S z{H%l83h9?aVT2nq`ECuL9$xeVLWHdhuzrCmOU}Ikn;U(zN)XS1WA1;boAKzxMMN1LymyOlv*%v zhD>D3(kewcWF=TY#ZF;(yvwySs8o{hRu2B5k9Y&bXL5-$eooK?CbYgs6Q={Q2p{tm z?DRMHt-PZ=r-%3UDAfSt{i^0+Gq3P90=5C24lbiF9dw0s&0*xE>&2_9A6YLk1ClOIqpX~4X&fRed=4#zqP zRQn_dJWk;L@9kHrL8c6t6}CjP#|ha^7Pfk=5S*|S7$caa;5LeDsh>Q(eM)sI1(U+m z~;?!QXbJIt37}V4RuEAp3lg`spz{=64o8=DWs4dIRi1zpi=!#Br+g +# Portions created by the Initial Developer are Copyright (C) 2011 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Matt Brubeck +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ +relativesrcdir = mobile/branding/unofficial/locales + +include $(DEPTH)/config/autoconf.mk + +DEFINES += -DAB_CD=$(AB_CD) + +include $(topsrcdir)/config/rules.mk diff --git a/mobile/branding/unofficial/locales/en-US/brand.dtd b/mobile/branding/unofficial/locales/en-US/brand.dtd new file mode 100644 index 000000000000..582d930cc63b --- /dev/null +++ b/mobile/branding/unofficial/locales/en-US/brand.dtd @@ -0,0 +1,4 @@ + + + + diff --git a/mobile/branding/unofficial/locales/en-US/brand.properties b/mobile/branding/unofficial/locales/en-US/brand.properties new file mode 100644 index 000000000000..1c1ef7c42333 --- /dev/null +++ b/mobile/branding/unofficial/locales/en-US/brand.properties @@ -0,0 +1,2 @@ +brandShortName=Fennec +brandFullName=Mozilla Fennec diff --git a/mobile/branding/unofficial/locales/jar.mn b/mobile/branding/unofficial/locales/jar.mn new file mode 100644 index 000000000000..de3d979b7751 --- /dev/null +++ b/mobile/branding/unofficial/locales/jar.mn @@ -0,0 +1,7 @@ +#filter substitution + +@AB_CD@.jar: +% locale branding @AB_CD@ %locale/branding/ +# Nightly branding only exists in en-US + locale/branding/brand.dtd (en-US/brand.dtd) +* locale/branding/brand.properties (en-US/brand.properties) diff --git a/mobile/confvars.sh b/mobile/confvars.sh index 02164fb49cf6..6ef92163bc2e 100644 --- a/mobile/confvars.sh +++ b/mobile/confvars.sh @@ -40,7 +40,7 @@ MOZ_APP_UA_NAME=Fennec MOZ_APP_VERSION=6.0a1 -MOZ_BRANDING_DIRECTORY=mobile/branding/nightly +MOZ_BRANDING_DIRECTORY=mobile/branding/unofficial MOZ_OFFICIAL_BRANDING_DIRECTORY=mobile/branding/official # MOZ_APP_DISPLAYNAME is set by branding/configure.sh From 3805b0a13b4ea483a81626ddf337b937100d79f0 Mon Sep 17 00:00:00 2001 From: Alastair Robertson Date: Thu, 19 May 2011 05:56:00 -0700 Subject: [PATCH 229/282] Bug 606681 - deleteTabValue should not throw an exception [r=zpao] --- browser/components/sessionstore/src/nsSessionStore.js | 4 ---- .../components/sessionstore/test/browser/browser_345898.js | 6 ------ .../components/sessionstore/test/browser/browser_350525.js | 7 +++++++ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/browser/components/sessionstore/src/nsSessionStore.js b/browser/components/sessionstore/src/nsSessionStore.js index a1a12f33ad62..7e6688083680 100644 --- a/browser/components/sessionstore/src/nsSessionStore.js +++ b/browser/components/sessionstore/src/nsSessionStore.js @@ -1344,8 +1344,6 @@ SessionStoreService.prototype = { if (aWindow.__SSi && this._windows[aWindow.__SSi].extData && this._windows[aWindow.__SSi].extData[aKey]) delete this._windows[aWindow.__SSi].extData[aKey]; - else - throw (Components.returnCode = Cr.NS_ERROR_INVALID_ARG); }, getTabValue: function sss_getTabValue(aTab, aKey) { @@ -1392,8 +1390,6 @@ SessionStoreService.prototype = { if (deleteFrom && deleteFrom[aKey]) delete deleteFrom[aKey]; - else - throw (Components.returnCode = Cr.NS_ERROR_INVALID_ARG); }, persistTabAttribute: function sss_persistTabAttribute(aName) { diff --git a/browser/components/sessionstore/test/browser/browser_345898.js b/browser/components/sessionstore/test/browser/browser_345898.js index 367c792cff2f..36a01a8df6af 100644 --- a/browser/components/sessionstore/test/browser/browser_345898.js +++ b/browser/components/sessionstore/test/browser/browser_345898.js @@ -74,10 +74,4 @@ function test() { "Invalid window for getWindowValue throws"); ok(test(function() ss.setWindowValue({}, "", "")), "Invalid window for setWindowValue throws"); - ok(test(function() ss.deleteWindowValue({}, "")), - "Invalid window for deleteWindowValue throws"); - ok(test(function() ss.deleteWindowValue(window, Date.now().toString())), - "Nonexistent value for deleteWindowValue throws"); - ok(test(function() ss.deleteTabValue(gBrowser.selectedTab, Date.now().toString())), - "Nonexistent value for deleteTabValue throws"); } diff --git a/browser/components/sessionstore/test/browser/browser_350525.js b/browser/components/sessionstore/test/browser/browser_350525.js index 05100c58c3b9..679892ccc998 100644 --- a/browser/components/sessionstore/test/browser/browser_350525.js +++ b/browser/components/sessionstore/test/browser/browser_350525.js @@ -39,6 +39,9 @@ function test() { // value should not exist post-delete is(ss.getWindowValue(window, key), "", "window value was deleted"); + // test deleting a non-existent value + ok(test(function() ss.deleteWindowValue(window, key)), "delete non-existent window value"); + ///////////////////////// // setTabValue, et al. // ///////////////////////// @@ -55,9 +58,13 @@ function test() { // test deleting ok(test(function() ss.deleteTabValue(tab, key)), "delete the tab value"); + // value should not exist post-delete is(ss.getTabValue(tab, key), "", "tab value was deleted"); + // test deleting a non-existent value + ok(test(function() ss.deleteTabValue(tab, key)), "delete non-existent tab value"); + // clean up tabbrowser.removeTab(tab); From 61d6d658647ad6bb7f6200e7a0283a1bdbdf1f47 Mon Sep 17 00:00:00 2001 From: Olli Pettay Date: Thu, 19 May 2011 17:48:17 +0300 Subject: [PATCH 230/282] Bug 657997 - loadFrameScript should never use http and should use a script runner when needed, r=bz+mfinkle --- content/base/src/nsFrameMessageManager.cpp | 11 +++++++++++ .../base/src/nsInProcessTabChildGlobal.cpp | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/content/base/src/nsFrameMessageManager.cpp b/content/base/src/nsFrameMessageManager.cpp index c297c5247490..e831a8bebea6 100644 --- a/content/base/src/nsFrameMessageManager.cpp +++ b/content/base/src/nsFrameMessageManager.cpp @@ -51,6 +51,7 @@ #include "nsIXULRuntime.h" #include "nsIScriptError.h" #include "nsIConsoleService.h" +#include "nsIProtocolHandler.h" static PRBool IsChromeProcess() @@ -679,6 +680,16 @@ nsFrameScriptExecutor::LoadFrameScriptInternal(const nsAString& aURL) if (NS_FAILED(rv)) { return; } + + PRBool hasFlags; + rv = NS_URIChainHasFlags(uri, + nsIProtocolHandler::URI_IS_LOCAL_RESOURCE, + &hasFlags); + if (NS_FAILED(rv) || !hasFlags) { + NS_WARNING("Will not load a frame script!"); + return; + } + nsCOMPtr channel; NS_NewChannel(getter_AddRefs(channel), uri); if (!channel) { diff --git a/content/base/src/nsInProcessTabChildGlobal.cpp b/content/base/src/nsInProcessTabChildGlobal.cpp index 33d0708a5f15..17028c9c6e41 100644 --- a/content/base/src/nsInProcessTabChildGlobal.cpp +++ b/content/base/src/nsInProcessTabChildGlobal.cpp @@ -329,9 +329,28 @@ nsInProcessTabChildGlobal::InitTabChildGlobal() return NS_OK; } +class nsAsyncScriptLoad : public nsRunnable +{ +public: + nsAsyncScriptLoad(nsInProcessTabChildGlobal* aTabChild, const nsAString& aURL) + : mTabChild(aTabChild), mURL(aURL) {} + + NS_IMETHOD Run() + { + mTabChild->LoadFrameScript(mURL); + return NS_OK; + } + nsRefPtr mTabChild; + nsString mURL; +}; + void nsInProcessTabChildGlobal::LoadFrameScript(const nsAString& aURL) { + if (!nsContentUtils::IsSafeToRunScript()) { + nsContentUtils::AddScriptRunner(new nsAsyncScriptLoad(this, aURL)); + return; + } if (!mInitialized) { mInitialized = PR_TRUE; Init(); From 35e0b148478241edcb1699fb72a4c211383247fa Mon Sep 17 00:00:00 2001 From: Wes Johnston Date: Thu, 19 May 2011 08:50:36 -0700 Subject: [PATCH 231/282] Bug 567121 - Clear autocomplete after history writer is done. r=mfinkle --- mobile/components/AutoCompleteCache.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mobile/components/AutoCompleteCache.js b/mobile/components/AutoCompleteCache.js index 047948cbc2c3..bdcaf52bbfa5 100644 --- a/mobile/components/AutoCompleteCache.js +++ b/mobile/components/AutoCompleteCache.js @@ -262,7 +262,7 @@ function AutoCompleteCache() { AutoCompleteUtils.init(); Services.obs.addObserver(this, "browser:cache-session-history-reload", true); - Services.obs.addObserver(this, "browser:purge-session-history", true); + Services.obs.addObserver(this, "places-expiration-finished", true); Services.obs.addObserver(this, "browser-search-engine-modified", true); } @@ -344,7 +344,7 @@ AutoCompleteCache.prototype = { else AutoCompleteUtils.fetch(AutoCompleteUtils.query); break; - case "browser:purge-session-history": + case "places-expiration-finished": AutoCompleteUtils.fetch(AutoCompleteUtils.query); break; case "browser-search-engine-modified": From 627dcdb633f037376d934512d81f5ac4f7c08538 Mon Sep 17 00:00:00 2001 From: Mounir Lamouri Date: Thu, 19 May 2011 18:54:26 +0200 Subject: [PATCH 232/282] Backout bug 654926 because of perma orange on Win Opt xpcshell. --- netwerk/cache/nsCacheEntryDescriptor.cpp | 34 ++---- netwerk/cache/nsCacheEntryDescriptor.h | 17 ++- netwerk/cache/nsDiskCacheStreams.cpp | 7 +- netwerk/test/unit/test_bug654926.js | 101 ------------------ .../test/unit/test_bug654926_doom_and_read.js | 100 ----------------- netwerk/test/unit/test_bug654926_test_seek.js | 87 --------------- 6 files changed, 19 insertions(+), 327 deletions(-) delete mode 100644 netwerk/test/unit/test_bug654926.js delete mode 100644 netwerk/test/unit/test_bug654926_doom_and_read.js delete mode 100644 netwerk/test/unit/test_bug654926_test_seek.js diff --git a/netwerk/cache/nsCacheEntryDescriptor.cpp b/netwerk/cache/nsCacheEntryDescriptor.cpp index a8c2196255e7..0b2ed96c7eb6 100644 --- a/netwerk/cache/nsCacheEntryDescriptor.cpp +++ b/netwerk/cache/nsCacheEntryDescriptor.cpp @@ -609,34 +609,22 @@ nsOutputStreamWrapper::LazyInit() nsCacheEntry* cacheEntry = mDescriptor->CacheEntry(); if (!cacheEntry) return NS_ERROR_NOT_AVAILABLE; - NS_ASSERTION(mOutput == nsnull, "mOutput set in LazyInit"); - - nsCOMPtr stream; rv = nsCacheService::OpenOutputStreamForEntry(cacheEntry, mode, mStartOffset, - getter_AddRefs(stream)); - if (NS_FAILED(rv)) - return rv; + getter_AddRefs(mOutput)); + if (NS_FAILED(rv)) return rv; + + mDescriptor->mOutput = mOutput; nsCacheDevice* device = cacheEntry->CacheDevice(); - if (device) { - // the entry has been truncated to mStartOffset bytes, inform device - PRInt32 size = cacheEntry->DataSize(); - rv = device->OnDataSizeChange(cacheEntry, mStartOffset - size); - if (NS_SUCCEEDED(rv)) - cacheEntry->SetDataSize(mStartOffset); - } else { - rv = NS_ERROR_NOT_AVAILABLE; - } + if (!device) return NS_ERROR_NOT_AVAILABLE; - // If anything above failed, clean up internal state and get out of here - // (see bug #654926)... - if (NS_FAILED(rv)) { - mDescriptor->InternalCleanup(stream); - return rv; - } + // the entry has been truncated to mStartOffset bytes, inform the device. + PRInt32 size = cacheEntry->DataSize(); + rv = device->OnDataSizeChange(cacheEntry, mStartOffset - size); + if (NS_FAILED(rv)) return rv; + + cacheEntry->SetDataSize(mStartOffset); - // ... otherwise, set members and mark initialized - mDescriptor->mOutput = mOutput = stream; mInitialized = PR_TRUE; return NS_OK; } diff --git a/netwerk/cache/nsCacheEntryDescriptor.h b/netwerk/cache/nsCacheEntryDescriptor.h index 4416c5b9c9c5..c74ed5345744 100644 --- a/netwerk/cache/nsCacheEntryDescriptor.h +++ b/netwerk/cache/nsCacheEntryDescriptor.h @@ -77,22 +77,19 @@ public: void CloseOutput(void) { - InternalCleanup(mOutput); - mOutput = nsnull; - } - -private: - void InternalCleanup(nsIOutputStream *stream) - { - if (stream) { - nsCOMPtr tmp (do_QueryInterface(stream)); + if (mOutput) { + nsCOMPtr tmp (do_QueryInterface(mOutput)); if (tmp) tmp->CloseInternal(); else - stream->Close(); + mOutput->Close(); + + mOutput = nsnull; } } +private: + /************************************************************************* * input stream wrapper class - diff --git a/netwerk/cache/nsDiskCacheStreams.cpp b/netwerk/cache/nsDiskCacheStreams.cpp index 30bc6e60af65..36cd1eaea427 100644 --- a/netwerk/cache/nsDiskCacheStreams.cpp +++ b/netwerk/cache/nsDiskCacheStreams.cpp @@ -484,13 +484,8 @@ nsDiskCacheStreamIO::Flush() CACHE_LOG_DEBUG(("CACHE: Flush [%x doomed=%u]\n", mBinding->mRecord.HashNumber(), mBinding->mDoomed)); - if (!mBufDirty) { - if (mFD) { - (void) PR_Close(mFD); - mFD = nsnull; - } + if (!mBufDirty) return NS_OK; - } // write data to cache blocks, or flush mBuffer to file nsDiskCacheMap *cacheMap = mDevice->CacheMap(); // get map reference diff --git a/netwerk/test/unit/test_bug654926.js b/netwerk/test/unit/test_bug654926.js deleted file mode 100644 index 769521b60c77..000000000000 --- a/netwerk/test/unit/test_bug654926.js +++ /dev/null @@ -1,101 +0,0 @@ -const Cc = Components.classes; -const Ci = Components.interfaces; -const Cr = Components.results; - -var _CSvc; -function get_cache_service() { - if (_CSvc) - return _CSvc; - - return _CSvc = Cc["@mozilla.org/network/cache-service;1"]. - getService(Ci.nsICacheService); -} - -function get_ostream_for_entry(key, asFile, append, entryRef) -{ - var cache = get_cache_service(); - var session = cache.createSession( - "HTTP", - asFile ? Ci.nsICache.STORE_ON_DISK_AS_FILE - : Ci.nsICache.STORE_ON_DISK, - Ci.nsICache.STREAM_BASED); - var cacheEntry = session.openCacheEntry( - key, - append ? Ci.nsICache.ACCESS_READ_WRITE - : Ci.nsICache.ACCESS_WRITE, - true); - var oStream = cacheEntry.openOutputStream(append ? cacheEntry.dataSize : 0); - entryRef.value = cacheEntry; - return oStream; -} - -function gen_1MiB() -{ - var i; - var data="x"; - for (i=0 ; i < 20 ; i++) - data+=data; - return data; -} - -function write_and_check(str, data, len) -{ - var written = str.write(data, len); - if (written != len) { - do_throw("str.write has not written all data!\n" + - " Expected: " + len + "\n" + - " Actual: " + written + "\n"); - } -} - -function write_datafile() -{ - var entry = {}; - var oStr = get_ostream_for_entry("data", true, false, entry); - var data = gen_1MiB(); - - // 6MiB - var i; - for (i=0 ; i<6 ; i++) - write_and_check(oStr, data, data.length); - - oStr.close(); - entry.value.close(); -} - -function append_datafile() -{ - var entry = {}; - var oStr = get_ostream_for_entry("data", false, true, entry); - var data = gen_1MiB(); - - - // append 1MiB - try { - write_and_check(oStr, data, data.length); - do_throw(); - } - catch (ex) { } - - // closing the ostream should fail in this case - try { - oStr.close(); - do_throw(); - } - catch (ex) { } - - entry.value.close(); -} - -function run_test() { - do_get_profile(); - - // clear the cache - get_cache_service().evictEntries(Ci.nsICache.STORE_ANYWHERE); - - // force to write file bigger than 5MiB - write_datafile(); - - // try to append the entry - append_datafile(); -} diff --git a/netwerk/test/unit/test_bug654926_doom_and_read.js b/netwerk/test/unit/test_bug654926_doom_and_read.js deleted file mode 100644 index c180972f83b5..000000000000 --- a/netwerk/test/unit/test_bug654926_doom_and_read.js +++ /dev/null @@ -1,100 +0,0 @@ -const Cc = Components.classes; -const Ci = Components.interfaces; -const Cr = Components.results; - -var _CSvc; -function get_cache_service() { - if (_CSvc) - return _CSvc; - - return _CSvc = Cc["@mozilla.org/network/cache-service;1"]. - getService(Ci.nsICacheService); -} - -function get_ostream_for_entry(key, asFile, append, entryRef) -{ - var cache = get_cache_service(); - var session = cache.createSession( - "HTTP", - asFile ? Ci.nsICache.STORE_ON_DISK_AS_FILE - : Ci.nsICache.STORE_ON_DISK, - Ci.nsICache.STREAM_BASED); - var cacheEntry = session.openCacheEntry( - key, - append ? Ci.nsICache.ACCESS_READ_WRITE - : Ci.nsICache.ACCESS_WRITE, - true); - var oStream = cacheEntry.openOutputStream(append ? cacheEntry.dataSize : 0); - entryRef.value = cacheEntry; - return oStream; -} - -function gen_1MiB() -{ - var i; - var data="x"; - for (i=0 ; i < 20 ; i++) - data+=data; - return data; -} - -function write_and_check(str, data, len) -{ - var written = str.write(data, len); - if (written != len) { - do_throw("str.write has not written all data!\n" + - " Expected: " + len + "\n" + - " Actual: " + written + "\n"); - } -} - -function make_input_stream_scriptable(input) { - var wrapper = Cc["@mozilla.org/scriptableinputstream;1"]. - createInstance(Ci.nsIScriptableInputStream); - wrapper.init(input); - return wrapper; -} - -function write_datafile() -{ - var entry = {}; - var oStr = get_ostream_for_entry("data", true, false, entry); - var data = gen_1MiB(); - - write_and_check(oStr, data, data.length); - - oStr.close(); - entry.value.close(); -} - -function test_read_after_doom() -{ - var entry = {}; - var oStr = get_ostream_for_entry("data", false, true, entry); - var data = gen_1MiB(); - - entry.value.doom(); - write_and_check(oStr, data, data.length); - - oStr.close(); - - var iStr = make_input_stream_scriptable(entry.value.openInputStream(0)); - var read = iStr.read(iStr.available()); - do_check_eq(read.length, 2*1024*1024); - iStr.close(); - - entry.value.close(); -} - -function run_test() { - do_get_profile(); - - // clear the cache - get_cache_service().evictEntries(Ci.nsICache.STORE_ANYWHERE); - - // force to write file bigger than 5MiB - write_datafile(); - - // open, doom, append, read - test_read_after_doom(); -} diff --git a/netwerk/test/unit/test_bug654926_test_seek.js b/netwerk/test/unit/test_bug654926_test_seek.js deleted file mode 100644 index 61b70b99bb1c..000000000000 --- a/netwerk/test/unit/test_bug654926_test_seek.js +++ /dev/null @@ -1,87 +0,0 @@ -const Cc = Components.classes; -const Ci = Components.interfaces; -const Cr = Components.results; - -var _CSvc; -function get_cache_service() { - if (_CSvc) - return _CSvc; - - return _CSvc = Cc["@mozilla.org/network/cache-service;1"]. - getService(Ci.nsICacheService); -} - -function get_ostream_for_entry(key, asFile, append, entryRef) -{ - var cache = get_cache_service(); - var session = cache.createSession( - "HTTP", - asFile ? Ci.nsICache.STORE_ON_DISK_AS_FILE - : Ci.nsICache.STORE_ON_DISK, - Ci.nsICache.STREAM_BASED); - var cacheEntry = session.openCacheEntry( - key, - append ? Ci.nsICache.ACCESS_READ_WRITE - : Ci.nsICache.ACCESS_WRITE, - true); - var oStream = cacheEntry.openOutputStream(append ? cacheEntry.dataSize : 0); - entryRef.value = cacheEntry; - return oStream; -} - -function gen_1MiB() -{ - var i; - var data="x"; - for (i=0 ; i < 20 ; i++) - data+=data; - return data; -} - -function write_and_check(str, data, len) -{ - var written = str.write(data, len); - if (written != len) { - do_throw("str.write has not written all data!\n" + - " Expected: " + len + "\n" + - " Actual: " + written + "\n"); - } -} - -function write_datafile() -{ - var entry = {}; - var oStr = get_ostream_for_entry("data", true, false, entry); - var data = gen_1MiB(); - - write_and_check(oStr, data, data.length); - - oStr.close(); - entry.value.close(); -} - -function open_for_readwrite() -{ - var entry = {}; - var oStr = get_ostream_for_entry("data", false, true, entry); - - // Opening the entry for appending data calls nsDiskCacheStreamIO::Seek() - // which initializes mFD. If no data is written then mBufDirty is false and - // mFD won't be closed in nsDiskCacheStreamIO::Flush(). - - oStr.close(); - entry.value.close(); -} - -function run_test() { - do_get_profile(); - - // clear the cache - get_cache_service().evictEntries(Ci.nsICache.STORE_ANYWHERE); - - // force to write file bigger than 5MiB - write_datafile(); - - // try to open the entry for appending - open_for_readwrite(); -} From 08d340e56be46a09e11e70d97e6ef58de42428c4 Mon Sep 17 00:00:00 2001 From: Ian Moody Date: Fri, 20 May 2011 00:15:28 +0200 Subject: [PATCH 233/282] Bug 657143 - Add Test and catch a few missed properties. r=bz --- layout/style/nsComputedDOMStyle.cpp | 14 ++--- layout/style/test/Makefile.in | 1 + layout/style/test/test_bug657143.html | 75 +++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 layout/style/test/test_bug657143.html diff --git a/layout/style/nsComputedDOMStyle.cpp b/layout/style/nsComputedDOMStyle.cpp index cdc58eef5ac7..bec6cea40065 100644 --- a/layout/style/nsComputedDOMStyle.cpp +++ b/layout/style/nsComputedDOMStyle.cpp @@ -4256,6 +4256,7 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength) COMPUTED_STYLE_MAP_ENTRY(font_variant, FontVariant), COMPUTED_STYLE_MAP_ENTRY(font_weight, FontWeight), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(height, Height), + COMPUTED_STYLE_MAP_ENTRY(ime_mode, IMEMode), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(left, Left), COMPUTED_STYLE_MAP_ENTRY(letter_spacing, LetterSpacing), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(line_height, LineHeight), @@ -4274,14 +4275,13 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength) COMPUTED_STYLE_MAP_ENTRY_LAYOUT(max_width, MaxWidth), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(min_height, MinHeight), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(min_width, MinWidth), - COMPUTED_STYLE_MAP_ENTRY(ime_mode, IMEMode), COMPUTED_STYLE_MAP_ENTRY(opacity, Opacity), // COMPUTED_STYLE_MAP_ENTRY(orphans, Orphans), //// COMPUTED_STYLE_MAP_ENTRY(outline, Outline), COMPUTED_STYLE_MAP_ENTRY(outline_color, OutlineColor), + COMPUTED_STYLE_MAP_ENTRY(outline_offset, OutlineOffset), COMPUTED_STYLE_MAP_ENTRY(outline_style, OutlineStyle), COMPUTED_STYLE_MAP_ENTRY(outline_width, OutlineWidth), - COMPUTED_STYLE_MAP_ENTRY(outline_offset, OutlineOffset), COMPUTED_STYLE_MAP_ENTRY(overflow, Overflow), COMPUTED_STYLE_MAP_ENTRY(overflow_x, OverflowX), COMPUTED_STYLE_MAP_ENTRY(overflow_y, OverflowY), @@ -4347,18 +4347,19 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength) COMPUTED_STYLE_MAP_ENTRY(box_pack, BoxPack), COMPUTED_STYLE_MAP_ENTRY(box_sizing, BoxSizing), COMPUTED_STYLE_MAP_ENTRY(_moz_column_count, ColumnCount), - COMPUTED_STYLE_MAP_ENTRY(_moz_column_width, ColumnWidth), COMPUTED_STYLE_MAP_ENTRY(_moz_column_gap, ColumnGap), //// COMPUTED_STYLE_MAP_ENTRY(_moz_column_rule, ColumnRule), COMPUTED_STYLE_MAP_ENTRY(_moz_column_rule_color, ColumnRuleColor), - COMPUTED_STYLE_MAP_ENTRY(_moz_column_rule_width, ColumnRuleWidth), COMPUTED_STYLE_MAP_ENTRY(_moz_column_rule_style, ColumnRuleStyle), + COMPUTED_STYLE_MAP_ENTRY(_moz_column_rule_width, ColumnRuleWidth), + COMPUTED_STYLE_MAP_ENTRY(_moz_column_width, ColumnWidth), COMPUTED_STYLE_MAP_ENTRY(float_edge, FloatEdge), COMPUTED_STYLE_MAP_ENTRY(font_feature_settings, MozFontFeatureSettings), COMPUTED_STYLE_MAP_ENTRY(font_language_override, MozFontLanguageOverride), COMPUTED_STYLE_MAP_ENTRY(force_broken_image_icon, ForceBrokenImageIcon), COMPUTED_STYLE_MAP_ENTRY(hyphens, Hyphens), COMPUTED_STYLE_MAP_ENTRY(image_region, ImageRegion), + COMPUTED_STYLE_MAP_ENTRY(orient, Orient), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_outline_radius_bottomLeft, OutlineRadiusBottomLeft), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_outline_radius_bottomRight,OutlineRadiusBottomRight), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_outline_radius_topLeft, OutlineRadiusTopLeft), @@ -4396,13 +4397,12 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength) COMPUTED_STYLE_MAP_ENTRY(filter, Filter), COMPUTED_STYLE_MAP_ENTRY(flood_color, FloodColor), COMPUTED_STYLE_MAP_ENTRY(flood_opacity, FloodOpacity), - COMPUTED_STYLE_MAP_ENTRY(lighting_color, LightingColor), COMPUTED_STYLE_MAP_ENTRY(image_rendering, ImageRendering), - COMPUTED_STYLE_MAP_ENTRY(mask, Mask), + COMPUTED_STYLE_MAP_ENTRY(lighting_color, LightingColor), COMPUTED_STYLE_MAP_ENTRY(marker_end, MarkerEnd), COMPUTED_STYLE_MAP_ENTRY(marker_mid, MarkerMid), COMPUTED_STYLE_MAP_ENTRY(marker_start, MarkerStart), - COMPUTED_STYLE_MAP_ENTRY(orient, Orient), + COMPUTED_STYLE_MAP_ENTRY(mask, Mask), COMPUTED_STYLE_MAP_ENTRY(shape_rendering, ShapeRendering), COMPUTED_STYLE_MAP_ENTRY(stop_color, StopColor), COMPUTED_STYLE_MAP_ENTRY(stop_opacity, StopOpacity), diff --git a/layout/style/test/Makefile.in b/layout/style/test/Makefile.in index 325cfa376676..d8c16a7c6b67 100644 --- a/layout/style/test/Makefile.in +++ b/layout/style/test/Makefile.in @@ -136,6 +136,7 @@ _TEST_FILES = test_acid3_test46.html \ test_bug573255.html \ test_bug580685.html \ test_bug635286.html \ + test_bug657143.html \ test_cascade.html \ test_compute_data_with_start_struct.html \ test_computed_style.html \ diff --git a/layout/style/test/test_bug657143.html b/layout/style/test/test_bug657143.html new file mode 100644 index 000000000000..330c15a15f20 --- /dev/null +++ b/layout/style/test/test_bug657143.html @@ -0,0 +1,75 @@ + + + + + Test for Bug 657143 + + + + + +Mozilla Bug 657143 +

    + +
    +
    +
    + + From 2f8d93ea26a390147713eccd494f8aeaddbc2f1d Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Thu, 19 May 2011 23:44:51 +0200 Subject: [PATCH 234/282] Bug 650573 - Panorama hangs when restoring a session; f=raymond, r=sdwilsh --- browser/base/content/tabview/groupitems.js | 11 +- browser/base/content/tabview/ui.js | 6 +- browser/base/content/test/tabview/Makefile.in | 1 + .../test/tabview/browser_tabview_bug624727.js | 5 +- .../test/tabview/browser_tabview_bug629195.js | 2 +- .../test/tabview/browser_tabview_bug650573.js | 100 ++++++++++++++++++ 6 files changed, 119 insertions(+), 6 deletions(-) create mode 100644 browser/base/content/test/tabview/browser_tabview_bug650573.js diff --git a/browser/base/content/tabview/groupitems.js b/browser/base/content/tabview/groupitems.js index 63c396de5a0d..ec2d808ba0d3 100644 --- a/browser/base/content/tabview/groupitems.js +++ b/browser/base/content/tabview/groupitems.js @@ -2163,7 +2163,16 @@ let GroupItems = { } toClose.forEach(function(groupItem) { - groupItem.destroy({immediately: true}); + // All remaining children in to-be-closed groups are re-used by + // session restore. Reconnect them so that they're put into their + // right groups. + groupItem.getChildren().forEach(function (tabItem) { + if (tabItem.parent && tabItem.parent.hidden) + iQ(tabItem.container).show(); + tabItem._reconnected = false; + tabItem._reconnect(); + }); + groupItem.close({immediately: true}); }); } diff --git a/browser/base/content/tabview/ui.js b/browser/base/content/tabview/ui.js index 644135e8363f..e9cba640ccf2 100644 --- a/browser/base/content/tabview/ui.js +++ b/browser/base/content/tabview/ui.js @@ -742,9 +742,9 @@ let UI = { } else { // If we're currently in the process of entering private browsing, // we don't want to go to the Tab View UI. - if (self._privateBrowsing.transitionMode) - return; - + if (self._storageBusyCount) + return; + // if not closing the last tab if (gBrowser.tabs.length > 1) { // Don't return to TabView if there are any app tabs diff --git a/browser/base/content/test/tabview/Makefile.in b/browser/base/content/test/tabview/Makefile.in index 06b8159500c7..98f33e7ba901 100644 --- a/browser/base/content/test/tabview/Makefile.in +++ b/browser/base/content/test/tabview/Makefile.in @@ -137,6 +137,7 @@ _BROWSER_FILES = \ browser_tabview_bug648882.js \ browser_tabview_bug649006.js \ browser_tabview_bug649307.js \ + browser_tabview_bug650573.js \ browser_tabview_bug651311.js \ browser_tabview_bug654941.js \ browser_tabview_bug656778.js \ diff --git a/browser/base/content/test/tabview/browser_tabview_bug624727.js b/browser/base/content/test/tabview/browser_tabview_bug624727.js index fa36ed567047..9bddd4b850fe 100644 --- a/browser/base/content/test/tabview/browser_tabview_bug624727.js +++ b/browser/base/content/test/tabview/browser_tabview_bug624727.js @@ -62,7 +62,10 @@ function test() { let testStateAfterEnteringPB = function () { let prefix = 'enter'; ok(!pb.privateBrowsingEnabled, prefix + ': private browsing is disabled'); - registerCleanupFunction(function () pb.privateBrowsingEnabled = false); + registerCleanupFunction(function () { + if (pb.privateBrowsingEnabled) + pb.privateBrowsingEnabled = false + }); togglePrivateBrowsing(function () { assertTabViewIsHidden(prefix); diff --git a/browser/base/content/test/tabview/browser_tabview_bug629195.js b/browser/base/content/test/tabview/browser_tabview_bug629195.js index 469a3998ff91..8961aefe048c 100644 --- a/browser/base/content/test/tabview/browser_tabview_bug629195.js +++ b/browser/base/content/test/tabview/browser_tabview_bug629195.js @@ -109,6 +109,6 @@ function restore(groupId) { }] }; let ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore); - ss.setWindowState(win, JSON.stringify(newState), false); + ss.setWindowState(win, JSON.stringify(newState), true); } diff --git a/browser/base/content/test/tabview/browser_tabview_bug650573.js b/browser/base/content/test/tabview/browser_tabview_bug650573.js new file mode 100644 index 000000000000..92588824041c --- /dev/null +++ b/browser/base/content/test/tabview/browser_tabview_bug650573.js @@ -0,0 +1,100 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +let ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore); +let stateBackup = ss.getBrowserState(); + +function test() { + waitForExplicitFinish(); + + registerCleanupFunction(function () { + ss.setBrowserState(stateBackup); + }); + + TabView._initFrame(function() { + executeSoon(testRestoreNormal); + }); +} + +function testRestoreNormal() { + testRestore("normal", function () { + waitForBrowserState(JSON.parse(stateBackup), testRestorePinned); + }); +} + +function testRestorePinned() { + gBrowser.loadOneTab("about:blank", {inBackground: true}); + gBrowser.pinTab(gBrowser.tabs[0]); + + testRestore("pinned", function () { + waitForBrowserState(JSON.parse(stateBackup), testRestoreHidden); + }); +} + +function testRestoreHidden() { + let groupItem = createGroupItemWithBlankTabs(window, 20, 20, 20, 1); + let tabItem = groupItem.getChild(0); + + hideGroupItem(groupItem, function () { + testRestore("hidden", function () { + isnot(tabItem.container.style.display, "none", "tabItem is visible"); + waitForFocus(finish); + }); + }); +} + +function testRestore(prefix, callback) { + waitForBrowserState(createBrowserState(), function () { + is(gBrowser.tabs.length, 2, prefix + ": two tabs restored"); + + let cw = TabView.getContentWindow(); + is(cw.GroupItems.groupItems.length, 2, prefix + ": we have two groupItems"); + + let [groupItem1, groupItem2] = cw.GroupItems.groupItems; + is(groupItem1.id, "1st-group-id", prefix + ": groupItem1's ID is valid"); + is(groupItem1.getChildren().length, 1, prefix + ": groupItem1 has one child"); + + is(groupItem2.id, "2nd-group-id", prefix + ": groupItem2's ID is valid"); + is(groupItem2.getChildren().length, 1, prefix + ": groupItem2 has one child"); + + callback(); + }); +} + +function waitForBrowserState(state, callback) { + window.addEventListener("SSWindowStateReady", function onReady() { + window.removeEventListener("SSWindowStateReady", onReady, false); + executeSoon(callback); + }, false); + + ss.setBrowserState(JSON.stringify(state)); +} + +function createBrowserState() { + let bounds = {left: 20, top: 20, width: 20, height: 20}; + + let tabViewGroups = {nextID: 99, activeGroupId: 1}; + let tabViewGroup = { + "1st-group-id": {bounds: bounds, title: "new group 1", id: "1st-group-id"}, + "2nd-group-id": {bounds: bounds, title: "new group 2", id: "2nd-group-id"} + }; + + let tab1Data = {bounds: bounds, url: "about:robots", groupID: "2nd-group-id"}; + let tab1 = { + entries: [{url: "about:robots"}], + extData: {"tabview-tab": JSON.stringify(tab1Data)} + }; + + let tab2Data = {bounds: bounds, url: "about:mozilla", groupID: "1st-group-id"}; + let tab2 = { + entries: [{url: "about:mozilla"}], + extData: {"tabview-tab": JSON.stringify(tab2Data)} + }; + + return {windows: [{ + tabs: [tab1, tab2], + selected: 1, + extData: {"tabview-groups": JSON.stringify(tabViewGroups), + "tabview-group": JSON.stringify(tabViewGroup)} + }]}; +} From c62091d5876941c2d68a3ccafd61d6d30670499b Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Thu, 19 May 2011 23:53:59 +0200 Subject: [PATCH 235/282] Bug 636279 - _tabsRestoringCount goes negative if setBrowserState called at browser startup and last session had pinned tab(s); r=zpao --- .../sessionstore/src/nsSessionStore.js | 3 +- .../sessionstore/test/browser/Makefile.in | 1 + .../test/browser/browser_636279.js | 106 ++++++++++++++++++ 3 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 browser/components/sessionstore/test/browser/browser_636279.js diff --git a/browser/components/sessionstore/src/nsSessionStore.js b/browser/components/sessionstore/src/nsSessionStore.js index 1f0a2d286a8c..9b002640023d 100644 --- a/browser/components/sessionstore/src/nsSessionStore.js +++ b/browser/components/sessionstore/src/nsSessionStore.js @@ -3974,7 +3974,8 @@ SessionStoreService.prototype = { this._removeTabsProgressListener(window); if (previousState == TAB_STATE_RESTORING) { - this._tabsRestoringCount--; + if (this._tabsRestoringCount) + this._tabsRestoringCount--; } else if (previousState == TAB_STATE_NEEDS_RESTORE) { // Make sure the session history listener is removed. This is normally diff --git a/browser/components/sessionstore/test/browser/Makefile.in b/browser/components/sessionstore/test/browser/Makefile.in index bbd1990aeb7f..1efce143b354 100644 --- a/browser/components/sessionstore/test/browser/Makefile.in +++ b/browser/components/sessionstore/test/browser/Makefile.in @@ -145,6 +145,7 @@ _BROWSER_TEST_FILES = \ browser_625257.js \ browser_628270.js \ browser_635418.js \ + browser_636279.js \ $(NULL) ifneq ($(OS_ARCH),Darwin) diff --git a/browser/components/sessionstore/test/browser/browser_636279.js b/browser/components/sessionstore/test/browser/browser_636279.js new file mode 100644 index 000000000000..e979dbf488a1 --- /dev/null +++ b/browser/components/sessionstore/test/browser/browser_636279.js @@ -0,0 +1,106 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +let ss = Cc["@mozilla.org/browser/sessionstore;1"]. + getService(Ci.nsISessionStore); + +const TAB_STATE_NEEDS_RESTORE = 1; +const TAB_STATE_RESTORING = 2; + +let stateBackup = ss.getBrowserState(); + +let statePinned = {windows:[{tabs:[ + {entries:[{url:"http://example.com#1"}], pinned: true} +]}]}; + +let state = {windows:[{tabs:[ + {entries:[{url:"http://example.com#1"}]}, + {entries:[{url:"http://example.com#2"}]}, + {entries:[{url:"http://example.com#3"}]} +]}]}; + +function test() { + waitForExplicitFinish(); + + registerCleanupFunction(function () { + Services.prefs.clearUserPref("browser.sessionstore.max_concurrent_tabs"); + TabsProgressListener.uninit(); + ss.setBrowserState(stateBackup); + }); + + Services.prefs.setIntPref("browser.sessionstore.max_concurrent_tabs", 2); + + TabsProgressListener.init(); + + window.addEventListener("SSWindowStateReady", function onReady() { + window.removeEventListener("SSWindowStateReady", onReady, false); + + let firstProgress = true; + + TabsProgressListener.setCallback(function (needsRestore, isRestoring) { + if (firstProgress) { + firstProgress = false; + is(isRestoring, 2, "restoring 2 tabs concurrently"); + } else { + ok(isRestoring < 3, "restoring max. 2 tabs concurrently"); + } + + if (0 == needsRestore) { + TabsProgressListener.unsetCallback(); + waitForFocus(finish); + } + }); + + ss.setBrowserState(JSON.stringify(state)); + }, false); + + ss.setBrowserState(JSON.stringify(statePinned)); +} + +function countTabs() { + let needsRestore = 0, isRestoring = 0; + let windowsEnum = Services.wm.getEnumerator("navigator:browser"); + + while (windowsEnum.hasMoreElements()) { + let window = windowsEnum.getNext(); + if (window.closed) + continue; + + for (let i = 0; i < window.gBrowser.tabs.length; i++) { + let browser = window.gBrowser.tabs[i].linkedBrowser; + if (browser.__SS_restoreState == TAB_STATE_RESTORING) + isRestoring++; + else if (browser.__SS_restoreState == TAB_STATE_NEEDS_RESTORE) + needsRestore++; + } + } + + return [needsRestore, isRestoring]; +} + +let TabsProgressListener = { + init: function () { + gBrowser.addTabsProgressListener(this); + }, + + uninit: function () { + this.unsetCallback(); + gBrowser.removeTabsProgressListener(this); + }, + + setCallback: function (callback) { + this.callback = callback; + }, + + unsetCallback: function () { + delete this.callback; + }, + + onStateChange: function (aBrowser, aWebProgress, aRequest, aStateFlags, aStatus) { + if (this.callback && aBrowser.__SS_restoreState == TAB_STATE_RESTORING && + aStateFlags & Ci.nsIWebProgressListener.STATE_STOP && + aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK && + aStateFlags & Ci.nsIWebProgressListener.STATE_IS_WINDOW) + this.callback.apply(null, countTabs()); + } +} From c5215aa5dcfb39aee3c7cc20f3cd20431f7fc0ee Mon Sep 17 00:00:00 2001 From: Ludovic Hirlimann Date: Fri, 20 May 2011 00:31:02 +0200 Subject: [PATCH 236/282] bug 658218 Remove the use of Internet config API in Safari migrator r=joshmoz --- .../migration/src/nsSafariProfileMigrator.cpp | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/browser/components/migration/src/nsSafariProfileMigrator.cpp b/browser/components/migration/src/nsSafariProfileMigrator.cpp index 52f277022fc2..f5617e63dfa1 100644 --- a/browser/components/migration/src/nsSafariProfileMigrator.cpp +++ b/browser/components/migration/src/nsSafariProfileMigrator.cpp @@ -1269,29 +1269,5 @@ nsSafariProfileMigrator::GetSourceHomePageURL(nsACString& aResult) return NS_OK; } -#ifdef __LP64__ return NS_ERROR_FAILURE; -#else - // Couldn't find the home page in com.apple.safai, time to check - // com.apple.internetconfig for this key! - ICInstance internetConfig; - OSStatus error = ::ICStart(&internetConfig, 'FRFX'); - if (error != noErr) - return NS_ERROR_FAILURE; - - ICAttr dummy; - Str255 homePagePValue; - long prefSize = sizeof(homePagePValue); - error = ::ICGetPref(internetConfig, kICWWWHomePage, &dummy, - homePagePValue, &prefSize); - if (error != noErr) - return NS_ERROR_FAILURE; - - char homePageValue[256] = ""; - CopyPascalStringToC((ConstStr255Param)homePagePValue, homePageValue); - aResult.Assign(homePageValue); - ::ICStop(internetConfig); - - return NS_OK; -#endif } From f01c81013aa3e119bde3abcafd5ed2be8a05a8c3 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Fri, 20 May 2011 00:28:45 +0200 Subject: [PATCH 237/282] Bug 649618: toDataURL on a zero canvas should return "data:," r=joe --- content/canvas/test/test_canvas.html | 2 +- content/html/content/src/nsHTMLCanvasElement.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/content/canvas/test/test_canvas.html b/content/canvas/test/test_canvas.html index 44943f5d8fb6..96fb75ea6cfa 100644 --- a/content/canvas/test/test_canvas.html +++ b/content/canvas/test/test_canvas.html @@ -21029,7 +21029,7 @@ var canvas = document.getElementById('c674'); var ctx = canvas.getContext('2d'); var data = canvas.toDataURL(); -todo(data === 'data:,', "data === 'data:,'"); +ok(data === 'data:,', "data === 'data:,'"); } diff --git a/content/html/content/src/nsHTMLCanvasElement.cpp b/content/html/content/src/nsHTMLCanvasElement.cpp index f73b008f3671..1a57c34e2d44 100644 --- a/content/html/content/src/nsHTMLCanvasElement.cpp +++ b/content/html/content/src/nsHTMLCanvasElement.cpp @@ -328,6 +328,12 @@ nsHTMLCanvasElement::ToDataURLImpl(const nsAString& aMimeType, { bool fallbackToPNG = false; + nsIntSize size = GetWidthHeight(); + if (size.height == 0 || size.width == 0) { + aDataURL = NS_LITERAL_STRING("data:,"); + return NS_OK; + } + nsAutoString type; nsContentUtils::ASCIIToLower(aMimeType, type); From 79bade5b8bed5b16660c1c74b7bda4ef081f0d0c Mon Sep 17 00:00:00 2001 From: Mounir Lamouri Date: Fri, 20 May 2011 00:32:36 +0200 Subject: [PATCH 238/282] Bug 658282 (1/2) - Improve css-invalid/input/ test suite. r=bz --- .../css-invalid/input/input-button-ref.html | 3 ++- .../css-invalid/input/input-email-ref.html | 3 ++- .../input/input-fieldset-legend-ref.html | 3 ++- .../css-invalid/input/input-fieldset-ref.html | 3 ++- .../css-invalid/input/input-image-ref.html | 3 ++- .../input/input-radio-checked-ref.html | 8 ++++++++ .../input/input-radio-customerror.html | 10 ++-------- .../input/input-radio-dyn-valid-1.html | 10 ++-------- .../input/input-radio-dyn-valid-2.html | 10 ++-------- .../input-radio-nogroup-required-invalid.html | 12 ++++-------- .../input-radio-nogroup-required-valid.html | 12 ++++-------- .../css-invalid/input/input-radio-ref.html | 8 ++++++++ .../css-invalid/input/input-radio-required.html | 14 ++++---------- layout/reftests/css-invalid/input/input-ref.html | 3 ++- .../css-invalid/input/input-submit-ref.html | 3 ++- .../css-invalid/input/input-url-ref.html | 3 ++- .../css-invalid/input/input-withtext-ref.html | 3 ++- layout/reftests/css-invalid/input/reftest.list | 12 ++++++------ layout/reftests/css-invalid/input/style.css | 16 ++++++++++++---- .../reftests/css-invalid/input/success-ref.html | 6 ------ 20 files changed, 70 insertions(+), 75 deletions(-) create mode 100644 layout/reftests/css-invalid/input/input-radio-checked-ref.html create mode 100644 layout/reftests/css-invalid/input/input-radio-ref.html delete mode 100644 layout/reftests/css-invalid/input/success-ref.html diff --git a/layout/reftests/css-invalid/input/input-button-ref.html b/layout/reftests/css-invalid/input/input-button-ref.html index 3b828533e314..6f001b21097d 100644 --- a/layout/reftests/css-invalid/input/input-button-ref.html +++ b/layout/reftests/css-invalid/input/input-button-ref.html @@ -1,6 +1,7 @@ + - + diff --git a/layout/reftests/css-invalid/input/input-email-ref.html b/layout/reftests/css-invalid/input/input-email-ref.html index ecec613c26ca..8c598ef9df2b 100644 --- a/layout/reftests/css-invalid/input/input-email-ref.html +++ b/layout/reftests/css-invalid/input/input-email-ref.html @@ -1,6 +1,7 @@ + - + diff --git a/layout/reftests/css-invalid/input/input-fieldset-legend-ref.html b/layout/reftests/css-invalid/input/input-fieldset-legend-ref.html index 763c383bda95..2a171df0a685 100644 --- a/layout/reftests/css-invalid/input/input-fieldset-legend-ref.html +++ b/layout/reftests/css-invalid/input/input-fieldset-legend-ref.html @@ -1,9 +1,10 @@ +
    - +
    diff --git a/layout/reftests/css-invalid/input/input-fieldset-ref.html b/layout/reftests/css-invalid/input/input-fieldset-ref.html index a9e123912558..25c90be99753 100644 --- a/layout/reftests/css-invalid/input/input-fieldset-ref.html +++ b/layout/reftests/css-invalid/input/input-fieldset-ref.html @@ -1,9 +1,10 @@ +
    - +
    diff --git a/layout/reftests/css-invalid/input/input-image-ref.html b/layout/reftests/css-invalid/input/input-image-ref.html index 6c014b895468..1509fe487cfe 100644 --- a/layout/reftests/css-invalid/input/input-image-ref.html +++ b/layout/reftests/css-invalid/input/input-image-ref.html @@ -1,6 +1,7 @@ + - + diff --git a/layout/reftests/css-invalid/input/input-radio-checked-ref.html b/layout/reftests/css-invalid/input/input-radio-checked-ref.html new file mode 100644 index 000000000000..45864b158cb7 --- /dev/null +++ b/layout/reftests/css-invalid/input/input-radio-checked-ref.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/layout/reftests/css-invalid/input/input-radio-customerror.html b/layout/reftests/css-invalid/input/input-radio-customerror.html index 119c1b887feb..e5fadd514cd8 100644 --- a/layout/reftests/css-invalid/input/input-radio-customerror.html +++ b/layout/reftests/css-invalid/input/input-radio-customerror.html @@ -4,14 +4,8 @@ radio should not be invalid. --> - - + + diff --git a/layout/reftests/css-invalid/input/input-radio-dyn-valid-1.html b/layout/reftests/css-invalid/input/input-radio-dyn-valid-1.html index e91be6cf5f35..30db7c015a4d 100644 --- a/layout/reftests/css-invalid/input/input-radio-dyn-valid-1.html +++ b/layout/reftests/css-invalid/input/input-radio-dyn-valid-1.html @@ -4,14 +4,8 @@ group, all radio should not suffer from being missing. --> - - + + diff --git a/layout/reftests/css-invalid/input/input-radio-dyn-valid-2.html b/layout/reftests/css-invalid/input/input-radio-dyn-valid-2.html index ad5c1c74ee66..a2cfbd6a10bb 100644 --- a/layout/reftests/css-invalid/input/input-radio-dyn-valid-2.html +++ b/layout/reftests/css-invalid/input/input-radio-dyn-valid-2.html @@ -4,14 +4,8 @@ group, all radio should not suffer from being missing. --> - - + + diff --git a/layout/reftests/css-invalid/input/input-radio-nogroup-required-invalid.html b/layout/reftests/css-invalid/input/input-radio-nogroup-required-invalid.html index 7e2610a2c3a4..d46b1607c295 100644 --- a/layout/reftests/css-invalid/input/input-radio-nogroup-required-invalid.html +++ b/layout/reftests/css-invalid/input/input-radio-nogroup-required-invalid.html @@ -1,12 +1,8 @@ - + - - + + + diff --git a/layout/reftests/css-invalid/input/input-radio-nogroup-required-valid.html b/layout/reftests/css-invalid/input/input-radio-nogroup-required-valid.html index 7eac15a1aea3..8587614725be 100644 --- a/layout/reftests/css-invalid/input/input-radio-nogroup-required-valid.html +++ b/layout/reftests/css-invalid/input/input-radio-nogroup-required-valid.html @@ -1,12 +1,8 @@ - + - - + + + diff --git a/layout/reftests/css-invalid/input/input-radio-ref.html b/layout/reftests/css-invalid/input/input-radio-ref.html new file mode 100644 index 000000000000..9abe06bca8a6 --- /dev/null +++ b/layout/reftests/css-invalid/input/input-radio-ref.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/layout/reftests/css-invalid/input/input-radio-required.html b/layout/reftests/css-invalid/input/input-radio-required.html index 8fcc7ec36be6..1faaedc13a5d 100644 --- a/layout/reftests/css-invalid/input/input-radio-required.html +++ b/layout/reftests/css-invalid/input/input-radio-required.html @@ -1,16 +1,10 @@ - + - - - + + + diff --git a/layout/reftests/css-invalid/input/input-ref.html b/layout/reftests/css-invalid/input/input-ref.html index 65b4b970783c..ad0de3cfbad2 100644 --- a/layout/reftests/css-invalid/input/input-ref.html +++ b/layout/reftests/css-invalid/input/input-ref.html @@ -1,6 +1,7 @@ + - + diff --git a/layout/reftests/css-invalid/input/input-submit-ref.html b/layout/reftests/css-invalid/input/input-submit-ref.html index d758ea56a6eb..a1a0aa7fb9ae 100644 --- a/layout/reftests/css-invalid/input/input-submit-ref.html +++ b/layout/reftests/css-invalid/input/input-submit-ref.html @@ -1,6 +1,7 @@ + - + diff --git a/layout/reftests/css-invalid/input/input-url-ref.html b/layout/reftests/css-invalid/input/input-url-ref.html index e95cdbca2e3e..387a384d6f6d 100644 --- a/layout/reftests/css-invalid/input/input-url-ref.html +++ b/layout/reftests/css-invalid/input/input-url-ref.html @@ -1,6 +1,7 @@ + - + diff --git a/layout/reftests/css-invalid/input/input-withtext-ref.html b/layout/reftests/css-invalid/input/input-withtext-ref.html index d54d05215749..1b4e93b008e0 100644 --- a/layout/reftests/css-invalid/input/input-withtext-ref.html +++ b/layout/reftests/css-invalid/input/input-withtext-ref.html @@ -1,6 +1,7 @@ + - + diff --git a/layout/reftests/css-invalid/input/reftest.list b/layout/reftests/css-invalid/input/reftest.list index e12b5372c7de..449b7ad746fc 100644 --- a/layout/reftests/css-invalid/input/reftest.list +++ b/layout/reftests/css-invalid/input/reftest.list @@ -23,12 +23,12 @@ fails-if(Android) == input-dyn-disabled.html input-ref.html == input-disabled-fieldset-1.html input-fieldset-ref.html == input-disabled-fieldset-2.html input-fieldset-ref.html == input-fieldset-legend.html input-fieldset-legend-ref.html -== input-radio-required.html success-ref.html -== input-radio-customerror.html success-ref.html -== input-radio-dyn-valid-1.html success-ref.html -== input-radio-dyn-valid-2.html success-ref.html -== input-radio-nogroup-required-valid.html success-ref.html -== input-radio-nogroup-required-invalid.html success-ref.html +== input-radio-required.html input-radio-ref.html +== input-radio-customerror.html input-radio-ref.html +== input-radio-dyn-valid-1.html input-radio-checked-ref.html +== input-radio-dyn-valid-2.html input-radio-ref.html +== input-radio-nogroup-required-valid.html input-radio-ref.html +== input-radio-nogroup-required-invalid.html input-radio-checked-ref.html == input-submit.html input-submit-ref.html == input-image.html input-image-ref.html # input type='hidden' shouldn't show diff --git a/layout/reftests/css-invalid/input/style.css b/layout/reftests/css-invalid/input/style.css index 2c4948f2f260..e3e221a26fe3 100644 --- a/layout/reftests/css-invalid/input/style.css +++ b/layout/reftests/css-invalid/input/style.css @@ -1,18 +1,26 @@ /* Override default style */ +input { + -moz-appearance: none; + background: none; +} input:invalid { box-shadow: none; } input.notinvalid { - background-color: green; + box-shadow: 0 0 1.5px 1px green; } input.notinvalid:invalid { - background-color: red; + box-shadow: 0 0 1.5px 1px red; } input.invalid { - background-color: red; + box-shadow: 0 0 1.5px 1px red; } input.invalid:invalid { - background-color: green; + box-shadow: 0 0 1.5px 1px green; +} + +input.ref { + box-shadow: 0 0 1.5px 1px green; } diff --git a/layout/reftests/css-invalid/input/success-ref.html b/layout/reftests/css-invalid/input/success-ref.html deleted file mode 100644 index bfa8e0a12cea..000000000000 --- a/layout/reftests/css-invalid/input/success-ref.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - SUCCESS - - From c120ac56808b396b00827c7afb0bd0fca692cc7b Mon Sep 17 00:00:00 2001 From: Mounir Lamouri Date: Fri, 20 May 2011 00:33:33 +0200 Subject: [PATCH 239/282] Bug 658282 (2/2) - Notify state change when a radio button checkness changes. r=bz --- .../html/content/src/nsHTMLInputElement.cpp | 8 +---- .../input/input-radio-focus-click.html | 30 +++++++++++++++++++ .../reftests/css-invalid/input/reftest.list | 1 + 3 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 layout/reftests/css-invalid/input/input-radio-focus-click.html diff --git a/content/html/content/src/nsHTMLInputElement.cpp b/content/html/content/src/nsHTMLInputElement.cpp index c1c701140109..602929b42637 100644 --- a/content/html/content/src/nsHTMLInputElement.cpp +++ b/content/html/content/src/nsHTMLInputElement.cpp @@ -1740,13 +1740,7 @@ nsHTMLInputElement::SetCheckedInternal(PRBool aChecked, PRBool aNotify) } } - if (mType == NS_FORM_INPUT_CHECKBOX) { - UpdateAllValidityStates(aNotify); - } - - if (mType == NS_FORM_INPUT_RADIO) { - UpdateValueMissingValidityState(); - } + UpdateAllValidityStates(aNotify); } NS_IMETHODIMP diff --git a/layout/reftests/css-invalid/input/input-radio-focus-click.html b/layout/reftests/css-invalid/input/input-radio-focus-click.html new file mode 100644 index 000000000000..1ed298caeabf --- /dev/null +++ b/layout/reftests/css-invalid/input/input-radio-focus-click.html @@ -0,0 +1,30 @@ + + + + + + + + + + + + diff --git a/layout/reftests/css-invalid/input/reftest.list b/layout/reftests/css-invalid/input/reftest.list index 449b7ad746fc..76d5ffd607de 100644 --- a/layout/reftests/css-invalid/input/reftest.list +++ b/layout/reftests/css-invalid/input/reftest.list @@ -29,6 +29,7 @@ fails-if(Android) == input-dyn-disabled.html input-ref.html == input-radio-dyn-valid-2.html input-radio-ref.html == input-radio-nogroup-required-valid.html input-radio-ref.html == input-radio-nogroup-required-invalid.html input-radio-checked-ref.html +== input-radio-focus-click.html input-radio-ref.html == input-submit.html input-submit-ref.html == input-image.html input-image-ref.html # input type='hidden' shouldn't show From 6ebce0d1a93d0d4e89c2879c769201479f306ec0 Mon Sep 17 00:00:00 2001 From: Daniel Holbert Date: Thu, 19 May 2011 17:50:57 -0700 Subject: [PATCH 240/282] Bug 656829: Treat unexpected pass in xpcshell subtests as immediate-failure instead of immediate-pass. r=ted --- testing/xpcshell/runxpcshelltests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/xpcshell/runxpcshelltests.py b/testing/xpcshell/runxpcshelltests.py index 138b8ae2fa99..52e1a269dfa8 100644 --- a/testing/xpcshell/runxpcshelltests.py +++ b/testing/xpcshell/runxpcshelltests.py @@ -506,7 +506,7 @@ class XPCShellTests(object): print "<<<<<<<" if (self.getReturnCode(proc) != 0) or \ - (stdout and re.search("^((parent|child): )?TEST-UNEXPECTED-FAIL", stdout, re.MULTILINE)) or \ + (stdout and re.search("^((parent|child): )?TEST-UNEXPECTED-", stdout, re.MULTILINE)) or \ (stdout and re.search(": SyntaxError:", stdout, re.MULTILINE)): print "TEST-UNEXPECTED-FAIL | %s | test failed (with xpcshell return code: %d), see following log:" % (test, self.getReturnCode(proc)) print_stdout(stdout) From 66ce76121f8a8519e0341c6573c81768dd2ae548 Mon Sep 17 00:00:00 2001 From: Daniel Holbert Date: Thu, 19 May 2011 17:51:20 -0700 Subject: [PATCH 241/282] Bug 657554: Remove call to undefined method "endTest" from test_bug519928.html. r=ehsan --- editor/composer/test/test_bug519928.html | 1 - 1 file changed, 1 deletion(-) diff --git a/editor/composer/test/test_bug519928.html b/editor/composer/test/test_bug519928.html index 413ef68c0cbc..0ec67e4b22ef 100644 --- a/editor/composer/test/test_bug519928.html +++ b/editor/composer/test/test_bug519928.html @@ -112,7 +112,6 @@ function testDocumentDisabledJS() { var msg = "The inner iframe should not be able to run Javascript"; is(self_.ICanRunMyJS, false, msg); SimpleTest.finish(); - endTest(); }, false); var iframeSrc = "data:text/html,