diff options
Diffstat (limited to 'EdkShellPkg/ShellHotFix.patch')
-rw-r--r-- | EdkShellPkg/ShellHotFix.patch | 711 |
1 files changed, 0 insertions, 711 deletions
diff --git a/EdkShellPkg/ShellHotFix.patch b/EdkShellPkg/ShellHotFix.patch deleted file mode 100644 index 23ca26c3df..0000000000 --- a/EdkShellPkg/ShellHotFix.patch +++ /dev/null @@ -1,711 +0,0 @@ -Index: drivers/drivers.c
-===================================================================
---- drivers/drivers.c (revision 30)
-+++ drivers/drivers.c (working copy)
-@@ -130,6 +130,7 @@
- UINTN StringIndex; - UINTN Index; - CHAR8 *Language; -+ CHAR8 *PlatformLanguage; - UINTN DriverImageHandleCount; - EFI_HANDLE *DriverImageHandleBuffer; - UINTN HandleIndex; -@@ -152,6 +153,7 @@
- SHELL_VAR_CHECK_PACKAGE ChkPck; - - Language = NULL; -+ PlatformLanguage = NULL; - DriverImageHandleCount = 0; - DriverImageHandleBuffer = NULL; - IsHelp = FALSE; -@@ -241,7 +243,7 @@
- goto Done; - } - -- Language = LibGetVariableLang (); -+ Language = LibGetVariable (L"Lang", &gEfiGlobalVariableGuid); - if (Language == NULL) { - Language = (CHAR8 *)AllocateZeroPool(strlena(LanguageCodeEnglish) + 1); - if (Language == NULL) { -@@ -250,6 +252,15 @@
- strcpya(Language, LanguageCodeEnglish); - } - -+ PlatformLanguage = LibGetVariable (L"PlatformLang", &gEfiGlobalVariableGuid); -+ if (PlatformLanguage == NULL) { -+ PlatformLanguage = (CHAR8 *)AllocateZeroPool(strlena(PlatformLanguageCodeEnglish) + 1); -+ if (PlatformLanguage == NULL) { -+ return EFI_OUT_OF_RESOURCES; -+ } -+ strcpya(PlatformLanguage, PlatformLanguageCodeEnglish); -+ } -+ - Item = LibCheckVarGetFlag (&ChkPck, L"-l"); - if (Item) { - if (Language != NULL) { -@@ -314,14 +325,6 @@
- EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - -- ComponentName = NULL; -- ComponentName2 = NULL; -- Status = LibGetComponentNameProtocol ( -- DriverImageHandleBuffer[Index], -- &ComponentName, -- &ComponentName2 -- ); -- - DiagnosticsStatus = BS->OpenProtocol ( - DriverImageHandleBuffer[Index], - &gEfiDriverDiagnostics2ProtocolGuid, -@@ -418,37 +421,73 @@
- } else { - PrintToken (STRING_TOKEN (STR_SHELLENV_PROTID_ONE_VAR_D), HiiHandle, NumberOfChildren); - } -- -- Status = EFI_SUCCESS; -+ - DriverName = L"<UNKNOWN>"; -- SupportedLanguage = NULL; -- if (ComponentName != NULL) { -- if (ComponentName->GetDriverName != NULL) { -- SupportedLanguage = LibConvertSupportedLanguage (ComponentName->SupportedLanguages, Language); -+ Status = BS->OpenProtocol ( -+ DriverImageHandleBuffer[Index], -+ &gEfiComponentName2ProtocolGuid, -+ (VOID **) &ComponentName2, -+ NULL, -+ NULL, -+ EFI_OPEN_PROTOCOL_GET_PROTOCOL -+ ); -+ if (!EFI_ERROR (Status)) { -+ // -+ // Driver has Component Name 2 Protocol is available, we get the -+ // driver name var RFC 3066 language code -+ // -+ Status = ComponentName2->GetDriverName ( -+ ComponentName2, -+ PlatformLanguage, -+ &DriverName -+ ); -+ if (EFI_ERROR (Status)) { -+ // -+ // Current RFC3066 language code fails, we then extract the supported -+ // language from Component Name 2 protocol interface. -+ // -+ SupportedLanguage = ExtractSupportedLanguage(ComponentName2->SupportedLanguages, Language); -+ if (SupportedLanguage != NULL) { -+ Status = ComponentName2->GetDriverName ( -+ ComponentName2, -+ SupportedLanguage, -+ &DriverName -+ ); -+ FreePool(SupportedLanguage); -+ } -+ } -+ } -+ if (EFI_ERROR (Status)) { -+ // -+ // In case Component Name 2 protocol is not available or some error occurs -+ // when getting driver name from Component Name 2 protocol, we get driver -+ // name from Component Name protocol. -+ // -+ Status = BS->OpenProtocol ( -+ DriverImageHandleBuffer[Index], -+ &gEfiComponentNameProtocolGuid, -+ (VOID **) &ComponentName, -+ NULL, -+ NULL, -+ EFI_OPEN_PROTOCOL_GET_PROTOCOL -+ ); -+ if (!EFI_ERROR (Status)) { - Status = ComponentName->GetDriverName ( - ComponentName, -- SupportedLanguage, -+ Language, - &DriverName - ); - } -- } else if (ComponentName2 != NULL) { -- if (ComponentName2->GetDriverName != NULL) { -- SupportedLanguage = LibConvertSupportedLanguage (ComponentName2->SupportedLanguages, Language); -- Status = ComponentName2->GetDriverName ( -- ComponentName2, -- SupportedLanguage, -- &DriverName -- ); -- } - } -- if (SupportedLanguage != NULL) { -- FreePool (SupportedLanguage); -- } -- - if (EFI_ERROR (Status)) { -+ // -+ // Fails to get driver name from either Component Name 2 & Component Name -+ // Protocol, we show "<UNKNOWN>" string as driver name. -+ // - DriverName = L"<UNKNOWN>"; - } - -+ - for (StringIndex = 0; StringIndex < StrLen (DriverName) && StringIndex < 35; StringIndex++) { - FormattedDriverName[StringIndex] = DriverName[StringIndex]; - } -@@ -491,6 +530,10 @@
- FreePool (Language); - } - -+ if (PlatformLanguage != NULL) { -+ FreePool (PlatformLanguage); -+ } -+ - ShellCloseHandleEnumerator (); - LibCheckVarFreeVarList (&ChkPck); - LibUnInitializeStrings (); -Index: edit/libEditor.c
-===================================================================
---- edit/libEditor.c (revision 30)
-+++ edit/libEditor.c (working copy)
-@@ -88,8 +88,6 @@
- ) - { - EFI_STATUS Status; -- EFI_HANDLE *HandleBuffer; -- UINTN HandleCount; - - // - // basic initialization -@@ -117,38 +115,22 @@
- ); - - // -- // Find mouse -+ // Find mouse in System Table ConsoleInHandle - // -- HandleBuffer = NULL; -- Status = LibLocateHandle ( -- ByProtocol, -- &gEfiPrimaryConsoleInDeviceGuid, -- NULL, -- &HandleCount, -- &HandleBuffer -- ); -+ Status = BS->HandleProtocol ( -+ In, -+ &gEfiSimplePointerProtocolGuid, -+ &MainEditor.MouseInterface -+ ); - -- if (!EFI_ERROR (Status)) { -- if (HandleCount > 0) { -- Status = BS->HandleProtocol ( -- HandleBuffer[0], -- &gEfiSimplePointerProtocolGuid, -- &MainEditor.MouseInterface -- ); -- -- if (EFI_ERROR (Status)) { -- MainEditor.MouseInterface = NULL; -- } else { -- MainEditor.MouseAccumulatorX = 0; -- MainEditor.MouseAccumulatorY = 0; -- MainEditor.MouseSupported = TRUE; -- } -- } -+ if (EFI_ERROR (Status)) { -+ MainEditor.MouseInterface = NULL; -+ } else { -+ MainEditor.MouseAccumulatorX = 0; -+ MainEditor.MouseAccumulatorY = 0; -+ MainEditor.MouseSupported = TRUE; - } - -- if (HandleBuffer) { -- FreePool (HandleBuffer); -- } - // - // below will call the five components' init function - // -Index: edit/libFileBuffer.c
-===================================================================
---- edit/libFileBuffer.c (revision 30)
-+++ edit/libFileBuffer.c (working copy)
-@@ -735,7 +735,7 @@
- UINTN LineSize; - VOID *Buffer; - CHAR16 *UnicodeBuffer; -- CHAR8 *AsciiBuffer; -+ UINT8 *AsciiBuffer; - UINTN FileSize; - EFI_FILE_HANDLE Handle; - BOOLEAN CreateFile; -@@ -1047,7 +1047,7 @@
- // - // Unicode file - // -- if (AsciiBuffer[0] == 0xff && AsciiBuffer[1] == 0xfe) { -+ if ((FileSize >= 2) && (*((UINT16 *) Buffer) == EFI_UNICODE_BYTE_ORDER_MARK)) { - // - // Unicode file's size should be even - // -Index: hexedit/libEditor.c
-===================================================================
---- hexedit/libEditor.c (revision 30)
-+++ hexedit/libEditor.c (working copy)
-@@ -100,8 +100,6 @@
- --*/ - { - EFI_STATUS Status; -- EFI_HANDLE *HandleBuffer; -- UINTN HandleCount; - - // - // basic initialization -@@ -129,36 +127,19 @@
- &(HMainEditor.ScreenSize.Row) - ); - -- HandleBuffer = NULL; -- Status = LibLocateHandle ( -- ByProtocol, -- &gEfiPrimaryConsoleInDeviceGuid, -- NULL, -- &HandleCount, -- &HandleBuffer -- ); -- -- if (!EFI_ERROR (Status)) { -- -- if (HandleCount > 0) { -- Status = BS->HandleProtocol ( -- HandleBuffer[0], -- &gEfiSimplePointerProtocolGuid, -- &HMainEditor.MouseInterface -- ); -- if (EFI_ERROR (Status)) { -- HMainEditor.MouseInterface = NULL; -- } else { -- HMainEditor.MouseAccumulatorX = 0; -- HMainEditor.MouseAccumulatorY = 0; -- HMainEditor.MouseSupported = TRUE; -- } -- } -+ Status = BS->HandleProtocol ( -+ In, -+ &gEfiSimplePointerProtocolGuid, -+ &HMainEditor.MouseInterface -+ ); -+ if (EFI_ERROR (Status)) { -+ HMainEditor.MouseInterface = NULL; -+ } else { -+ HMainEditor.MouseAccumulatorX = 0; -+ HMainEditor.MouseAccumulatorY = 0; -+ HMainEditor.MouseSupported = TRUE; - } - -- if (HandleBuffer != NULL) { -- FreePool (HandleBuffer); -- } - // - // below will call the five components' init function - // -Index: Library/EfiShellLib.h
-===================================================================
---- Library/EfiShellLib.h (revision 30)
-+++ Library/EfiShellLib.h (working copy)
-@@ -174,22 +174,23 @@
- // - // Environment variable name constants - // --#define VarLanguageCodes L"LangCodes" --#define VarLanguage L"Lang" --#define VarTimeout L"Timeout" --#define VarConsoleIn L"ConIn" --#define VarConsoleOut L"ConOut" --#define VarErrorOut L"ErrOut" --#define VarBootOption L"Boot%04x" --#define VarBootOrder L"BootOrder" --#define VarBootNext L"BootNext" --#define VarBootCurrent L"BootCurrent" --#define VarDriverOption L"Driver%04x" --#define VarDriverOrder L"DriverOrder" --#define VarConsoleInpDev L"ConInDev" --#define VarConsoleOutDev L"ConOutDev" --#define VarErrorOutDev L"ErrOutDev" --#define LanguageCodeEnglish "eng" -+#define VarLanguageCodes L"LangCodes" -+#define VarLanguage L"Lang" -+#define VarTimeout L"Timeout" -+#define VarConsoleIn L"ConIn" -+#define VarConsoleOut L"ConOut" -+#define VarErrorOut L"ErrOut" -+#define VarBootOption L"Boot%04x" -+#define VarBootOrder L"BootOrder" -+#define VarBootNext L"BootNext" -+#define VarBootCurrent L"BootCurrent" -+#define VarDriverOption L"Driver%04x" -+#define VarDriverOrder L"DriverOrder" -+#define VarConsoleInpDev L"ConInDev" -+#define VarConsoleOutDev L"ConOutDev" -+#define VarErrorOutDev L"ErrOutDev" -+#define LanguageCodeEnglish "eng" -+#define PlatformLanguageCodeEnglish "en-US" - - #define ISO_639_2_ENTRY_SIZE 3 - #define RFC_3066_ENTRY_SIZE 12 -@@ -333,4 +334,10 @@
- IN CHAR8 *LangCode - ); - -+CHAR8 * -+ExtractSupportedLanguage ( -+ IN CONST CHAR8 *SupportedLanguages, -+ IN CONST CHAR8 *Language -+ ); -+ - #endif -Index: Library/Misc.c
-===================================================================
---- Library/Misc.c (revision 30)
-+++ Library/Misc.c (working copy)
-@@ -1905,13 +1905,13 @@
- IN VOID *UserData - ) - { -- CHAR8 *Data; -+ UINT8 *Data; - - CHAR8 Val[50]; - - CHAR8 Str[20]; - -- CHAR8 c; -+ UINT8 c; - UINTN Size; - UINTN Index; - -@@ -2271,3 +2271,76 @@
- } - return Lang; - } -+ -+CHAR8 * -+ExtractSupportedLanguage ( -+ IN CONST CHAR8 *SupportedLanguages, -+ IN CONST CHAR8 *Language -+ ) -+/*++ -+ -+ Routine Description: -+ -+ This function matches the major language code (first two characters) in the -+ SupportedLanguages. The first language code in the SupportedLanguages that -+ matches first two characters of the input Language is returned. If there is no -+ such match, then NULL is returned. -+ -+ Arguments: -+ -+ SupportedLanguages - A Null-terminated ASCII string that contains one -+ or more supported language codes. -+ -+ LangCode - A pointer to a Null-terminated ASCII string -+ array indicating the RFC 3066 language. -+ -+ Returns: -+ -+ The RFC3066 language code that matches the major language. -+ -+--*/ -+{ -+ CONST CHAR8 *CurrentLanguage; -+ CHAR8 *SupportedLanguage; -+ UINTN LanguageLen; -+ -+ CurrentLanguage = SupportedLanguages; -+ -+ while (CurrentLanguage != '\0') { -+ // -+ // Search till the end of current language. -+ // -+ LanguageLen = 0; -+ while (CurrentLanguage[LanguageLen] != ';' && CurrentLanguage[LanguageLen] != '\0') { -+ LanguageLen++; -+ } -+ -+ // -+ // should use AsciiStrnCmp(CurrentLanguage, Language, 2) == 0 -+ // -+ if ((CurrentLanguage[0] == Language[0]) && (CurrentLanguage[1] == Language[1])) { -+ // -+ // Match the major language code, then return a new copy of -+ // NULL-terminated SupportedLanguage. -+ // -+ SupportedLanguage = AllocatePool (LanguageLen + 1); -+ CopyMem (SupportedLanguage, (VOID *) CurrentLanguage, LanguageLen); -+ -+ SupportedLanguage[LanguageLen] = '\0'; -+ -+ return SupportedLanguage; -+ } -+ // -+ // Make CurrentLangue point to the next candiate language code. -+ // -+ CurrentLanguage += LanguageLen; -+ if (*CurrentLanguage == ';') { -+ CurrentLanguage++; -+ } -+ } -+ -+ return NULL; -+} -+ -+ -+ -Index: shellenv/batch.c
-===================================================================
---- shellenv/batch.c (revision 30)
-+++ shellenv/batch.c (working copy)
-@@ -2074,17 +2074,17 @@
- --*/ - { - // -- // UNICODE byte-order-mark is two bytes -+ // UNICODE byte-order-mark is 16 bits - // -- CHAR8 Buffer8[2]; -+ UINT16 Uint16; - UINTN BufSize; - EFI_STATUS Status; - - // - // Read the first two bytes to check for byte order mark - // -- BufSize = sizeof (Buffer8); -- Status = File->Read (File, &BufSize, Buffer8); -+ BufSize = sizeof (Uint16); -+ Status = File->Read (File, &BufSize, &Uint16); - if (EFI_ERROR (Status)) { - return Status; - } -@@ -2098,9 +2098,8 @@
- // otherwise assume it is ASCII. UNICODE byte order mark on - // IA little endian is first byte 0xff and second byte 0xfe - // -- if ((Buffer8[0] | (Buffer8[1] << 8)) == EFI_UNICODE_BYTE_ORDER_MARK) { -+ if ((BufSize == 2) && (Uint16 == EFI_UNICODE_BYTE_ORDER_MARK)) { - *IsAscii = FALSE; -- - } else { - *IsAscii = TRUE; - } -Index: shellenv/Connect.c
-===================================================================
---- shellenv/Connect.c (revision 30)
-+++ shellenv/Connect.c (working copy)
-@@ -831,6 +831,16 @@
- return Status; - } - -+ // -+ // Close proxy console before disconnect all devices. -+ // -+ SEnvCloseConsoleProxy ( -+ ST->ConsoleInHandle, -+ &ST->ConIn, -+ ST->ConsoleOutHandle, -+ &ST->ConOut -+ ); -+ - for (Index = 0; Index < AllHandleCount; Index++) { - // - // Check whether the handle is still in handle database -@@ -1004,7 +1014,6 @@
- VOID - SEnvConnectConsole ( - CHAR16 *VariableName, -- EFI_GUID *PrimaryGuid, - EFI_GUID *ConsoleGuid, - EFI_HANDLE *ConsoleHandle, - VOID **ConsoleInterface -@@ -1018,27 +1027,36 @@
- EFI_HANDLE *AllHandleBuffer; - VOID *Interface; - -- *ConsoleHandle = NULL; -- *ConsoleInterface = NULL; - ConsoleIndex = 0; -+ AllHandleBuffer = NULL; - - DevicePath = LibGetVariable (VariableName, &gEfiGlobalVariableGuid); -- if (DevicePath != NULL) { -- SEnvConnectDevicePath (DevicePath); -- FreePool (DevicePath); -+ if (DevicePath == NULL) { -+ // -+ // If no any device defined in EFI variable, do nothing -+ // -+ return; - } - -- AllHandleBuffer = NULL; -- Status = BS->LocateHandleBuffer ( -- ByProtocol, -- PrimaryGuid, -- NULL, -- &AllHandleCount, -- &AllHandleBuffer -- ); -- if (!EFI_ERROR (Status) && AllHandleCount > 0) { -- *ConsoleHandle = AllHandleBuffer[0]; -- } else if (*ConsoleHandle == NULL) { -+ // -+ // Connect all console devices -+ // -+ SEnvConnectDevicePath (DevicePath); -+ FreePool (DevicePath); -+ -+ Status = EFI_NOT_FOUND; -+ // -+ // Check ConsoleHandle validation whatever it was updated or not. -+ // -+ if (*ConsoleHandle != NULL) { -+ Status = BS->HandleProtocol ( -+ *ConsoleHandle, -+ ConsoleGuid, -+ &Interface -+ ); -+ } -+ -+ if (EFI_ERROR (Status)) { - AllHandleBuffer = NULL; - Status = BS->LocateHandleBuffer ( - ByProtocol, -@@ -1063,16 +1081,16 @@
- &gEfiDevicePathProtocolGuid, - &Interface - ); -- if (EFI_ERROR (Status)) { -+ if (!EFI_ERROR (Status)) { - ConsoleIndex = Index; - break; - } - } -+ -+ *ConsoleHandle = AllHandleBuffer[ConsoleIndex]; - } - } - -- *ConsoleHandle = AllHandleBuffer[ConsoleIndex]; -- - if (*ConsoleHandle != NULL) { - BS->HandleProtocol ( - *ConsoleHandle, -@@ -1081,7 +1099,7 @@
- ); - } - -- if (AllHandleBuffer) { -+ if (AllHandleBuffer != NULL) { - FreePool (AllHandleBuffer); - } - } -@@ -1189,8 +1207,7 @@
- EFI_STATUS Status; - - // -- // Check current ConIn and ConOut to ensure it is the ConsoleProxy -- // Otherwise, the Console should not be close -+ // Check current ConIn and ConOut to judge it is the ConsoleProxy - // - Status = SEnvCheckConsoleProxy ( - ST->ConsoleInHandle, -@@ -1203,23 +1220,21 @@
- // Indicate the Console is replaced by redirection operation - // It is not safe to connect Console here - // -- if (EFI_ERROR (Status)) { -- return ; -+ if (!EFI_ERROR (Status)) { -+ // -+ // It is proxy console, to prevent the proxy console form being restored to original console, -+ // close it temporary before connect all console -+ // -+ SEnvCloseConsoleProxy ( -+ ST->ConsoleInHandle, -+ &ST->ConIn, -+ ST->ConsoleOutHandle, -+ &ST->ConOut -+ ); - } -- // -- // To prevent the proxy console form being restored to original console, -- // close it temporary before connect all console -- // -- SEnvCloseConsoleProxy ( -- ST->ConsoleInHandle, -- &ST->ConIn, -- ST->ConsoleOutHandle, -- &ST->ConOut -- ); - - SEnvConnectConsole ( - VarErrorOut, -- &gEfiPrimaryStandardErrorDeviceGuid, - &gEfiSimpleTextOutProtocolGuid, - &ST->StandardErrorHandle, - (VOID **) &ST->StdErr -@@ -1227,7 +1242,6 @@
- - SEnvConnectConsole ( - VarConsoleOut, -- &gEfiPrimaryConsoleOutDeviceGuid, - &gEfiSimpleTextOutProtocolGuid, - &ST->ConsoleOutHandle, - (VOID **) &ST->ConOut -@@ -1235,7 +1249,6 @@
- - SEnvConnectConsole ( - VarConsoleIn, -- &gEfiPrimaryConsoleInDeviceGuid, - &gEfiSimpleTextInProtocolGuid, - &ST->ConsoleInHandle, - (VOID **) &ST->ConIn -@@ -1254,6 +1267,8 @@
- SetCrc (&ST->Hdr); - } - -+ -+ - EFI_STATUS - EFIAPI - SEnvCmdReconnect ( -Index: SmbiosView/PrintInfo.c
-===================================================================
---- SmbiosView/PrintInfo.c (revision 30)
-+++ SmbiosView/PrintInfo.c (working copy)
-@@ -1779,7 +1779,7 @@
- // - // MaxSize is determined by follow formula - // -- MaxSize = 1 << Size; -+ MaxSize = (UINTN) 1 << Size; - PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_MB), HiiHandle, MaxSize); - - if (Option >= SHOW_DETAIL) { -Index: SmbiosView/Smbios.h
-===================================================================
---- SmbiosView/Smbios.h (revision 30)
-+++ SmbiosView/Smbios.h (working copy)
-@@ -34,11 +34,6 @@
- - extern EFI_HII_HANDLE HiiHandle; - --#define EFI_SMBIOS_TABLE_GUID \ -- { \ -- 0xeb9d2d31, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d \ -- } - --extern EFI_GUID gEfiSmbiosTableGuid; - - #endif |