]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
MdePkg: Handle USBxxx device path when optional para is not specified
[mirror_edk2.git] / MdePkg / Library / UefiDevicePathLib / DevicePathFromText.c
index ca912b4eb067a0873f295d36665d1d2c90b3f19b..128eb70139d43728041d1539951530d6237d4075 100644 (file)
@@ -2061,22 +2061,42 @@ ConvertFromTextUsbClass (
   PIDStr      = GetNextParamStr (&TextDeviceNode);\r
   if (UsbClassText->ClassExist) {\r
     ClassStr = GetNextParamStr (&TextDeviceNode);\r
-    UsbClass->DeviceClass = (UINT8) Strtoi (ClassStr);\r
+    if (*ClassStr == L'\0') {\r
+      UsbClass->DeviceClass = 0xFF;\r
+    } else {\r
+      UsbClass->DeviceClass = (UINT8) Strtoi (ClassStr);\r
+    }\r
   } else {\r
     UsbClass->DeviceClass = UsbClassText->Class;\r
   }\r
   if (UsbClassText->SubClassExist) {\r
     SubClassStr = GetNextParamStr (&TextDeviceNode);\r
-    UsbClass->DeviceSubClass = (UINT8) Strtoi (SubClassStr);\r
+    if (*SubClassStr == L'\0') {\r
+      UsbClass->DeviceSubClass = 0xFF;\r
+    } else {\r
+      UsbClass->DeviceSubClass = (UINT8) Strtoi (SubClassStr);\r
+    }\r
   } else {\r
     UsbClass->DeviceSubClass = UsbClassText->SubClass;\r
   }\r
 \r
   ProtocolStr = GetNextParamStr (&TextDeviceNode);\r
 \r
-  UsbClass->VendorId        = (UINT16) Strtoi (VIDStr);\r
-  UsbClass->ProductId       = (UINT16) Strtoi (PIDStr);\r
-  UsbClass->DeviceProtocol  = (UINT8) Strtoi (ProtocolStr);\r
+  if (*VIDStr == L'\0') {\r
+    UsbClass->VendorId        = 0xFFFF;\r
+  } else {\r
+    UsbClass->VendorId        = (UINT16) Strtoi (VIDStr);\r
+  }\r
+  if (*PIDStr == L'\0') {\r
+    UsbClass->ProductId       = 0xFFFF;\r
+  } else {\r
+    UsbClass->ProductId       = (UINT16) Strtoi (PIDStr);\r
+  }\r
+  if (*ProtocolStr == L'\0') {\r
+    UsbClass->DeviceProtocol  = 0xFF;\r
+  } else {\r
+    UsbClass->DeviceProtocol  = (UINT8) Strtoi (ProtocolStr);\r
+  }\r
 \r
   return (EFI_DEVICE_PATH_PROTOCOL *) UsbClass;\r
 }\r