Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / 7zip / UI / Common / WorkDir.cpp
1 // WorkDir.cpp\r
2 \r
3 #include "StdAfx.h"\r
4 \r
5 #include "Common/StringConvert.h"\r
6 #include "Common/Wildcard.h"\r
7 \r
8 #include "Windows/FileDir.h"\r
9 #include "Windows/FileName.h"\r
10 \r
11 #include "WorkDir.h"\r
12 \r
13 using namespace NWindows;\r
14 using namespace NFile;\r
15 \r
16 UString GetWorkDir(const NWorkDir::CInfo &workDirInfo, const UString &path)\r
17 {\r
18   NWorkDir::NMode::EEnum mode = workDirInfo.Mode;\r
19   #ifndef UNDER_CE\r
20   if (workDirInfo.ForRemovableOnly)\r
21   {\r
22     mode = NWorkDir::NMode::kCurrent;\r
23     UString prefix = path.Left(3);\r
24     if (prefix[1] == L':' && prefix[2] == L'\\')\r
25     {\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
29     }\r
30     /*\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
36     */\r
37   }\r
38   #endif\r
39   switch(mode)\r
40   {\r
41     case NWorkDir::NMode::kCurrent:\r
42     {\r
43       return ExtractDirPrefixFromPath(path);\r
44     }\r
45     case NWorkDir::NMode::kSpecified:\r
46     {\r
47       UString tempDir = workDirInfo.Path;\r
48       NName::NormalizeDirPathPrefix(tempDir);\r
49       return tempDir;\r
50     }\r
51     default:\r
52     {\r
53       UString tempDir;\r
54       if (!NDirectory::MyGetTempPath(tempDir))\r
55         throw 141717;\r
56       return tempDir;\r
57     }\r
58   }\r
59 }\r