5 #include "Common/StringConvert.h"
\r
6 #include "Common/Wildcard.h"
\r
8 #include "Windows/FileDir.h"
\r
9 #include "Windows/FileName.h"
\r
11 #include "WorkDir.h"
\r
13 using namespace NWindows;
\r
14 using namespace NFile;
\r
16 UString GetWorkDir(const NWorkDir::CInfo &workDirInfo, const UString &path)
\r
18 NWorkDir::NMode::EEnum mode = workDirInfo.Mode;
\r
20 if (workDirInfo.ForRemovableOnly)
\r
22 mode = NWorkDir::NMode::kCurrent;
\r
23 UString prefix = path.Left(3);
\r
24 if (prefix[1] == L':' && prefix[2] == L'\\')
\r
26 UINT driveType = GetDriveType(GetSystemString(prefix, ::AreFileApisANSI() ? CP_ACP : CP_OEMCP));
\r
27 if (driveType == DRIVE_CDROM || driveType == DRIVE_REMOVABLE)
\r
28 mode = workDirInfo.Mode;
\r
31 CParsedPath parsedPath;
\r
32 parsedPath.ParsePath(archiveName);
\r
33 UINT driveType = GetDriveType(parsedPath.Prefix);
\r
34 if ((driveType != DRIVE_CDROM) && (driveType != DRIVE_REMOVABLE))
\r
35 mode = NZipSettings::NWorkDir::NMode::kCurrent;
\r
41 case NWorkDir::NMode::kCurrent:
\r
43 return ExtractDirPrefixFromPath(path);
\r
45 case NWorkDir::NMode::kSpecified:
\r
47 UString tempDir = workDirInfo.Path;
\r
48 NName::NormalizeDirPathPrefix(tempDir);
\r
54 if (!NDirectory::MyGetTempPath(tempDir))
\r