| Index: third_party/lzma/v4_65/files/CPP/Common/Wildcard.cpp
|
| diff --git a/third_party/lzma/v4_65/files/CPP/Common/Wildcard.cpp b/third_party/lzma/v4_65/files/CPP/Common/Wildcard.cpp
|
| deleted file mode 100644
|
| index 141c5dd6cf9ff44577d8f422159a23c606449aaa..0000000000000000000000000000000000000000
|
| --- a/third_party/lzma/v4_65/files/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<N [0, M) ... [N-M-1, N-1) same as ForBoth-File
|
| - nonreq [0, M) same as ForBoth-File
|
| -
|
| -ForBoth req m<=N [0, M) ... [N-M, N) same as ForBoth-File
|
| - nonreq [0, M) same as ForBoth-File
|
| -
|
| -*/
|
| -
|
| -bool CItem::CheckPath(const UStringVector &pathParts, bool isFile) const
|
| -{
|
| - if (!isFile && !ForDir)
|
| - return false;
|
| - int delta = (int)pathParts.Size() - (int)PathParts.Size();
|
| - if (delta < 0)
|
| - return false;
|
| - int start = 0;
|
| - int finish = 0;
|
| - if (isFile)
|
| - {
|
| - if (!ForDir && !Recursive && delta !=0)
|
| - return false;
|
| - if (!ForFile && delta == 0)
|
| - return false;
|
| - if (!ForDir && Recursive)
|
| - start = delta;
|
| - }
|
| - if (Recursive)
|
| - {
|
| - finish = delta;
|
| - if (isFile && !ForFile)
|
| - finish = delta - 1;
|
| - }
|
| - for (int d = start; d <= finish; d++)
|
| - {
|
| - int i;
|
| - for (i = 0; i < PathParts.Size(); i++)
|
| - if (!CompareWildCardWithName(PathParts[i], pathParts[i + d]))
|
| - break;
|
| - if (i == PathParts.Size())
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -int CCensorNode::FindSubNode(const UString &name) const
|
| -{
|
| - for (int i = 0; i < SubNodes.Size(); i++)
|
| - if (CompareFileNames(SubNodes[i].Name, name) == 0)
|
| - return i;
|
| - return -1;
|
| -}
|
| -
|
| -void CCensorNode::AddItemSimple(bool include, CItem &item)
|
| -{
|
| - if (include)
|
| - IncludeItems.Add(item);
|
| - else
|
| - ExcludeItems.Add(item);
|
| -}
|
| -
|
| -void CCensorNode::AddItem(bool include, CItem &item)
|
| -{
|
| - if (item.PathParts.Size() <= 1)
|
| - {
|
| - AddItemSimple(include, item);
|
| - return;
|
| - }
|
| - const UString &front = item.PathParts.Front();
|
| - if (DoesNameContainWildCard(front))
|
| - {
|
| - AddItemSimple(include, item);
|
| - return;
|
| - }
|
| - int index = FindSubNode(front);
|
| - if (index < 0)
|
| - index = SubNodes.Add(CCensorNode(front, this));
|
| - item.PathParts.Delete(0);
|
| - SubNodes[index].AddItem(include, item);
|
| -}
|
| -
|
| -void CCensorNode::AddItem(bool include, const UString &path, bool recursive, bool forFile, bool forDir)
|
| -{
|
| - CItem item;
|
| - SplitPathToParts(path, item.PathParts);
|
| - item.Recursive = recursive;
|
| - item.ForFile = forFile;
|
| - item.ForDir = forDir;
|
| - AddItem(include, item);
|
| -}
|
| -
|
| -bool CCensorNode::NeedCheckSubDirs() const
|
| -{
|
| - for (int i = 0; i < IncludeItems.Size(); i++)
|
| - {
|
| - const CItem &item = IncludeItems[i];
|
| - if (item.Recursive || item.PathParts.Size() > 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<CItem> &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);
|
| -}
|
| -
|
| -}
|
|
|