代码拉取完成,页面将自动刷新
同步操作将从 btwise/OpenCore_NO_ACPI 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From 835e353002ab6e5606c3a9f73d6e2f00f3c2a259 Mon Sep 17 00:00:00 2001
From: ocbuild <[email protected]>
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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。