- UINT32 Index;\r
- CHAR8 *LunUnitStr[4];\r
- CHAR8 Digit;\r
- UINTN Temp;\r
-\r
- NetZeroMem (Lun, 8);\r
- NetZeroMem (LunUnitStr, sizeof (LunUnitStr));\r
-\r
- Index = 0;\r
- LunUnitStr[0] = Str;\r
-\r
- if (!IsHexDigit ((UINT8 *) &Digit, *Str)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- while (*Str != '\0') {\r
- //\r
- // Legal representations of LUN:\r
- // 4752-3A4F-6b7e-2F99,\r
- // 6734-9-156f-127,\r
- // 4186-9\r
- //\r
- if (*Str == '-') {\r
- *Str = '\0';\r
- Index++;\r
-\r
- if (*(Str + 1) != '\0') {\r
- if (!IsHexDigit ((UINT8 *) &Digit, *(Str + 1))) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- LunUnitStr[Index] = Str + 1;\r
+ UINTN Index, IndexValue, IndexNum, SizeStr;\r
+ CHAR8 TemStr[2];\r
+ UINT8 TemValue;\r
+ UINT16 Value[4];\r
+ \r
+ ZeroMem (Lun, 8);\r
+ ZeroMem (TemStr, 2);\r
+ ZeroMem ((UINT8 *) Value, sizeof (Value));\r
+ SizeStr = AsciiStrLen (Str); \r
+ IndexValue = 0;\r
+ IndexNum = 0;\r
+\r
+ for (Index = 0; Index < SizeStr; Index ++) {\r
+ TemStr[0] = Str[Index];\r
+ TemValue = (UINT8) AsciiStrHexToUint64 (TemStr);\r
+ if (TemValue == 0 && TemStr[0] != '0') {\r
+ if ((TemStr[0] != '-') || (IndexNum == 0)) {\r
+ //\r
+ // Invalid Lun Char\r
+ //\r
+ return EFI_INVALID_PARAMETER;\r