Revision: 14827
          http://sourceforge.net/p/edk2/code/14827
Author:   niruiyu
Date:     2013-11-07 02:30:13 +0000 (Thu, 07 Nov 2013)
Log Message:
-----------
Fix several bugs in DevicePathLib implementation regarding the device path node 
and text conversion.

Signed-off-by: Ruiyu Ni <[email protected]>
Reviewed-by: Feng Tian <[email protected]>

Modified Paths:
--------------
    trunk/edk2/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
    trunk/edk2/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c

Modified: trunk/edk2/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
===================================================================
--- trunk/edk2/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c    
2013-11-07 02:28:03 UTC (rev 14826)
+++ trunk/edk2/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c    
2013-11-07 02:30:13 UTC (rev 14827)
@@ -479,7 +479,7 @@
   UINTN  Index;
 
   for (Index = 0; Index < 4; Index++) {
-    IPv4Addr->Addr[Index] = (UINT8) StrDecimalToUintn (SplitStr (Str, L'.'));
+    IPv4Addr->Addr[Index] = (UINT8) Strtoi (SplitStr (Str, L'.'));
   }
 }
 
@@ -1055,8 +1055,8 @@
 **/
 EFI_DEVICE_PATH_PROTOCOL *
 DevPathFromTextAta (
-  IN CHAR16 *TextDeviceNode
-  )
+IN CHAR16 *TextDeviceNode
+)
 {
   CHAR16            *PrimarySecondaryStr;
   CHAR16            *SlaveMasterStr;
@@ -1064,19 +1064,32 @@
   ATAPI_DEVICE_PATH *Atapi;
 
   Atapi = (ATAPI_DEVICE_PATH *) CreateDeviceNode (
-                                  MESSAGING_DEVICE_PATH,
-                                  MSG_ATAPI_DP,
-                                  (UINT16) sizeof (ATAPI_DEVICE_PATH)
-                                  );
+    MESSAGING_DEVICE_PATH,
+    MSG_ATAPI_DP,
+    (UINT16) sizeof (ATAPI_DEVICE_PATH)
+    );
 
-  PrimarySecondaryStr     = GetNextParamStr (&TextDeviceNode);
-  SlaveMasterStr          = GetNextParamStr (&TextDeviceNode);
-  LunStr                  = GetNextParamStr (&TextDeviceNode);
+  PrimarySecondaryStr = GetNextParamStr (&TextDeviceNode);
+  SlaveMasterStr      = GetNextParamStr (&TextDeviceNode);
+  LunStr              = GetNextParamStr (&TextDeviceNode);
 
-  Atapi->PrimarySecondary = (UINT8) ((StrCmp (PrimarySecondaryStr, L"Primary") 
== 0) ? 0 : 1);
-  Atapi->SlaveMaster      = (UINT8) ((StrCmp (SlaveMasterStr, L"Master") == 0) 
? 0 : 1);
-  Atapi->Lun              = (UINT16) Strtoi (LunStr);
+  if (StrCmp (PrimarySecondaryStr, L"Primary") == 0) {
+    Atapi->PrimarySecondary = 0;
+  } else if (StrCmp (PrimarySecondaryStr, L"Secondary") == 0) {
+    Atapi->PrimarySecondary = 1;
+  } else {
+    Atapi->PrimarySecondary = (UINT8) Strtoi (PrimarySecondaryStr);
+  }
+  if (StrCmp (SlaveMasterStr, L"Master") == 0) {
+    Atapi->SlaveMaster      = 0;
+  } else if (StrCmp (SlaveMasterStr, L"Slave") == 0) {
+    Atapi->SlaveMaster      = 1;
+  } else {
+    Atapi->SlaveMaster      = (UINT8) Strtoi (SlaveMasterStr);
+  }
 
+  Atapi->Lun                = (UINT16) Strtoi (LunStr);
+
   return (EFI_DEVICE_PATH_PROTOCOL *) Atapi;
 }
 
@@ -1880,8 +1893,12 @@
                                            (UINT16) sizeof (UART_DEVICE_PATH)
                                            );
 
