summaryrefslogtreecommitdiffstats
path: root/src/libs/7zip/win/CPP/Windows
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/7zip/win/CPP/Windows')
-rw-r--r--src/libs/7zip/win/CPP/Windows/DLL.cpp110
-rw-r--r--src/libs/7zip/win/CPP/Windows/DLL.h52
-rw-r--r--src/libs/7zip/win/CPP/Windows/Defs.h17
-rw-r--r--src/libs/7zip/win/CPP/Windows/FileDir.cpp583
-rw-r--r--src/libs/7zip/win/CPP/Windows/FileDir.h97
-rw-r--r--src/libs/7zip/win/CPP/Windows/FileFind.cpp579
-rw-r--r--src/libs/7zip/win/CPP/Windows/FileFind.h158
-rw-r--r--src/libs/7zip/win/CPP/Windows/FileIO.cpp432
-rw-r--r--src/libs/7zip/win/CPP/Windows/FileIO.h201
-rw-r--r--src/libs/7zip/win/CPP/Windows/FileLink.cpp426
-rw-r--r--src/libs/7zip/win/CPP/Windows/FileMapping.h66
-rw-r--r--src/libs/7zip/win/CPP/Windows/FileName.cpp687
-rw-r--r--src/libs/7zip/win/CPP/Windows/FileName.h74
-rw-r--r--src/libs/7zip/win/CPP/Windows/Handle.h37
-rw-r--r--src/libs/7zip/win/CPP/Windows/PropVariant.cpp300
-rw-r--r--src/libs/7zip/win/CPP/Windows/PropVariant.h107
-rw-r--r--src/libs/7zip/win/CPP/Windows/PropVariantConv.cpp99
-rw-r--r--src/libs/7zip/win/CPP/Windows/PropVariantConv.h30
-rw-r--r--src/libs/7zip/win/CPP/Windows/SecurityUtils.cpp179
-rw-r--r--src/libs/7zip/win/CPP/Windows/SecurityUtils.h167
-rw-r--r--src/libs/7zip/win/CPP/Windows/StdAfx.h8
-rw-r--r--src/libs/7zip/win/CPP/Windows/Synchronization.cpp10
-rw-r--r--src/libs/7zip/win/CPP/Windows/Synchronization.h164
-rw-r--r--src/libs/7zip/win/CPP/Windows/System.cpp72
-rw-r--r--src/libs/7zip/win/CPP/Windows/System.h16
-rw-r--r--src/libs/7zip/win/CPP/Windows/Thread.h38
-rw-r--r--src/libs/7zip/win/CPP/Windows/TimeUtils.cpp203
-rw-r--r--src/libs/7zip/win/CPP/Windows/TimeUtils.h23
-rw-r--r--src/libs/7zip/win/CPP/Windows/Windows.pri29
29 files changed, 0 insertions, 4964 deletions
diff --git a/src/libs/7zip/win/CPP/Windows/DLL.cpp b/src/libs/7zip/win/CPP/Windows/DLL.cpp
deleted file mode 100644
index cf3dd1ceb..000000000
--- a/src/libs/7zip/win/CPP/Windows/DLL.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-// Windows/DLL.cpp
-
-#include "StdAfx.h"
-
-#include "DLL.h"
-
-#ifndef _UNICODE
-extern bool g_IsNT;
-#endif
-
-extern HINSTANCE g_hInstance;
-
-namespace NWindows {
-namespace NDLL {
-
-bool CLibrary::Free() throw()
-{
- if (_module == 0)
- return true;
- if (!::FreeLibrary(_module))
- return false;
- _module = 0;
- return true;
-}
-
-bool CLibrary::LoadEx(CFSTR path, DWORD flags) throw()
-{
- if (!Free())
- return false;
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- _module = ::LoadLibraryEx(fs2fas(path), NULL, flags);
- }
- else
- #endif
- {
- _module = ::LoadLibraryExW(fs2us(path), NULL, flags);
- }
- return (_module != NULL);
-}
-
-bool CLibrary::Load(CFSTR path) throw()
-{
- if (!Free())
- return false;
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- _module = ::LoadLibrary(fs2fas(path));
- }
- else
- #endif
- {
- _module = ::LoadLibraryW(fs2us(path));
- }
- return (_module != NULL);
-}
-
-bool MyGetModuleFileName(FString &path)
-{
- HMODULE hModule = g_hInstance;
- path.Empty();
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- TCHAR s[MAX_PATH + 2];
- s[0] = 0;
- DWORD size = ::GetModuleFileName(hModule, s, MAX_PATH + 1);
- if (size <= MAX_PATH && size != 0)
- {
- path = fas2fs(s);
- return true;
- }
- }
- else
- #endif
- {
- WCHAR s[MAX_PATH + 2];
- s[0] = 0;
- DWORD size = ::GetModuleFileNameW(hModule, s, MAX_PATH + 1);
- if (size <= MAX_PATH && size != 0)
- {
- path = us2fs(s);
- return true;
- }
- }
- return false;
-}
-
-#ifndef _SFX
-
-FString GetModuleDirPrefix()
-{
- FString s;
- if (MyGetModuleFileName(s))
- {
- int pos = s.ReverseFind(FCHAR_PATH_SEPARATOR);
- if (pos >= 0)
- {
- s.DeleteFrom(pos + 1);
- return s;
- }
- }
- return FTEXT(".") FSTRING_PATH_SEPARATOR;
-}
-
-#endif
-
-}}
diff --git a/src/libs/7zip/win/CPP/Windows/DLL.h b/src/libs/7zip/win/CPP/Windows/DLL.h
deleted file mode 100644
index d8848ce95..000000000
--- a/src/libs/7zip/win/CPP/Windows/DLL.h
+++ /dev/null
@@ -1,52 +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, procName) ::GetProcAddressA(module, procName)
-#else
-#define My_GetProcAddress(module, procName) ::GetProcAddress(module, procName)
-#endif
-
-class CLibrary
-{
- 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() throw();
- bool LoadEx(CFSTR path, DWORD flags = LOAD_LIBRARY_AS_DATAFILE) throw();
- bool Load(CFSTR path) throw();
- FARPROC GetProc(LPCSTR procName) const { return My_GetProcAddress(_module, procName); }
-};
-
-bool MyGetModuleFileName(FString &path);
-
-FString GetModuleDirPrefix();
-
-}}
-
-#endif
diff --git a/src/libs/7zip/win/CPP/Windows/Defs.h b/src/libs/7zip/win/CPP/Windows/Defs.h
deleted file mode 100644
index 281c40c33..000000000
--- a/src/libs/7zip/win/CPP/Windows/Defs.h
+++ /dev/null
@@ -1,17 +0,0 @@
-// Windows/Defs.h
-
-#ifndef __WINDOWS_DEFS_H
-#define __WINDOWS_DEFS_H
-
-#include "../Common/MyWindows.h"
-
-#ifdef _WIN32
-inline bool LRESULTToBool(LRESULT v) { return (v != FALSE); }
-inline bool BOOLToBool(BOOL v) { return (v != FALSE); }
-inline BOOL BoolToBOOL(bool v) { return (v ? TRUE: FALSE); }
-#endif
-
-inline VARIANT_BOOL BoolToVARIANT_BOOL(bool v) { return (v ? VARIANT_TRUE: VARIANT_FALSE); }
-inline bool VARIANT_BOOLToBool(VARIANT_BOOL v) { return (v != VARIANT_FALSE); }
-
-#endif
diff --git a/src/libs/7zip/win/CPP/Windows/FileDir.cpp b/src/libs/7zip/win/CPP/Windows/FileDir.cpp
deleted file mode 100644
index 097f81efb..000000000
--- a/src/libs/7zip/win/CPP/Windows/FileDir.cpp
+++ /dev/null
@@ -1,583 +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
-
-using namespace NWindows;
-using namespace NFile;
-using namespace NName;
-
-namespace NWindows {
-namespace NFile {
-namespace NDir {
-
-#ifndef UNDER_CE
-
-bool GetWindowsDir(FString &path)
-{
- UINT needLength;
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- TCHAR s[MAX_PATH + 2];
- s[0] = 0;
- needLength = ::GetWindowsDirectory(s, MAX_PATH + 1);
- path = fas2fs(s);
- }
- else
- #endif
- {
- WCHAR s[MAX_PATH + 2];
- s[0] = 0;
- needLength = ::GetWindowsDirectoryW(s, MAX_PATH + 1);
- path = us2fs(s);
- }
- return (needLength > 0 && needLength <= MAX_PATH);
-}
-
-bool GetSystemDir(FString &path)
-{
- UINT needLength;
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- TCHAR s[MAX_PATH + 2];
- s[0] = 0;
- needLength = ::GetSystemDirectory(s, MAX_PATH + 1);
- path = fas2fs(s);
- }
- else
- #endif
- {
- WCHAR s[MAX_PATH + 2];
- s[0] = 0;
- needLength = ::GetSystemDirectoryW(s, MAX_PATH + 1);
- path = us2fs(s);
- }
- return (needLength > 0 && needLength <= MAX_PATH);
-}
-#endif
-
-bool SetDirTime(CFSTR path, const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime)
-{
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- ::SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return false;
- }
- #endif
-
- HANDLE hDir = INVALID_HANDLE_VALUE;
- IF_USE_MAIN_PATH
- hDir = ::CreateFileW(fs2us(path), 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 && USE_SUPER_PATH)
- {
- UString longPath;
- if (GetSuperPath(path, longPath, USE_MAIN_PATH))
- 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 SetFileAttrib(CFSTR path, DWORD attrib)
-{
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- if (::SetFileAttributes(fs2fas(path), attrib))
- return true;
- }
- else
- #endif
- {
- IF_USE_MAIN_PATH
- if (::SetFileAttributesW(fs2us(path), attrib))
- return true;
- #ifdef WIN_LONG_PATH
- if (USE_SUPER_PATH)
- {
- UString longPath;
- if (GetSuperPath(path, longPath, USE_MAIN_PATH))
- return BOOLToBool(::SetFileAttributesW(longPath, attrib));
- }
- #endif
- }
- return false;
-}
-
-bool RemoveDir(CFSTR path)
-{
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- if (::RemoveDirectory(fs2fas(path)))
- return true;
- }
- else
- #endif
- {
- IF_USE_MAIN_PATH
- if (::RemoveDirectoryW(fs2us(path)))
- return true;
- #ifdef WIN_LONG_PATH
- if (USE_SUPER_PATH)
- {
- UString longPath;
- if (GetSuperPath(path, longPath, USE_MAIN_PATH))
- return BOOLToBool(::RemoveDirectoryW(longPath));
- }
- #endif
- }
- return false;
-}
-
-bool MyMoveFile(CFSTR oldFile, CFSTR newFile)
-{
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- if (::MoveFile(fs2fas(oldFile), fs2fas(newFile)))
- return true;
- }
- else
- #endif
- {
- IF_USE_MAIN_PATH_2(oldFile, newFile)
- if (::MoveFileW(fs2us(oldFile), fs2us(newFile)))
- return true;
- #ifdef WIN_LONG_PATH
- if (USE_SUPER_PATH_2)
- {
- UString d1, d2;
- if (GetSuperPaths(oldFile, newFile, d1, d2, USE_MAIN_PATH_2))
- return BOOLToBool(::MoveFileW(d1, d2));
- }
- #endif
- }
- return false;
-}
-
-#ifndef UNDER_CE
-
-EXTERN_C_BEGIN
-typedef BOOL (WINAPI *Func_CreateHardLinkW)(
- LPCWSTR lpFileName,
- LPCWSTR lpExistingFileName,
- LPSECURITY_ATTRIBUTES lpSecurityAttributes
- );
-EXTERN_C_END
-
-bool MyCreateHardLink(CFSTR newFileName, CFSTR existFileName)
-{
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return false;
- /*
- if (::CreateHardLink(fs2fas(newFileName), fs2fas(existFileName), NULL))
- return true;
- */
- }
- else
- #endif
- {
- Func_CreateHardLinkW my_CreateHardLinkW = (Func_CreateHardLinkW)
- ::GetProcAddress(::GetModuleHandleW(L"kernel32.dll"), "CreateHardLinkW");
- if (!my_CreateHardLinkW)
- return false;
- IF_USE_MAIN_PATH_2(newFileName, existFileName)
- if (my_CreateHardLinkW(fs2us(newFileName), fs2us(existFileName), NULL))
- return true;
- #ifdef WIN_LONG_PATH
- if (USE_SUPER_PATH_2)
- {
- UString d1, d2;
- if (GetSuperPaths(newFileName, existFileName, d1, d2, USE_MAIN_PATH_2))
- return BOOLToBool(my_CreateHardLinkW(d1, d2, NULL));
- }
- #endif
- }
- return false;
-}
-
-#endif
-
-bool CreateDir(CFSTR path)
-{
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- if (::CreateDirectory(fs2fas(path), NULL))
- return true;
- }
- else
- #endif
- {
- IF_USE_MAIN_PATH
- if (::CreateDirectoryW(fs2us(path), NULL))
- return true;
- #ifdef WIN_LONG_PATH
- if ((!USE_MAIN_PATH || ::GetLastError() != ERROR_ALREADY_EXISTS) && USE_SUPER_PATH)
- {
- UString longPath;
- if (GetSuperPath(path, longPath, USE_MAIN_PATH))
- return BOOLToBool(::CreateDirectoryW(longPath, NULL));
- }
- #endif
- }
- return false;
-}
-
-bool CreateComplexDir(CFSTR _aPathName)
-{
- FString pathName = _aPathName;
- int pos = pathName.ReverseFind(FCHAR_PATH_SEPARATOR);
- if (pos > 0 && (unsigned)pos == pathName.Len() - 1)
- {
- if (pathName.Len() == 3 && pathName[1] == L':')
- return true; // Disk folder;
- pathName.Delete(pos);
- }
- const FString pathName2 = pathName;
- pos = pathName.Len();
-
- for (;;)
- {
- if (CreateDir(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(FCHAR_PATH_SEPARATOR);
- if (pos < 0 || pos == 0)
- return false;
- if (pathName[pos - 1] == L':')
- return false;
- pathName.DeleteFrom(pos);
- }
-
- while (pos < (int)pathName2.Len())
- {
- pos = pathName2.Find(FCHAR_PATH_SEPARATOR, pos + 1);
- if (pos < 0)
- pos = pathName2.Len();
- pathName.SetFrom(pathName2, pos);
- if (!CreateDir(pathName))
- return false;
- }
-
- return true;
-}
-
-bool DeleteFileAlways(CFSTR path)
-{
- if (!SetFileAttrib(path, 0))
- return false;
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- if (::DeleteFile(fs2fas(path)))
- return true;
- }
- else
- #endif
- {
- IF_USE_MAIN_PATH
- if (::DeleteFileW(fs2us(path)))
- return true;
- #ifdef WIN_LONG_PATH
- if (USE_SUPER_PATH)
- {
- UString longPath;
- if (GetSuperPath(path, longPath, USE_MAIN_PATH))
- return BOOLToBool(::DeleteFileW(longPath));
- }
- #endif
- }
- return false;
-}
-
-bool RemoveDirWithSubItems(const FString &path)
-{
- bool needRemoveSubItems = true;
- {
- NFind::CFileInfo fi;
- if (!fi.Find(path))
- return false;
- if (!fi.IsDir())
- {
- ::SetLastError(ERROR_DIRECTORY);
- return false;
- }
- if (fi.HasReparsePoint())
- needRemoveSubItems = false;
- }
-
- if (needRemoveSubItems)
- {
- FString s = path;
- s += FCHAR_PATH_SEPARATOR;
- unsigned prefixSize = s.Len();
- s += FCHAR_ANY_MASK;
- NFind::CEnumerator enumerator(s);
- NFind::CFileInfo fi;
- while (enumerator.Next(fi))
- {
- s.DeleteFrom(prefixSize);
- s += fi.Name;
- if (fi.IsDir())
- {
- if (!RemoveDirWithSubItems(s))
- return false;
- }
- else if (!DeleteFileAlways(s))
- return false;
- }
- }
-
- if (!SetFileAttrib(path, 0))
- return false;
- return RemoveDir(path);
-}
-
-#ifdef UNDER_CE
-
-bool MyGetFullPathName(CFSTR path, FString &resFullPath)
-{
- resFullPath = path;
- return true;
-}
-
-#else
-
-bool MyGetFullPathName(CFSTR path, FString &resFullPath)
-{
- return GetFullPath(path, resFullPath);
-}
-
-bool SetCurrentDir(CFSTR path)
-{
- // SetCurrentDirectory doesn't support \\?\ prefix
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- return BOOLToBool(::SetCurrentDirectory(fs2fas(path)));
- }
- else
- #endif
- {
- return BOOLToBool(::SetCurrentDirectoryW(fs2us(path)));
- }
-}
-
-bool GetCurrentDir(FString &path)
-{
- path.Empty();
- DWORD needLength;
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- TCHAR s[MAX_PATH + 2];
- s[0] = 0;
- needLength = ::GetCurrentDirectory(MAX_PATH + 1, s);
- path = fas2fs(s);
- }
- else
- #endif
- {
- WCHAR s[MAX_PATH + 2];
- s[0] = 0;
- needLength = ::GetCurrentDirectoryW(MAX_PATH + 1, s);
- path = us2fs(s);
- }
- return (needLength > 0 && needLength <= MAX_PATH);
-}
-
-#endif
-
-bool GetFullPathAndSplit(CFSTR path, FString &resDirPrefix, FString &resFileName)
-{
- bool res = MyGetFullPathName(path, resDirPrefix);
- if (!res)
- resDirPrefix = path;
- int pos = resDirPrefix.ReverseFind(FCHAR_PATH_SEPARATOR);
- resFileName = resDirPrefix.Ptr(pos + 1);
- resDirPrefix.DeleteFrom(pos + 1);
- return res;
-}
-
-bool GetOnlyDirPrefix(CFSTR path, FString &resDirPrefix)
-{
- FString resFileName;
- return GetFullPathAndSplit(path, resDirPrefix, resFileName);
-}
-
-bool MyGetTempPath(FString &path)
-{
- path.Empty();
- DWORD needLength;
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- TCHAR s[MAX_PATH + 2];
- s[0] = 0;
- needLength = ::GetTempPath(MAX_PATH + 1, s);
- path = fas2fs(s);
- }
- else
- #endif
- {
- WCHAR s[MAX_PATH + 2];
- s[0] = 0;
- needLength = ::GetTempPathW(MAX_PATH + 1, s);;
- path = us2fs(s);
- }
- return (needLength > 0 && needLength <= MAX_PATH);
-}
-
-static bool CreateTempFile(CFSTR prefix, bool addRandom, FString &path, NIO::COutFile *outFile)
-{
- UInt32 d = (GetTickCount() << 12) ^ (GetCurrentThreadId() << 14) ^ GetCurrentProcessId();
- for (unsigned i = 0; i < 100; i++)
- {
- path = prefix;
- if (addRandom)
- {
- FChar s[16];
- UInt32 value = d;
- unsigned k;
- for (k = 0; k < 8; k++)
- {
- unsigned t = value & 0xF;
- value >>= 4;
- s[k] = (char)((t < 10) ? ('0' + t) : ('A' + (t - 10)));
- }
- s[k] = '\0';
- if (outFile)
- path += FChar('.');
- path += s;
- UInt32 step = GetTickCount() + 2;
- if (step == 0)
- step = 1;
- d += step;
- }
- addRandom = true;
- if (outFile)
- path += FTEXT(".tmp");
- if (NFind::DoesFileOrDirExist(path))
- {
- SetLastError(ERROR_ALREADY_EXISTS);
- continue;
- }
- if (outFile)
- {
- if (outFile->Create(path, false))
- return true;
- }
- else
- {
- if (CreateDir(path))
- return true;
- }
- DWORD error = GetLastError();
- if (error != ERROR_FILE_EXISTS &&
- error != ERROR_ALREADY_EXISTS)
- break;
- }
- path.Empty();
- return false;
-}
-
-bool CTempFile::Create(CFSTR prefix, NIO::COutFile *outFile)
-{
- if (!Remove())
- return false;
- if (!CreateTempFile(prefix, false, _path, outFile))
- return false;
- _mustBeDeleted = true;
- return true;
-}
-
-bool CTempFile::CreateRandomInTempFolder(CFSTR namePrefix, NIO::COutFile *outFile)
-{
- if (!Remove())
- return false;
- FString tempPath;
- if (!MyGetTempPath(tempPath))
- return false;
- if (!CreateTempFile(tempPath + namePrefix, true, _path, outFile))
- return false;
- _mustBeDeleted = true;
- return true;
-}
-
-bool CTempFile::Remove()
-{
- if (!_mustBeDeleted)
- return true;
- _mustBeDeleted = !DeleteFileAlways(_path);
- return !_mustBeDeleted;
-}
-
-bool CTempFile::MoveTo(CFSTR name, bool deleteDestBefore)
-{
- if (deleteDestBefore)
- if (NFind::DoesFileExist(name))
- if (!DeleteFileAlways(name))
- return false;
- DisableDeleting();
- return MyMoveFile(_path, name);
-}
-
-bool CTempDir::Create(CFSTR prefix)
-{
- if (!Remove())
- return false;
- FString tempPath;
- if (!MyGetTempPath(tempPath))
- return false;
- if (!CreateTempFile(tempPath + prefix, true, _path, NULL))
- return false;
- _mustBeDeleted = true;
- return true;
-}
-
-bool CTempDir::Remove()
-{
- if (!_mustBeDeleted)
- return true;
- _mustBeDeleted = !RemoveDirWithSubItems(_path);
- return !_mustBeDeleted;
-}
-
-}}}
diff --git a/src/libs/7zip/win/CPP/Windows/FileDir.h b/src/libs/7zip/win/CPP/Windows/FileDir.h
deleted file mode 100644
index 02d3e5a57..000000000
--- a/src/libs/7zip/win/CPP/Windows/FileDir.h
+++ /dev/null
@@ -1,97 +0,0 @@
-// Windows/FileDir.h
-
-#ifndef __WINDOWS_FILE_DIR_H
-#define __WINDOWS_FILE_DIR_H
-
-#include "../Common/MyString.h"
-
-#include "FileIO.h"
-
-namespace NWindows {
-namespace NFile {
-namespace NDir {
-
-bool GetWindowsDir(FString &path);
-bool GetSystemDir(FString &path);
-
-bool SetDirTime(CFSTR path, const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime);
-bool SetFileAttrib(CFSTR path, DWORD attrib);
-bool MyMoveFile(CFSTR existFileName, CFSTR newFileName);
-
-#ifndef UNDER_CE
-bool MyCreateHardLink(CFSTR newFileName, CFSTR existFileName);
-#endif
-
-bool RemoveDir(CFSTR path);
-bool CreateDir(CFSTR path);
-bool CreateComplexDir(CFSTR path);
-bool DeleteFileAlways(CFSTR name);
-bool RemoveDirWithSubItems(const FString &path);
-
-bool MyGetFullPathName(CFSTR path, FString &resFullPath);
-bool GetFullPathAndSplit(CFSTR path, FString &resDirPrefix, FString &resFileName);
-bool GetOnlyDirPrefix(CFSTR path, FString &resDirPrefix);
-
-#ifndef UNDER_CE
-
-bool SetCurrentDir(CFSTR path);
-bool GetCurrentDir(FString &resultPath);
-
-#endif
-
-bool MyGetTempPath(FString &resultPath);
-
-class CTempFile
-{
- bool _mustBeDeleted;
- FString _path;
- void DisableDeleting() { _mustBeDeleted = false; }
-public:
- CTempFile(): _mustBeDeleted(false) {}
- ~CTempFile() { Remove(); }
- const FString &GetPath() const { return _path; }
- bool Create(CFSTR pathPrefix, NIO::COutFile *outFile); // pathPrefix is not folder prefix
- bool CreateRandomInTempFolder(CFSTR namePrefix, NIO::COutFile *outFile);
- bool Remove();
- bool MoveTo(CFSTR name, bool deleteDestBefore);
-};
-
-class CTempDir
-{
- bool _mustBeDeleted;
- FString _path;
-public:
- CTempDir(): _mustBeDeleted(false) {}
- ~CTempDir() { Remove(); }
- const FString &GetPath() const { return _path; }
- void DisableDeleting() { _mustBeDeleted = false; }
- bool Create(CFSTR namePrefix) ;
- bool Remove();
-};
-
-#if !defined(UNDER_CE)
-class CCurrentDirRestorer
-{
- FString _path;
-public:
- bool NeedRestore;
-
- CCurrentDirRestorer(): NeedRestore(true)
- {
- GetCurrentDir(_path);
- }
- ~CCurrentDirRestorer()
- {
- if (!NeedRestore)
- return;
- FString s;
- if (GetCurrentDir(s))
- if (s != _path)
- SetCurrentDir(_path);
- }
-};
-#endif
-
-}}}
-
-#endif
diff --git a/src/libs/7zip/win/CPP/Windows/FileFind.cpp b/src/libs/7zip/win/CPP/Windows/FileFind.cpp
deleted file mode 100644
index 7f58288fe..000000000
--- a/src/libs/7zip/win/CPP/Windows/FileFind.cpp
+++ /dev/null
@@ -1,579 +0,0 @@
-// Windows/FileFind.cpp
-
-#include "StdAfx.h"
-
-#include "FileFind.h"
-#include "FileIO.h"
-#include "FileName.h"
-#ifndef _UNICODE
-#include "../Common/StringConvert.h"
-#endif
-
-#ifndef _UNICODE
-extern bool g_IsNT;
-#endif
-
-using namespace NWindows;
-using namespace NFile;
-using namespace NName;
-
-#if defined(_WIN32) && !defined(UNDER_CE)
-
-EXTERN_C_BEGIN
-
-typedef enum
-{
- My_FindStreamInfoStandard,
- My_FindStreamInfoMaxInfoLevel
-} MY_STREAM_INFO_LEVELS;
-
-typedef struct
-{
- LARGE_INTEGER StreamSize;
- WCHAR cStreamName[MAX_PATH + 36];
-} MY_WIN32_FIND_STREAM_DATA, *MY_PWIN32_FIND_STREAM_DATA;
-
-typedef WINBASEAPI HANDLE (WINAPI *FindFirstStreamW_Ptr)(LPCWSTR fileName, MY_STREAM_INFO_LEVELS infoLevel,
- LPVOID findStreamData, DWORD flags);
-
-typedef WINBASEAPI BOOL (APIENTRY *FindNextStreamW_Ptr)(HANDLE findStream, LPVOID findStreamData);
-
-EXTERN_C_END
-
-#endif
-
-namespace NWindows {
-namespace NFile {
-
-#ifdef SUPPORT_DEVICE_FILE
-namespace NSystem
-{
-bool MyGetDiskFreeSpace(CFSTR rootPath, UInt64 &clusterSize, UInt64 &totalSize, UInt64 &freeSize);
-}
-#endif
-
-namespace NFind {
-
-bool CFileInfo::IsDots() const throw()
-{
- if (!IsDir() || Name.IsEmpty())
- return false;
- if (Name[0] != FTEXT('.'))
- return false;
- return Name.Len() == 1 || (Name.Len() == 2 && Name[1] == FTEXT('.'));
-}
-
-#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.IsAltStream = false; \
- fi.IsDevice = false;
-
- /*
- #ifdef UNDER_CE
- fi.ObjectID = fd.dwOID;
- #else
- fi.ReparseTag = fd.dwReserved0;
- #endif
- */
-
-static void Convert_WIN32_FIND_DATA_to_FileInfo(const WIN32_FIND_DATAW &fd, CFileInfo &fi)
-{
- WIN_FD_TO_MY_FI(fi, fd);
- fi.Name = us2fs(fd.cFileName);
- #if defined(_WIN32) && !defined(UNDER_CE)
- // fi.ShortName = us2fs(fd.cAlternateFileName);
- #endif
-}
-
-#ifndef _UNICODE
-
-static void Convert_WIN32_FIND_DATA_to_FileInfo(const WIN32_FIND_DATA &fd, CFileInfo &fi)
-{
- WIN_FD_TO_MY_FI(fi, fd);
- fi.Name = fas2fs(fd.cFileName);
- #if defined(_WIN32) && !defined(UNDER_CE)
- // fi.ShortName = fas2fs(fd.cAlternateFileName);
- #endif
-}
-#endif
-
-////////////////////////////////
-// CFindFile
-
-bool CFindFileBase::Close() throw()
-{
- if (_handle == INVALID_HANDLE_VALUE)
- return true;
- if (!::FindClose(_handle))
- return false;
- _handle = INVALID_HANDLE_VALUE;
- return true;
-}
-
-bool CFindFile::FindFirst(CFSTR path, CFileInfo &fi)
-{
- if (!Close())
- return false;
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- WIN32_FIND_DATAA fd;
- _handle = ::FindFirstFileA(fs2fas(path), &fd);
- if (_handle == INVALID_HANDLE_VALUE)
- return false;
- Convert_WIN32_FIND_DATA_to_FileInfo(fd, fi);
- }
- else
- #endif
- {
- WIN32_FIND_DATAW fd;
-
- IF_USE_MAIN_PATH
- _handle = ::FindFirstFileW(fs2us(path), &fd);
- #ifdef WIN_LONG_PATH
- if (_handle == INVALID_HANDLE_VALUE && USE_SUPER_PATH)
- {
- UString longPath;
- if (GetSuperPath(path, longPath, USE_MAIN_PATH))
- _handle = ::FindFirstFileW(longPath, &fd);
- }
- #endif
- if (_handle == INVALID_HANDLE_VALUE)
- return false;
- Convert_WIN32_FIND_DATA_to_FileInfo(fd, fi);
- }
- return true;
-}
-
-bool CFindFile::FindNext(CFileInfo &fi)
-{
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- WIN32_FIND_DATAA fd;
- if (!::FindNextFileA(_handle, &fd))
- return false;
- Convert_WIN32_FIND_DATA_to_FileInfo(fd, fi);
- }
- else
- #endif
- {
- WIN32_FIND_DATAW fd;
- if (!::FindNextFileW(_handle, &fd))
- return false;
- Convert_WIN32_FIND_DATA_to_FileInfo(fd, fi);
- }
- return true;
-}
-
-#if defined(_WIN32) && !defined(UNDER_CE)
-
-////////////////////////////////
-// AltStreams
-
-static FindFirstStreamW_Ptr g_FindFirstStreamW;
-static FindNextStreamW_Ptr g_FindNextStreamW;
-
-struct CFindStreamLoader
-{
- CFindStreamLoader()
- {
- g_FindFirstStreamW = (FindFirstStreamW_Ptr)::GetProcAddress(::GetModuleHandleA("kernel32.dll"), "FindFirstStreamW");
- g_FindNextStreamW = (FindNextStreamW_Ptr)::GetProcAddress(::GetModuleHandleA("kernel32.dll"), "FindNextStreamW");
- }
-} g_FindStreamLoader;
-
-bool CStreamInfo::IsMainStream() const throw()
-{
- return Name == L"::$DATA";
-};
-
-UString CStreamInfo::GetReducedName() const
-{
- UString s = Name;
- if (s.Len() >= 6)
- if (wcscmp(s.RightPtr(6), L":$DATA") == 0)
- s.DeleteFrom(s.Len() - 6);
- return s;
-}
-
-static void Convert_WIN32_FIND_STREAM_DATA_to_StreamInfo(const MY_WIN32_FIND_STREAM_DATA &sd, CStreamInfo &si)
-{
- si.Size = sd.StreamSize.QuadPart;
- si.Name = sd.cStreamName;
-}
-
-bool CFindStream::FindFirst(CFSTR path, CStreamInfo &si)
-{
- if (!Close())
- return false;
- if (!g_FindFirstStreamW)
- {
- ::SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return false;
- }
- {
- MY_WIN32_FIND_STREAM_DATA sd;
- IF_USE_MAIN_PATH
- _handle = g_FindFirstStreamW(fs2us(path), My_FindStreamInfoStandard, &sd, 0);
- if (_handle == INVALID_HANDLE_VALUE)
- {
- if (::GetLastError() == ERROR_HANDLE_EOF)
- return false;
- // long name can be tricky for path like ".\dirName".
- #ifdef WIN_LONG_PATH
- if (USE_SUPER_PATH)
- {
- UString longPath;
- if (GetSuperPath(path, longPath, USE_MAIN_PATH))
- _handle = g_FindFirstStreamW(longPath, My_FindStreamInfoStandard, &sd, 0);
- }
- #endif
- }
- if (_handle == INVALID_HANDLE_VALUE)
- return false;
- Convert_WIN32_FIND_STREAM_DATA_to_StreamInfo(sd, si);
- }
- return true;
-}
-
-bool CFindStream::FindNext(CStreamInfo &si)
-{
- if (!g_FindNextStreamW)
- {
- ::SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return false;
- }
- {
- MY_WIN32_FIND_STREAM_DATA sd;
- if (!g_FindNextStreamW(_handle, &sd))
- return false;
- Convert_WIN32_FIND_STREAM_DATA_to_StreamInfo(sd, si);
- }
- return true;
-}
-
-bool CStreamEnumerator::Next(CStreamInfo &si, bool &found)
-{
- bool res;
- if (_find.IsHandleAllocated())
- res = _find.FindNext(si);
- else
- res = _find.FindFirst(_filePath, si);
- if (res)
- {
- found = true;
- return true;
- }
- found = false;
- return (::GetLastError() == ERROR_HANDLE_EOF);
-}
-
-#endif
-
-
-#define MY_CLEAR_FILETIME(ft) ft.dwLowDateTime = ft.dwHighDateTime = 0;
-
-void CFileInfoBase::Clear() throw()
-{
- Size = 0;
- MY_CLEAR_FILETIME(CTime);
- MY_CLEAR_FILETIME(ATime);
- MY_CLEAR_FILETIME(MTime);
- Attrib = 0;
- IsAltStream = false;
- IsDevice = false;
-}
-
-#if defined(_WIN32) && !defined(UNDER_CE)
-
-static int FindAltStreamColon(CFSTR path)
-{
- for (int i = 0;; i++)
- {
- FChar c = path[i];
- if (c == 0)
- return -1;
- if (c == ':')
- {
- if (path[i + 1] == '\\')
- if (i == 1 || (i > 1 && path[i - 2] == '\\'))
- {
- wchar_t c0 = path[i - 1];
- if (c0 >= 'a' && c0 <= 'z' ||
- c0 >= 'A' && c0 <= 'Z')
- continue;
- }
- return i;
- }
- }
-}
-
-#endif
-
-bool CFileInfo::Find(CFSTR path)
-{
- #ifdef SUPPORT_DEVICE_FILE
- if (IsDevicePath(path))
- {
- Clear();
- Name = path + 4;
-
- IsDevice = true;
- if (/* path[0] == '\\' && path[1] == '\\' && path[2] == '.' && path[3] == '\\' && */
- path[5] == ':' && path[6] == 0)
- {
- FChar drive[4] = { path[4], ':', '\\', 0 };
- UInt64 clusterSize, totalSize, freeSize;
- if (NSystem::MyGetDiskFreeSpace(drive, clusterSize, totalSize, freeSize))
- {
- Size = totalSize;
- return true;
- }
- }
-
- NIO::CInFile inFile;
- // ::OutputDebugStringW(path);
- if (!inFile.Open(path))
- return false;
- // ::OutputDebugStringW(L"---");
- if (inFile.SizeDefined)
- Size = inFile.Size;
- return true;
- }
- #endif
-
- #if defined(_WIN32) && !defined(UNDER_CE)
-
- int colonPos = FindAltStreamColon(path);
- if (colonPos >= 0)
- {
- UString streamName = fs2us(path + (unsigned)colonPos);
- FString filePath = path;
- filePath.DeleteFrom(colonPos);
- streamName += L":$DATA"; // change it!!!!
- if (Find(filePath))
- {
- // if (IsDir())
- Attrib &= ~FILE_ATTRIBUTE_DIRECTORY;
- Size = 0;
- CStreamEnumerator enumerator(filePath);
- for (;;)
- {
- CStreamInfo si;
- bool found;
- if (!enumerator.Next(si, found))
- return false;
- if (!found)
- {
- ::SetLastError(ERROR_FILE_NOT_FOUND);
- return false;
- }
- if (si.Name.IsEqualToNoCase(streamName))
- {
- Name += us2fs(si.Name);
- Name.DeleteFrom(Name.Len() - 6);
- Size = si.Size;
- IsAltStream = true;
- return true;
- }
- }
- }
- }
-
- #endif
-
- CFindFile finder;
- if (finder.FindFirst(path, *this))
- return true;
- #ifdef _WIN32
- {
- DWORD lastError = GetLastError();
- if (lastError == ERROR_BAD_NETPATH ||
- lastError == ERROR_FILE_NOT_FOUND ||
- lastError == ERROR_INVALID_NAME // for "\\SERVER\shared" paths that are translated to "\\?\UNC\SERVER\shared"
- )
- {
- unsigned len = MyStringLen(path);
- if (len > 2 && path[0] == '\\' && path[1] == '\\')
- {
- int startPos = 2;
- if (len > kSuperUncPathPrefixSize && IsSuperUncPath(path))
- startPos = kSuperUncPathPrefixSize;
- int pos = FindCharPosInString(path + startPos, FTEXT('\\'));
- if (pos >= 0)
- {
- pos += startPos + 1;
- len -= pos;
- int pos2 = FindCharPosInString(path + pos, FTEXT('\\'));
- if (pos2 < 0 || pos2 == (int)len - 1)
- {
- FString s = path;
- if (pos2 < 0)
- {
- pos2 = len;
- s += FTEXT('\\');
- }
- s += FCHAR_ANY_MASK;
- if (finder.FindFirst(s, *this))
- if (Name == FTEXT("."))
- {
- Name.SetFrom(s.Ptr(pos), pos2);
- return true;
- }
- ::SetLastError(lastError);
- }
- }
- }
- }
- }
- #endif
- return false;
-}
-
-bool DoesFileExist(CFSTR name)
-{
- CFileInfo fi;
- return fi.Find(name) && !fi.IsDir();
-}
-
-bool DoesDirExist(CFSTR name)
-{
- CFileInfo fi;
- return fi.Find(name) && fi.IsDir();
-}
-bool DoesFileOrDirExist(CFSTR name)
-{
- CFileInfo fi;
- return fi.Find(name);
-}
-
-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);
-}
-
-////////////////////////////////
-// CFindChangeNotification
-// FindFirstChangeNotification can return 0. MSDN doesn't tell about it.
-
-bool CFindChangeNotification::Close() throw()
-{
- if (!IsHandleAllocated())
- return true;
- if (!::FindCloseChangeNotification(_handle))
- return false;
- _handle = INVALID_HANDLE_VALUE;
- return true;
-}
-
-HANDLE CFindChangeNotification::FindFirst(CFSTR path, bool watchSubtree, DWORD notifyFilter)
-{
- #ifndef _UNICODE
- if (!g_IsNT)
- _handle = ::FindFirstChangeNotification(fs2fas(path), BoolToBOOL(watchSubtree), notifyFilter);
- else
- #endif
- {
- IF_USE_MAIN_PATH
- _handle = ::FindFirstChangeNotificationW(fs2us(path), BoolToBOOL(watchSubtree), notifyFilter);
- #ifdef WIN_LONG_PATH
- if (!IsHandleAllocated())
- {
- UString longPath;
- if (GetSuperPath(path, longPath, USE_MAIN_PATH))
- _handle = ::FindFirstChangeNotificationW(longPath, BoolToBOOL(watchSubtree), notifyFilter);
- }
- #endif
- }
- return _handle;
-}
-
-#ifndef UNDER_CE
-
-bool MyGetLogicalDriveStrings(CObjectVector<FString> &driveStrings)
-{
- driveStrings.Clear();
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- driveStrings.Clear();
- UINT32 size = GetLogicalDriveStrings(0, NULL);
- if (size == 0)
- return false;
- AString buf;
- UINT32 newSize = GetLogicalDriveStrings(size, buf.GetBuffer(size));
- if (newSize == 0 || newSize > size)
- return false;
- AString s;
- for (UINT32 i = 0; i < newSize; i++)
- {
- char c = buf[i];
- if (c == '\0')
- {
- driveStrings.Add(fas2fs(s));
- s.Empty();
- }
- else
- s += c;
- }
- return s.IsEmpty();
- }
- else
- #endif
- {
- UINT32 size = GetLogicalDriveStringsW(0, NULL);
- if (size == 0)
- return false;
- UString buf;
- UINT32 newSize = GetLogicalDriveStringsW(size, buf.GetBuffer(size));
- if (newSize == 0 || newSize > size)
- return false;
- UString s;
- for (UINT32 i = 0; i < newSize; i++)
- {
- WCHAR c = buf[i];
- if (c == L'\0')
- {
- driveStrings.Add(us2fs(s));
- s.Empty();
- }
- else
- s += c;
- }
- return s.IsEmpty();
- }
-}
-
-#endif
-
-}}}
diff --git a/src/libs/7zip/win/CPP/Windows/FileFind.h b/src/libs/7zip/win/CPP/Windows/FileFind.h
deleted file mode 100644
index aaa7499bd..000000000
--- a/src/libs/7zip/win/CPP/Windows/FileFind.h
+++ /dev/null
@@ -1,158 +0,0 @@
-// Windows/FileFind.h
-
-#ifndef __WINDOWS_FILE_FIND_H
-#define __WINDOWS_FILE_FIND_H
-
-#include "../Common/MyString.h"
-#include "Defs.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); }
-public:
- UInt64 Size;
- FILETIME CTime;
- FILETIME ATime;
- FILETIME MTime;
- DWORD Attrib;
- bool IsAltStream;
- bool IsDevice;
-
- /*
- #ifdef UNDER_CE
- DWORD ObjectID;
- #else
- UINT32 ReparseTag;
- #endif
- */
-
- CFileInfoBase() { Clear(); }
- void Clear() throw();
-
- void SetAsDir() { Attrib = FILE_ATTRIBUTE_DIRECTORY; }
-
- 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
-{
- FString Name;
- #if defined(_WIN32) && !defined(UNDER_CE)
- // FString ShortName;
- #endif
-
- bool IsDots() const throw();
- bool Find(CFSTR wildcard);
-};
-
-class CFindFileBase
-{
-protected:
- HANDLE _handle;
-public:
- bool IsHandleAllocated() const { return _handle != INVALID_HANDLE_VALUE; }
- CFindFileBase(): _handle(INVALID_HANDLE_VALUE) {}
- ~CFindFileBase() { Close(); }
- bool Close() throw();
-};
-
-class CFindFile: public CFindFileBase
-{
-public:
- bool FindFirst(CFSTR wildcard, CFileInfo &fileInfo);
- bool FindNext(CFileInfo &fileInfo);
-};
-
-#if defined(_WIN32) && !defined(UNDER_CE)
-
-struct CStreamInfo
-{
- UString Name;
- UInt64 Size;
-
- UString GetReducedName() const;
- bool IsMainStream() const throw();
-};
-
-class CFindStream: public CFindFileBase
-{
-public:
- bool FindFirst(CFSTR filePath, CStreamInfo &streamInfo);
- bool FindNext(CStreamInfo &streamInfo);
-};
-
-class CStreamEnumerator
-{
- CFindStream _find;
- FString _filePath;
-
- bool NextAny(CFileInfo &fileInfo);
-public:
- CStreamEnumerator(const FString &filePath): _filePath(filePath) {}
- bool Next(CStreamInfo &streamInfo, bool &found);
-};
-
-#endif
-
-bool DoesFileExist(CFSTR name);
-bool DoesDirExist(CFSTR name);
-bool DoesFileOrDirExist(CFSTR name);
-
-class CEnumerator
-{
- CFindFile _findFile;
- FString _wildcard;
-
- bool NextAny(CFileInfo &fileInfo);
-public:
- CEnumerator(const FString &wildcard): _wildcard(wildcard) {}
- bool Next(CFileInfo &fileInfo);
- bool Next(CFileInfo &fileInfo, bool &found);
-};
-
-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() throw();
- HANDLE FindFirst(CFSTR pathName, bool watchSubtree, DWORD notifyFilter);
- bool FindNext() { return BOOLToBool(::FindNextChangeNotification(_handle)); }
-};
-
-#ifndef UNDER_CE
-bool MyGetLogicalDriveStrings(CObjectVector<FString> &driveStrings);
-#endif
-
-}}}
-
-#endif
diff --git a/src/libs/7zip/win/CPP/Windows/FileIO.cpp b/src/libs/7zip/win/CPP/Windows/FileIO.cpp
deleted file mode 100644
index fec859ed3..000000000
--- a/src/libs/7zip/win/CPP/Windows/FileIO.cpp
+++ /dev/null
@@ -1,432 +0,0 @@
-// Windows/FileIO.cpp
-
-#include "StdAfx.h"
-
-#ifdef SUPPORT_DEVICE_FILE
-#include "../../C/Alloc.h"
-#endif
-
-#include "FileIO.h"
-#include "FileName.h"
-
-#ifndef _UNICODE
-extern bool g_IsNT;
-#endif
-
-using namespace NWindows;
-using namespace NFile;
-using namespace NName;
-
-namespace NWindows {
-namespace NFile {
-
-#ifdef SUPPORT_DEVICE_FILE
-
-namespace NSystem
-{
-bool MyGetDiskFreeSpace(CFSTR rootPath, UInt64 &clusterSize, UInt64 &totalSize, UInt64 &freeSize);
-}
-#endif
-
-namespace NIO {
-
-/*
-WinXP-64 CreateFile():
- "" - ERROR_PATH_NOT_FOUND
- :stream - OK
- .:stream - ERROR_PATH_NOT_FOUND
- .\:stream - OK
-
- folder\:stream - ERROR_INVALID_NAME
- folder:stream - OK
-
- c:\:stream - OK
-
- c::stream - ERROR_INVALID_NAME, if current dir is NOT ROOT ( c:\dir1 )
- c::stream - OK, if current dir is ROOT ( c:\ )
-*/
-
-bool CFileBase::Create(CFSTR path, DWORD desiredAccess,
- DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes)
-{
- if (!Close())
- return false;
-
- #ifdef SUPPORT_DEVICE_FILE
- IsDeviceFile = false;
- #endif
-
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- _handle = ::CreateFile(fs2fas(path), desiredAccess, shareMode,
- (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, flagsAndAttributes, (HANDLE)NULL);
- }
- else
- #endif
- {
- IF_USE_MAIN_PATH
- _handle = ::CreateFileW(fs2us(path), desiredAccess, shareMode,
- (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, flagsAndAttributes, (HANDLE)NULL);
- #ifdef WIN_LONG_PATH
- if (_handle == INVALID_HANDLE_VALUE && USE_SUPER_PATH)
- {
- UString superPath;
- if (GetSuperPath(path, superPath, USE_MAIN_PATH))
- _handle = ::CreateFileW(superPath, desiredAccess, shareMode,
- (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, flagsAndAttributes, (HANDLE)NULL);
- }
- #endif
- }
- return (_handle != INVALID_HANDLE_VALUE);
-}
-
-bool CFileBase::Close() throw()
-{
- if (_handle == INVALID_HANDLE_VALUE)
- return true;
- if (!::CloseHandle(_handle))
- return false;
- _handle = INVALID_HANDLE_VALUE;
- return true;
-}
-
-bool CFileBase::GetPosition(UInt64 &position) const throw()
-{
- return Seek(0, FILE_CURRENT, position);
-}
-
-bool CFileBase::GetLength(UInt64 &length) const throw()
-{
- #ifdef SUPPORT_DEVICE_FILE
- if (IsDeviceFile && SizeDefined)
- {
- length = Size;
- 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 throw()
-{
- #ifdef SUPPORT_DEVICE_FILE
- if (IsDeviceFile && SizeDefined && moveMethod == FILE_END)
- {
- distanceToMove += Size;
- moveMethod = FILE_BEGIN;
- }
- #endif
-
- LONG high = (LONG)(distanceToMove >> 32);
- DWORD low = ::SetFilePointer(_handle, (LONG)(distanceToMove & 0xFFFFFFFF), &high, moveMethod);
- if (low == 0xFFFFFFFF)
- if (::GetLastError() != NO_ERROR)
- return false;
- newPosition = (((UInt64)high) << 32) + low;
- return true;
-}
-
-bool CFileBase::Seek(UInt64 position, UInt64 &newPosition) const throw()
-{
- return Seek(position, FILE_BEGIN, newPosition);
-}
-
-bool CFileBase::SeekToBegin() const throw()
-{
- UInt64 newPosition;
- return Seek(0, newPosition);
-}
-
-bool CFileBase::SeekToEnd(UInt64 &newPosition) const throw()
-{
- return Seek(0, FILE_END, newPosition);
-}
-
-// ---------- CInFile ---------
-
-#ifdef SUPPORT_DEVICE_FILE
-
-void CInFile::CorrectDeviceSize()
-{
- // maybe we must decrease kClusterSize to 1 << 12, if we want correct size at tail
- static const UInt32 kClusterSize = 1 << 14;
- UInt64 pos = Size & ~(UInt64)(kClusterSize - 1);
- UInt64 realNewPosition;
- if (!Seek(pos, realNewPosition))
- return;
- Byte *buf = (Byte *)MidAlloc(kClusterSize);
-
- bool needbackward = true;
-
- for (;;)
- {
- UInt32 processed = 0;
- // up test is slow for "PhysicalDrive".
- // processed size for latest block for "PhysicalDrive0" is 0.
- if (!Read1(buf, kClusterSize, processed))
- break;
- if (processed == 0)
- break;
- needbackward = false;
- Size = pos + processed;
- if (processed != kClusterSize)
- break;
- pos += kClusterSize;
- }
-
- if (needbackward && pos != 0)
- {
- pos -= kClusterSize;
- for (;;)
- {
- // break;
- if (!Seek(pos, realNewPosition))
- break;
- if (!buf)
- {
- buf = (Byte *)MidAlloc(kClusterSize);
- if (!buf)
- break;
- }
- UInt32 processed = 0;
- // that code doesn't work for "PhysicalDrive0"
- if (!Read1(buf, kClusterSize, processed))
- break;
- if (processed != 0)
- {
- Size = pos + processed;
- break;
- }
- if (pos == 0)
- break;
- pos -= kClusterSize;
- }
- }
- MidFree(buf);
-}
-
-
-void CInFile::CalcDeviceSize(CFSTR s)
-{
- SizeDefined = false;
- Size = 0;
- if (_handle == INVALID_HANDLE_VALUE || !IsDeviceFile)
- return;
- #ifdef UNDER_CE
-
- SizeDefined = true;
- Size = 128 << 20;
-
- #else
-
- PARTITION_INFORMATION partInfo;
- bool needCorrectSize = true;
-
- /*
- WinXP 64-bit:
-
- HDD \\.\PhysicalDrive0 (MBR):
- GetPartitionInfo == GeometryEx : corrrect size? (includes tail)
- Geometry : smaller than GeometryEx (no tail, maybe correct too?)
- MyGetDiskFreeSpace : FAIL
- Size correction is slow and block size (kClusterSize) must be small?
-
- HDD partition \\.\N: (NTFS):
- MyGetDiskFreeSpace : Size of NTFS clusters. Same size can be calculated after correction
- GetPartitionInfo : size of partition data: NTFS clusters + TAIL; TAIL contains extra empty sectors and copy of first sector of NTFS
- Geometry / CdRomGeometry / GeometryEx : size of HDD (not that partition)
-
- CD-ROM drive (ISO):
- MyGetDiskFreeSpace : correct size. Same size can be calculated after correction
- Geometry == CdRomGeometry : smaller than corrrect size
- GetPartitionInfo == GeometryEx : larger than corrrect size
-
- Floppy \\.\a: (FAT):
- Geometry : correct size.
- CdRomGeometry / GeometryEx / GetPartitionInfo / MyGetDiskFreeSpace - FAIL
- correction works OK for FAT.
- correction works OK for non-FAT, if kClusterSize = 512.
- */
-
- if (GetPartitionInfo(&partInfo))
- {
- Size = partInfo.PartitionLength.QuadPart;
- SizeDefined = true;
- needCorrectSize = false;
- if ((s)[0] == '\\' && (s)[1] == '\\' && (s)[2] == '.' && (s)[3] == '\\' && (s)[5] == ':' && (s)[6] == 0)
- {
- FChar path[4] = { s[4], ':', '\\', 0 };
- UInt64 clusterSize, totalSize, freeSize;
- if (NSystem::MyGetDiskFreeSpace(path, clusterSize, totalSize, freeSize))
- Size = totalSize;
- else
- needCorrectSize = true;
- }
- }
-
- if (!SizeDefined)
- {
- my_DISK_GEOMETRY_EX geomEx;
- SizeDefined = GetGeometryEx(&geomEx);
- if (SizeDefined)
- Size = geomEx.DiskSize.QuadPart;
- else
- {
- DISK_GEOMETRY geom;
- SizeDefined = GetGeometry(&geom);
- if (!SizeDefined)
- SizeDefined = GetCdRomGeometry(&geom);
- if (SizeDefined)
- Size = geom.Cylinders.QuadPart * geom.TracksPerCylinder * geom.SectorsPerTrack * geom.BytesPerSector;
- }
- }
-
- if (needCorrectSize && SizeDefined && Size != 0)
- {
- CorrectDeviceSize();
- SeekToBegin();
- }
-
- // SeekToBegin();
- #endif
-}
-
-// ((desiredAccess & (FILE_WRITE_DATA | FILE_APPEND_DATA | GENERIC_WRITE)) == 0 &&
-
-#define MY_DEVICE_EXTRA_CODE \
- IsDeviceFile = IsDevicePath(fileName); \
- CalcDeviceSize(fileName);
-#else
-#define MY_DEVICE_EXTRA_CODE
-#endif
-
-bool CInFile::Open(CFSTR 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(CFSTR fileName, bool shareForWrite)
-{ return Open(fileName, FILE_SHARE_READ | (shareForWrite ? FILE_SHARE_WRITE : 0), OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL); }
-
-bool CInFile::Open(CFSTR fileName)
- { return OpenShared(fileName, false); }
-
-// 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) throw()
-{
- 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) throw()
-{
- if (size > kChunkSizeMax)
- size = kChunkSizeMax;
- return Read1(data, size, processedSize);
-}
-
-bool CInFile::Read(void *data, UInt32 size, UInt32 &processedSize) throw()
-{
- 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 ---------
-
-static inline DWORD GetCreationDisposition(bool createAlways)
- { return createAlways? CREATE_ALWAYS: CREATE_NEW; }
-
-bool COutFile::Open(CFSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes)
- { return CFileBase::Create(fileName, GENERIC_WRITE, shareMode, creationDisposition, flagsAndAttributes); }
-
-bool COutFile::Open(CFSTR fileName, DWORD creationDisposition)
- { return Open(fileName, FILE_SHARE_READ, creationDisposition, FILE_ATTRIBUTE_NORMAL); }
-
-bool COutFile::Create(CFSTR fileName, bool createAlways)
- { return Open(fileName, GetCreationDisposition(createAlways)); }
-
-bool COutFile::CreateAlways(CFSTR fileName, DWORD flagsAndAttributes)
- { return Open(fileName, FILE_SHARE_READ, GetCreationDisposition(true), flagsAndAttributes); }
-
-bool COutFile::SetTime(const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime) throw()
- { return BOOLToBool(::SetFileTime(_handle, cTime, aTime, mTime)); }
-
-bool COutFile::SetMTime(const FILETIME *mTime) throw() { return SetTime(NULL, NULL, mTime); }
-
-bool COutFile::WritePart(const void *data, UInt32 size, UInt32 &processedSize) throw()
-{
- 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) throw()
-{
- 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() throw() { return BOOLToBool(::SetEndOfFile(_handle)); }
-
-bool COutFile::SetLength(UInt64 length) throw()
-{
- UInt64 newPosition;
- if (!Seek(length, newPosition))
- return false;
- if (newPosition != length)
- return false;
- return SetEndOfFile();
-}
-
-}}}
diff --git a/src/libs/7zip/win/CPP/Windows/FileIO.h b/src/libs/7zip/win/CPP/Windows/FileIO.h
deleted file mode 100644
index f595121ef..000000000
--- a/src/libs/7zip/win/CPP/Windows/FileIO.h
+++ /dev/null
@@ -1,201 +0,0 @@
-// Windows/FileIO.h
-
-#ifndef __WINDOWS_FILE_IO_H
-#define __WINDOWS_FILE_IO_H
-
-#if defined(_WIN32) && !defined(UNDER_CE)
-#include <winioctl.h>
-#endif
-
-#include "../Common/MyString.h"
-#include "../Common/MyBuffer.h"
-
-#include "Defs.h"
-
-#define _my_IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
-#define _my_IO_REPARSE_TAG_SYMLINK (0xA000000CL)
-
-#define _my_SYMLINK_FLAG_RELATIVE 1
-
-#define my_FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // REPARSE_DATA_BUFFER
-#define my_FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS) // REPARSE_DATA_BUFFER
-
-namespace NWindows {
-namespace NFile {
-
-#if defined(_WIN32) && !defined(UNDER_CE)
-bool FillLinkData(CByteBuffer &dest, const wchar_t *path, bool isSymLink);
-#endif
-
-struct CReparseShortInfo
-{
- unsigned Offset;
- unsigned Size;
-
- bool Parse(const Byte *p, size_t size);
-};
-
-struct CReparseAttr
-{
- UInt32 Tag;
- UInt32 Flags;
- UString SubsName;
- UString PrintName;
-
- CReparseAttr(): Tag(0), Flags(0) {}
- bool Parse(const Byte *p, size_t size);
-
- bool IsMountPoint() const { return Tag == _my_IO_REPARSE_TAG_MOUNT_POINT; } // it's Junction
- bool IsSymLink() const { return Tag == _my_IO_REPARSE_TAG_SYMLINK; }
- bool IsRelative() const { return Flags == _my_SYMLINK_FLAG_RELATIVE; }
- // bool IsVolume() const;
-
- bool IsOkNamePair() const;
- UString GetPath() const;
-};
-
-namespace NIO {
-
-bool GetReparseData(CFSTR path, CByteBuffer &reparseData, BY_HANDLE_FILE_INFORMATION *fileInfo = NULL);
-bool SetReparseData(CFSTR path, bool isDir, const void *data, DWORD size);
-
-class CFileBase
-{
-protected:
- HANDLE _handle;
-
- bool Create(CFSTR path, DWORD desiredAccess,
- DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes);
-
-public:
-
- bool DeviceIoControl(DWORD controlCode, LPVOID inBuffer, DWORD inSize,
- LPVOID outBuffer, DWORD outSize, LPDWORD bytesReturned, LPOVERLAPPED overlapped = NULL) const
- {
- return BOOLToBool(::DeviceIoControl(_handle, controlCode, inBuffer, inSize,
- outBuffer, outSize, bytesReturned, overlapped));
- }
-
- bool DeviceIoControlOut(DWORD controlCode, LPVOID outBuffer, DWORD outSize, LPDWORD bytesReturned) const
- {
- return DeviceIoControl(controlCode, NULL, 0, outBuffer, outSize, bytesReturned);
- }
-
- bool DeviceIoControlOut(DWORD controlCode, LPVOID outBuffer, DWORD outSize) const
- {
- DWORD bytesReturned;
- return DeviceIoControlOut(controlCode, outBuffer, outSize, &bytesReturned);
- }
-
-public:
- #ifdef SUPPORT_DEVICE_FILE
- bool IsDeviceFile;
- bool SizeDefined;
- UInt64 Size; // it can be larger than real available size
- #endif
-
- CFileBase(): _handle(INVALID_HANDLE_VALUE) {};
- ~CFileBase() { Close(); }
-
- bool Close() throw();
-
- bool GetPosition(UInt64 &position) const throw();
- bool GetLength(UInt64 &length) const throw();
-
- bool Seek(Int64 distanceToMove, DWORD moveMethod, UInt64 &newPosition) const throw();
- bool Seek(UInt64 position, UInt64 &newPosition) const throw();
- bool SeekToBegin() const throw();
- bool SeekToEnd(UInt64 &newPosition) const throw();
-
- bool GetFileInformation(BY_HANDLE_FILE_INFORMATION *info) const
- { return BOOLToBool(GetFileInformationByHandle(_handle, info)); }
-
- static bool GetFileInformation(CFSTR path, BY_HANDLE_FILE_INFORMATION *info)
- {
- NIO::CFileBase file;
- if (!file.Create(path, 0, FILE_SHARE_READ, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS))
- return false;
- return file.GetFileInformation(info);
- }
-};
-
-#ifndef UNDER_CE
-#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)
-
-// IOCTL_DISK_GET_DRIVE_GEOMETRY_EX works since WinXP
-#define my_IOCTL_DISK_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS)
-
-struct my_DISK_GEOMETRY_EX
-{
- DISK_GEOMETRY Geometry;
- LARGE_INTEGER DiskSize;
- BYTE Data[1];
-};
-#endif
-
-class CInFile: public CFileBase
-{
- #ifdef SUPPORT_DEVICE_FILE
-
- #ifndef UNDER_CE
-
- bool GetGeometry(DISK_GEOMETRY *res) const
- { return DeviceIoControlOut(IOCTL_DISK_GET_DRIVE_GEOMETRY, res, sizeof(*res)); }
-
- bool GetGeometryEx(my_DISK_GEOMETRY_EX *res) const
- { return DeviceIoControlOut(my_IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, 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 CorrectDeviceSize();
- void CalcDeviceSize(CFSTR name);
-
- #endif
-
-public:
- bool Open(CFSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes);
- bool OpenShared(CFSTR fileName, bool shareForWrite);
- bool Open(CFSTR fileName);
-
- #ifndef UNDER_CE
-
- bool OpenReparse(CFSTR fileName)
- {
- return Open(fileName, FILE_SHARE_READ, OPEN_EXISTING,
- FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS);
- }
-
- #endif
-
- bool Read1(void *data, UInt32 size, UInt32 &processedSize) throw();
- bool ReadPart(void *data, UInt32 size, UInt32 &processedSize) throw();
- bool Read(void *data, UInt32 size, UInt32 &processedSize) throw();
-};
-
-class COutFile: public CFileBase
-{
-public:
- bool Open(CFSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes);
- bool Open(CFSTR fileName, DWORD creationDisposition);
- bool Create(CFSTR fileName, bool createAlways);
- bool CreateAlways(CFSTR fileName, DWORD flagsAndAttributes);
-
- bool SetTime(const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime) throw();
- bool SetMTime(const FILETIME *mTime) throw();
- bool WritePart(const void *data, UInt32 size, UInt32 &processedSize) throw();
- bool Write(const void *data, UInt32 size, UInt32 &processedSize) throw();
- bool SetEndOfFile() throw();
- bool SetLength(UInt64 length) throw();
-};
-
-}}}
-
-#endif
diff --git a/src/libs/7zip/win/CPP/Windows/FileLink.cpp b/src/libs/7zip/win/CPP/Windows/FileLink.cpp
deleted file mode 100644
index dc524700d..000000000
--- a/src/libs/7zip/win/CPP/Windows/FileLink.cpp
+++ /dev/null
@@ -1,426 +0,0 @@
-// Windows/FileLink.cpp
-
-#include "StdAfx.h"
-
-#include "../../C/CpuArch.h"
-
-#ifdef SUPPORT_DEVICE_FILE
-#include "../../C/Alloc.h"
-#endif
-
-#include "FileDir.h"
-#include "FileFind.h"
-#include "FileIO.h"
-#include "FileName.h"
-
-#ifndef _UNICODE
-extern bool g_IsNT;
-#endif
-
-namespace NWindows {
-namespace NFile {
-
-using namespace NName;
-
-/*
- Reparse Points (Junctions and Symbolic Links):
- struct
- {
- UInt32 Tag;
- UInt16 Size; // not including starting 8 bytes
- UInt16 Reserved; // = 0
-
- UInt16 SubstituteOffset; // offset in bytes from start of namesChars
- UInt16 SubstituteLen; // size in bytes, it doesn't include tailed NUL
- UInt16 PrintOffset; // offset in bytes from start of namesChars
- UInt16 PrintLen; // size in bytes, it doesn't include tailed NUL
-
- [UInt32] Flags; // for Symbolic Links only.
-
- UInt16 namesChars[]
- }
-
- MOUNT_POINT (Junction point):
- 1) there is NUL wchar after path
- 2) Default Order in table:
- Substitute Path
- Print Path
- 3) pathnames can not contain dot directory names
-
- SYMLINK:
- 1) there is no NUL wchar after path
- 2) Default Order in table:
- Print Path
- Substitute Path
-*/
-
-/*
-static const UInt32 kReparseFlags_Alias = (1 << 29);
-static const UInt32 kReparseFlags_HighLatency = (1 << 30);
-static const UInt32 kReparseFlags_Microsoft = ((UInt32)1 << 31);
-
-#define _my_IO_REPARSE_TAG_HSM (0xC0000004L)
-#define _my_IO_REPARSE_TAG_HSM2 (0x80000006L)
-#define _my_IO_REPARSE_TAG_SIS (0x80000007L)
-#define _my_IO_REPARSE_TAG_WIM (0x80000008L)
-#define _my_IO_REPARSE_TAG_CSV (0x80000009L)
-#define _my_IO_REPARSE_TAG_DFS (0x8000000AL)
-#define _my_IO_REPARSE_TAG_DFSR (0x80000012L)
-*/
-
-#define Get16(p) GetUi16(p)
-#define Get32(p) GetUi32(p)
-
-#define Set16(p, v) SetUi16(p, v)
-#define Set32(p, v) SetUi32(p, v)
-
-static const wchar_t *k_LinkPrefix = L"\\??\\";
-static const unsigned k_LinkPrefix_Size = 4;
-
-static const bool IsLinkPrefix(const wchar_t *s)
-{
- return IsString1PrefixedByString2(s, k_LinkPrefix);
-}
-
-/*
-static const wchar_t *k_VolumePrefix = L"Volume{";
-static const bool IsVolumeName(const wchar_t *s)
-{
- return IsString1PrefixedByString2(s, k_VolumePrefix);
-}
-*/
-
-void WriteString(Byte *dest, const wchar_t *path)
-{
- for (;;)
- {
- wchar_t c = *path++;
- if (c == 0)
- return;
- Set16(dest, (UInt16)c);
- dest += 2;
- }
-}
-
-bool FillLinkData(CByteBuffer &dest, const wchar_t *path, bool isSymLink)
-{
- bool isAbs = IsAbsolutePath(path);
- if (!isAbs && !isSymLink)
- return false;
-
- bool needPrintName = true;
-
- if (IsSuperPath(path))
- {
- path += kSuperPathPrefixSize;
- if (!IsDrivePath(path))
- needPrintName = false;
- }
-
- const unsigned add_Prefix_Len = isAbs ? k_LinkPrefix_Size : 0;
-
- unsigned len2 = MyStringLen(path) * 2;
- const unsigned len1 = len2 + add_Prefix_Len * 2;
- if (!needPrintName)
- len2 = 0;
-
- unsigned totalNamesSize = (len1 + len2);
-
- /* some WIM imagex software uses old scheme for symbolic links.
- so we can old scheme for byte to byte compatibility */
-
- bool newOrderScheme = isSymLink;
- // newOrderScheme = false;
-
- if (!newOrderScheme)
- totalNamesSize += 2 * 2;
-
- const size_t size = 8 + 8 + (isSymLink ? 4 : 0) + totalNamesSize;
- dest.Alloc(size);
- memset(dest, 0, size);
- const UInt32 tag = isSymLink ?
- _my_IO_REPARSE_TAG_SYMLINK :
- _my_IO_REPARSE_TAG_MOUNT_POINT;
- Byte *p = dest;
- Set32(p, tag);
- Set16(p + 4, (UInt16)(size - 8));
- Set16(p + 6, 0);
- p += 8;
-
- unsigned subOffs = 0;
- unsigned printOffs = 0;
- if (newOrderScheme)
- subOffs = len2;
- else
- printOffs = len1 + 2;
-
- Set16(p + 0, (UInt16)subOffs);
- Set16(p + 2, (UInt16)len1);
- Set16(p + 4, (UInt16)printOffs);
- Set16(p + 6, (UInt16)len2);
-
- p += 8;
- if (isSymLink)
- {
- UInt32 flags = isAbs ? 0 : _my_SYMLINK_FLAG_RELATIVE;
- Set32(p, flags);
- p += 4;
- }
-
- if (add_Prefix_Len != 0)
- WriteString(p + subOffs, k_LinkPrefix);
- WriteString(p + subOffs + add_Prefix_Len * 2, path);
- if (needPrintName)
- WriteString(p + printOffs, path);
- return true;
-}
-
-static void GetString(const Byte *p, unsigned len, UString &res)
-{
- wchar_t *s = res.GetBuffer(len);
- for (unsigned i = 0; i < len; i++)
- s[i] = Get16(p + i * 2);
- s[len] = 0;
- res.ReleaseBuffer();
-}
-
-bool CReparseAttr::Parse(const Byte *p, size_t size)
-{
- if (size < 8)
- return false;
- Tag = Get32(p);
- UInt32 len = Get16(p + 4);
- if (len + 8 > size)
- return false;
- /*
- if ((type & kReparseFlags_Alias) == 0 ||
- (type & kReparseFlags_Microsoft) == 0 ||
- (type & 0xFFFF) != 3)
- */
- if (Tag != _my_IO_REPARSE_TAG_MOUNT_POINT &&
- Tag != _my_IO_REPARSE_TAG_SYMLINK)
- // return true;
- return false;
-
- if (Get16(p + 6) != 0) // padding
- return false;
-
- p += 8;
- size -= 8;
-
- if (len != size) // do we need that check?
- return false;
-
- if (len < 8)
- return false;
- unsigned subOffs = Get16(p);
- unsigned subLen = Get16(p + 2);
- unsigned printOffs = Get16(p + 4);
- unsigned printLen = Get16(p + 6);
- len -= 8;
- p += 8;
-
- Flags = 0;
- if (Tag == _my_IO_REPARSE_TAG_SYMLINK)
- {
- if (len < 4)
- return false;
- Flags = Get32(p);
- len -= 4;
- p += 4;
- }
-
- if ((subOffs & 1) != 0 || subOffs > len || len - subOffs < subLen)
- return false;
- if ((printOffs & 1) != 0 || printOffs > len || len - printOffs < printLen)
- return false;
- GetString(p + subOffs, subLen >> 1, SubsName);
- GetString(p + printOffs, printLen >> 1, PrintName);
-
- return true;
-}
-
-bool CReparseShortInfo::Parse(const Byte *p, size_t size)
-{
- const Byte *start = p;
- Offset= 0;
- Size = 0;
- if (size < 8)
- return false;
- UInt32 Tag = Get32(p);
- UInt32 len = Get16(p + 4);
- if (len + 8 > size)
- return false;
- /*
- if ((type & kReparseFlags_Alias) == 0 ||
- (type & kReparseFlags_Microsoft) == 0 ||
- (type & 0xFFFF) != 3)
- */
- if (Tag != _my_IO_REPARSE_TAG_MOUNT_POINT &&
- Tag != _my_IO_REPARSE_TAG_SYMLINK)
- // return true;
- return false;
-
- if (Get16(p + 6) != 0) // padding
- return false;
-
- p += 8;
- size -= 8;
-
- if (len != size) // do we need that check?
- return false;
-
- if (len < 8)
- return false;
- unsigned subOffs = Get16(p);
- unsigned subLen = Get16(p + 2);
- unsigned printOffs = Get16(p + 4);
- unsigned printLen = Get16(p + 6);
- len -= 8;
- p += 8;
-
- // UInt32 Flags = 0;
- if (Tag == _my_IO_REPARSE_TAG_SYMLINK)
- {
- if (len < 4)
- return false;
- // Flags = Get32(p);
- len -= 4;
- p += 4;
- }
-
- if ((subOffs & 1) != 0 || subOffs > len || len - subOffs < subLen)
- return false;
- if ((printOffs & 1) != 0 || printOffs > len || len - printOffs < printLen)
- return false;
-
- Offset = (unsigned)(p - start) + subOffs;
- Size = subLen;
- return true;
-}
-
-bool CReparseAttr::IsOkNamePair() const
-{
- if (IsLinkPrefix(SubsName))
- {
- if (!IsDrivePath(SubsName.Ptr(k_LinkPrefix_Size)))
- return PrintName.IsEmpty();
- if (wcscmp(SubsName.Ptr(k_LinkPrefix_Size), PrintName) == 0)
- return true;
- }
- return wcscmp(SubsName, PrintName) == 0;
-}
-
-/*
-bool CReparseAttr::IsVolume() const
-{
- if (!IsLinkPrefix(SubsName))
- return false;
- return IsVolumeName(SubsName.Ptr(k_LinkPrefix_Size));
-}
-*/
-
-UString CReparseAttr::GetPath() const
-{
- UString s = SubsName;
- if (IsLinkPrefix(s))
- {
- s.ReplaceOneCharAtPos(1, '\\');
- if (IsDrivePath(s.Ptr(k_LinkPrefix_Size)))
- s.DeleteFrontal(k_LinkPrefix_Size);
- }
- return s;
-}
-
-
-#ifdef SUPPORT_DEVICE_FILE
-
-namespace NSystem
-{
-bool MyGetDiskFreeSpace(CFSTR rootPath, UInt64 &clusterSize, UInt64 &totalSize, UInt64 &freeSize);
-}
-#endif
-
-#ifndef UNDER_CE
-
-namespace NIO {
-
-bool GetReparseData(CFSTR path, CByteBuffer &reparseData, BY_HANDLE_FILE_INFORMATION *fileInfo)
-{
- reparseData.Free();
- CInFile file;
- if (!file.OpenReparse(path))
- return false;
-
- if (fileInfo)
- file.GetFileInformation(fileInfo);
-
- const unsigned kBufSize = MAXIMUM_REPARSE_DATA_BUFFER_SIZE;
- CByteArr buf(kBufSize);
- DWORD returnedSize;
- if (!file.DeviceIoControlOut(my_FSCTL_GET_REPARSE_POINT, buf, kBufSize, &returnedSize))
- return false;
- reparseData.CopyFrom(buf, returnedSize);
- return true;
-}
-
-static bool CreatePrefixDirOfFile(CFSTR path)
-{
- FString path2 = path;
- int pos = path2.ReverseFind(FCHAR_PATH_SEPARATOR);
- if (pos < 0)
- return true;
- #ifdef _WIN32
- if (pos == 2 && path2[1] == L':')
- return true; // we don't create Disk folder;
- #endif
- path2.DeleteFrom(pos);
- return NDir::CreateComplexDir(path2);
-}
-
-// If there is Reprase data already, it still writes new Reparse data
-bool SetReparseData(CFSTR path, bool isDir, const void *data, DWORD size)
-{
- NFile::NFind::CFileInfo fi;
- if (fi.Find(path))
- {
- if (fi.IsDir() != isDir)
- {
- ::SetLastError(ERROR_DIRECTORY);
- return false;
- }
- }
- else
- {
- if (isDir)
- {
- if (!NDir::CreateComplexDir(path))
- return false;
- }
- else
- {
- CreatePrefixDirOfFile(path);
- COutFile file;
- if (!file.Create(path, CREATE_NEW))
- return false;
- }
- }
-
- COutFile file;
- if (!file.Open(path,
- FILE_SHARE_WRITE,
- OPEN_EXISTING,
- FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS))
- return false;
-
- DWORD returnedSize;
- if (!file.DeviceIoControl(my_FSCTL_SET_REPARSE_POINT, (void *)data, size, NULL, 0, &returnedSize))
- return false;
- return true;
-}
-
-}
-
-#endif
-
-}}
diff --git a/src/libs/7zip/win/CPP/Windows/FileMapping.h b/src/libs/7zip/win/CPP/Windows/FileMapping.h
deleted file mode 100644
index f90c429f1..000000000
--- a/src/libs/7zip/win/CPP/Windows/FileMapping.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// Windows/FileMapping.h
-
-#ifndef __WINDOWS_FILEMAPPING_H
-#define __WINDOWS_FILEMAPPING_H
-
-#include "../Common/MyTypes.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
- #ifndef UNDER_CE
- desiredAccess
- #endif
- , 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/src/libs/7zip/win/CPP/Windows/FileName.cpp b/src/libs/7zip/win/CPP/Windows/FileName.cpp
deleted file mode 100644
index 0a6aee100..000000000
--- a/src/libs/7zip/win/CPP/Windows/FileName.cpp
+++ /dev/null
@@ -1,687 +0,0 @@
-// Windows/FileName.cpp
-
-#include "StdAfx.h"
-
-#include "FileName.h"
-
-#ifndef _UNICODE
-extern bool g_IsNT;
-#endif
-
-namespace NWindows {
-namespace NFile {
-namespace NName {
-
-#ifndef USE_UNICODE_FSTRING
-void NormalizeDirPathPrefix(FString &dirPath)
-{
- if (dirPath.IsEmpty())
- return;
- if (dirPath.Back() != FCHAR_PATH_SEPARATOR)
- dirPath += FCHAR_PATH_SEPARATOR;
-}
-#endif
-
-void NormalizeDirPathPrefix(UString &dirPath)
-{
- if (dirPath.IsEmpty())
- return;
- if (dirPath.Back() != WCHAR_PATH_SEPARATOR)
- dirPath += WCHAR_PATH_SEPARATOR;
-}
-
-
-#ifdef _WIN32
-
-const wchar_t *kSuperPathPrefix = L"\\\\?\\";
-static const wchar_t *kSuperUncPrefix = L"\\\\?\\UNC\\";
-
-#define IS_DEVICE_PATH(s) ((s)[0] == '\\' && (s)[1] == '\\' && (s)[2] == '.' && (s)[3] == '\\')
-#define IS_SUPER_PREFIX(s) ((s)[0] == '\\' && (s)[1] == '\\' && (s)[2] == '?' && (s)[3] == '\\')
-#define IS_SUPER_OR_DEVICE_PATH(s) ((s)[0] == '\\' && (s)[1] == '\\' && ((s)[2] == '?' || (s)[2] == '.') && (s)[3] == '\\')
-#define IS_LETTER_CHAR(c) ((c) >= 'a' && (c) <= 'z' || (c) >= 'A' && (c) <= 'Z')
-
-#define IS_UNC_WITH_SLASH(s) ( \
- ((s)[0] == 'U' || (s)[0] == 'u') && \
- ((s)[1] == 'N' || (s)[1] == 'n') && \
- ((s)[2] == 'C' || (s)[2] == 'c') && \
- (s)[3] == '\\')
-
-bool IsDevicePath(CFSTR s) throw()
-{
- #ifdef UNDER_CE
-
- s = s;
- return false;
- /*
- // actually we don't know the way to open device file in WinCE.
- unsigned len = MyStringLen(s);
- if (len < 5 || len > 5 || memcmp(s, FTEXT("DSK"), 3 * sizeof(FChar)) != 0)
- return false;
- if (s[4] != ':')
- return false;
- // for reading use SG_REQ sg; if (DeviceIoControl(dsk, IOCTL_DISK_READ));
- */
-
- #else
-
- if (!IS_DEVICE_PATH(s))
- return false;
- unsigned len = MyStringLen(s);
- if (len == 6 && s[5] == ':')
- return true;
- if (len < 18 || len > 22 || memcmp(s + kDevicePathPrefixSize, FTEXT("PhysicalDrive"), 13 * sizeof(FChar)) != 0)
- return false;
- for (unsigned i = 17; i < len; i++)
- if (s[i] < '0' || s[i] > '9')
- return false;
- return true;
-
- #endif
-}
-
-bool IsSuperUncPath(CFSTR s) throw() { return (IS_SUPER_PREFIX(s) && IS_UNC_WITH_SLASH(s + kSuperPathPrefixSize)); }
-
-bool IsDrivePath(const wchar_t *s) throw() { return IS_LETTER_CHAR(s[0]) && s[1] == ':' && s[2] == '\\'; }
-bool IsSuperPath(const wchar_t *s) throw() { return IS_SUPER_PREFIX(s); }
-bool IsSuperOrDevicePath(const wchar_t *s) throw() { return IS_SUPER_OR_DEVICE_PATH(s); }
-// bool IsSuperUncPath(const wchar_t *s) { return (IS_SUPER_PREFIX(s) && IS_UNC_WITH_SLASH(s + kSuperPathPrefixSize)); }
-
-#ifndef USE_UNICODE_FSTRING
-bool IsDrivePath(CFSTR s) throw() { return IS_LETTER_CHAR(s[0]) && s[1] == ':' && s[2] == '\\'; }
-bool IsSuperPath(CFSTR s) throw() { return IS_SUPER_PREFIX(s); }
-bool IsSuperOrDevicePath(CFSTR s) throw() { return IS_SUPER_OR_DEVICE_PATH(s); }
-#endif // USE_UNICODE_FSTRING
-
-bool IsAbsolutePath(const wchar_t *s) throw()
-{
- return s[0] == WCHAR_PATH_SEPARATOR || IsDrivePath(s);
-}
-
-static const unsigned kDrivePrefixSize = 3; /* c:\ */
-
-#ifndef USE_UNICODE_FSTRING
-
-static unsigned GetRootPrefixSize_Of_NetworkPath(CFSTR s) throw()
-{
- // Network path: we look "server\path\" as root prefix
- int pos = FindCharPosInString(s, '\\');
- if (pos < 0)
- return 0;
- int pos2 = FindCharPosInString(s + pos + 1, '\\');
- if (pos2 < 0)
- return 0;
- return pos + pos2 + 2;
-}
-
-static unsigned GetRootPrefixSize_Of_SimplePath(CFSTR s) throw()
-{
- if (IsDrivePath(s))
- return kDrivePrefixSize;
- if (s[0] != '\\' || s[1] != '\\')
- return 0;
- unsigned size = GetRootPrefixSize_Of_NetworkPath(s + 2);
- return (size == 0) ? 0 : 2 + size;
-}
-
-static unsigned GetRootPrefixSize_Of_SuperPath(CFSTR s) throw()
-{
- if (IS_UNC_WITH_SLASH(s + kSuperPathPrefixSize))
- {
- unsigned size = GetRootPrefixSize_Of_NetworkPath(s + kSuperUncPathPrefixSize);
- return (size == 0) ? 0 : kSuperUncPathPrefixSize + size;
- }
- // we support \\?\c:\ paths and volume GUID paths \\?\Volume{GUID}\"
- int pos = FindCharPosInString(s + kSuperPathPrefixSize, FCHAR_PATH_SEPARATOR);
- if (pos < 0)
- return 0;
- return kSuperPathPrefixSize + pos + 1;
-}
-
-unsigned GetRootPrefixSize(CFSTR s) throw()
-{
- if (IS_DEVICE_PATH(s))
- return kDevicePathPrefixSize;
- if (IsSuperPath(s))
- return GetRootPrefixSize_Of_SuperPath(s);
- return GetRootPrefixSize_Of_SimplePath(s);
-}
-
-#endif // USE_UNICODE_FSTRING
-
-static unsigned GetRootPrefixSize_Of_NetworkPath(const wchar_t *s) throw()
-{
- // Network path: we look "server\path\" as root prefix
- int pos = FindCharPosInString(s, L'\\');
- if (pos < 0)
- return 0;
- int pos2 = FindCharPosInString(s + pos + 1, L'\\');
- if (pos2 < 0)
- return 0;
- return pos + pos2 + 2;
-}
-
-static unsigned GetRootPrefixSize_Of_SimplePath(const wchar_t *s) throw()
-{
- if (IsDrivePath(s))
- return kDrivePrefixSize;
- if (s[0] != '\\' || s[1] != '\\')
- return 0;
- unsigned size = GetRootPrefixSize_Of_NetworkPath(s + 2);
- return (size == 0) ? 0 : 2 + size;
-}
-
-static unsigned GetRootPrefixSize_Of_SuperPath(const wchar_t *s) throw()
-{
- if (IS_UNC_WITH_SLASH(s + kSuperPathPrefixSize))
- {
- unsigned size = GetRootPrefixSize_Of_NetworkPath(s + kSuperUncPathPrefixSize);
- return (size == 0) ? 0 : kSuperUncPathPrefixSize + size;
- }
- // we support \\?\c:\ paths and volume GUID paths \\?\Volume{GUID}\"
- int pos = FindCharPosInString(s + kSuperPathPrefixSize, L'\\');
- if (pos < 0)
- return 0;
- return kSuperPathPrefixSize + pos + 1;
-}
-
-unsigned GetRootPrefixSize(const wchar_t *s) throw()
-{
- if (IS_DEVICE_PATH(s))
- return kDevicePathPrefixSize;
- if (IsSuperPath(s))
- return GetRootPrefixSize_Of_SuperPath(s);
- return GetRootPrefixSize_Of_SimplePath(s);
-}
-
-#else // _WIN32
-
-bool IsAbsolutePath(const wchar_t *s) throw() { return s[0] == WCHAR_PATH_SEPARATOR }
-
-#ifndef USE_UNICODE_FSTRING
-unsigned GetRootPrefixSize(CFSTR s) throw() { return s[0] == CHAR_PATH_SEPRATOR ? 1 : 0; }
-#endif
-unsigned GetRootPrefixSize(const wchar_t *s) throw() { return s[0] == CHAR_PATH_SEPRATOR ? 1 : 0; }
-
-#endif // _WIN32
-
-
-#ifndef UNDER_CE
-
-static bool GetCurDir(UString &path)
-{
- path.Empty();
- DWORD needLength;
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- TCHAR s[MAX_PATH + 2];
- s[0] = 0;
- needLength = ::GetCurrentDirectory(MAX_PATH + 1, s);
- path = fs2us(fas2fs(s));
- }
- else
- #endif
- {
- WCHAR s[MAX_PATH + 2];
- s[0] = 0;
- needLength = ::GetCurrentDirectoryW(MAX_PATH + 1, s);
- path = s;
- }
- return (needLength > 0 && needLength <= MAX_PATH);
-}
-
-static bool ResolveDotsFolders(UString &s)
-{
- #ifdef _WIN32
- s.Replace(L'/', WCHAR_PATH_SEPARATOR);
- #endif
- for (int i = 0;;)
- {
- wchar_t c = s[i];
- if (c == 0)
- return true;
- if (c == '.' && (i == 0 || s[i - 1] == WCHAR_PATH_SEPARATOR))
- {
- wchar_t c1 = s[i + 1];
- if (c1 == '.')
- {
- wchar_t c2 = s[i + 2];
- if (c2 == WCHAR_PATH_SEPARATOR || c2 == 0)
- {
- if (i == 0)
- return false;
- int k = i - 2;
- for (; k >= 0; k--)
- if (s[k] == WCHAR_PATH_SEPARATOR)
- break;
- unsigned num;
- if (k >= 0)
- {
- num = i + 2 - k;
- i = k;
- }
- else
- {
- num = (c2 == 0 ? (i + 2) : (i + 3));
- i = 0;
- }
- s.Delete(i, num);
- continue;
- }
- }
- else
- {
- if (c1 == WCHAR_PATH_SEPARATOR || c1 == 0)
- {
- unsigned num = 2;
- if (i != 0)
- i--;
- else if (c1 == 0)
- num = 1;
- s.Delete(i, num);
- continue;
- }
- }
- }
- i++;
- }
-}
-
-#endif // UNDER_CE
-
-#define LONG_PATH_DOTS_FOLDERS_PARSING
-
-
-/*
-Windows (at least 64-bit XP) can't resolve "." or ".." in paths that start with SuperPrefix \\?\
-To solve that problem we check such path:
- - super path contains "." or ".." - we use kSuperPathType_UseOnlySuper
- - super path doesn't contain "." or ".." - we use kSuperPathType_UseOnlyMain
-*/
-#ifdef LONG_PATH_DOTS_FOLDERS_PARSING
-#ifndef UNDER_CE
-static bool AreThereDotsFolders(CFSTR s)
-{
- for (unsigned i = 0;; i++)
- {
- FChar c = s[i];
- if (c == 0)
- return false;
- if (c == '.' && (i == 0 || s[i - 1] == CHAR_PATH_SEPARATOR))
- {
- FChar c1 = s[i + 1];
- if (c1 == 0 || c1 == CHAR_PATH_SEPARATOR ||
- (c1 == '.' && (s[i + 2] == 0 || s[i + 2] == CHAR_PATH_SEPARATOR)))
- return true;
- }
- }
-}
-#endif
-#endif // LONG_PATH_DOTS_FOLDERS_PARSING
-
-#ifdef WIN_LONG_PATH
-
-/*
-Most of Windows versions have problems, if some file or dir name
-contains '.' or ' ' at the end of name (Bad Path).
-To solve that problem, we always use Super Path ("\\?\" prefix and full path)
-in such cases. Note that "." and ".." are not bad names.
-
-There are 3 cases:
- 1) If the path is already Super Path, we use that path
- 2) If the path is not Super Path :
- 2.1) Bad Path; we use only Super Path.
- 2.2) Good Path; we use Main Path. If it fails, we use Super Path.
-
- NeedToUseOriginalPath returns:
- kSuperPathType_UseOnlyMain : Super already
- kSuperPathType_UseOnlySuper : not Super, Bad Path
- kSuperPathType_UseMainAndSuper : not Super, Good Path
-*/
-
-int GetUseSuperPathType(CFSTR s) throw()
-{
- if (IsSuperOrDevicePath(s))
- {
- #ifdef LONG_PATH_DOTS_FOLDERS_PARSING
- if ((s)[2] != '.')
- if (AreThereDotsFolders(s + kSuperPathPrefixSize))
- return kSuperPathType_UseOnlySuper;
- #endif
- return kSuperPathType_UseOnlyMain;
- }
-
- for (unsigned i = 0;; i++)
- {
- FChar c = s[i];
- if (c == 0)
- return kSuperPathType_UseMainAndSuper;
- if (c == '.' || c == ' ')
- {
- FChar c2 = s[i + 1];
- if (c2 == 0 || c2 == CHAR_PATH_SEPARATOR)
- {
- // if it's "." or "..", it's not bad name.
- if (c == '.')
- {
- if (i == 0 || s[i - 1] == CHAR_PATH_SEPARATOR)
- continue;
- if (s[i - 1] == '.')
- {
- if (i - 1 == 0 || s[i - 2] == CHAR_PATH_SEPARATOR)
- continue;
- }
- }
- return kSuperPathType_UseOnlySuper;
- }
- }
- }
-}
-
-
-/*
- returns false in two cases:
- - if GetCurDir was used, and GetCurDir returned error.
- - if we can't resolve ".." name.
- if path is ".", "..", res is empty.
- if it's Super Path already, res is empty.
- for \**** , and if GetCurDir is not drive (c:\), res is empty
- for absolute paths, returns true, res is Super path.
-*/
-
-
-static bool GetSuperPathBase(CFSTR s, UString &res)
-{
- res.Empty();
-
- FChar c = s[0];
- if (c == 0)
- return true;
- if (c == '.' && (s[1] == 0 || (s[1] == '.' && s[2] == 0)))
- return true;
-
- if (IsSuperOrDevicePath(s))
- {
- #ifdef LONG_PATH_DOTS_FOLDERS_PARSING
-
- if ((s)[2] == '.')
- return true;
-
- // we will return true here, so we will try to use these problem paths.
-
- if (!AreThereDotsFolders(s + kSuperPathPrefixSize))
- return true;
-
- UString temp = fs2us(s);
- unsigned fixedSize = GetRootPrefixSize_Of_SuperPath(temp);
- if (fixedSize == 0)
- return true;
-
- UString rem = &temp[fixedSize];
- if (!ResolveDotsFolders(rem))
- return true;
-
- temp.DeleteFrom(fixedSize);
- res += temp;
- res += rem;
-
- #endif
-
- return true;
- }
-
- if (c == CHAR_PATH_SEPARATOR)
- {
- if (s[1] == CHAR_PATH_SEPARATOR)
- {
- UString temp = fs2us(s + 2);
- unsigned fixedSize = GetRootPrefixSize_Of_NetworkPath(temp);
- if (fixedSize == 0) // maybe we must ignore that error to allow short network paths?
- return false;
- UString rem = &temp[fixedSize];
- if (!ResolveDotsFolders(rem))
- return false;
- res += kSuperUncPrefix;
- temp.DeleteFrom(fixedSize);
- res += temp;
- res += rem;
- return true;
- }
- }
- else
- {
- if (IsDrivePath(s))
- {
- UString temp = fs2us(s);
- UString rem = &temp[kDrivePrefixSize];
- if (!ResolveDotsFolders(rem))
- return true;
- res += kSuperPathPrefix;
- temp.DeleteFrom(kDrivePrefixSize);
- res += temp;
- res += rem;
- return true;
- }
- }
-
- UString curDir;
- if (!GetCurDir(curDir))
- return false;
- if (curDir.Back() != WCHAR_PATH_SEPARATOR)
- curDir += WCHAR_PATH_SEPARATOR;
-
- unsigned fixedSizeStart = 0;
- unsigned fixedSize = 0;
- const wchar_t *superMarker = NULL;
- if (IsSuperPath(curDir))
- {
- fixedSize = GetRootPrefixSize_Of_SuperPath(curDir);
- if (fixedSize == 0)
- return false;
- }
- else
- {
- if (IsDrivePath(curDir))
- {
- superMarker = kSuperPathPrefix;
- fixedSize = kDrivePrefixSize;
- }
- else
- {
- if (curDir[0] != CHAR_PATH_SEPARATOR || curDir[1] != CHAR_PATH_SEPARATOR)
- return false;
- fixedSizeStart = 2;
- fixedSize = GetRootPrefixSize_Of_NetworkPath(&curDir[2]);
- if (fixedSize == 0)
- return false;
- superMarker = kSuperUncPrefix;
- }
- }
-
- UString temp;
- if (c == CHAR_PATH_SEPARATOR)
- {
- temp = fs2us(s + 1);
- }
- else
- {
- temp += &curDir[fixedSizeStart + fixedSize];
- temp += fs2us(s);
- }
- if (!ResolveDotsFolders(temp))
- return false;
- if (superMarker)
- res += superMarker;
- res += curDir.Mid(fixedSizeStart, fixedSize);
- res += temp;
- return true;
-}
-
-
-/*
- In that case if GetSuperPathBase doesn't return new path, we don't need
- to use same path that was used as main path
-
- GetSuperPathBase superPath.IsEmpty() onlyIfNew
- false * * GetCurDir Error
- true false * use Super path
- true true true don't use any path, we already used mainPath
- true true false use main path as Super Path, we don't try mainMath
- That case is possible now if GetCurDir returns unknow
- type of path (not drive and not network)
-
- We can change that code if we want to try mainPath, if GetSuperPathBase returns error,
- and we didn't try mainPath still.
- If we want to work that way, we don't need to use GetSuperPathBase return code.
-*/
-
-bool GetSuperPath(CFSTR path, UString &superPath, bool onlyIfNew)
-{
- if (GetSuperPathBase(path, superPath))
- {
- if (superPath.IsEmpty())
- {
- // actually the only possible when onlyIfNew == true and superPath is empty
- // is case when
-
- if (onlyIfNew)
- return false;
- superPath = fs2us(path);
- }
- return true;
- }
- return false;
-}
-
-bool GetSuperPaths(CFSTR s1, CFSTR s2, UString &d1, UString &d2, bool onlyIfNew)
-{
- if (!GetSuperPathBase(s1, d1) ||
- !GetSuperPathBase(s2, d2))
- return false;
- if (d1.IsEmpty() && d2.IsEmpty() && onlyIfNew)
- return false;
- if (d1.IsEmpty()) d1 = fs2us(s1);
- if (d2.IsEmpty()) d2 = fs2us(s2);
- return true;
-}
-
-
-/*
-// returns true, if we need additional use with New Super path.
-bool GetSuperPath(CFSTR path, UString &superPath)
-{
- if (GetSuperPathBase(path, superPath))
- return !superPath.IsEmpty();
- return false;
-}
-*/
-#endif // WIN_LONG_PATH
-
-bool GetFullPath(CFSTR dirPrefix, CFSTR s, FString &res)
-{
- res = s;
-
- #ifdef UNDER_CE
-
- if (s[0] != CHAR_PATH_SEPARATOR)
- {
- if (!dirPrefix)
- return false;
- res = dirPrefix;
- res += s;
- }
-
- #else
-
- unsigned prefixSize = GetRootPrefixSize(s);
- if (prefixSize != 0)
- {
- if (!AreThereDotsFolders(s + prefixSize))
- return true;
-
- UString rem = fs2us(s + prefixSize);
- if (!ResolveDotsFolders(rem))
- return true; // maybe false;
- res.DeleteFrom(prefixSize);
- res += us2fs(rem);
- return true;
- }
-
- /*
- FChar c = s[0];
- if (c == 0)
- return true;
- if (c == '.' && (s[1] == 0 || (s[1] == '.' && s[2] == 0)))
- return true;
- if (c == CHAR_PATH_SEPARATOR && s[1] == CHAR_PATH_SEPARATOR)
- return true;
- if (IsDrivePath(s))
- return true;
- */
-
- UString curDir;
- if (dirPrefix)
- curDir = fs2us(dirPrefix);
- else
- {
- if (!GetCurDir(curDir))
- return false;
- }
- if (!curDir.IsEmpty() && curDir.Back() != WCHAR_PATH_SEPARATOR)
- curDir += WCHAR_PATH_SEPARATOR;
-
- unsigned fixedSize = 0;
-
- #ifdef _WIN32
-
- if (IsSuperPath(curDir))
- {
- fixedSize = GetRootPrefixSize_Of_SuperPath(curDir);
- if (fixedSize == 0)
- return false;
- }
- else
- {
- if (IsDrivePath(curDir))
- fixedSize = kDrivePrefixSize;
- else
- {
- if (curDir[0] != WCHAR_PATH_SEPARATOR || curDir[1] != WCHAR_PATH_SEPARATOR)
- return false;
- fixedSize = GetRootPrefixSize_Of_NetworkPath(&curDir[2]);
- if (fixedSize == 0)
- return false;
- fixedSize += 2;
- }
- }
-
- #endif // _WIN32
-
- UString temp;
- if (s[0] == CHAR_PATH_SEPARATOR)
- {
- temp = fs2us(s + 1);
- }
- else
- {
- temp += curDir.Ptr(fixedSize);
- temp += fs2us(s);
- }
- if (!ResolveDotsFolders(temp))
- return false;
- curDir.DeleteFrom(fixedSize);
- res = us2fs(curDir);
- res += us2fs(temp);
-
- #endif // UNDER_CE
-
- return true;
-}
-
-bool GetFullPath(CFSTR path, FString &fullPath)
-{
- return GetFullPath(NULL, path, fullPath);
-}
-
-}}}
diff --git a/src/libs/7zip/win/CPP/Windows/FileName.h b/src/libs/7zip/win/CPP/Windows/FileName.h
deleted file mode 100644
index 04fc79b2d..000000000
--- a/src/libs/7zip/win/CPP/Windows/FileName.h
+++ /dev/null
@@ -1,74 +0,0 @@
-// Windows/FileName.h
-
-#ifndef __WINDOWS_FILE_NAME_H
-#define __WINDOWS_FILE_NAME_H
-
-#include "../Common/MyString.h"
-
-namespace NWindows {
-namespace NFile {
-namespace NName {
-
-void NormalizeDirPathPrefix(FString &dirPath); // ensures that it ended with '\\', if dirPath is not epmty
-void NormalizeDirPathPrefix(UString &dirPath);
-
-#ifdef _WIN32
-
-extern const wchar_t *kSuperPathPrefix; /* \\?\ */
-const unsigned kDevicePathPrefixSize = 4;
-const unsigned kSuperPathPrefixSize = 4;
-const unsigned kSuperUncPathPrefixSize = kSuperPathPrefixSize + 4;
-
-bool IsDevicePath(CFSTR s) throw(); /* \\.\ */
-bool IsSuperUncPath(CFSTR s) throw();
-
-bool IsDrivePath(const wchar_t *s) throw();
-bool IsSuperPath(const wchar_t *s) throw();
-bool IsSuperOrDevicePath(const wchar_t *s) throw();
-
-#ifndef USE_UNICODE_FSTRING
-bool IsDrivePath(CFSTR s) throw();
-bool IsSuperPath(CFSTR s) throw();
-bool IsSuperOrDevicePath(CFSTR s) throw();
-#endif
-
-#endif // _WIN32
-
-bool IsAbsolutePath(const wchar_t *s) throw();
-unsigned GetRootPrefixSize(const wchar_t *s) throw();
-
-#ifdef WIN_LONG_PATH
-
-const int kSuperPathType_UseOnlyMain = 0;
-const int kSuperPathType_UseOnlySuper = 1;
-const int kSuperPathType_UseMainAndSuper = 2;
-
-int GetUseSuperPathType(CFSTR s) throw();
-bool GetSuperPath(CFSTR path, UString &longPath, bool onlyIfNew);
-bool GetSuperPaths(CFSTR s1, CFSTR s2, UString &d1, UString &d2, bool onlyIfNew);
-
-#define USE_MAIN_PATH (__useSuperPathType != kSuperPathType_UseOnlySuper)
-#define USE_MAIN_PATH_2 (__useSuperPathType1 != kSuperPathType_UseOnlySuper && __useSuperPathType2 != kSuperPathType_UseOnlySuper)
-
-#define USE_SUPER_PATH (__useSuperPathType != kSuperPathType_UseOnlyMain)
-#define USE_SUPER_PATH_2 (__useSuperPathType1 != kSuperPathType_UseOnlyMain || __useSuperPathType2 != kSuperPathType_UseOnlyMain)
-
-#define IF_USE_MAIN_PATH int __useSuperPathType = GetUseSuperPathType(path); if (USE_MAIN_PATH)
-#define IF_USE_MAIN_PATH_2(x1, x2) \
- int __useSuperPathType1 = GetUseSuperPathType(x1); \
- int __useSuperPathType2 = GetUseSuperPathType(x2); \
- if (USE_MAIN_PATH_2)
-
-#else
-
-#define IF_USE_MAIN_PATH
-#define IF_USE_MAIN_PATH_2(x1, x2)
-
-#endif // WIN_LONG_PATH
-
-bool GetFullPath(CFSTR dirPrefix, CFSTR path, FString &fullPath);
-bool GetFullPath(CFSTR path, FString &fullPath);
-
-}}}
-
-#endif
diff --git a/src/libs/7zip/win/CPP/Windows/Handle.h b/src/libs/7zip/win/CPP/Windows/Handle.h
deleted file mode 100644
index bb7cb705d..000000000
--- a/src/libs/7zip/win/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/src/libs/7zip/win/CPP/Windows/PropVariant.cpp b/src/libs/7zip/win/CPP/Windows/PropVariant.cpp
deleted file mode 100644
index d16f576cc..000000000
--- a/src/libs/7zip/win/CPP/Windows/PropVariant.cpp
+++ /dev/null
@@ -1,300 +0,0 @@
-// Windows/PropVariant.cpp
-
-#include "StdAfx.h"
-
-#include "../Common/Defs.h"
-
-#include "PropVariant.h"
-
-namespace NWindows {
-namespace NCOM {
-
-HRESULT PropVarEm_Alloc_Bstr(PROPVARIANT *p, unsigned numChars) throw()
-{
- p->bstrVal = ::SysAllocStringLen(0, numChars);
- if (!p->bstrVal)
- {
- p->vt = VT_ERROR;
- p->scode = E_OUTOFMEMORY;
- return E_OUTOFMEMORY;
- }
- p->vt = VT_BSTR;
- return S_OK;
-}
-
-HRESULT PropVarEm_Set_Str(PROPVARIANT *p, const char *s) throw()
-{
- UINT len = (UINT)strlen(s);
- p->bstrVal = ::SysAllocStringLen(0, len);
- if (!p->bstrVal)
- {
- p->vt = VT_ERROR;
- p->scode = E_OUTOFMEMORY;
- return E_OUTOFMEMORY;
- }
- p->vt = VT_BSTR;
- BSTR dest = p->bstrVal;
- for (UINT i = 0; i <= len; i++)
- dest[i] = s[i];
- return S_OK;
-}
-
-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;
-}
-
-static const char *kMemException = "out of memory";
-
-CPropVariant& CPropVariant::operator=(LPCOLESTR lpszSrc)
-{
- InternalClear();
- vt = VT_BSTR;
- wReserved1 = 0;
- bstrVal = ::SysAllocString(lpszSrc);
- if (!bstrVal && lpszSrc)
- {
- throw kMemException;
- // 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 = ::SysAllocStringLen(0, len);
- if (!bstrVal)
- {
- throw kMemException;
- // 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) throw()
-{
- if (vt != VT_BOOL)
- {
- InternalClear();
- vt = VT_BOOL;
- }
- boolVal = bSrc ? VARIANT_TRUE : VARIANT_FALSE;
- return *this;
-}
-
-BSTR CPropVariant::AllocBstr(unsigned numChars)
-{
- if (vt != VT_EMPTY)
- InternalClear();
- vt = VT_BSTR;
- wReserved1 = 0;
- bstrVal = ::SysAllocStringLen(0, numChars);
- if (!bstrVal)
- {
- throw kMemException;
- // vt = VT_ERROR;
- // scode = E_OUTOFMEMORY;
- }
- return bstrVal;
-}
-
-#define SET_PROP_FUNC(type, id, dest) \
- CPropVariant& CPropVariant::operator=(type value) throw() \
- { if (vt != id) { InternalClear(); vt = id; } \
- dest = value; return *this; }
-
-SET_PROP_FUNC(Byte, VT_UI1, bVal)
-// SET_PROP_FUNC(Int16, VT_I2, iVal)
-SET_PROP_FUNC(Int32, VT_I4, lVal)
-SET_PROP_FUNC(UInt32, VT_UI4, ulVal)
-SET_PROP_FUNC(UInt64, VT_UI8, uhVal.QuadPart)
-SET_PROP_FUNC(Int64, VT_I8, hVal.QuadPart)
-SET_PROP_FUNC(const FILETIME &, VT_FILETIME, filetime)
-
-HRESULT PropVariant_Clear(PROPVARIANT *prop) throw()
-{
- switch (prop->vt)
- {
- case VT_EMPTY:
- 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:
- prop->vt = VT_EMPTY;
- prop->wReserved1 = 0;
- prop->wReserved2 = 0;
- prop->wReserved3 = 0;
- prop->uhVal.QuadPart = 0;
- return S_OK;
- }
- return ::VariantClear((VARIANTARG *)prop);
- // return ::PropVariantClear(prop);
- // PropVariantClear can clear VT_BLOB.
-}
-
-HRESULT CPropVariant::Clear() throw()
-{
- if (vt == VT_EMPTY)
- return S_OK;
- return PropVariant_Clear(this);
-}
-
-HRESULT CPropVariant::Copy(const PROPVARIANT* pSrc) throw()
-{
- ::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 *)const_cast<PROPVARIANT *>(pSrc));
-}
-
-
-HRESULT CPropVariant::Attach(PROPVARIANT *pSrc) throw()
-{
- 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) throw()
-{
- if (pDest->vt != VT_EMPTY)
- {
- HRESULT hr = PropVariant_Clear(pDest);
- if (FAILED(hr))
- return hr;
- }
- memcpy(pDest, this, sizeof(PROPVARIANT));
- vt = VT_EMPTY;
- return S_OK;
-}
-
-HRESULT CPropVariant::InternalClear() throw()
-{
- if (vt == VT_EMPTY)
- return S_OK;
- 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))
- {
- if (hr == E_OUTOFMEMORY)
- throw kMemException;
- vt = VT_ERROR;
- scode = hr;
- }
-}
-
-int CPropVariant::Compare(const CPropVariant &a) throw()
-{
- if (vt != a.vt)
- return MyCompare(vt, a.vt);
- 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_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
- default: return 0;
- }
-}
-
-}}
diff --git a/src/libs/7zip/win/CPP/Windows/PropVariant.h b/src/libs/7zip/win/CPP/Windows/PropVariant.h
deleted file mode 100644
index d71b85e1d..000000000
--- a/src/libs/7zip/win/CPP/Windows/PropVariant.h
+++ /dev/null
@@ -1,107 +0,0 @@
-// Windows/PropVariant.h
-
-#ifndef __WINDOWS_PROP_VARIANT_H
-#define __WINDOWS_PROP_VARIANT_H
-
-#include "../Common/MyTypes.h"
-#include "../Common/MyWindows.h"
-
-namespace NWindows {
-namespace NCOM {
-
-HRESULT PropVariant_Clear(PROPVARIANT *p) throw();
-
-HRESULT PropVarEm_Alloc_Bstr(PROPVARIANT *p, unsigned numChars) throw();
-HRESULT PropVarEm_Set_Str(PROPVARIANT *p, const char *s) throw();
-
-inline void PropVarEm_Set_UInt32(PROPVARIANT *p, UInt32 v) throw()
-{
- p->vt = VT_UI4;
- p->ulVal = v;
-}
-
-inline void PropVarEm_Set_UInt64(PROPVARIANT *p, UInt64 v) throw()
-{
- p->vt = VT_UI8;
- p->uhVal.QuadPart = v;
-}
-
-inline void PropVarEm_Set_FileTime64(PROPVARIANT *p, UInt64 v) throw()
-{
- p->vt = VT_FILETIME;
- p->filetime.dwLowDateTime = (DWORD)v;
- p->filetime.dwHighDateTime = (DWORD)(v >> 32);
-}
-
-inline void PropVarEm_Set_Bool(PROPVARIANT *p, bool b) throw()
-{
- p->vt = VT_BOOL;
- p->boolVal = (b ? VARIANT_TRUE : VARIANT_FALSE);
-}
-
-
-class CPropVariant : public tagPROPVARIANT
-{
-public:
- CPropVariant()
- {
- vt = VT_EMPTY;
- wReserved1 = 0;
- // wReserved2 = 0;
- // wReserved3 = 0;
- // uhVal.QuadPart = 0;
- bstrVal = 0;
- }
- ~CPropVariant() throw() { 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(Byte value) { vt = VT_UI1; wReserved1 = 0; bVal = value; }
-
-private:
- CPropVariant(Int16 value); // { vt = VT_I2; wReserved1 = 0; iVal = value; }
- CPropVariant(Int32 value); // { vt = VT_I4; wReserved1 = 0; lVal = value; }
-
-public:
- CPropVariant(UInt32 value) { vt = VT_UI4; wReserved1 = 0; ulVal = value; }
- CPropVariant(UInt64 value) { vt = VT_UI8; wReserved1 = 0; uhVal.QuadPart = value; }
- CPropVariant(Int64 value) { vt = VT_I8; wReserved1 = 0; hVal.QuadPart = value; }
- CPropVariant(const FILETIME &value) { vt = VT_FILETIME; wReserved1 = 0; filetime = 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) throw();
- CPropVariant& operator=(Byte value) throw();
-
-private:
- CPropVariant& operator=(Int16 value) throw();
-
-public:
- CPropVariant& operator=(Int32 value) throw();
- CPropVariant& operator=(UInt32 value) throw();
- CPropVariant& operator=(UInt64 value) throw();
- CPropVariant& operator=(Int64 value) throw();
- CPropVariant& operator=(const FILETIME &value) throw();
-
- BSTR AllocBstr(unsigned numChars);
-
- HRESULT Clear() throw();
- HRESULT Copy(const PROPVARIANT *pSrc) throw();
- HRESULT Attach(PROPVARIANT *pSrc) throw();
- HRESULT Detach(PROPVARIANT *pDest) throw();
-
- HRESULT InternalClear() throw();
- void InternalCopy(const PROPVARIANT *pSrc);
-
- int Compare(const CPropVariant &a) throw();
-};
-
-}}
-
-#endif
diff --git a/src/libs/7zip/win/CPP/Windows/PropVariantConv.cpp b/src/libs/7zip/win/CPP/Windows/PropVariantConv.cpp
deleted file mode 100644
index dfb93d6d6..000000000
--- a/src/libs/7zip/win/CPP/Windows/PropVariantConv.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-// PropVariantConvert.cpp
-
-#include "StdAfx.h"
-
-#include "../Common/IntToString.h"
-
-#include "Defs.h"
-#include "PropVariantConv.h"
-
-#define UINT_TO_STR_2(c, val) { s[0] = (c); s[1] = (char)('0' + (val) / 10); s[2] = (char)('0' + (val) % 10); s += 3; }
-
-bool ConvertFileTimeToString(const FILETIME &ft, char *s, bool includeTime, bool includeSeconds) throw()
-{
- SYSTEMTIME st;
- if (!BOOLToBool(FileTimeToSystemTime(&ft, &st)))
- {
- *s = 0;
- return false;
- }
- unsigned val = st.wYear;
- if (val >= 10000)
- {
- *s++ = (char)('0' + val / 10000);
- val %= 10000;
- }
- {
- s[3] = (char)('0' + val % 10); val /= 10;
- s[2] = (char)('0' + val % 10); val /= 10;
- s[1] = (char)('0' + val % 10);
- s[0] = (char)('0' + val / 10);
- s += 4;
- }
- UINT_TO_STR_2('-', st.wMonth);
- UINT_TO_STR_2('-', st.wDay);
- if (includeTime)
- {
- UINT_TO_STR_2(' ', st.wHour);
- UINT_TO_STR_2(':', st.wMinute);
- if (includeSeconds)
- UINT_TO_STR_2(':', st.wSecond);
- }
- *s = 0;
- return true;
-}
-
-void ConvertFileTimeToString(const FILETIME &ft, wchar_t *dest, bool includeTime, bool includeSeconds) throw()
-{
- char s[32];
- ConvertFileTimeToString(ft, s, includeTime, includeSeconds);
- for (unsigned i = 0;; i++)
- {
- unsigned char c = s[i];
- dest[i] = c;
- if (c == 0)
- return;
- }
-}
-
-void ConvertPropVariantToShortString(const PROPVARIANT &prop, char *dest) throw()
-{
- *dest = 0;
- switch (prop.vt)
- {
- case VT_EMPTY: return;
- case VT_BSTR: dest[0] = '?'; dest[1] = 0; return;
- case VT_UI1: ConvertUInt32ToString(prop.bVal, dest); return;
- case VT_UI2: ConvertUInt32ToString(prop.uiVal, dest); return;
- case VT_UI4: ConvertUInt32ToString(prop.ulVal, dest); return;
- case VT_UI8: ConvertUInt64ToString(prop.uhVal.QuadPart, dest); return;
- case VT_FILETIME: ConvertFileTimeToString(prop.filetime, dest, true, true); return;
- // case VT_I1: return ConvertInt64ToString(prop.cVal, dest); return;
- case VT_I2: ConvertInt64ToString(prop.iVal, dest); return;
- case VT_I4: ConvertInt64ToString(prop.lVal, dest); return;
- case VT_I8: ConvertInt64ToString(prop.hVal.QuadPart, dest); return;
- case VT_BOOL: dest[0] = VARIANT_BOOLToBool(prop.boolVal) ? '+' : '-'; dest[1] = 0; return;
- default: dest[0] = '?'; dest[1] = ':'; ConvertUInt64ToString(prop.vt, dest + 2);
- }
-}
-
-void ConvertPropVariantToShortString(const PROPVARIANT &prop, wchar_t *dest) throw()
-{
- *dest = 0;
- switch (prop.vt)
- {
- case VT_EMPTY: return;
- case VT_BSTR: dest[0] = '?'; dest[1] = 0; return;
- case VT_UI1: ConvertUInt32ToString(prop.bVal, dest); return;
- case VT_UI2: ConvertUInt32ToString(prop.uiVal, dest); return;
- case VT_UI4: ConvertUInt32ToString(prop.ulVal, dest); return;
- case VT_UI8: ConvertUInt64ToString(prop.uhVal.QuadPart, dest); return;
- case VT_FILETIME: ConvertFileTimeToString(prop.filetime, dest, true, true); return;
- // case VT_I1: return ConvertInt64ToString(prop.cVal, dest); return;
- case VT_I2: ConvertInt64ToString(prop.iVal, dest); return;
- case VT_I4: ConvertInt64ToString(prop.lVal, dest); return;
- case VT_I8: ConvertInt64ToString(prop.hVal.QuadPart, dest); return;
- case VT_BOOL: dest[0] = VARIANT_BOOLToBool(prop.boolVal) ? '+' : '-'; dest[1] = 0; return;
- default: dest[0] = '?'; dest[1] = ':'; ConvertUInt32ToString(prop.vt, dest + 2);
- }
-}
diff --git a/src/libs/7zip/win/CPP/Windows/PropVariantConv.h b/src/libs/7zip/win/CPP/Windows/PropVariantConv.h
deleted file mode 100644
index 5d26357f0..000000000
--- a/src/libs/7zip/win/CPP/Windows/PropVariantConv.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Windows/PropVariantConv.h
-
-#ifndef __PROP_VARIANT_CONV_H
-#define __PROP_VARIANT_CONV_H
-
-#include "../Common/MyTypes.h"
-
-// provide at least 32 bytes for buffer including zero-end
-bool ConvertFileTimeToString(const FILETIME &ft, char *s, bool includeTime = true, bool includeSeconds = true) throw();
-void ConvertFileTimeToString(const FILETIME &ft, wchar_t *s, bool includeTime = true, bool includeSeconds = true) throw();
-
-// provide at least 32 bytes for buffer including zero-end
-// don't send VT_BSTR to these functions
-void ConvertPropVariantToShortString(const PROPVARIANT &prop, char *dest) throw();
-void ConvertPropVariantToShortString(const PROPVARIANT &prop, wchar_t *dest) throw();
-
-inline bool ConvertPropVariantToUInt64(const PROPVARIANT &prop, UInt64 &value)
-{
- switch (prop.vt)
- {
- case VT_UI8: value = (UInt64)prop.uhVal.QuadPart; return true;
- case VT_UI4: value = prop.ulVal; return true;
- case VT_UI2: value = prop.uiVal; return true;
- case VT_UI1: value = prop.bVal; return true;
- case VT_EMPTY: return false;
- default: throw 151199;
- }
-}
-
-#endif
diff --git a/src/libs/7zip/win/CPP/Windows/SecurityUtils.cpp b/src/libs/7zip/win/CPP/Windows/SecurityUtils.cpp
deleted file mode 100644
index f997738ce..000000000
--- a/src/libs/7zip/win/CPP/Windows/SecurityUtils.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-// Windows/SecurityUtils.cpp
-
-#include "StdAfx.h"
-
-#include "SecurityUtils.h"
-
-namespace NWindows {
-namespace NSecurity {
-
-/*
-bool MyLookupAccountSid(LPCTSTR systemName, PSID sid,
- CSysString &accountName, CSysString &domainName, PSID_NAME_USE sidNameUse)
-{
- DWORD accountNameSize = 0, domainNameSize = 0;
-
- if (!::LookupAccountSid(systemName, sid,
- accountName.GetBuffer(0), &accountNameSize,
- domainName.GetBuffer(0), &domainNameSize, sidNameUse))
- {
- if (::GetLastError() != ERROR_INSUFFICIENT_BUFFER)
- return false;
- }
- bool result = BOOLToBool(::LookupAccountSid(systemName, sid,
- accountName.GetBuffer(accountNameSize), &accountNameSize,
- domainName.GetBuffer(domainNameSize), &domainNameSize, sidNameUse));
- accountName.ReleaseBuffer();
- domainName.ReleaseBuffer();
- return result;
-}
-*/
-
-static void SetLsaString(LPWSTR src, PLSA_UNICODE_STRING dest)
-{
- int len = (int)wcslen(src);
- dest->Length = (USHORT)(len * sizeof(WCHAR));
- dest->MaximumLength = (USHORT)((len + 1) * sizeof(WCHAR));
- dest->Buffer = src;
-}
-
-/*
-static void MyLookupSids(CPolicy &policy, PSID ps)
-{
- LSA_REFERENCED_DOMAIN_LIST *referencedDomains = NULL;
- LSA_TRANSLATED_NAME *names = NULL;
- NTSTATUS nts = policy.LookupSids(1, &ps, &referencedDomains, &names);
- int res = LsaNtStatusToWinError(nts);
- LsaFreeMemory(referencedDomains);
- LsaFreeMemory(names);
-}
-*/
-
-#ifndef _UNICODE
-typedef BOOL (WINAPI * LookupAccountNameWP)(
- LPCWSTR lpSystemName,
- LPCWSTR lpAccountName,
- PSID Sid,
- LPDWORD cbSid,
- LPWSTR ReferencedDomainName,
- LPDWORD cchReferencedDomainName,
- PSID_NAME_USE peUse
- );
-#endif
-
-static PSID GetSid(LPWSTR accountName)
-{
- #ifndef _UNICODE
- HMODULE hModule = GetModuleHandle(TEXT("Advapi32.dll"));
- if (hModule == NULL)
- return NULL;
- LookupAccountNameWP lookupAccountNameW = (LookupAccountNameWP)GetProcAddress(hModule, "LookupAccountNameW");
- if (lookupAccountNameW == NULL)
- return NULL;
- #endif
-
- DWORD sidLen = 0, domainLen = 0;
- SID_NAME_USE sidNameUse;
- if (!
- #ifdef _UNICODE
- ::LookupAccountNameW
- #else
- lookupAccountNameW
- #endif
- (NULL, accountName, NULL, &sidLen, NULL, &domainLen, &sidNameUse))
- {
- if (::GetLastError() == ERROR_INSUFFICIENT_BUFFER)
- {
- PSID pSid = ::HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sidLen);
- LPWSTR domainName = (LPWSTR)::HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (domainLen + 1) * sizeof(WCHAR));
- BOOL res =
- #ifdef _UNICODE
- ::LookupAccountNameW
- #else
- lookupAccountNameW
- #endif
- (NULL, accountName, pSid, &sidLen, domainName, &domainLen, &sidNameUse);
- ::HeapFree(GetProcessHeap(), 0, domainName);
- if (res)
- return pSid;
- }
- }
- return NULL;
-}
-
-#define MY__SE_LOCK_MEMORY_NAME L"SeLockMemoryPrivilege"
-
-bool AddLockMemoryPrivilege()
-{
- CPolicy policy;
- LSA_OBJECT_ATTRIBUTES attr;
- attr.Length = sizeof(attr);
- attr.RootDirectory = NULL;
- attr.ObjectName = NULL;
- attr.Attributes = 0;
- attr.SecurityDescriptor = NULL;
- attr.SecurityQualityOfService = NULL;
- if (policy.Open(NULL, &attr,
- // GENERIC_WRITE)
- POLICY_ALL_ACCESS)
- // STANDARD_RIGHTS_REQUIRED,
- // GENERIC_READ | GENERIC_EXECUTE | POLICY_VIEW_LOCAL_INFORMATION | POLICY_LOOKUP_NAMES)
- != 0)
- return false;
- LSA_UNICODE_STRING userRights;
- wchar_t s[128] = MY__SE_LOCK_MEMORY_NAME;
- SetLsaString(s, &userRights);
- WCHAR userName[256 + 2];
- DWORD size = 256;
- if (!GetUserNameW(userName, &size))
- return false;
- PSID psid = GetSid(userName);
- if (psid == NULL)
- return false;
- bool res = false;
-
- /*
- PLSA_UNICODE_STRING userRightsArray;
- ULONG countOfRights;
- NTSTATUS status = policy.EnumerateAccountRights(psid, &userRightsArray, &countOfRights);
- if (status != 0)
- return false;
- bool finded = false;
- for (ULONG i = 0; i < countOfRights; i++)
- {
- LSA_UNICODE_STRING &ur = userRightsArray[i];
- if (ur.Length != s.Length() * sizeof(WCHAR))
- continue;
- if (wcsncmp(ur.Buffer, s, s.Length()) != 0)
- continue;
- finded = true;
- res = true;
- break;
- }
- if (!finded)
- */
- {
- /*
- LSA_ENUMERATION_INFORMATION *enums;
- ULONG countReturned;
- NTSTATUS status = policy.EnumerateAccountsWithUserRight(&userRights, &enums, &countReturned);
- if (status == 0)
- {
- for (ULONG i = 0; i < countReturned; i++)
- MyLookupSids(policy, enums[i].Sid);
- if (enums)
- ::LsaFreeMemory(enums);
- res = true;
- }
- */
- NTSTATUS status = policy.AddAccountRights(psid, &userRights);
- if (status == 0)
- res = true;
- // ULONG res = LsaNtStatusToWinError(status);
- }
- HeapFree(GetProcessHeap(), 0, psid);
- return res;
-}
-
-}}
-
diff --git a/src/libs/7zip/win/CPP/Windows/SecurityUtils.h b/src/libs/7zip/win/CPP/Windows/SecurityUtils.h
deleted file mode 100644
index 715de2505..000000000
--- a/src/libs/7zip/win/CPP/Windows/SecurityUtils.h
+++ /dev/null
@@ -1,167 +0,0 @@
-// Windows/SecurityUtils.h
-
-#ifndef __WINDOWS_SECURITY_UTILS_H
-#define __WINDOWS_SECURITY_UTILS_H
-
-#include <NTSecAPI.h>
-
-#include "Defs.h"
-
-namespace NWindows {
-namespace NSecurity {
-
-class CAccessToken
-{
- HANDLE _handle;
-public:
- CAccessToken(): _handle(NULL) {};
- ~CAccessToken() { Close(); }
- bool Close()
- {
- if (_handle == NULL)
- return true;
- bool res = BOOLToBool(::CloseHandle(_handle));
- if (res)
- _handle = NULL;
- return res;
- }
-
- bool OpenProcessToken(HANDLE processHandle, DWORD desiredAccess)
- {
- Close();
- return BOOLToBool(::OpenProcessToken(processHandle, desiredAccess, &_handle));
- }
-
- /*
- bool OpenThreadToken(HANDLE threadHandle, DWORD desiredAccess, bool openAsSelf)
- {
- Close();
- return BOOLToBool(::OpenTreadToken(threadHandle, desiredAccess, BoolToBOOL(anOpenAsSelf), &_handle));
- }
- */
-
- bool AdjustPrivileges(bool disableAllPrivileges, PTOKEN_PRIVILEGES newState,
- DWORD bufferLength, PTOKEN_PRIVILEGES previousState, PDWORD returnLength)
- { return BOOLToBool(::AdjustTokenPrivileges(_handle, BoolToBOOL(disableAllPrivileges),
- newState, bufferLength, previousState, returnLength)); }
-
- bool AdjustPrivileges(bool disableAllPrivileges, PTOKEN_PRIVILEGES newState)
- { return AdjustPrivileges(disableAllPrivileges, newState, 0, NULL, NULL); }
-
- bool AdjustPrivileges(PTOKEN_PRIVILEGES newState)
- { return AdjustPrivileges(false, newState); }
-
-};
-
-#ifndef _UNICODE
-typedef NTSTATUS (NTAPI *LsaOpenPolicyP)(PLSA_UNICODE_STRING SystemName,
- PLSA_OBJECT_ATTRIBUTES ObjectAttributes, ACCESS_MASK DesiredAccess, PLSA_HANDLE PolicyHandle);
-typedef NTSTATUS (NTAPI *LsaCloseP)(LSA_HANDLE ObjectHandle);
-typedef NTSTATUS (NTAPI *LsaAddAccountRightsP)(LSA_HANDLE PolicyHandle,
- PSID AccountSid, PLSA_UNICODE_STRING UserRights, ULONG CountOfRights );
-#define MY_STATUS_NOT_IMPLEMENTED ((NTSTATUS)0xC0000002L)
-#endif
-
-struct CPolicy
-{
-protected:
- LSA_HANDLE _handle;
- #ifndef _UNICODE
- HMODULE hModule;
- #endif
-public:
- operator LSA_HANDLE() const { return _handle; }
- CPolicy(): _handle(NULL)
- {
- #ifndef _UNICODE
- hModule = GetModuleHandle(TEXT("Advapi32.dll"));
- #endif
- };
- ~CPolicy() { Close(); }
-
- NTSTATUS Open(PLSA_UNICODE_STRING systemName, PLSA_OBJECT_ATTRIBUTES objectAttributes,
- ACCESS_MASK desiredAccess)
- {
- #ifndef _UNICODE
- if (hModule == NULL)
- return MY_STATUS_NOT_IMPLEMENTED;
- LsaOpenPolicyP lsaOpenPolicy = (LsaOpenPolicyP)GetProcAddress(hModule, "LsaOpenPolicy");
- if (lsaOpenPolicy == NULL)
- return MY_STATUS_NOT_IMPLEMENTED;
- #endif
-
- Close();
- return
- #ifdef _UNICODE
- ::LsaOpenPolicy
- #else
- lsaOpenPolicy
- #endif
- (systemName, objectAttributes, desiredAccess, &_handle);
- }
-
- NTSTATUS Close()
- {
- if (_handle == NULL)
- return 0;
-
- #ifndef _UNICODE
- if (hModule == NULL)
- return MY_STATUS_NOT_IMPLEMENTED;
- LsaCloseP lsaClose = (LsaCloseP)GetProcAddress(hModule, "LsaClose");
- if (lsaClose == NULL)
- return MY_STATUS_NOT_IMPLEMENTED;
- #endif
-
- NTSTATUS res =
- #ifdef _UNICODE
- ::LsaClose
- #else
- lsaClose
- #endif
- (_handle);
- _handle = NULL;
- return res;
- }
-
- NTSTATUS EnumerateAccountsWithUserRight(PLSA_UNICODE_STRING userRights,
- PLSA_ENUMERATION_INFORMATION *enumerationBuffer, PULONG countReturned)
- { return LsaEnumerateAccountsWithUserRight(_handle, userRights, (void **)enumerationBuffer, countReturned); }
-
- NTSTATUS EnumerateAccountRights(PSID sid, PLSA_UNICODE_STRING* userRights, PULONG countOfRights)
- { return ::LsaEnumerateAccountRights(_handle, sid, userRights, countOfRights); }
-
- NTSTATUS LookupSids(ULONG count, PSID* sids,
- PLSA_REFERENCED_DOMAIN_LIST* referencedDomains, PLSA_TRANSLATED_NAME* names)
- { return LsaLookupSids(_handle, count, sids, referencedDomains, names); }
-
- NTSTATUS AddAccountRights(PSID accountSid, PLSA_UNICODE_STRING userRights, ULONG countOfRights)
- {
- #ifndef _UNICODE
- if (hModule == NULL)
- return MY_STATUS_NOT_IMPLEMENTED;
- LsaAddAccountRightsP lsaAddAccountRights = (LsaAddAccountRightsP)GetProcAddress(hModule, "LsaAddAccountRights");
- if (lsaAddAccountRights == NULL)
- return MY_STATUS_NOT_IMPLEMENTED;
- #endif
-
- return
- #ifdef _UNICODE
- ::LsaAddAccountRights
- #else
- lsaAddAccountRights
- #endif
- (_handle, accountSid, userRights, countOfRights);
- }
- NTSTATUS AddAccountRights(PSID accountSid, PLSA_UNICODE_STRING userRights)
- { return AddAccountRights(accountSid, userRights, 1); }
-
- NTSTATUS RemoveAccountRights(PSID accountSid, bool allRights, PLSA_UNICODE_STRING userRights, ULONG countOfRights)
- { return LsaRemoveAccountRights(_handle, accountSid, (BOOLEAN)(allRights ? TRUE : FALSE), userRights, countOfRights); }
-};
-
-bool AddLockMemoryPrivilege();
-
-}}
-
-#endif
diff --git a/src/libs/7zip/win/CPP/Windows/StdAfx.h b/src/libs/7zip/win/CPP/Windows/StdAfx.h
deleted file mode 100644
index 1766dfa86..000000000
--- a/src/libs/7zip/win/CPP/Windows/StdAfx.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// StdAfx.h
-
-#ifndef __STDAFX_H
-#define __STDAFX_H
-
-#include "../Common/Common.h"
-
-#endif
diff --git a/src/libs/7zip/win/CPP/Windows/Synchronization.cpp b/src/libs/7zip/win/CPP/Windows/Synchronization.cpp
deleted file mode 100644
index 5f86d1eb1..000000000
--- a/src/libs/7zip/win/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/src/libs/7zip/win/CPP/Windows/Synchronization.h b/src/libs/7zip/win/CPP/Windows/Synchronization.h
deleted file mode 100644
index dc695f6f3..000000000
--- a/src/libs/7zip/win/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/src/libs/7zip/win/CPP/Windows/System.cpp b/src/libs/7zip/win/CPP/Windows/System.cpp
deleted file mode 100644
index 4bc8d2a3f..000000000
--- a/src/libs/7zip/win/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/src/libs/7zip/win/CPP/Windows/System.h b/src/libs/7zip/win/CPP/Windows/System.h
deleted file mode 100644
index 4133a7b30..000000000
--- a/src/libs/7zip/win/CPP/Windows/System.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// Windows/System.h
-
-#ifndef __WINDOWS_SYSTEM_H
-#define __WINDOWS_SYSTEM_H
-
-#include "../Common/MyTypes.h"
-
-namespace NWindows {
-namespace NSystem {
-
-UInt32 GetNumberOfProcessors();
-UInt64 GetRamSize();
-
-}}
-
-#endif
diff --git a/src/libs/7zip/win/CPP/Windows/Thread.h b/src/libs/7zip/win/CPP/Windows/Thread.h
deleted file mode 100644
index f9ecaed85..000000000
--- a/src/libs/7zip/win/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/src/libs/7zip/win/CPP/Windows/TimeUtils.cpp b/src/libs/7zip/win/CPP/Windows/TimeUtils.cpp
deleted file mode 100644
index 7ef44d9cc..000000000
--- a/src/libs/7zip/win/CPP/Windows/TimeUtils.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-// Windows/TimeUtils.cpp
-
-#include "StdAfx.h"
-
-#include "Defs.h"
-#include "TimeUtils.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 kUnixTimeOffset =
- (UInt64)60 * 60 * 24 * (89 + 365 * (kUnixTimeStartYear - kFileTimeStartYear));
-static const UInt64 kNumSecondsInFileTime = (UInt64)(Int64)-1 / kNumTimeQuantumsInSecond;
-
-bool DosTimeToFileTime(UInt32 dosTime, FILETIME &ft) throw()
-{
- #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) throw()
-{
- #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) throw()
-{
- UInt64 v = (kUnixTimeOffset + (UInt64)unixTime) * kNumTimeQuantumsInSecond;
- ft.dwLowDateTime = (DWORD)v;
- ft.dwHighDateTime = (DWORD)(v >> 32);
-}
-
-bool UnixTime64ToFileTime(Int64 unixTime, FILETIME &ft) throw()
-{
- if (unixTime > kNumSecondsInFileTime - kUnixTimeOffset)
- {
- ft.dwLowDateTime = ft.dwHighDateTime = (UInt32)(Int32)-1;
- return false;
- }
- Int64 v = (Int64)kUnixTimeOffset + unixTime;
- if (v < 0)
- {
- ft.dwLowDateTime = ft.dwHighDateTime = 0;
- return false;
- }
- UInt64 v2 = (UInt64)v * kNumTimeQuantumsInSecond;
- ft.dwLowDateTime = (DWORD)v2;
- ft.dwHighDateTime = (DWORD)(v2 >> 32);
- return true;
-}
-
-Int64 FileTimeToUnixTime64(const FILETIME &ft) throw()
-{
- UInt64 winTime = (((UInt64)ft.dwHighDateTime) << 32) + ft.dwLowDateTime;
- return (Int64)(winTime / kNumTimeQuantumsInSecond) - kUnixTimeOffset;
-}
-
-bool FileTimeToUnixTime(const FILETIME &ft, UInt32 &unixTime) throw()
-{
- UInt64 winTime = (((UInt64)ft.dwHighDateTime) << 32) + ft.dwLowDateTime;
- winTime /= kNumTimeQuantumsInSecond;
- if (winTime < kUnixTimeOffset)
- {
- unixTime = 0;
- return false;
- }
- winTime -= kUnixTimeOffset;
- 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) throw()
-{
- 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) throw()
-{
- // Both variants provide same low resolution on WinXP: about 15 ms.
- // But GetSystemTimeAsFileTime is much faster.
-
- #ifdef UNDER_CE
- SYSTEMTIME st;
- GetSystemTime(&st);
- SystemTimeToFileTime(&st, &ft);
- #else
- GetSystemTimeAsFileTime(&ft);
- #endif
-}
-
-}}
diff --git a/src/libs/7zip/win/CPP/Windows/TimeUtils.h b/src/libs/7zip/win/CPP/Windows/TimeUtils.h
deleted file mode 100644
index 2967214e6..000000000
--- a/src/libs/7zip/win/CPP/Windows/TimeUtils.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Windows/TimeUtils.h
-
-#ifndef __WINDOWS_TIME_UTILS_H
-#define __WINDOWS_TIME_UTILS_H
-
-#include "../Common/MyTypes.h"
-
-namespace NWindows {
-namespace NTime {
-
-bool DosTimeToFileTime(UInt32 dosTime, FILETIME &fileTime) throw();
-bool FileTimeToDosTime(const FILETIME &fileTime, UInt32 &dosTime) throw();
-void UnixTimeToFileTime(UInt32 unixTime, FILETIME &fileTime) throw();
-bool UnixTime64ToFileTime(Int64 unixTime, FILETIME &fileTime) throw();
-bool FileTimeToUnixTime(const FILETIME &fileTime, UInt32 &unixTime) throw();
-Int64 FileTimeToUnixTime64(const FILETIME &ft) throw();
-bool GetSecondsSince1601(unsigned year, unsigned month, unsigned day,
- unsigned hour, unsigned min, unsigned sec, UInt64 &resSeconds) throw();
-void GetCurUtcFileTime(FILETIME &ft) throw();
-
-}}
-
-#endif
diff --git a/src/libs/7zip/win/CPP/Windows/Windows.pri b/src/libs/7zip/win/CPP/Windows/Windows.pri
deleted file mode 100644
index a69279060..000000000
--- a/src/libs/7zip/win/CPP/Windows/Windows.pri
+++ /dev/null
@@ -1,29 +0,0 @@
-HEADERS += $$7ZIP_BASE/CPP/Windows/DLL.h \
- $$7ZIP_BASE/CPP/Windows/Defs.h \
- $$7ZIP_BASE/CPP/Windows/FileDir.h \
- $$7ZIP_BASE/CPP/Windows/FileFind.h \
- $$7ZIP_BASE/CPP/Windows/FileIO.h \
- $$7ZIP_BASE/CPP/Windows/FileMapping.h \
- $$7ZIP_BASE/CPP/Windows/FileName.h \
- $$7ZIP_BASE/CPP/Windows/Handle.h \
- $$7ZIP_BASE/CPP/Windows/PropVariant.h \
- $$7ZIP_BASE/CPP/Windows/PropVariantConv.h \
- $$7ZIP_BASE/CPP/Windows/SecurityUtils.h \
- $$7ZIP_BASE/CPP/Windows/StdAfx.h \
- $$7ZIP_BASE/CPP/Windows/Synchronization.h \
- $$7ZIP_BASE/CPP/Windows/System.h \
- $$7ZIP_BASE/CPP/Windows/Thread.h \
- $$7ZIP_BASE/CPP/Windows/TimeUtils.h
-
-SOURCES += $$7ZIP_BASE/CPP/Windows/DLL.cpp \
- $$7ZIP_BASE/CPP/Windows/FileDir.cpp \
- $$7ZIP_BASE/CPP/Windows/FileFind.cpp \
- $$7ZIP_BASE/CPP/Windows/FileIO.cpp \
- $$7ZIP_BASE/CPP/Windows/FileLink.cpp \
- $$7ZIP_BASE/CPP/Windows/FileName.cpp \
- $$7ZIP_BASE/CPP/Windows/PropVariant.cpp \
- $$7ZIP_BASE/CPP/Windows/PropVariantConv.cpp \
- $$7ZIP_BASE/CPP/Windows/SecurityUtils.cpp \
- $$7ZIP_BASE/CPP/Windows/Synchronization.cpp \
- $$7ZIP_BASE/CPP/Windows/System.cpp \
- $$7ZIP_BASE/CPP/Windows/TimeUtils.cpp