Convert a Null-terminated Unicode GUID string to a value of type EFI_GUID. This function outputs a GUID value by interpreting the contents of the Unicode string specified by String. The format of the input Unicode string String consists of 36 characters, as follows: aabbccdd-eeff-gghh-iijj-kkllmmnnoopp The pairs aa - pp are two characters in the range [0-9],
| 1512 | |
| 1513 | **/ |
| 1514 | RETURN_STATUS |
| 1515 | EFIAPI |
| 1516 | StrToGuid ( |
| 1517 | IN CONST CHAR16 *String, |
| 1518 | OUT GUID *Guid |
| 1519 | ) |
| 1520 | { |
| 1521 | RETURN_STATUS Status; |
| 1522 | GUID LocalGuid; |
| 1523 | |
| 1524 | ASSERT (((UINTN) String & BIT0) == 0); |
| 1525 | |
| 1526 | // |
| 1527 | // 1. None of String or Guid shall be a null pointer. |
| 1528 | // |
| 1529 | SAFE_STRING_CONSTRAINT_CHECK ((String != NULL), RETURN_INVALID_PARAMETER); |
| 1530 | SAFE_STRING_CONSTRAINT_CHECK ((Guid != NULL), RETURN_INVALID_PARAMETER); |
| 1531 | |
| 1532 | // |
| 1533 | // Get aabbccdd in big-endian. |
| 1534 | // |
| 1535 | Status = StrHexToBytes (String, 2 * sizeof (LocalGuid.Data1), (UINT8 *) &LocalGuid.Data1, sizeof (LocalGuid.Data1)); |
| 1536 | if (RETURN_ERROR (Status) || String[2 * sizeof (LocalGuid.Data1)] != L'-') { |
| 1537 | return RETURN_UNSUPPORTED; |
| 1538 | } |
| 1539 | // |
| 1540 | // Convert big-endian to little-endian. |
| 1541 | // |
| 1542 | LocalGuid.Data1 = SwapBytes32 (LocalGuid.Data1); |
| 1543 | String += 2 * sizeof (LocalGuid.Data1) + 1; |
| 1544 | |
| 1545 | // |
| 1546 | // Get eeff in big-endian. |
| 1547 | // |
| 1548 | Status = StrHexToBytes (String, 2 * sizeof (LocalGuid.Data2), (UINT8 *) &LocalGuid.Data2, sizeof (LocalGuid.Data2)); |
| 1549 | if (RETURN_ERROR (Status) || String[2 * sizeof (LocalGuid.Data2)] != L'-') { |
| 1550 | return RETURN_UNSUPPORTED; |
| 1551 | } |
| 1552 | // |
| 1553 | // Convert big-endian to little-endian. |
| 1554 | // |
| 1555 | LocalGuid.Data2 = SwapBytes16 (LocalGuid.Data2); |
| 1556 | String += 2 * sizeof (LocalGuid.Data2) + 1; |
| 1557 | |
| 1558 | // |
| 1559 | // Get gghh in big-endian. |
| 1560 | // |
| 1561 | Status = StrHexToBytes (String, 2 * sizeof (LocalGuid.Data3), (UINT8 *) &LocalGuid.Data3, sizeof (LocalGuid.Data3)); |
| 1562 | if (RETURN_ERROR (Status) || String[2 * sizeof (LocalGuid.Data3)] != L'-') { |
| 1563 | return RETURN_UNSUPPORTED; |
| 1564 | } |
| 1565 | // |
| 1566 | // Convert big-endian to little-endian. |
| 1567 | // |
| 1568 | LocalGuid.Data3 = SwapBytes16 (LocalGuid.Data3); |
| 1569 | String += 2 * sizeof (LocalGuid.Data3) + 1; |
| 1570 | |
| 1571 | // |
no test coverage detected