diff options
author | Igor Pavlov <ipavlov@users.sourceforge.net> | 2015-06-15 03:00:00 +0300 |
---|---|---|
committer | Kornel LesiĆski <kornel@geekhood.net> | 2016-05-28 02:16:54 +0300 |
commit | 54490d51d5c6b0d794dcbad2d634d4c95fc25b6c (patch) | |
tree | c3c413656432c0ef87b2841c80e42b55ad17d4e8 /CPP/7zip/Common/FilePathAutoRename.cpp | |
parent | 0713a3ab803e57401f18432148b4139e5fe6e5dd (diff) |
15.0515.05
Diffstat (limited to 'CPP/7zip/Common/FilePathAutoRename.cpp')
-rw-r--r-- | CPP/7zip/Common/FilePathAutoRename.cpp | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/CPP/7zip/Common/FilePathAutoRename.cpp b/CPP/7zip/Common/FilePathAutoRename.cpp index 958360fa..d186e599 100644 --- a/CPP/7zip/Common/FilePathAutoRename.cpp +++ b/CPP/7zip/Common/FilePathAutoRename.cpp @@ -12,44 +12,40 @@ using namespace NWindows; static bool MakeAutoName(const FString &name, - const FString &extension, unsigned value, FString &path) + const FString &extension, UInt32 value, FString &path) { - FChar number[16]; - ConvertUInt32ToString(value, number); + char temp[16]; + ConvertUInt32ToString(value, temp); path = name; - path += number; + path.AddAscii(temp); path += extension; return NFile::NFind::DoesFileOrDirExist(path); } -bool AutoRenamePath(FString &fullProcessedPath) +bool AutoRenamePath(FString &path) { - FString path; - int dotPos = fullProcessedPath.ReverseFind(FTEXT('.')); + int dotPos = path.ReverseFind_Dot(); + int slashPos = path.ReverseFind_PathSepar(); - int slashPos = fullProcessedPath.ReverseFind(FTEXT('/')); - #ifdef _WIN32 - int slash1Pos = fullProcessedPath.ReverseFind(FTEXT('\\')); - slashPos = MyMax(slashPos, slash1Pos); - #endif - - FString name, extension; - if (dotPos > slashPos && dotPos > 0) + FString name = path; + FString extension; + if (dotPos > slashPos + 1) { - name.SetFrom(fullProcessedPath, dotPos); - extension = fullProcessedPath.Ptr(dotPos); + name.DeleteFrom(dotPos); + extension = path.Ptr(dotPos); } - else - name = fullProcessedPath; - name += L'_'; - unsigned left = 1, right = (1 << 30); + name += FTEXT('_'); + + FString temp; + + UInt32 left = 1, right = ((UInt32)1 << 30); while (left != right) { - unsigned mid = (left + right) / 2; - if (MakeAutoName(name, extension, mid, path)) + UInt32 mid = (left + right) / 2; + if (MakeAutoName(name, extension, mid, temp)) left = mid + 1; else right = mid; } - return !MakeAutoName(name, extension, right, fullProcessedPath); + return !MakeAutoName(name, extension, right, path); } |