]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Fix several bugs in DevicePathLib implementation regarding the device path node and...
authorRuiyu Ni <ruiyu.ni@intel.com>
Thu, 7 Nov 2013 02:30:13 +0000 (02:30 +0000)
committerniruiyu <niruiyu@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 7 Nov 2013 02:30:13 +0000 (02:30 +0000)
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Feng Tian <feng.tian@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14827 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
MdePkg/Library/UefiDevicePathLib/DevicePathToText.c

index 91203190ea72388c145b20d7b7aa46ace8acee18..8943191bd4f35913f987c0181d94aa269c2fc4ae 100644 (file)
@@ -479,7 +479,7 @@ StrToIPv4Addr (
   UINTN  Index;\r
 \r
   for (Index = 0; Index < 4; Index++) {\r
-    IPv4Addr->Addr[Index] = (UINT8) StrDecimalToUintn (SplitStr (Str, L'.'));\r
+    IPv4Addr->Addr[Index] = (UINT8) Strtoi (SplitStr (Str, L'.'));\r
   }\r
 }\r
 \r
@@ -1055,8 +1055,8 @@ DevPathFromTextAcpiAdr (
 **/\r
 EFI_DEVICE_PATH_PROTOCOL *\r
 DevPathFromTextAta (\r
-  IN CHAR16 *TextDeviceNode\r
-  )\r
+IN CHAR16 *TextDeviceNode\r
+)\r
 {\r
   CHAR16            *PrimarySecondaryStr;\r
   CHAR16            *SlaveMasterStr;\r
@@ -1064,18 +1064,31 @@ DevPathFromTextAta (
   ATAPI_DEVICE_PATH *Atapi;\r
 \r
   Atapi = (ATAPI_DEVICE_PATH *) CreateDeviceNode (\r
-                                  MESSAGING_DEVICE_PATH,\r
-                                  MSG_ATAPI_DP,\r
-                                  (UINT16) sizeof (ATAPI_DEVICE_PATH)\r
-                                  );\r
-\r
-  PrimarySecondaryStr     = GetNextParamStr (&TextDeviceNode);\r
-  SlaveMasterStr          = GetNextParamStr (&TextDeviceNode);\r
-  LunStr                  = GetNextParamStr (&TextDeviceNode);\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_ATAPI_DP,\r
+    (UINT16) sizeof (ATAPI_DEVICE_PATH)\r
+    );\r
+\r
+  PrimarySecondaryStr = GetNextParamStr (&TextDeviceNode);\r
+  SlaveMasterStr      = GetNextParamStr (&TextDeviceNode);\r
+  LunStr              = GetNextParamStr (&TextDeviceNode);\r
+\r
+  if (StrCmp (PrimarySecondaryStr, L"Primary") == 0) {\r
+    Atapi->PrimarySecondary = 0;\r
+  } else if (StrCmp (PrimarySecondaryStr, L"Secondary") == 0) {\r
+    Atapi->PrimarySecondary = 1;\r
+  } else {\r
+    Atapi->PrimarySecondary = (UINT8) Strtoi (PrimarySecondaryStr);\r
+  }\r
+  if (StrCmp (SlaveMasterStr, L"Master") == 0) {\r
+    Atapi->SlaveMaster      = 0;\r
+  } else if (StrCmp (SlaveMasterStr, L"Slave") == 0) {\r
+    Atapi->SlaveMaster      = 1;\r
+  } else {\r
+    Atapi->SlaveMaster      = (UINT8) Strtoi (SlaveMasterStr);\r
+  }\r
 \r
-  Atapi->PrimarySecondary = (UINT8) ((StrCmp (PrimarySecondaryStr, L"Primary") == 0) ? 0 : 1);\r
-  Atapi->SlaveMaster      = (UINT8) ((StrCmp (SlaveMasterStr, L"Master") == 0) ? 0 : 1);\r
-  Atapi->Lun              = (UINT16) Strtoi (LunStr);\r
+  Atapi->Lun                = (UINT16) Strtoi (LunStr);\r
 \r
   return (EFI_DEVICE_PATH_PROTOCOL *) Atapi;\r
 }\r
@@ -1880,8 +1893,12 @@ DevPathFromTextUart (
                                            (UINT16) sizeof (UART_DEVICE_PATH)\r
                                            );\r
 \r
