MCPcopy Create free account
hub / github.com/CloverHackyColor/CloverBootloader / StrToGuid

Function StrToGuid

MdePkg/Library/BaseLib/SafeString.c:1514–1590  ·  view source on GitHub ↗

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],

Source from the content-addressed store, hash-verified

1512
1513**/
1514RETURN_STATUS
1515EFIAPI
1516StrToGuid (
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 //

Callers 11

ConvertFromTextVendorFunction · 0.50
DevPathFromTextHDFunction · 0.50
DevPathFromTextMediaFunction · 0.50
DevPathFromTextFvFunction · 0.50
DevPathFromTextFvFileFunction · 0.50
DevPathFromTextRamDiskFunction · 0.50
ShellCommandRunSetVarFunction · 0.50
ShellCommandRunDmpStoreFunction · 0.50
UefiMainFunction · 0.50

Calls 4

CopyGuidFunction · 0.85
StrHexToBytesFunction · 0.70
SwapBytes32Function · 0.70
SwapBytes16Function · 0.70

Tested by

no test coverage detected