]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/Bds/BootOptionSupport.c
ArmPlatformPkg/Bds: Get User inputs in Unicode
[mirror_edk2.git] / ArmPlatformPkg / Bds / BootOptionSupport.c
index 336bcb9a2127a59d08d545e388e93886e11267a0..a7e83b828b99ffeea510ba3570bfe458bc28148f 100644 (file)
@@ -335,32 +335,26 @@ BdsLoadOptionFileSystemCreateDevicePath (
 {\r
   EFI_STATUS  Status;\r
   FILEPATH_DEVICE_PATH* FilePathDevicePath;\r
-  CHAR8       AsciiBootFilePath[BOOT_DEVICE_FILEPATH_MAX];\r
-  CHAR16      *BootFilePath;\r
+  CHAR16      BootFilePath[BOOT_DEVICE_FILEPATH_MAX];\r
   UINTN       BootFilePathSize;\r
 \r
-  Status = GetHIInputAscii (AsciiBootFilePath,BOOT_DEVICE_FILEPATH_MAX);\r
+  Status = GetHIInputStr (BootFilePath, BOOT_DEVICE_FILEPATH_MAX);\r
   if (EFI_ERROR(Status)) {\r
     return EFI_ABORTED;\r
   }\r
 \r
-  if (AsciiStrSize(AsciiBootFilePath) == 1) {\r
+  BootFilePathSize = StrSize (BootFilePath);\r
+  if (BootFilePathSize == 2) {\r
     *DevicePathNode = NULL;\r
     return EFI_NOT_FOUND;\r
   }\r
 \r
-  // Convert Ascii into Unicode\r
-  BootFilePath = (CHAR16*)AllocatePool(AsciiStrSize(AsciiBootFilePath) * sizeof(CHAR16));\r
-  AsciiStrToUnicodeStr (AsciiBootFilePath, BootFilePath);\r
-  BootFilePathSize = StrSize(BootFilePath);\r
-\r
   // Create the FilePath Device Path node\r
   FilePathDevicePath = (FILEPATH_DEVICE_PATH*)AllocatePool(SIZE_OF_FILEPATH_DEVICE_PATH + BootFilePathSize);\r
   FilePathDevicePath->Header.Type = MEDIA_DEVICE_PATH;\r
   FilePathDevicePath->Header.SubType = MEDIA_FILEPATH_DP;\r
   SetDevicePathNodeLength (FilePathDevicePath, SIZE_OF_FILEPATH_DEVICE_PATH + BootFilePathSize);\r
   CopyMem (FilePathDevicePath->PathName, BootFilePath, BootFilePathSize);\r
-  FreePool (BootFilePath);\r
 \r
   if (BootType != NULL || Attributes != NULL) {\r
     Status = BootDeviceGetType (FilePathDevicePath->PathName, BootType, Attributes);\r
@@ -384,8 +378,7 @@ BdsLoadOptionFileSystemUpdateDevicePath (
   )\r
 {\r
   EFI_STATUS  Status;\r
-  CHAR8       AsciiBootFilePath[BOOT_DEVICE_FILEPATH_MAX];\r
-  CHAR16      *BootFilePath;\r
+  CHAR16      BootFilePath[BOOT_DEVICE_FILEPATH_MAX];\r
   UINTN       BootFilePathSize;\r
   FILEPATH_DEVICE_PATH* EndingDevicePath;\r
   FILEPATH_DEVICE_PATH* FilePathDevicePath;\r
@@ -395,29 +388,24 @@ BdsLoadOptionFileSystemUpdateDevicePath (
 \r
   EndingDevicePath = (FILEPATH_DEVICE_PATH*)GetLastDevicePathNode (DevicePath);\r
  \r
-  UnicodeStrToAsciiStr (EndingDevicePath->PathName,AsciiBootFilePath);\r
-  Status = EditHIInputAscii (AsciiBootFilePath,BOOT_DEVICE_FILEPATH_MAX);\r
+  StrnCpy (BootFilePath, EndingDevicePath->PathName, BOOT_DEVICE_FILEPATH_MAX);\r
+  Status = EditHIInputStr (BootFilePath, BOOT_DEVICE_FILEPATH_MAX);\r
   if (EFI_ERROR(Status)) {\r
     return Status;\r
   }\r
 \r
-  if (AsciiStrSize(AsciiBootFilePath) == 1) {\r
+  BootFilePathSize = StrSize(BootFilePath);\r
+  if (BootFilePathSize == 2) {\r
     *NewDevicePath = NULL;\r
     return EFI_NOT_FOUND;\r
   }\r
 \r
-  // Convert Ascii into Unicode\r
-  BootFilePath = (CHAR16*)AllocatePool(AsciiStrSize(AsciiBootFilePath) * sizeof(CHAR16));\r
-  AsciiStrToUnicodeStr (AsciiBootFilePath, BootFilePath);\r
-  BootFilePathSize = StrSize(BootFilePath);\r
-\r
   // Create the FilePath Device Path node\r
   FilePathDevicePath = (FILEPATH_DEVICE_PATH*)AllocatePool(SIZE_OF_FILEPATH_DEVICE_PATH + BootFilePathSize);\r
   FilePathDevicePath->Header.Type = MEDIA_DEVICE_PATH;\r
   FilePathDevicePath->Header.SubType = MEDIA_FILEPATH_DP;\r
   SetDevicePathNodeLength (FilePathDevicePath, SIZE_OF_FILEPATH_DEVICE_PATH + BootFilePathSize);\r
   CopyMem (FilePathDevicePath->PathName, BootFilePath, BootFilePathSize);\r
-  FreePool (BootFilePath);\r
 \r
   // Generate the new Device Path by replacing the last node by the updated node\r
   SetDevicePathEndNode (EndingDevicePath);\r
@@ -545,17 +533,17 @@ BdsLoadOptionMemMapCreateDevicePath (
 {\r
   EFI_STATUS  Status;\r
   MEMMAP_DEVICE_PATH* MemMapDevicePath;\r
-  CHAR8       AsciiStartingAddress[BOOT_DEVICE_ADDRESS_MAX];\r
-  CHAR8       AsciiEndingAddress[BOOT_DEVICE_ADDRESS_MAX];\r
+  CHAR16       StrStartingAddress[BOOT_DEVICE_ADDRESS_MAX];\r
+  CHAR16       StrEndingAddress[BOOT_DEVICE_ADDRESS_MAX];\r
 \r
   Print(L"Starting Address of the binary: ");\r
-  Status = GetHIInputAscii (AsciiStartingAddress,BOOT_DEVICE_ADDRESS_MAX);\r
+  Status = GetHIInputStr (StrStartingAddress,BOOT_DEVICE_ADDRESS_MAX);\r
   if (EFI_ERROR(Status)) {\r
     return EFI_ABORTED;\r
   }\r
 \r
   Print(L"Ending Address of the binary: ");\r
-  Status = GetHIInputAscii (AsciiEndingAddress,BOOT_DEVICE_ADDRESS_MAX);\r
+  Status = GetHIInputStr (StrEndingAddress,BOOT_DEVICE_ADDRESS_MAX);\r
   if (EFI_ERROR(Status)) {\r
     return EFI_ABORTED;\r
   }\r
@@ -565,8 +553,8 @@ BdsLoadOptionMemMapCreateDevicePath (
   MemMapDevicePath->Header.Type = HARDWARE_DEVICE_PATH;\r
   MemMapDevicePath->Header.SubType = HW_MEMMAP_DP;\r
   MemMapDevicePath->MemoryType = EfiBootServicesData;\r
-  MemMapDevicePath->StartingAddress = AsciiStrHexToUint64 (AsciiStartingAddress);\r
-  MemMapDevicePath->EndingAddress = AsciiStrHexToUint64 (AsciiEndingAddress);\r
+  MemMapDevicePath->StartingAddress = StrHexToUint64 (StrStartingAddress);\r
+  MemMapDevicePath->EndingAddress = StrHexToUint64 (StrEndingAddress);\r
 \r
   Status = BootDeviceGetType (NULL, BootType, Attributes);\r
   if (EFI_ERROR(Status)) {\r
@@ -587,8 +575,8 @@ BdsLoadOptionMemMapUpdateDevicePath (
   )\r
 {\r
   EFI_STATUS          Status;\r
-  CHAR8               AsciiStartingAddress[BOOT_DEVICE_ADDRESS_MAX];\r
-  CHAR8               AsciiEndingAddress[BOOT_DEVICE_ADDRESS_MAX];\r
+  CHAR16              StrStartingAddress[BOOT_DEVICE_ADDRESS_MAX];\r
+  CHAR16              StrEndingAddress[BOOT_DEVICE_ADDRESS_MAX];\r
   MEMMAP_DEVICE_PATH* EndingDevicePath;\r
   EFI_DEVICE_PATH*    DevicePath;\r
 \r
@@ -596,21 +584,21 @@ BdsLoadOptionMemMapUpdateDevicePath (
   EndingDevicePath = (MEMMAP_DEVICE_PATH*)GetLastDevicePathNode (DevicePath);\r
 \r
   Print(L"Starting Address of the binary: ");\r
-  AsciiSPrint (AsciiStartingAddress,BOOT_DEVICE_ADDRESS_MAX,"0x%X",(UINTN)EndingDevicePath->StartingAddress);\r
-  Status = EditHIInputAscii (AsciiStartingAddress,BOOT_DEVICE_ADDRESS_MAX);\r
+  UnicodeSPrint (StrStartingAddress, BOOT_DEVICE_ADDRESS_MAX, L"0x%X", (UINTN)EndingDevicePath->StartingAddress);\r
+  Status = EditHIInputStr (StrStartingAddress, BOOT_DEVICE_ADDRESS_MAX);\r
   if (EFI_ERROR(Status)) {\r
     return EFI_ABORTED;\r
   }\r
 \r
   Print(L"Ending Address of the binary: ");\r
-  AsciiSPrint (AsciiEndingAddress,BOOT_DEVICE_ADDRESS_MAX,"0x%X",(UINTN)EndingDevicePath->EndingAddress);\r
-  Status = EditHIInputAscii (AsciiEndingAddress,BOOT_DEVICE_ADDRESS_MAX);\r
+  UnicodeSPrint (StrEndingAddress, BOOT_DEVICE_ADDRESS_MAX, L"0x%X", (UINTN)EndingDevicePath->EndingAddress);\r
+  Status = EditHIInputStr (StrEndingAddress, BOOT_DEVICE_ADDRESS_MAX);\r
   if (EFI_ERROR(Status)) {\r
     return EFI_ABORTED;\r
   }\r
 \r
-  EndingDevicePath->StartingAddress = AsciiStrHexToUint64 (AsciiStartingAddress);\r
-  EndingDevicePath->EndingAddress = AsciiStrHexToUint64 (AsciiEndingAddress);\r
+  EndingDevicePath->StartingAddress = StrHexToUint64 (StrStartingAddress);\r
+  EndingDevicePath->EndingAddress = StrHexToUint64 (StrEndingAddress);\r
 \r
   Status = BootDeviceGetType (NULL, BootType, Attributes);\r
   if (EFI_ERROR(Status)) {\r
@@ -797,8 +785,7 @@ BdsLoadOptionTftpCreateDevicePath (
   EFI_IP_ADDRESS  RemoteIp;\r
   IPv4_DEVICE_PATH*   IPv4DevicePathNode;\r
   FILEPATH_DEVICE_PATH* FilePathDevicePath;\r
-  CHAR8       AsciiBootFilePath[BOOT_DEVICE_FILEPATH_MAX];\r
-  CHAR16*     BootFilePath;\r
+  CHAR16      BootFilePath[BOOT_DEVICE_FILEPATH_MAX];\r
   UINTN       BootFilePathSize;\r
 \r
   Print(L"Get the IP address from DHCP: ");\r
@@ -821,16 +808,16 @@ BdsLoadOptionTftpCreateDevicePath (
     return EFI_ABORTED;\r
   }\r
 \r
-  Print(L"File path of the EFI Application or the kernel: ");\r
-  Status = GetHIInputAscii (AsciiBootFilePath,BOOT_DEVICE_FILEPATH_MAX);\r
+  Print(L"File path of the EFI Application or the kernel : ");\r
+  Status = GetHIInputStr (BootFilePath, BOOT_DEVICE_FILEPATH_MAX);\r
   if (EFI_ERROR(Status)) {\r
     return EFI_ABORTED;\r
   }\r
 \r
-  // Convert Ascii into Unicode\r
-  BootFilePath = (CHAR16*)AllocatePool(AsciiStrSize(AsciiBootFilePath) * sizeof(CHAR16));\r
-  AsciiStrToUnicodeStr (AsciiBootFilePath, BootFilePath);\r
   BootFilePathSize = StrSize(BootFilePath);\r
+  if (BootFilePathSize == 2) {\r
+    return EFI_NOT_FOUND;\r
+  }\r
 \r
   // Allocate the memory for the IPv4 + File Path Device Path Nodes\r
   IPv4DevicePathNode = (IPv4_DEVICE_PATH*)AllocatePool(sizeof(IPv4_DEVICE_PATH) + SIZE_OF_FILEPATH_DEVICE_PATH + BootFilePathSize);\r
@@ -852,7 +839,6 @@ BdsLoadOptionTftpCreateDevicePath (
   FilePathDevicePath->Header.SubType = MEDIA_FILEPATH_DP;\r
   SetDevicePathNodeLength (FilePathDevicePath, SIZE_OF_FILEPATH_DEVICE_PATH + BootFilePathSize);\r
   CopyMem (FilePathDevicePath->PathName, BootFilePath, BootFilePathSize);\r
-  FreePool (BootFilePath);\r
 \r
   Status = BootDeviceGetType (NULL, BootType, Attributes);\r
   if (EFI_ERROR(Status)) {\r