]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/SetupBrowserDxe/Ui.c
Replace BufToHexString by UnicodeValueToString
[mirror_edk2.git] / MdeModulePkg / Universal / SetupBrowserDxe / Ui.c
index ae8d9a62d790505ae0f7f1f1d782354873dba7dd..42074ca32b2c69b055055680ccd8908a85a04fa5 100644 (file)
@@ -1506,6 +1506,9 @@ UiDisplayMenu (
   UINT16                          DefaultId;\r
   EFI_DEVICE_PATH_PROTOCOL        *DevicePath;\r
   FORM_BROWSER_STATEMENT          *Statement;\r
+  CHAR16                          TemStr[2];\r
+  UINT8                           *DevicePathBuffer;\r
+  UINT8                           DigitUint8;\r
 \r
   CopyMem (&LocalScreen, &gScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR));\r
 \r
@@ -2358,8 +2361,27 @@ UiDisplayMenu (
           }\r
           BufferSize = StrLen (StringPtr) / 2;\r
           DevicePath = AllocatePool (BufferSize);\r
+          \r
+          //\r
+          // Convert from Device Path String to DevicePath Buffer in the reverse order.\r
+          //\r
+          DevicePathBuffer = (UINT8 *) DevicePath;\r
+          for (Index = 0; StringPtr[Index] != L'\0'; Index ++) {\r
+            TemStr[0] = StringPtr[Index];\r
+            DigitUint8 = (UINT8) StrHexToUint64 (TemStr);\r
+            if (DigitUint8 == 0 && TemStr[0] != L'0') {\r
+              //\r
+              // Invalid Hex Char as the tail.\r
+              //\r
+              break;\r
+            }\r
+            if ((Index & 1) == 0) {\r
+              DevicePathBuffer [Index/2] = DigitUint8;\r
+            } else {\r
+              DevicePathBuffer [Index/2] = (UINT8) ((DevicePathBuffer [Index/2] << 4) + DigitUint8);\r
+            }\r
+          }\r
 \r
-          HexStringToBufInReverseOrder ((UINT8 *) DevicePath, &BufferSize, StringPtr);\r
           Selection->Handle = HiiLibDevicePathToHiiHandle (DevicePath);\r
           if (Selection->Handle == NULL) {\r
             //\r