24#define ASSERT_UNICODE_BUFFER(Buffer) ASSERT ((((UINTN) (Buffer)) & 0x01) == 0)
29#define RSIZE_MAX (PcdGet32 (PcdMaximumUnicodeStringLength))
30#define ASCII_RSIZE_MAX (PcdGet32 (PcdMaximumAsciiStringLength))
32#define SAFE_PRINT_CONSTRAINT_CHECK(Expression, RetVal) \
34 ASSERT (Expression); \
35 if (!(Expression)) { \
63 Status = SystemTable->BootServices->LocateProtocol (
64 &gEfiPrint2SProtocolGuid,
66 (VOID **)&mPrint2SProtocol
69 ASSERT (mPrint2SProtocol !=
NULL);
90 IN BOOLEAN AsciiFormat,
98 UINTN BytesPerFormatCharacter;
100 UINTN FormatCharacter;
104 ASSERT (BaseListMarker !=
NULL);
105 SAFE_PRINT_CONSTRAINT_CHECK ((Format !=
NULL),
FALSE);
107 BaseListStart = BaseListMarker;
110 if (ASCII_RSIZE_MAX != 0) {
111 SAFE_PRINT_CONSTRAINT_CHECK ((
AsciiStrnLenS (Format, ASCII_RSIZE_MAX + 1) <= ASCII_RSIZE_MAX),
FALSE);
114 BytesPerFormatCharacter = 1;
117 if (RSIZE_MAX != 0) {
118 SAFE_PRINT_CONSTRAINT_CHECK ((
StrnLenS ((CHAR16 *)Format, RSIZE_MAX + 1) <= RSIZE_MAX),
FALSE);
121 BytesPerFormatCharacter = 2;
128 FormatCharacter = ((*Format & 0xff) | ((BytesPerFormatCharacter == 1) ? 0 : (*(Format + 1) << 8))) & FormatMask;
130 while (FormatCharacter != 0) {
131 if (FormatCharacter ==
'%') {
137 for (Done =
FALSE; !Done; ) {
141 Format += BytesPerFormatCharacter;
146 FormatCharacter = ((*Format & 0xff) | ((BytesPerFormatCharacter == 1) ? 0 : (*(Format + 1) << 8))) & FormatMask;
148 switch (FormatCharacter) {
177 Format -= BytesPerFormatCharacter;
190 switch (FormatCharacter) {
192 if (
sizeof (VOID *) > 4) {
212 BASE_ARG (BaseListMarker, VOID *) =
VA_ARG (VaListMarker, VOID *);
218 BASE_ARG (BaseListMarker, RETURN_STATUS) =
VA_ARG (VaListMarker, RETURN_STATUS);
226 if (((
UINTN)BaseListMarker - (
UINTN)BaseListStart) > Size) {
227 DEBUG ((DEBUG_ERROR,
"The input variable argument list is too long. Please consider breaking into multiple print calls.\n"));
234 Format += BytesPerFormatCharacter;
239 FormatCharacter = ((*Format & 0xff) | ((BytesPerFormatCharacter == 1) ? 0 : (*(Format + 1) << 8))) & FormatMask;
288 OUT CHAR16 *StartOfBuffer,
294 UINT64 BaseListMarker[256 /
sizeof (UINT64)];
297 ASSERT_UNICODE_BUFFER (StartOfBuffer);
298 ASSERT_UNICODE_BUFFER (FormatString);
302 (CHAR8 *)FormatString,
305 sizeof (BaseListMarker) - 8
355 OUT CHAR16 *StartOfBuffer,
361 ASSERT_UNICODE_BUFFER (StartOfBuffer);
362 ASSERT_UNICODE_BUFFER (FormatString);
363 return mPrint2SProtocol->UnicodeBSPrint (StartOfBuffer, BufferSize, FormatString, Marker);
409 OUT CHAR16 *StartOfBuffer,
416 UINTN NumberOfPrinted;
419 NumberOfPrinted =
UnicodeVSPrint (StartOfBuffer, BufferSize, FormatString, Marker);
421 return NumberOfPrinted;
466 OUT CHAR16 *StartOfBuffer,
472 UINT64 BaseListMarker[256 /
sizeof (UINT64)];
475 ASSERT_UNICODE_BUFFER (StartOfBuffer);
482 sizeof (BaseListMarker) - 8
531 OUT CHAR16 *StartOfBuffer,
537 ASSERT_UNICODE_BUFFER (StartOfBuffer);
538 return mPrint2SProtocol->UnicodeBSPrintAsciiFormat (StartOfBuffer, BufferSize, FormatString, Marker);
584 OUT CHAR16 *StartOfBuffer,
591 UINTN NumberOfPrinted;
596 return NumberOfPrinted;
653 IN OUT CHAR16 *Buffer,
660 return mPrint2SProtocol->UnicodeValueToStringS (Buffer, BufferSize, Flags, Value, Width);
703 OUT CHAR8 *StartOfBuffer,
709 UINT64 BaseListMarker[256 /
sizeof (UINT64)];
717 sizeof (BaseListMarker) - 8
764 OUT CHAR8 *StartOfBuffer,
770 return mPrint2SProtocol->AsciiBSPrint (StartOfBuffer, BufferSize, FormatString, Marker);
814 OUT CHAR8 *StartOfBuffer,
821 UINTN NumberOfPrinted;
824 NumberOfPrinted =
AsciiVSPrint (StartOfBuffer, BufferSize, FormatString, Marker);
826 return NumberOfPrinted;
871 OUT CHAR8 *StartOfBuffer,
877 UINT64 BaseListMarker[256 /
sizeof (UINT64)];
880 ASSERT_UNICODE_BUFFER (FormatString);
884 (CHAR8 *)FormatString,
887 sizeof (BaseListMarker) - 8
936 OUT CHAR8 *StartOfBuffer,
942 ASSERT_UNICODE_BUFFER (FormatString);
943 return mPrint2SProtocol->AsciiBSPrintUnicodeFormat (StartOfBuffer, BufferSize, FormatString, Marker);
989 OUT CHAR8 *StartOfBuffer,
996 UINTN NumberOfPrinted;
1001 return NumberOfPrinted;
1056 IN OUT CHAR8 *Buffer,
1063 return mPrint2SProtocol->AsciiValueToStringS (Buffer, BufferSize, Flags, Value, Width);
1066#define PREFIX_SIGN BIT1
1067#define PREFIX_BLANK BIT2
1068#define LONG_TYPE BIT4
1069#define OUTPUT_UNICODE BIT6
1070#define FORMAT_UNICODE BIT8
1071#define PAD_TO_WIDTH BIT9
1072#define ARGUMENT_UNICODE BIT10
1073#define PRECISION BIT11
1074#define ARGUMENT_REVERSED BIT12
1075#define COUNT_ONLY_NO_PRINT BIT13
1076#define UNSIGNED_TYPE BIT14
1095GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 mHexStr[] = {
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F' };
1111 IN OUT CHAR8 *Buffer,
1124 *(++Buffer) = mHexStr[Remainder];
1125 }
while (Value != 0);
1194 OUT CHAR8 *StartOfBuffer,
1202 UINTN NumberOfPrinted;
1207 return NumberOfPrinted;
1210#define WARNING_STATUS_NUMBER 5
1211#define ERROR_STATUS_NUMBER 33
1215 "Warning Unknown Glyph",
1216 "Warning Delete Failure",
1217 "Warning Write Failure",
1218 "Warning Buffer Too Small",
1219 "Warning Stale Data",
1221 "Invalid Parameter",
1244 "Incompatible Version",
1245 "Security Violation",
1274 IN CHAR8 *EndBuffer,
1282 for (Index = 0; Index < Length && Buffer < EndBuffer; Index++) {
1283 *Buffer = (CHAR8)Character;
1284 if (Increment != 1) {
1285 *(Buffer + 1) = (CHAR8)(Character >> 8);
1288 Buffer += Increment;
1332 CHAR8 *OriginalBuffer;
1335 UINT32 BytesPerOutputCharacter;
1336 UINTN BytesPerFormatCharacter;
1338 UINTN FormatCharacter;
1342 CONST CHAR8 *ArgumentString;
1348 INTN BytesPerArgumentCharacter;
1349 UINTN ArgumentCharacter;
1357 RETURN_STATUS Status;
1361 UINTN LengthToReturn;
1373 if ((BufferSize > 0) && ((Flags & COUNT_ONLY_NO_PRINT) == 0)) {
1374 SAFE_PRINT_CONSTRAINT_CHECK ((Buffer !=
NULL), 0);
1381 if ((BufferSize > 0) || ((Flags & COUNT_ONLY_NO_PRINT) != 0)) {
1382 SAFE_PRINT_CONSTRAINT_CHECK ((Format !=
NULL), 0);
1389 if ((Flags & OUTPUT_UNICODE) != 0) {
1390 if (RSIZE_MAX != 0) {
1391 SAFE_PRINT_CONSTRAINT_CHECK ((BufferSize <= RSIZE_MAX), 0);
1394 BytesPerOutputCharacter = 2;
1396 if (ASCII_RSIZE_MAX != 0) {
1397 SAFE_PRINT_CONSTRAINT_CHECK ((BufferSize <= ASCII_RSIZE_MAX), 0);
1400 BytesPerOutputCharacter = 1;
1407 if ((Flags & FORMAT_UNICODE) != 0) {
1408 if (RSIZE_MAX != 0) {
1409 SAFE_PRINT_CONSTRAINT_CHECK ((
StrnLenS ((CHAR16 *)Format, RSIZE_MAX + 1) <= RSIZE_MAX), 0);
1412 BytesPerFormatCharacter = 2;
1413 FormatMask = 0xffff;
1415 if (ASCII_RSIZE_MAX != 0) {
1416 SAFE_PRINT_CONSTRAINT_CHECK ((
AsciiStrnLenS (Format, ASCII_RSIZE_MAX + 1) <= ASCII_RSIZE_MAX), 0);
1419 BytesPerFormatCharacter = 1;
1423 if ((Flags & COUNT_ONLY_NO_PRINT) != 0) {
1424 if (BufferSize == 0) {
1431 if (BufferSize == 0) {
1438 OriginalBuffer =
NULL;
1443 if (Buffer !=
NULL) {
1445 OriginalBuffer = Buffer;
1450 EndBuffer = Buffer + BufferSize * BytesPerOutputCharacter;
1456 FormatCharacter = ((*Format & 0xff) | ((BytesPerFormatCharacter == 1) ? 0 : (*(Format + 1) << 8))) & FormatMask;
1461 while (FormatCharacter != 0) {
1462 if ((Buffer !=
NULL) && (Buffer >= EndBuffer)) {
1469 Flags &= (
UINTN)(OUTPUT_UNICODE | FORMAT_UNICODE | COUNT_ONLY_NO_PRINT);
1482 switch (FormatCharacter) {
1487 for (Done =
FALSE; !Done; ) {
1488 Format += BytesPerFormatCharacter;
1489 FormatCharacter = ((*Format & 0xff) | ((BytesPerFormatCharacter == 1) ? 0 : (*(Format + 1) << 8))) & FormatMask;
1490 switch (FormatCharacter) {
1498 Flags |= PREFIX_SIGN;
1501 Flags |= PREFIX_BLANK;
1504 Flags |= COMMA_TYPE;
1511 if ((Flags & PRECISION) == 0) {
1512 Flags |= PAD_TO_WIDTH;
1513 if (BaseListMarker ==
NULL) {
1519 if (BaseListMarker ==
NULL) {
1528 if ((Flags & PRECISION) == 0) {
1529 Flags |= PREFIX_ZERO;
1541 for (Count = 0; ((FormatCharacter >=
'0') && (FormatCharacter <=
'9')); ) {
1542 Count = (Count * 10) + FormatCharacter -
'0';
1543 Format += BytesPerFormatCharacter;
1544 FormatCharacter = ((*Format & 0xff) | ((BytesPerFormatCharacter == 1) ? 0 : (*(Format + 1) << 8))) & FormatMask;
1547 Format -= BytesPerFormatCharacter;
1548 if ((Flags & PRECISION) == 0) {
1549 Flags |= PAD_TO_WIDTH;
1562 Format -= BytesPerFormatCharacter;
1576 switch (FormatCharacter) {
1581 Flags &= ~((
UINTN)(PREFIX_BLANK | PREFIX_SIGN | PREFIX_ZERO | LONG_TYPE));
1582 if (
sizeof (VOID *) > 4) {
1590 Flags |= PREFIX_ZERO;
1600 if ((Flags & RADIX_HEX) == 0) {
1601 Flags &= ~((
UINTN)(PREFIX_SIGN));
1602 Flags |= UNSIGNED_TYPE;
1609 if ((Flags & LONG_TYPE) == 0) {
1618 if (BaseListMarker ==
NULL) {
1619 Value =
VA_ARG (VaListMarker,
int);
1621 Value =
BASE_ARG (BaseListMarker,
int);
1624 if (BaseListMarker ==
NULL) {
1625 Value =
VA_ARG (VaListMarker, INT64);
1627 Value =
BASE_ARG (BaseListMarker, INT64);
1631 if ((Flags & PREFIX_BLANK) != 0) {
1635 if ((Flags & PREFIX_SIGN) != 0) {
1639 if ((Flags & COMMA_TYPE) != 0) {
1643 if ((Flags & RADIX_HEX) == 0) {
1646 Flags &= ~((
UINTN)PREFIX_ZERO);
1650 if ((Value < 0) && ((Flags & UNSIGNED_TYPE) == 0)) {
1651 Flags |= PREFIX_SIGN;
1654 }
else if (((Flags & UNSIGNED_TYPE) != 0) && ((Flags & LONG_TYPE) == 0)) {
1663 Value = (
unsigned int)Value;
1668 if (((Flags & LONG_TYPE) == 0) && (Value < 0)) {
1677 Value = (
unsigned int)Value;
1685 if ((Value == 0) && (Precision == 0)) {
1689 ArgumentString = (CHAR8 *)ValueBuffer + Count;
1693 Digits = 3 - Digits;
1696 if (Comma && (Count != 0)) {
1697 Count += ((Count - 1) / 3);
1705 Flags |= ARGUMENT_REVERSED;
1707 if ((Flags & PREFIX_ZERO) != 0) {
1709 if ((Flags & PAD_TO_WIDTH) != 0) {
1710 if ((Flags & PRECISION) == 0) {
1721 Flags |= ARGUMENT_UNICODE;
1726 if (BaseListMarker ==
NULL) {
1727 ArgumentString =
VA_ARG (VaListMarker, CHAR8 *);
1729 ArgumentString =
BASE_ARG (BaseListMarker, CHAR8 *);
1732 if (ArgumentString ==
NULL) {
1733 Flags &= (~(
UINTN)ARGUMENT_UNICODE);
1734 ArgumentString =
"<null string>";
1740 if ((Flags & PRECISION) == 0) {
1747 if (BaseListMarker ==
NULL) {
1748 Character =
VA_ARG (VaListMarker,
UINTN) & 0xffff;
1753 ArgumentString = (CHAR8 *)&Character;
1754 Flags |= ARGUMENT_UNICODE;
1758 if (BaseListMarker ==
NULL) {
1764 if (TmpGuid ==
NULL) {
1765 ArgumentString =
"<null guid>";
1774 "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
1787 ArgumentString = ValueBuffer;
1793 if (BaseListMarker ==
NULL) {
1799 if (TmpTime ==
NULL) {
1800 ArgumentString =
"<null time>";
1806 "%02d/%02d/%04d %02d:%02d",
1813 ArgumentString = ValueBuffer;
1819 if (BaseListMarker ==
NULL) {
1820 Status =
VA_ARG (VaListMarker, RETURN_STATUS);
1822 Status =
BASE_ARG (BaseListMarker, RETURN_STATUS);
1825 ArgumentString = ValueBuffer;
1830 Index = Status & ~MAX_BIT;
1831 if ((Index > 0) && (Index <= ERROR_STATUS_NUMBER)) {
1832 ArgumentString = mStatusString[Index + WARNING_STATUS_NUMBER];
1836 if (Index <= WARNING_STATUS_NUMBER) {
1837 ArgumentString = mStatusString[Index];
1841 if (ArgumentString == ValueBuffer) {
1848 Format += BytesPerFormatCharacter;
1849 FormatCharacter = ((*Format & 0xff) | ((BytesPerFormatCharacter == 1) ? 0 : (*(Format + 1) << 8))) & FormatMask;
1850 if (FormatCharacter ==
'\n') {
1854 ArgumentString =
"\r\n";
1859 ArgumentString =
"\r";
1860 Format -= BytesPerFormatCharacter;
1869 ArgumentString =
"\r\n";
1870 Format += BytesPerFormatCharacter;
1871 FormatCharacter = ((*Format & 0xff) | ((BytesPerFormatCharacter == 1) ? 0 : (*(Format + 1) << 8))) & FormatMask;
1872 if (FormatCharacter !=
'\r') {
1873 Format -= BytesPerFormatCharacter;
1883 ArgumentString = (CHAR8 *)&FormatCharacter;
1884 Flags |= ARGUMENT_UNICODE;
1891 Format += BytesPerFormatCharacter;
1892 FormatCharacter = ((*Format & 0xff) | ((BytesPerFormatCharacter == 1) ? 0 : (*(Format + 1) << 8))) & FormatMask;
1893 if (FormatCharacter ==
'\n') {
1897 ArgumentString =
"\r\n";
1902 ArgumentString =
"\r";
1903 Format -= BytesPerFormatCharacter;
1912 ArgumentString =
"\r\n";
1913 Format += BytesPerFormatCharacter;
1914 FormatCharacter = ((*Format & 0xff) | ((BytesPerFormatCharacter == 1) ? 0 : (*(Format + 1) << 8))) & FormatMask;
1915 if (FormatCharacter !=
'\r') {
1916 Format -= BytesPerFormatCharacter;
1922 ArgumentString = (CHAR8 *)&FormatCharacter;
1923 Flags |= ARGUMENT_UNICODE;
1930 if ((Flags & ARGUMENT_UNICODE) != 0) {
1931 ArgumentMask = 0xffff;
1932 BytesPerArgumentCharacter = 2;
1934 ArgumentMask = 0xff;
1935 BytesPerArgumentCharacter = 1;
1938 if ((Flags & ARGUMENT_REVERSED) != 0) {
1939 BytesPerArgumentCharacter = -BytesPerArgumentCharacter;
1946 (ArgumentString[Count * BytesPerArgumentCharacter] !=
'\0' ||
1947 (BytesPerArgumentCharacter > 1 &&
1948 ArgumentString[Count * BytesPerArgumentCharacter + 1] !=
'\0')) &&
1949 (Count < Precision || ((Flags & PRECISION) == 0));
1952 ArgumentCharacter = ((ArgumentString[Count * BytesPerArgumentCharacter] & 0xff) | ((ArgumentString[Count * BytesPerArgumentCharacter + 1]) << 8)) & ArgumentMask;
1953 if (ArgumentCharacter == 0) {
1959 if (Precision < Count) {
1966 if ((Flags & (PAD_TO_WIDTH |
LEFT_JUSTIFY)) == (PAD_TO_WIDTH)) {
1967 LengthToReturn += ((Width - Precision) * BytesPerOutputCharacter);
1968 if (((Flags & COUNT_ONLY_NO_PRINT) == 0) && (Buffer !=
NULL)) {
1975 LengthToReturn += (1 * BytesPerOutputCharacter);
1976 if (((Flags & COUNT_ONLY_NO_PRINT) == 0) && (Buffer !=
NULL)) {
1981 LengthToReturn += ((Precision - Count) * BytesPerOutputCharacter);
1982 if (((Flags & COUNT_ONLY_NO_PRINT) == 0) && (Buffer !=
NULL)) {
1986 LengthToReturn += ((Precision - Count) * BytesPerOutputCharacter);
1987 if (((Flags & COUNT_ONLY_NO_PRINT) == 0) && (Buffer !=
NULL)) {
1992 LengthToReturn += (1 * BytesPerOutputCharacter);
1993 if (((Flags & COUNT_ONLY_NO_PRINT) == 0) && (Buffer !=
NULL)) {
2010 while (Index < Count &&
2011 (ArgumentString[0] !=
'\0' ||
2012 (BytesPerArgumentCharacter > 1 && ArgumentString[1] !=
'\0')))
2014 ArgumentCharacter = ((*ArgumentString & 0xff) | (((UINT8)*(ArgumentString + 1)) << 8)) & ArgumentMask;
2016 LengthToReturn += (1 * BytesPerOutputCharacter);
2017 if (((Flags & COUNT_ONLY_NO_PRINT) == 0) && (Buffer !=
NULL)) {
2021 ArgumentString += BytesPerArgumentCharacter;
2028 if (Index < Count) {
2029 LengthToReturn += (1 * BytesPerOutputCharacter);
2030 if (((Flags & COUNT_ONLY_NO_PRINT) == 0) && (Buffer !=
NULL)) {
2042 LengthToReturn += ((Width - Precision) * BytesPerOutputCharacter);
2043 if (((Flags & COUNT_ONLY_NO_PRINT) == 0) && (Buffer !=
NULL)) {
2051 Format += BytesPerFormatCharacter;
2056 FormatCharacter = ((*Format & 0xff) | ((BytesPerFormatCharacter == 1) ? 0 : (*(Format + 1) << 8))) & FormatMask;
2059 if ((Flags & COUNT_ONLY_NO_PRINT) != 0) {
2060 return (LengthToReturn / BytesPerOutputCharacter);
2063 ASSERT (Buffer !=
NULL);
2069 return ((Buffer - OriginalBuffer) / BytesPerOutputCharacter);
2092 IN CONST CHAR16 *FormatString,
2096 ASSERT_UNICODE_BUFFER (FormatString);
UINTN EFIAPI AsciiStrnLenS(IN CONST CHAR8 *String, IN UINTN MaxSize)
UINT16 EFIAPI ReadUnaligned16(IN CONST UINT16 *Buffer)
UINTN EFIAPI StrnLenS(IN CONST CHAR16 *String, IN UINTN MaxSize)
UINT64 EFIAPI DivU64x32Remainder(IN UINT64 Dividend, IN UINT32 Divisor, OUT UINT32 *Remainder OPTIONAL)
UINT32 EFIAPI ReadUnaligned32(IN CONST UINT32 *Buffer)
RETURN_STATUS EFIAPI UnicodeValueToStringS(IN OUT CHAR16 *Buffer, IN UINTN BufferSize, IN UINTN Flags, IN INT64 Value, IN UINTN Width)
UINTN EFIAPI UnicodeVSPrint(OUT CHAR16 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR16 *FormatString, IN VA_LIST Marker)
UINTN EFIAPI UnicodeBSPrintAsciiFormat(OUT CHAR16 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR8 *FormatString, IN BASE_LIST Marker)
UINTN EFIAPI AsciiBSPrintUnicodeFormat(OUT CHAR8 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR16 *FormatString, IN BASE_LIST Marker)
UINTN InternalPrintLibSPrintMarker(OUT CHAR8 *Buffer, IN UINTN BufferSize, IN UINTN Flags, IN CONST CHAR8 *Format, IN VA_LIST VaListMarker OPTIONAL, IN BASE_LIST BaseListMarker OPTIONAL)
UINTN EFIAPI AsciiSPrintUnicodeFormat(OUT CHAR8 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR16 *FormatString,...)
BOOLEAN DxePrintLibPrint2ProtocolVaListToBaseList(IN BOOLEAN AsciiFormat, IN CONST CHAR8 *Format, IN VA_LIST VaListMarker, OUT BASE_LIST BaseListMarker, IN UINTN Size)
UINTN EFIAPI SPrintLengthAsciiFormat(IN CONST CHAR8 *FormatString, IN VA_LIST Marker)
UINTN EFIAPI UnicodeSPrint(OUT CHAR16 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR16 *FormatString,...)
CHAR8 * InternalPrintLibFillBuffer(OUT CHAR8 *Buffer, IN CHAR8 *EndBuffer, IN INTN Length, IN UINTN Character, IN INTN Increment)
UINTN EFIAPI UnicodeVSPrintAsciiFormat(OUT CHAR16 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR8 *FormatString, IN VA_LIST Marker)
CHAR8 * InternalPrintLibValueToString(IN OUT CHAR8 *Buffer, IN INT64 Value, IN UINTN Radix)
EFI_STATUS EFIAPI PrintLibConstructor(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
UINTN EFIAPI AsciiVSPrintUnicodeFormat(OUT CHAR8 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR16 *FormatString, IN VA_LIST Marker)
UINTN EFIAPI UnicodeSPrintAsciiFormat(OUT CHAR16 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR8 *FormatString,...)
UINTN EFIAPI SPrintLength(IN CONST CHAR16 *FormatString, IN VA_LIST Marker)
UINTN EFIAPI UnicodeBSPrint(OUT CHAR16 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR16 *FormatString, IN BASE_LIST Marker)
UINTN EFIAPI AsciiBSPrint(OUT CHAR8 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR8 *FormatString, IN BASE_LIST Marker)
UINTN EFIAPI AsciiVSPrint(OUT CHAR8 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR8 *FormatString, IN VA_LIST Marker)
UINTN EFIAPI InternalPrintLibSPrint(OUT CHAR8 *StartOfBuffer, IN UINTN BufferSize, IN UINTN Flags, IN CONST CHAR8 *FormatString,...)
RETURN_STATUS EFIAPI AsciiValueToStringS(IN OUT CHAR8 *Buffer, IN UINTN BufferSize, IN UINTN Flags, IN INT64 Value, IN UINTN Width)
UINTN EFIAPI AsciiSPrint(OUT CHAR8 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR8 *FormatString,...)
#define RETURN_ERROR(StatusCode)
#define VA_ARG(Marker, TYPE)
#define BASE_ARG(Marker, TYPE)
#define VA_START(Marker, Parameter)
#define GLOBAL_REMOVE_IF_UNREFERENCED
#define ASSERT_EFI_ERROR(StatusParameter)
#define DEBUG(Expression)
#define MAXIMUM_VALUE_CHARACTERS