IN CHAR8 **Argv\r
)\r
{\r
+ EFI_STATUS Status;\r
UINTN Index;\r
UINTN CurrentRow;\r
UINTN Max;\r
EFI_OPEN_FILE *File;\r
\r
CurrentRow = 0;\r
- \r
+\r
// Need to call here to make sure Device Counts are valid\r
EblUpdateDeviceLists ();\r
\r
if (File != NULL) {\r
if (File->FsBlockIoMedia->RemovableMedia) {\r
if (File->FsBlockIoMedia->MediaPresent) {\r
- gBS->DisconnectController (File->EfiHandle, NULL, NULL);\r
+ // Probe to see if media is present\r
+ Status = File->FsBlockIo->ReadBlocks (File->FsBlockIo, File->FsBlockIo->Media->MediaId, (EFI_LBA)0, 0, NULL);\r
+ if (Status == EFI_NO_MEDIA) {\r
+ gBS->DisconnectController (File->EfiHandle, NULL, NULL);\r
+ }\r
+ } else {\r
+ // Probe for media insertion and connect partition and filesystem drivers if needed\r
+ gBS->ConnectController (File->EfiHandle, NULL, NULL, TRUE);\r
}\r
- gBS->ConnectController (File->EfiHandle, NULL, NULL, TRUE);\r
}\r
EfiClose (File);\r
}\r
EFI_FILE_SYSTEM_INFO *FsInfo;\r
EFI_FILE_INFO *FsFileInfo;\r
EFI_BLOCK_IO_MEDIA *FsBlockIoMedia; // Information valid for Fs#: or B#:\r
+ EFI_BLOCK_IO_PROTOCOL *FsBlockIo; // Information valid for Fs#: or B#:\r
\r
UINTN DiskOffset; // Information valid for B#:\r
\r
Status = gBS->HandleProtocol (File->EfiHandle, &gEfiBlockIoProtocolGuid, (VOID **)&BlkIo);
if (!EFI_ERROR (Status)) {
File->FsBlockIoMedia = BlkIo->Media;
+ File->FsBlockIo = BlkIo;
// If we are not opening the device this will get over written with file info
File->MaxPosition = MultU64x32 (BlkIo->Media->LastBlock + 1, BlkIo->Media->BlockSize);
return EFI_INVALID_PARAMETER;
}
+ AsciiStrCpy (gCwd, File->DeviceName);
+ if (File->FileName == NULL) {
+ AsciiStrCat (gCwd, ":\\");
+ } else {
+ AsciiStrCat (gCwd, ":");
+ AsciiStrCat (gCwd, File->FileName);
+ }
+
+
EfiClose (File);
if (Path != Cwd) {
FreePool (Path);