-  Uart->BaudRate  = (StrCmp (BaudStr, L"DEFAULT") == 0) ? 115200 : 
StrDecimalToUintn (BaudStr);
-  Uart->DataBits  = (UINT8) ((StrCmp (DataBitsStr, L"DEFAULT") == 0) ? 8 : 
StrDecimalToUintn (DataBitsStr));
+  if (StrCmp (BaudStr, L"DEFAULT") == 0) {
+    Uart->BaudRate = 115200;
+  } else {
+    Strtoi64 (BaudStr, &Uart->BaudRate);
+  }
+  Uart->DataBits  = (UINT8) ((StrCmp (DataBitsStr, L"DEFAULT") == 0) ? 8 : 
Strtoi (DataBitsStr));
   switch (*ParityStr) {
   case L'D':
     Uart->Parity = 0;
@@ -1908,7 +1925,8 @@
     break;
 
   default:
-    Uart->Parity = 0xff;
+    Uart->Parity = (UINT8) Strtoi (ParityStr);
+    break;
   }
 
   if (StrCmp (StopBitsStr, L"D") == 0) {
@@ -1920,7 +1938,7 @@
   } else if (StrCmp (StopBitsStr, L"2") == 0) {
     Uart->StopBits = (UINT8) 3;
   } else {
-    Uart->StopBits = 0xff;
+    Uart->StopBits = (UINT8) Strtoi (StopBitsStr);
   }
 
   return (EFI_DEVICE_PATH_PROTOCOL *) Uart;
@@ -2351,22 +2369,31 @@
   CHAR16                *InterfaceNumStr;
   CHAR16                *SerialNumberStr;
   USB_WWID_DEVICE_PATH  *UsbWwid;
+  UINTN                 SerialNumberStrLen;
 
-  VIDStr                    = GetNextParamStr (&TextDeviceNode);
-  PIDStr                    = GetNextParamStr (&TextDeviceNode);
-  InterfaceNumStr           = GetNextParamStr (&TextDeviceNode);
-  SerialNumberStr           = GetNextParamStr (&TextDeviceNode);
-  UsbWwid                   = (USB_WWID_DEVICE_PATH *) CreateDeviceNode (
+  VIDStr                   = GetNextParamStr (&TextDeviceNode);
+  PIDStr                   = GetNextParamStr (&TextDeviceNode);
+  InterfaceNumStr          = GetNextParamStr (&TextDeviceNode);
+  SerialNumberStr          = GetNextParamStr (&TextDeviceNode);
+  SerialNumberStrLen       = StrLen (SerialNumberStr);
+  if (SerialNumberStrLen >= 2 &&
+      SerialNumberStr[0] == L'\"' &&
+      SerialNumberStr[SerialNumberStrLen - 1] == L'\"'
+    ) {
+    SerialNumberStr[SerialNumberStrLen - 1] = L'\0';
+    SerialNumberStr++;
+    SerialNumberStrLen -= 2;
+  }
+  UsbWwid                  = (USB_WWID_DEVICE_PATH *) CreateDeviceNode (
                                                          MESSAGING_DEVICE_PATH,
                                                          MSG_USB_WWID_DP,
-                                                         (UINT16) (sizeof 
(USB_WWID_DEVICE_PATH) + StrSize (SerialNumberStr))
+                                                         (UINT16) (sizeof 
(USB_WWID_DEVICE_PATH) + SerialNumberStrLen * sizeof (CHAR16))
                                                          );
+  UsbWwid->VendorId        = (UINT16) Strtoi (VIDStr);
+  UsbWwid->ProductId       = (UINT16) Strtoi (PIDStr);
+  UsbWwid->InterfaceNumber = (UINT16) Strtoi (InterfaceNumStr);
+  StrnCpy ((CHAR16 *) ((UINT8 *) UsbWwid + sizeof (USB_WWID_DEVICE_PATH)), 
SerialNumberStr, SerialNumberStrLen);
 
-  UsbWwid->VendorId         = (UINT16) Strtoi (VIDStr);
-  UsbWwid->ProductId        = (UINT16) Strtoi (PIDStr);
-  UsbWwid->InterfaceNumber  = (UINT16) Strtoi (InterfaceNumStr);
-  StrCpy ((CHAR16 *) ((UINT8 *) UsbWwid + sizeof (USB_WWID_DEVICE_PATH)), 
SerialNumberStr);
-
   return (EFI_DEVICE_PATH_PROTOCOL *) UsbWwid;
 }
 
@@ -2526,7 +2553,7 @@
                                                     (UINT16) sizeof 
(HARDDRIVE_DEVICE_PATH)
                                                     );
 
