"Fossies" - the Fresh Open Source Software Archive

Member "UXP-2019.06.08/other-licenses/7zstub/src/CPP/7zip/UI/Common/WorkDir.cpp" (8 Jun 2019, 2440 Bytes) of package /linux/www/UXP-2019.06.08.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 // WorkDir.cpp
    2 
    3 #include "StdAfx.h"
    4 
    5 #include "../../../Common/StringConvert.h"
    6 #include "../../../Common/Wildcard.h"
    7 
    8 #include "../../../Windows/FileName.h"
    9 
   10 #include "WorkDir.h"
   11 
   12 using namespace NWindows;
   13 using namespace NFile;
   14 using namespace NDir;
   15 
   16 FString GetWorkDir(const NWorkDir::CInfo &workDirInfo, const FString &path, FString &fileName)
   17 {
   18   NWorkDir::NMode::EEnum mode = workDirInfo.Mode;
   19   
   20   #if defined(_WIN32) && !defined(UNDER_CE)
   21   if (workDirInfo.ForRemovableOnly)
   22   {
   23     mode = NWorkDir::NMode::kCurrent;
   24     FString prefix = path.Left(3);
   25     if (prefix[1] == FTEXT(':') && prefix[2] == FTEXT('\\'))
   26     {
   27       UINT driveType = GetDriveType(GetSystemString(prefix, ::AreFileApisANSI() ? CP_ACP : CP_OEMCP));
   28       if (driveType == DRIVE_CDROM || driveType == DRIVE_REMOVABLE)
   29         mode = workDirInfo.Mode;
   30     }
   31     /*
   32     CParsedPath parsedPath;
   33     parsedPath.ParsePath(archiveName);
   34     UINT driveType = GetDriveType(parsedPath.Prefix);
   35     if ((driveType != DRIVE_CDROM) && (driveType != DRIVE_REMOVABLE))
   36       mode = NZipSettings::NWorkDir::NMode::kCurrent;
   37     */
   38   }
   39   #endif
   40   
   41   int pos = path.ReverseFind_PathSepar() + 1;
   42   fileName = path.Ptr(pos);
   43   
   44   switch (mode)
   45   {
   46     case NWorkDir::NMode::kCurrent:
   47     {
   48       return path.Left(pos);
   49     }
   50     case NWorkDir::NMode::kSpecified:
   51     {
   52       FString tempDir = workDirInfo.Path;
   53       NName::NormalizeDirPathPrefix(tempDir);
   54       return tempDir;
   55     }
   56     default:
   57     {
   58       FString tempDir;
   59       if (!MyGetTempPath(tempDir))
   60         throw 141717;
   61       return tempDir;
   62     }
   63   }
   64 }
   65 
   66 HRESULT CWorkDirTempFile::CreateTempFile(const FString &originalPath)
   67 {
   68   NWorkDir::CInfo workDirInfo;
   69   workDirInfo.Load();
   70   FString namePart;
   71   FString workDir = GetWorkDir(workDirInfo, originalPath, namePart);
   72   CreateComplexDir(workDir);
   73   CTempFile tempFile;
   74   _outStreamSpec = new COutFileStream;
   75   OutStream = _outStreamSpec;
   76   if (!_tempFile.Create(workDir + namePart, &_outStreamSpec->File))
   77   {
   78     DWORD error = GetLastError();
   79     return error ? error : E_FAIL;
   80   }
   81   _originalPath = originalPath;
   82   return S_OK;
   83 }
   84 
   85 HRESULT CWorkDirTempFile::MoveToOriginal(bool deleteOriginal)
   86 {
   87   OutStream.Release();
   88   if (!_tempFile.MoveTo(_originalPath, deleteOriginal))
   89   {
   90     DWORD error = GetLastError();
   91     return error ? error : E_FAIL;
   92   }
   93   return S_OK;
   94 }