[FarGroup/FarManager] master: Continue 6336 (4dbcd0781)

0 views
Skip to first unread message

farg...@farmanager.com

unread,
Jun 1, 2024, 1:30:48 PMJun 1
to farco...@googlegroups.com
Repository : https://github.com/FarGroup/FarManager
On branch : master
Link : https://github.com/FarGroup/FarManager/commit/4dbcd078120325e6346a0eca192080b9ed53b580

>---------------------------------------------------------------

commit 4dbcd078120325e6346a0eca192080b9ed53b580
Author: Alex Alabuzhev <alab...@gmail.com>
Date: Sat Jun 1 18:14:46 2024 +0100

Continue 6336


>---------------------------------------------------------------

4dbcd078120325e6346a0eca192080b9ed53b580
far/changelog | 5 +++++
far/diskmenu.cpp | 27 ++++++++++++++++++---------
far/hotplug.cpp | 6 +++---
far/vbuild.m4 | 2 +-
4 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/far/changelog b/far/changelog
index 91ff8ab2d..06b02d26b 100644
--- a/far/changelog
+++ b/far/changelog
@@ -1,3 +1,8 @@
+--------------------------------------------------------------------------------
+drkns 2024-06-01 18:14:25+01:00 - build 6343
+
+1. Continue 6336.
+
--------------------------------------------------------------------------------
zg 2024-06-01 10:22:55+03:00 - build 6342

diff --git a/far/diskmenu.cpp b/far/diskmenu.cpp
index d180ce48c..8c7d0d394 100644
--- a/far/diskmenu.cpp
+++ b/far/diskmenu.cpp
@@ -117,14 +117,23 @@ using disk_menu_item = std::variant<disk_item, plugin_item>;
[[nodiscard]]
static bool is_disk(string_view const RootDirectory)
{
- return RootDirectory.size() == L"C:\\"sv.size();
+ return RootDirectory.size() == L"\\\\?\\C:\\"sv.size();
}

[[nodiscard]]
static string_view dos_drive_name(string_view const RootDirectory)
{
if (is_disk(RootDirectory))
- return RootDirectory.substr(0, L"C:"sv.size());
+ return RootDirectory.substr(L"\\\\?\\"sv.size(), L"C:"sv.size());
+
+ return RootDirectory;
+}
+
+[[nodiscard]]
+static string_view dos_drive_root_directory(string_view const RootDirectory)
+{
+ if (is_disk(RootDirectory))
+ return RootDirectory.substr(L"\\\\?\\"sv.size(), L"C:\\"sv.size());

return RootDirectory;
}
@@ -652,7 +661,7 @@ static void RemoveHotplugDevice(panel_ptr Owner, const disk_item& item, VMenu2 &
static string GetShellName(string_view const RootDirectory)
{
return is_disk(RootDirectory)?
- os::com::get_shell_name(RootDirectory):
+ os::com::get_shell_name(dos_drive_root_directory(RootDirectory)) :
L""s;
}

@@ -837,7 +846,7 @@ static int ChangeDiskMenu(panel_ptr Owner, int Pos, bool FirstCall)

for (const auto& i: os::fs::enum_drives(AllDrives))
{
- process_location(os::fs::drive::get_root_directory(i));
+ process_location(os::fs::drive::get_win32nt_root_directory(i));
}

if (DriveMode & DRIVE_SHOW_UNMOUNTED_VOLUMES)
@@ -871,7 +880,7 @@ static int ChangeDiskMenu(panel_ptr Owner, int Pos, bool FirstCall)
{
if (IsDisk)
{
- const auto DiskNumber = os::fs::drive::get_number(i.RootDirectory[0]);
+ const auto DiskNumber = os::fs::drive::get_number(i.RootDirectory[L"\\\\?\\"sv.size()]);

ChDiskItem.SetSelect(static_cast<int>(DiskNumber) == Pos);

@@ -972,7 +981,7 @@ static int ChangeDiskMenu(panel_ptr Owner, int Pos, bool FirstCall)

std::visit(overload{[&](disk_item const& item)
{
- OpenFolderInShell(item.Path);
+ OpenFolderInShell(dos_drive_root_directory(item.Path));
},
[](plugin_item const&){}}, *MenuItem);
break;
@@ -1085,7 +1094,7 @@ static int ChangeDiskMenu(panel_ptr Owner, int Pos, bool FirstCall)
return;

//вызовем EMenu если он есть
- null_terminated const RootDirectory(item.Path);
+ null_terminated const RootDirectory(dos_drive_root_directory(item.Path));
struct DiskMenuParam
{
const wchar_t* CmdLine; BOOL Apps; COORD MousePos;
@@ -1326,7 +1335,7 @@ static int ChangeDiskMenu(panel_ptr Owner, int Pos, bool FirstCall)

const auto IsDisk = is_disk(item.Path);

- while (!(FarChDir(dos_drive_name(item.Path)) || (IsDisk && FarChDir(item.Path))))
+ while (!(FarChDir(dos_drive_name(item.Path)) || (IsDisk && FarChDir(dos_drive_root_directory(item.Path)))))
{
error_state_ex const ErrorState = os::last_error();

@@ -1360,7 +1369,7 @@ static int ChangeDiskMenu(panel_ptr Owner, int Pos, bool FirstCall)
if (Builder.ShowDialog())
{
if (IsDisk)
- item.Path = os::fs::drive::get_root_directory(upper(DriveLetter[0]));
+ item.Path = os::fs::drive::get_win32nt_root_directory(upper(DriveLetter[0]));
}
else
{
diff --git a/far/hotplug.cpp b/far/hotplug.cpp
index ba1e96fb0..666330d67 100644
--- a/far/hotplug.cpp
+++ b/far/hotplug.cpp
@@ -492,7 +492,7 @@ bool RemoveHotplugDrive(string_view const Path, bool const Confirm, bool& Cancel
}

const auto PathType = ParsePath(Path);
- if (none_of(PathType, root_type::drive_letter, root_type::win32nt_drive_letter, root_type::volume))
+ if (PathType != root_type::win32nt_drive_letter && PathType != root_type::volume)
{
Cancelled = true;
return false;
@@ -503,9 +503,9 @@ bool RemoveHotplugDrive(string_view const Path, bool const Confirm, bool& Cancel

const auto ItemIterator = [&]
{
- if (any_of(PathType, root_type::drive_letter, root_type::win32nt_drive_letter))
+ if (PathType == root_type::win32nt_drive_letter)
{
- const auto DiskNumber = os::fs::drive::get_number(Path[PathType == root_type::drive_letter? 0 : L"\\\\?\\"sv.size()]);
+ const auto DiskNumber = os::fs::drive::get_number(Path[L"\\\\?\\"sv.size()]);
return std::ranges::find_if(Info, [&](DeviceInfo const& i){ return i.DevicePaths.Disks[DiskNumber]; });
}

diff --git a/far/vbuild.m4 b/far/vbuild.m4
index a21ef1c31..e3a7b92c6 100644
--- a/far/vbuild.m4
+++ b/far/vbuild.m4
@@ -1 +1 @@
-6342
+6343


Reply all
Reply to author
Forward
0 new messages