-  Hd->PartitionNumber = (UINT32) StrDecimalToUintn (PartitionStr);
+  Hd->PartitionNumber = (UINT32) Strtoi (PartitionStr);
 
   ZeroMem (Hd->Signature, 16);
   Hd->MBRType = (UINT8) 0;
@@ -2596,7 +2623,7 @@
 
 **/
 EFI_DEVICE_PATH_PROTOCOL *
-DevPathFromTextVenMEDIA (
+DevPathFromTextVenMedia (
   IN CHAR16 *TextDeviceNode
   )
 {
@@ -2818,29 +2845,18 @@
   CHAR16           *Param2;
   CHAR16           *Param3;
 
-  //
-  // The PMPN is optional.
-  //
   Param1 = GetNextParamStr (&TextDeviceNode);
   Param2 = GetNextParamStr (&TextDeviceNode);
-  Param3 = NULL;
-  if (!IS_NULL (TextDeviceNode)) {
-    Param3 = GetNextParamStr (&TextDeviceNode);
-  }
+  Param3 = GetNextParamStr (&TextDeviceNode);
 
   Sata = (SATA_DEVICE_PATH *) CreateDeviceNode (
                                 MESSAGING_DEVICE_PATH,
                                 MSG_SATA_DP,
                                 (UINT16) sizeof (SATA_DEVICE_PATH)
                                 );
-  Sata->HBAPortNumber = (UINT16) StrHexToUintn (Param1);
-  if (Param3 != NULL) {
-    Sata->PortMultiplierPortNumber = (UINT16) StrHexToUintn (Param2);
-    Param2                   = Param3;
-  } else {
-    Sata->PortMultiplierPortNumber = SATA_HBA_DIRECT_CONNECT_FLAG;
-  }
-  Sata->Lun = (UINT16) StrHexToUintn (Param2);
+  Sata->HBAPortNumber            = (UINT16) Strtoi (Param1);
+  Sata->PortMultiplierPortNumber = (UINT16) Strtoi (Param2);
+  Sata->Lun                      = (UINT16) Strtoi (Param3);
 
   return (EFI_DEVICE_PATH_PROTOCOL *) Sata;
 }
@@ -2904,7 +2920,7 @@
   {L"Vlan",                    DevPathFromTextVlan                    },
   {L"HD",                      DevPathFromTextHD                      },
   {L"CDROM",                   DevPathFromTextCDROM                   },
-  {L"VenMEDIA",                DevPathFromTextVenMEDIA                },
+  {L"VenMedia",                DevPathFromTextVenMedia                },
   {L"Media",                   DevPathFromTextMedia                   },
   {L"Fv",                      DevPathFromTextFv                      },
   {L"FvFile",                  DevPathFromTextFvFile                  },

Modified: trunk/edk2/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
===================================================================
--- trunk/edk2/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c      
2013-11-07 02:28:03 UTC (rev 14826)
+++ trunk/edk2/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c      
2013-11-07 02:30:13 UTC (rev 14827)
@@ -990,22 +990,13 @@
   SATA_DEVICE_PATH *Sata;
 
   Sata = DevPath;
-  if ((Sata->PortMultiplierPortNumber & SATA_HBA_DIRECT_CONNECT_FLAG) != 0) {
-    UefiDevicePathLibCatPrint (
-      Str,
-      L"Sata(0x%x,0x%x)",
-      Sata->HBAPortNumber,
-      Sata->Lun
-      );
-  } else {
-    UefiDevicePathLibCatPrint (
-      Str,
-      L"Sata(0x%x,0x%x,0x%x)",
-      Sata->HBAPortNumber,
-      Sata->PortMultiplierPortNumber,
-      Sata->Lun
-      );
-  }
+  UefiDevicePathLibCatPrint (
+    Str,
+    L"Sata(0x%x,0x%x,0x%x)",
+    Sata->HBAPortNumber,
+    Sata->PortMultiplierPortNumber,
+    Sata->Lun
+    );
 }
 
 /**

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
November Webinars for C, C++, Fortran Developers
Accelerate application performance with scalable programming models. Explore
techniques for threading, error checking, porting, and tuning. Get the most 
from the latest Intel processors and coprocessors. See abstracts and register
http://pubads.g.doubleclick.net/gampad/clk?id=60136231&iu=/4140/ostg.clktrk
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to