-/**\r
- Convert a Unicode character to numerical value.\r
-\r
- This internal function only deal with Unicode character\r
- which maps to a valid hexadecimal ASII character, i.e.\r
- L'0' to L'9', L'a' to L'f' or L'A' to L'F'. For other\r
- Unicode character, the value returned does not make sense.\r
-\r
- @param Char The character to convert.\r
-\r
- @return The numerical value converted.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-HexCharToUintn (\r
- IN CHAR16 Char\r
- )\r
-{\r
- if (Char >= L'0' && Char <= L'9') {\r
- return Char - L'0';\r
- }\r
-\r
- return (UINTN) (10 + CharToUpper (Char) - L'A');\r
-}\r
-\r
-/**\r
- Convert a string representation of a guid to a Guid value.\r
-\r
- @param[in] StringGuid The pointer to the string of a guid.\r
- @param[in, out] Guid The pointer to the GUID structure to populate.\r
-\r
- @retval EFI_INVALID_PARAMETER A parameter was invalid.\r
- @retval EFI_SUCCESS The conversion was successful.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-ConvertStringToGuid (\r
- IN CONST CHAR16 *StringGuid,\r
- IN OUT EFI_GUID *Guid\r
- )\r
-{\r
- CHAR16 *TempCopy;\r
- CHAR16 *TempSpot;\r
- CHAR16 *Walker;\r
- UINT64 TempVal;\r
- EFI_STATUS Status;\r
-\r
- if (StringGuid == NULL) {\r
- return (EFI_INVALID_PARAMETER);\r
- } else if (StrLen(StringGuid) != 36) {\r
- return (EFI_INVALID_PARAMETER);\r
- } \r
- TempCopy = NULL;\r
- TempCopy = StrnCatGrow(&TempCopy, NULL, StringGuid, 0);\r
- if (TempCopy == NULL) {\r
- return (EFI_OUT_OF_RESOURCES);\r
- }\r
- Walker = TempCopy;\r
- TempSpot = StrStr(Walker, L"-");\r
- if (TempSpot != NULL) {\r
- *TempSpot = CHAR_NULL;\r
- }\r
- Status = ShellConvertStringToUint64(Walker, &TempVal, TRUE, FALSE);\r
- if (EFI_ERROR(Status)) {\r
- FreePool(TempCopy);\r
- return (Status);\r
- }\r
- Guid->Data1 = (UINT32)TempVal;\r
- Walker += 9;\r
- TempSpot = StrStr(Walker, L"-");\r
- if (TempSpot != NULL) {\r
- *TempSpot = CHAR_NULL;\r
- }\r
- Status = ShellConvertStringToUint64(Walker, &TempVal, TRUE, FALSE);\r
- if (EFI_ERROR(Status)) {\r
- FreePool(TempCopy);\r
- return (Status);\r
- }\r
- Guid->Data2 = (UINT16)TempVal;\r
- Walker += 5;\r
- TempSpot = StrStr(Walker, L"-");\r
- if (TempSpot != NULL) {\r
- *TempSpot = CHAR_NULL;\r
- }\r
- Status = ShellConvertStringToUint64(Walker, &TempVal, TRUE, FALSE);\r
- if (EFI_ERROR(Status)) {\r
- FreePool(TempCopy);\r
- return (Status);\r
- }\r
- Guid->Data3 = (UINT16)TempVal;\r
- Walker += 5;\r
- Guid->Data4[0] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
- Guid->Data4[0] = (UINT8)(Guid->Data4[0]+ (UINT8)HexCharToUintn(Walker[1]));\r
- Walker += 2;\r
- Guid->Data4[1] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
- Guid->Data4[1] = (UINT8)(Guid->Data4[1] + (UINT8)HexCharToUintn(Walker[1]));\r
- Walker += 3;\r
- Guid->Data4[2] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
- Guid->Data4[2] = (UINT8)(Guid->Data4[2] + (UINT8)HexCharToUintn(Walker[1]));\r
- Walker += 2;\r
- Guid->Data4[3] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
- Guid->Data4[3] = (UINT8)(Guid->Data4[3] + (UINT8)HexCharToUintn(Walker[1]));\r
- Walker += 2;\r
- Guid->Data4[4] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
- Guid->Data4[4] = (UINT8)(Guid->Data4[4] + (UINT8)HexCharToUintn(Walker[1]));\r
- Walker += 2;\r
- Guid->Data4[5] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
- Guid->Data4[5] = (UINT8)(Guid->Data4[5] + (UINT8)HexCharToUintn(Walker[1]));\r
- Walker += 2;\r
- Guid->Data4[6] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
- Guid->Data4[6] = (UINT8)(Guid->Data4[6] + (UINT8)HexCharToUintn(Walker[1]));\r
- Walker += 2;\r
- Guid->Data4[7] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
- Guid->Data4[7] = (UINT8)(Guid->Data4[7] + (UINT8)HexCharToUintn(Walker[1]));\r
- FreePool(TempCopy);\r
- return (EFI_SUCCESS);\r
-}\r
-\r