mirror of
https://github.com/acidanthera/OpenCorePkg.git
synced 2025-12-08 19:25:01 +00:00
67 lines
1.9 KiB
Diff
67 lines
1.9 KiB
Diff
From 835e353002ab6e5606c3a9f73d6e2f00f3c2a259 Mon Sep 17 00:00:00 2001
|
|
From: ocbuild <ocbuild@acidanthera.local>
|
|
Date: Wed, 31 Mar 2021 07:11:46 +0100
|
|
Subject: [PATCH] ShellPkg: Devices shell command support misaligned device
|
|
names found in some Apple firmware
|
|
|
|
---
|
|
ShellPkg/Application/Shell/ShellProtocol.c | 27 ++++++++++++++++++++++
|
|
1 file changed, 27 insertions(+)
|
|
|
|
diff --git a/ShellPkg/Application/Shell/ShellProtocol.c b/ShellPkg/Application/Shell/ShellProtocol.c
|
|
index 509eb60e40..25f33166e6 100644
|
|
--- a/ShellPkg/Application/Shell/ShellProtocol.c
|
|
+++ b/ShellPkg/Application/Shell/ShellProtocol.c
|
|
@@ -598,6 +598,25 @@ EfiShellGetDevicePathFromFilePath (
|
|
return (DevicePathForReturn);
|
|
}
|
|
|
|
+STATIC
|
|
+CHAR16 *
|
|
+RealignString16 (
|
|
+ IN CONST VOID *Source
|
|
+ )
|
|
+{
|
|
+ CHAR16 NextChar;
|
|
+ CONST UINT8 *Walker;
|
|
+
|
|
+ Walker = Source;
|
|
+
|
|
+ do {
|
|
+ NextChar = ReadUnaligned16 ((VOID *) Walker);
|
|
+ Walker += sizeof (CHAR16);
|
|
+ } while (NextChar != CHAR_NULL);
|
|
+
|
|
+ return AllocateCopyPool ((UINTN) (Walker - (CONST UINT8 *) Source), Source);
|
|
+}
|
|
+
|
|
/**
|
|
Gets the name of the device specified by the device handle.
|
|
|
|
@@ -655,6 +674,7 @@ EfiShellGetDeviceName (
|
|
EFI_HANDLE *ParentControllerBuffer;
|
|
UINTN ParentDriverCount;
|
|
EFI_HANDLE *ParentDriverBuffer;
|
|
+ BOOLEAN NeedsRealign;
|
|
|
|
if ((BestDeviceName == NULL) ||
|
|
(DeviceHandle == NULL)
|
|
@@ -783,7 +803,14 @@ EfiShellGetDeviceName (
|
|
//
|
|
if (DeviceNameToReturn != NULL) {
|
|
ASSERT (BestDeviceName != NULL);
|
|
+ NeedsRealign = ((UINTN) DeviceNameToReturn & BIT0) != 0;
|
|
+ if (NeedsRealign) {
|
|
+ DeviceNameToReturn = RealignString16 (DeviceNameToReturn);
|
|
+ }
|
|
StrnCatGrow (BestDeviceName, NULL, DeviceNameToReturn, 0);
|
|
+ if (NeedsRealign) {
|
|
+ FreePool (DeviceNameToReturn);
|
|
+ }
|
|
return (EFI_SUCCESS);
|
|
}
|
|
}
|
|
--
|
|
2.27.0
|
|
|