-  Uart->BaudRate  = (StrCmp (BaudStr, L"DEFAULT") == 0) ? 115200 : StrDecimalToUintn (BaudStr);\r
-  Uart->DataBits  = (UINT8) ((StrCmp (DataBitsStr, L"DEFAULT") == 0) ? 8 : StrDecimalToUintn (DataBitsStr));\r
+  if (StrCmp (BaudStr, L"DEFAULT") == 0) {\r
+    Uart->BaudRate = 115200;\r
+  } else {\r
+    Strtoi64 (BaudStr, &Uart->BaudRate);\r
+  }\r
+  Uart->DataBits  = (UINT8) ((StrCmp (DataBitsStr, L"DEFAULT") == 0) ? 8 : Strtoi (DataBitsStr));\r
   switch (*ParityStr) {\r
   case L'D':\r
     Uart->Parity = 0;\r
@@ -1908,7 +1925,8 @@ DevPathFromTextUart (
     break;\r
 \r
   default:\r
-    Uart->Parity = 0xff;\r
+    Uart->Parity = (UINT8) Strtoi (ParityStr);\r
+    break;\r
   }\r
 \r
   if (StrCmp (StopBitsStr, L"D") == 0) {\r
@@ -1920,7 +1938,7 @@ DevPathFromTextUart (
   } else if (StrCmp (StopBitsStr, L"2") == 0) {\r
     Uart->StopBits = (UINT8) 3;\r
   } else {\r
-    Uart->StopBits = 0xff;\r
+    Uart->StopBits = (UINT8) Strtoi (StopBitsStr);\r
   }\r
 \r
   return (EFI_DEVICE_PATH_PROTOCOL *) Uart;\r
@@ -2351,21 +2369,30 @@ DevPathFromTextUsbWwid (
   CHAR16                *InterfaceNumStr;\r
   CHAR16                *SerialNumberStr;\r
   USB_WWID_DEVICE_PATH  *UsbWwid;\r
-\r
-  VIDStr                    = GetNextParamStr (&TextDeviceNode);\r
-  PIDStr                    = GetNextParamStr (&TextDeviceNode);\r
-  InterfaceNumStr           = GetNextParamStr (&TextDeviceNode);\r
-  SerialNumberStr           = GetNextParamStr (&TextDeviceNode);\r
-  UsbWwid                   = (USB_WWID_DEVICE_PATH *) CreateDeviceNode (\r
+  UINTN                 SerialNumberStrLen;\r
+\r
+  VIDStr                   = GetNextParamStr (&TextDeviceNode);\r
+  PIDStr                   = GetNextParamStr (&TextDeviceNode);\r
+  InterfaceNumStr          = GetNextParamStr (&TextDeviceNode);\r
+  SerialNumberStr          = GetNextParamStr (&TextDeviceNode);\r
+  SerialNumberStrLen       = StrLen (SerialNumberStr);\r
+  if (SerialNumberStrLen >= 2 &&\r
+      SerialNumberStr[0] == L'\"' &&\r
+      SerialNumberStr[SerialNumberStrLen - 1] == L'\"'\r
+    ) {\r
+    SerialNumberStr[SerialNumberStrLen - 1] = L'\0';\r
+    SerialNumberStr++;\r
+    SerialNumberStrLen -= 2;\r
+  }\r
+  UsbWwid                  = (USB_WWID_DEVICE_PATH *) CreateDeviceNode (\r
                                                          MESSAGING_DEVICE_PATH,\r
                                                          MSG_USB_WWID_DP,\r
-                                                         (UINT16) (sizeof (USB_WWID_DEVICE_PATH) + StrSize (SerialNumberStr))\r
+                                                         (UINT16) (sizeof (USB_WWID_DEVICE_PATH) + SerialNumberStrLen * sizeof (CHAR16))\r
                                                          );\r
-\r
-  UsbWwid->VendorId         = (UINT16) Strtoi (VIDStr);\r
-  UsbWwid->ProductId        = (UINT16) Strtoi (PIDStr);\r
-  UsbWwid->InterfaceNumber  = (UINT16) Strtoi (InterfaceNumStr);\r
-  StrCpy ((CHAR16 *) ((UINT8 *) UsbWwid + sizeof (USB_WWID_DEVICE_PATH)), SerialNumberStr);\r
+  UsbWwid->VendorId        = (UINT16) Strtoi (VIDStr);\r
+  UsbWwid->ProductId       = (UINT16) Strtoi (PIDStr);\r
+  UsbWwid->InterfaceNumber = (UINT16) Strtoi (InterfaceNumStr);\r
+  StrnCpy ((CHAR16 *) ((UINT8 *) UsbWwid + sizeof (USB_WWID_DEVICE_PATH)), SerialNumberStr, SerialNumberStrLen);\r
 \r
   return (EFI_DEVICE_PATH_PROTOCOL *) UsbWwid;\r
 }\r
@@ -2526,7 +2553,7 @@ DevPathFromTextHD (
                                                     (UINT16) sizeof (HARDDRIVE_DEVICE_PATH)\r
                                                     );\r
 \r
-  Hd->PartitionNumber = (UINT32) StrDecimalToUintn (PartitionStr);\r
+  Hd->PartitionNumber = (UINT32) Strtoi (PartitionStr);\r
 \r
   ZeroMem (Hd->Signature, 16);\r
   Hd->MBRType = (UINT8) 0;\r
@@ -2596,7 +2623,7 @@ DevPathFromTextCDROM (
 \r
 **/\r
 EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextVenMEDIA (\r
+DevPathFromTextVenMedia (\r
   IN CHAR16 *TextDeviceNode\r
   )\r
 {\r
@@ -2818,29 +2845,18 @@ DevPathFromTextSata (
   CHAR16           *Param2;\r
   CHAR16           *Param3;\r
 \r
-  //\r
-  // The PMPN is optional.\r
-  //\r
   Param1 = GetNextParamStr (&TextDeviceNode);\r
   Param2 = GetNextParamStr (&TextDeviceNode);\r
-  Param3 = NULL;\r
-  if (!IS_NULL (TextDeviceNode)) {\r
-    Param3 = GetNextParamStr (&TextDeviceNode);\r
-  }\r
+  Param3 = GetNextParamStr (&TextDeviceNode);\r
 \r
   Sata = (SATA_DEVICE_PATH *) CreateDeviceNode (\r
                                 MESSAGING_DEVICE_PATH,\r
                                 MSG_SATA_DP,\r
                                 (UINT16) sizeof (SATA_DEVICE_PATH)\r
                                 );\r
-  Sata->HBAPortNumber = (UINT16) StrHexToUintn (Param1);\r
-  if (Param3 != NULL) {\r
-    Sata->PortMultiplierPortNumber = (UINT16) StrHexToUintn (Param2);\r
-    Param2                   = Param3;\r
-  } else {\r
-    Sata->PortMultiplierPortNumber = SATA_HBA_DIRECT_CONNECT_FLAG;\r
-  }\r
-  Sata->Lun = (UINT16) StrHexToUintn (Param2);\r
+  Sata->HBAPortNumber            = (UINT16) Strtoi (Param1);\r
+  Sata->PortMultiplierPortNumber = (UINT16) Strtoi (Param2);\r
+  Sata->Lun                      = (UINT16) Strtoi (Param3);\r
 \r
   return (EFI_DEVICE_PATH_PROTOCOL *) Sata;\r
 }\r
@@ -2904,7 +2920,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED DEVICE_PATH_FROM_TEXT_TABLE mUefiDevicePathLibDevP
   {L"Vlan",                    DevPathFromTextVlan                    },\r
   {L"HD",                      DevPathFromTextHD                      },\r
   {L"CDROM",                   DevPathFromTextCDROM                   },\r
-  {L"VenMEDIA",                DevPathFromTextVenMEDIA                },\r
+  {L"VenMedia",                DevPathFromTextVenMedia                },\r
   {L"Media",                   DevPathFromTextMedia                   },\r
   {L"Fv",                      DevPathFromTextFv                      },\r
   {L"FvFile",                  DevPathFromTextFvFile                  },\r
index 81cf84e25ddf31d8f26e4d5349dfcb3033d0eb03..eebdbf2394276bbdb117258144f8561c49afd4cd 100644 (file)
@@ -990,22 +990,13 @@ DevPathToTextSata (
   SATA_DEVICE_PATH *Sata;\r
 \r
   Sata = DevPath;\r
-  if ((Sata->PortMultiplierPortNumber & SATA_HBA_DIRECT_CONNECT_FLAG) != 0) {\r
-    UefiDevicePathLibCatPrint (\r
-      Str,\r
-      L"Sata(0x%x,0x%x)",\r
-      Sata->HBAPortNumber,\r
-      Sata->Lun\r
-      );\r
-  } else {\r
-    UefiDevicePathLibCatPrint (\r
-      Str,\r
-      L"Sata(0x%x,0x%x,0x%x)",\r
-      Sata->HBAPortNumber,\r
-      Sata->PortMultiplierPortNumber,\r
-      Sata->Lun\r
-      );\r
-  }\r
+  UefiDevicePathLibCatPrint (\r
+    Str,\r
+    L"Sata(0x%x,0x%x,0x%x)",\r
+    Sata->HBAPortNumber,\r
+    Sata->PortMultiplierPortNumber,\r
+    Sata->Lun\r
+    );\r
 }\r
 \r
 /**\r