]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkShellPkg/ShellHotFix.patch
Three GUIDs had been retired, PrimaryConsoleInDeviceGuid, PrimaryConsoleOutDeviceGuid...
[mirror_edk2.git] / EdkShellPkg / ShellHotFix.patch
index 46a95d884120d62a16a6ea87a4e2624f8467c6b3..e4aa54bb78d1aa5411952763067e41e1bcf9bfdf 100644 (file)
@@ -163,6 +163,70 @@ Index: drivers/drivers.c
    ShellCloseHandleEnumerator ();
    LibCheckVarFreeVarList (&ChkPck);
    LibUnInitializeStrings ();
    ShellCloseHandleEnumerator ();
    LibCheckVarFreeVarList (&ChkPck);
    LibUnInitializeStrings ();
+Index: edit/libEditor.c\r
+===================================================================\r
+--- edit/libEditor.c   (revision 30)\r
++++ edit/libEditor.c   (working copy)\r
+@@ -88,8 +88,6 @@\r
+   )\r
+ {\r
+   EFI_STATUS  Status;\r
+-  EFI_HANDLE  *HandleBuffer;\r
+-  UINTN       HandleCount;\r
\r
+   //\r
+   // basic initialization\r
+@@ -117,38 +115,22 @@\r
+         );\r
\r
+   //\r
+-  // Find mouse\r
++  // Find mouse in System Table ConsoleInHandle\r
+   //\r
+-  HandleBuffer = NULL;\r
+-  Status = LibLocateHandle (\r
+-            ByProtocol,\r
+-            &gEfiPrimaryConsoleInDeviceGuid,\r
+-            NULL,\r
+-            &HandleCount,\r
+-            &HandleBuffer\r
+-            );\r
++  Status = BS->HandleProtocol (\r
++                In,\r
++                &gEfiSimplePointerProtocolGuid,\r
++                &MainEditor.MouseInterface\r
++                );\r
\r
+-  if (!EFI_ERROR (Status)) {\r
+-    if (HandleCount > 0) {\r
+-      Status = BS->HandleProtocol (\r
+-                    HandleBuffer[0],\r
+-                    &gEfiSimplePointerProtocolGuid,\r
+-                    &MainEditor.MouseInterface\r
+-                    );\r
+-\r
+-      if (EFI_ERROR (Status)) {\r
+-        MainEditor.MouseInterface = NULL;\r
+-      } else {\r
+-        MainEditor.MouseAccumulatorX  = 0;\r
+-        MainEditor.MouseAccumulatorY  = 0;\r
+-        MainEditor.MouseSupported     = TRUE;\r
+-      }\r
+-    }\r
++  if (EFI_ERROR (Status)) {\r
++    MainEditor.MouseInterface = NULL;\r
++  } else {\r
++    MainEditor.MouseAccumulatorX  = 0;\r
++    MainEditor.MouseAccumulatorY  = 0;\r
++    MainEditor.MouseSupported     = TRUE;\r
+   }\r
\r
+-  if (HandleBuffer) {\r
+-    FreePool (HandleBuffer);\r
+-  }\r
+   //\r
+   // below will call the five components' init function\r
+   //\r
 Index: edit/libFileBuffer.c\r
 ===================================================================\r
 --- edit/libFileBuffer.c       (revision 30)\r
 Index: edit/libFileBuffer.c\r
 ===================================================================\r
 --- edit/libFileBuffer.c       (revision 30)\r
@@ -184,7 +248,68 @@ Index: edit/libFileBuffer.c
 +      if ((FileSize >= 2) && (*((UINT16 *) Buffer) == EFI_UNICODE_BYTE_ORDER_MARK)) {
          //
          // Unicode file's size should be even
 +      if ((FileSize >= 2) && (*((UINT16 *) Buffer) == EFI_UNICODE_BYTE_ORDER_MARK)) {
          //
          // Unicode file's size should be even
-         //
+         //\r
+Index: hexedit/libEditor.c\r
+===================================================================\r
+--- hexedit/libEditor.c        (revision 30)\r
++++ hexedit/libEditor.c        (working copy)\r
+@@ -100,8 +100,6 @@\r
+ --*/\r
+ {\r
+   EFI_STATUS  Status;\r
+-  EFI_HANDLE  *HandleBuffer;\r
+-  UINTN       HandleCount;\r
\r
+   //\r
+   // basic initialization\r
+@@ -129,36 +127,19 @@\r
+         &(HMainEditor.ScreenSize.Row)\r
+         );\r
\r
+-  HandleBuffer = NULL;\r
+-  Status = LibLocateHandle (\r
+-            ByProtocol,\r
+-            &gEfiPrimaryConsoleInDeviceGuid,\r
+-            NULL,\r
+-            &HandleCount,\r
+-            &HandleBuffer\r
+-            );\r
+-\r
+-  if (!EFI_ERROR (Status)) {\r
+-\r
+-    if (HandleCount > 0) {\r
+-      Status = BS->HandleProtocol (\r
+-                    HandleBuffer[0],\r
+-                    &gEfiSimplePointerProtocolGuid,\r
+-                    &HMainEditor.MouseInterface\r
+-                    );\r
+-      if (EFI_ERROR (Status)) {\r
+-        HMainEditor.MouseInterface = NULL;\r
+-      } else {\r
+-        HMainEditor.MouseAccumulatorX = 0;\r
+-        HMainEditor.MouseAccumulatorY = 0;\r
+-        HMainEditor.MouseSupported    = TRUE;\r
+-      }\r
+-    }\r
++  Status = BS->HandleProtocol (\r
++                In,\r
++                &gEfiSimplePointerProtocolGuid,\r
++                &HMainEditor.MouseInterface\r
++                );\r
++  if (EFI_ERROR (Status)) {\r
++    HMainEditor.MouseInterface = NULL;\r
++  } else {\r
++    HMainEditor.MouseAccumulatorX = 0;\r
++    HMainEditor.MouseAccumulatorY = 0;\r
++    HMainEditor.MouseSupported    = TRUE;\r
+   }\r
\r
+-  if (HandleBuffer != NULL) {\r
+-    FreePool (HandleBuffer);\r
+-  }\r
+   //\r
+   // below will call the five components' init function\r
+   //
 Index: Library/EfiShellLib.h\r
 ===================================================================\r
 --- Library/EfiShellLib.h      (revision 30)\r
 Index: Library/EfiShellLib.h\r
 ===================================================================\r
 --- Library/EfiShellLib.h      (revision 30)\r
@@ -374,6 +499,176 @@ Index: shellenv/batch.c
    } else {
      *IsAscii = TRUE;
    }
    } else {
      *IsAscii = TRUE;
    }
+Index: shellenv/Connect.c\r
+===================================================================\r
+--- shellenv/Connect.c (revision 30)\r
++++ shellenv/Connect.c (working copy)\r
+@@ -831,6 +831,16 @@\r
+     return Status;\r
+   }\r
\r
++  //\r
++  // Close proxy console before disconnect all devices.\r
++  //\r
++  SEnvCloseConsoleProxy (\r
++    ST->ConsoleInHandle,\r
++    &ST->ConIn,\r
++    ST->ConsoleOutHandle,\r
++    &ST->ConOut\r
++    );\r
++\r
+   for (Index = 0; Index < AllHandleCount; Index++) {\r
+     //\r
+     // Check whether the handle is still in handle database\r
+@@ -1004,7 +1014,6 @@\r
+ VOID\r
+ SEnvConnectConsole (\r
+   CHAR16      *VariableName,\r
+-  EFI_GUID    *PrimaryGuid,\r
+   EFI_GUID    *ConsoleGuid,\r
+   EFI_HANDLE  *ConsoleHandle,\r
+   VOID        **ConsoleInterface\r
+@@ -1018,9 +1027,8 @@\r
+   EFI_HANDLE                *AllHandleBuffer;\r
+   VOID                      *Interface;\r
\r
+-  *ConsoleHandle    = NULL;\r
+-  *ConsoleInterface = NULL;\r
+   ConsoleIndex      = 0;\r
++  AllHandleBuffer   = NULL;\r
\r
+   DevicePath        = LibGetVariable (VariableName, &gEfiGlobalVariableGuid);\r
+   if (DevicePath != NULL) {\r
+@@ -1028,17 +1036,19 @@\r
+     FreePool (DevicePath);\r
+   }\r
\r
+-  AllHandleBuffer = NULL;\r
+-  Status = BS->LocateHandleBuffer (\r
+-                ByProtocol,\r
+-                PrimaryGuid,\r
+-                NULL,\r
+-                &AllHandleCount,\r
+-                &AllHandleBuffer\r
+-                );\r
+-  if (!EFI_ERROR (Status) && AllHandleCount > 0) {\r
+-    *ConsoleHandle = AllHandleBuffer[0];\r
+-  } else if (*ConsoleHandle == NULL) {\r
++  Status = EFI_NOT_FOUND;\r
++  //\r
++  // Check ConsoleHandle validation whatever it was updated or not.\r
++  //\r
++  if (*ConsoleHandle != NULL) {\r
++    Status = BS->HandleProtocol (\r
++                  *ConsoleHandle,\r
++                  ConsoleGuid,\r
++                  &Interface\r
++                  );\r
++  }\r
++\r
++  if (EFI_ERROR (Status)) {\r
+     AllHandleBuffer = NULL;\r
+     Status = BS->LocateHandleBuffer (\r
+                   ByProtocol,\r
+@@ -1063,16 +1073,16 @@\r
+                       &gEfiDevicePathProtocolGuid,\r
+                       &Interface\r
+                       );\r
+-        if (EFI_ERROR (Status)) {\r
++        if (!EFI_ERROR (Status)) {\r
+           ConsoleIndex = Index;\r
+           break;\r
+         }\r
+       }\r
++      \r
++      *ConsoleHandle = AllHandleBuffer[ConsoleIndex];\r
+     }\r
+   }\r
\r
+-  *ConsoleHandle = AllHandleBuffer[ConsoleIndex];\r
+-\r
+   if (*ConsoleHandle != NULL) {\r
+     BS->HandleProtocol (\r
+           *ConsoleHandle,\r
+@@ -1081,7 +1091,7 @@\r
+           );\r
+   }\r
\r
+-  if (AllHandleBuffer) {\r
++  if (AllHandleBuffer != NULL) {\r
+     FreePool (AllHandleBuffer);\r
+   }\r
+ }\r
+@@ -1189,8 +1199,7 @@\r
+   EFI_STATUS  Status;\r
\r
+   //\r
+-  // Check current ConIn and ConOut to ensure it is the ConsoleProxy\r
+-  // Otherwise, the Console should not be close\r
++  // Check current ConIn and ConOut to judge it is the ConsoleProxy\r
+   //\r
+   Status = SEnvCheckConsoleProxy (\r
+             ST->ConsoleInHandle,\r
+@@ -1203,23 +1212,21 @@\r
+   // Indicate the Console is replaced by redirection operation\r
+   // It is not safe to connect Console here\r
+   //\r
+-  if (EFI_ERROR (Status)) {\r
+-    return ;\r
++  if (!EFI_ERROR (Status)) {\r
++    //\r
++    // It is proxy console, to prevent the proxy console form being restored to original console,\r
++    // close it temporary before connect all console\r
++    //\r
++    SEnvCloseConsoleProxy (\r
++      ST->ConsoleInHandle,\r
++      &ST->ConIn,\r
++      ST->ConsoleOutHandle,\r
++      &ST->ConOut\r
++      );\r
+   }\r
+-  //\r
+-  // To prevent the proxy console form being restored to original console,\r
+-  // close it temporary before connect all console\r
+-  //\r
+-  SEnvCloseConsoleProxy (\r
+-    ST->ConsoleInHandle,\r
+-    &ST->ConIn,\r
+-    ST->ConsoleOutHandle,\r
+-    &ST->ConOut\r
+-    );\r
\r
+   SEnvConnectConsole (\r
+     VarErrorOut,\r
+-    &gEfiPrimaryStandardErrorDeviceGuid,\r
+     &gEfiSimpleTextOutProtocolGuid,\r
+     &ST->StandardErrorHandle,\r
+     (VOID **) &ST->StdErr\r
+@@ -1227,7 +1234,6 @@\r
\r
+   SEnvConnectConsole (\r
+     VarConsoleOut,\r
+-    &gEfiPrimaryConsoleOutDeviceGuid,\r
+     &gEfiSimpleTextOutProtocolGuid,\r
+     &ST->ConsoleOutHandle,\r
+     (VOID **) &ST->ConOut\r
+@@ -1235,7 +1241,6 @@\r
\r
+   SEnvConnectConsole (\r
+     VarConsoleIn,\r
+-    &gEfiPrimaryConsoleInDeviceGuid,\r
+     &gEfiSimpleTextInProtocolGuid,\r
+     &ST->ConsoleInHandle,\r
+     (VOID **) &ST->ConIn\r
+@@ -1254,6 +1259,8 @@\r
+   SetCrc (&ST->Hdr);\r
+ }\r
\r
++\r
++\r
+ EFI_STATUS\r
+ EFIAPI\r
+ SEnvCmdReconnect (\r
 Index: SmbiosView/PrintInfo.c\r
 ===================================================================\r
 --- SmbiosView/PrintInfo.c     (revision 30)\r
 Index: SmbiosView/PrintInfo.c\r
 ===================================================================\r
 --- SmbiosView/PrintInfo.c     (revision 30)\r