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

Function DeserializeFloatOverPointer

Library/OcGuardLib/Ubsan.c:1409–1446  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1407
1408#ifndef _KERNEL
1409static void
1410DeserializeFloatOverPointer(char *pBuffer, size_t zBUfferLength, struct CTypeDescriptor *pType, unsigned long *pNumber)
1411{
1412 double D;
1413#ifdef __HAVE_LONG_DOUBLE
1414 long double LD;
1415#endif
1416
1417 ASSERT(pBuffer);
1418 ASSERT(zBUfferLength > 0);
1419 ASSERT(pType);
1420 ASSERT(pNumber);
1421 /*
1422 * This function handles 64-bit number over a pointer on 32-bit CPUs.
1423 */
1424 ASSERT((sizeof(*pNumber) * CHAR_BIT < WIDTH_64) || (zDeserializeTypeWidth(pType) >= WIDTH_64));
1425 ASSERT(sizeof(D) == sizeof(uint64_t));
1426#ifdef __HAVE_LONG_DOUBLE
1427 ASSERT(sizeof(LD) > sizeof(uint64_t));
1428#endif
1429
1430 switch (zDeserializeTypeWidth(pType)) {
1431#ifdef __HAVE_LONG_DOUBLE
1432 case WIDTH_128:
1433 /* FALLTHROUGH */
1434 case WIDTH_96:
1435 /* FALLTHROUGH */
1436 case WIDTH_80:
1437 memcpy(&LD, pNumber, sizeof(long double));
1438 snprintf(pBuffer, zBUfferLength, "%Lg", LD);
1439 break;
1440#endif
1441 case WIDTH_64:
1442 memcpy(&D, pNumber, sizeof(double));
1443 snprintf(pBuffer, zBUfferLength, "%g", D);
1444 break;
1445 }
1446}
1447
1448static void
1449DeserializeFloatInlined(char *pBuffer, size_t zBUfferLength, struct CTypeDescriptor *pType, unsigned long ulNumber)

Callers 1

DeserializeNumberFloatFunction · 0.85

Calls 3

zDeserializeTypeWidthFunction · 0.85
snprintfFunction · 0.85
memcpyFunction · 0.50

Tested by

no test coverage detected