Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/7zip/UI/Common/ExtractingFilePath.cpp')
-rwxr-xr-xCPP/7zip/UI/Common/ExtractingFilePath.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/CPP/7zip/UI/Common/ExtractingFilePath.cpp b/CPP/7zip/UI/Common/ExtractingFilePath.cpp
new file mode 100755
index 00000000..a0b17282
--- /dev/null
+++ b/CPP/7zip/UI/Common/ExtractingFilePath.cpp
@@ -0,0 +1,75 @@
+// ExtractingFilePath.cpp
+
+#include "StdAfx.h"
+#include "ExtractingFilePath.h"
+
+static void ReplaceDisk(UString &s)
+{
+ int i;
+ for (i = 0; i < s.Length(); i++)
+ if (s[i] != ' ')
+ break;
+ if (s.Length() > i + 1)
+ {
+ if (s[i + 1] == L':')
+ {
+ s.Delete(i + 1);
+ // s.Insert(i + 1, L'_');
+ }
+ }
+}
+
+UString GetCorrectFileName(const UString &path)
+{
+ UString result = path;
+ {
+ UString test = path;
+ test.Trim();
+ if (test == L"..")
+ result.Replace(L"..", L"");
+ }
+ ReplaceDisk(result);
+ return result;
+}
+
+UString GetCorrectPath(const UString &path)
+{
+ UString result = path;
+ int first;
+ for (first = 0; first < result.Length(); first++)
+ if (result[first] != ' ')
+ break;
+ while(result.Length() > first)
+ {
+ if (
+ #ifdef _WIN32
+ result[first] == L'\\' ||
+ #endif
+ result[first] == L'/')
+ {
+ result.Delete(first);
+ continue;
+ }
+ break;
+ }
+ #ifdef _WIN32
+ result.Replace(L"..\\", L"");
+ #endif
+ result.Replace(L"../", L"");
+
+ ReplaceDisk(result);
+ return result;
+}
+
+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
+ i++;
+ }
+}