浏览代码

Bug 1418: Failure when disconnecting the last drive while the previous drive is not ready

https://winscp.net/tracker/1418

Source commit: 0ee94aae591a55abc0461affcd996768665751f8
Martin Prikryl 9 年之前
父节点
当前提交
2dd02d05b3
共有 1 个文件被更改,包括 22 次插入1 次删除
  1. 22 1
      source/packages/filemng/DriveView.pas

+ 22 - 1
source/packages/filemng/DriveView.pas

@@ -1258,6 +1258,7 @@ var
   WasValid: Boolean;
   WFirstDrive: TDrive;
   NodeData: TNodeData;
+  NewDrive: Char;
 begin
   {Fetch disabled drives from the registry:}
 
@@ -1348,7 +1349,27 @@ begin
         begin
           if (Directory <> '') and (Directory[1] = Drive) then
           begin
-            Directory := NodePathName(DriveStatus[Drive].RootNode.GetPrevSibling);
+            NewDrive := Drive;
+
+            repeat
+              if NewDrive < FirstFixedDrive then NewDrive := FirstFixedDrive
+                else
+              if NewDrive = FirstFixedDrive then NewDrive := LastDrive
+                else Dec(NewDrive);
+              DriveInfo.ReadDriveStatus(NewDrive, dsSize or dsImageIndex);
+
+              if NewDrive = Drive then
+              begin
+                Break;
+              end;
+
+              if DriveInfo[NewDrive].Valid and DriveInfo[NewDrive].DriveReady and Assigned(DriveStatus[NewDrive].RootNode) then
+              begin
+                Directory := NodePathName(DriveStatus[NewDrive].RootNode);
+                break;
+              end;
+            until False;
+
             if not Assigned(Selected) then
             begin
               Directory := NodePathName(DriveStatus[FirstFixedDrive].RootNode);