]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/BasePrintLib/PrintLib.c
MdePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdePkg / Library / BasePrintLib / PrintLib.c
CommitLineData
e1f414b6 1/** @file\r
eceb3a4c 2 Base Print Library instance implementation.\r
e1f414b6 3\r
9095d37b 4 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
19388d29 5 Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
9344f092 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
e1f414b6 7\r
e1f414b6 8**/\r
9\r
e1f414b6 10#include "PrintLibInternal.h"\r
11\r
ebd04fc2 12//\r
b5a6c9d9 13// Declare a VA_LIST global variable that is used in calls to BasePrintLibSPrintMarker()\r
9095d37b
LG
14// when the BASE_LIST parameter is valid and the VA_LIST parameter is ignored.\r
15// A NULL VA_LIST can not be passed into BasePrintLibSPrintMarker() because some\r
ebd04fc2 16// compilers define VA_LIST to be a structure.\r
17//\r
b5a6c9d9 18VA_LIST gNullVaList;\r
ebd04fc2 19\r
e1f414b6 20#define ASSERT_UNICODE_BUFFER(Buffer) ASSERT ((((UINTN) (Buffer)) & 0x01) == 0)\r
21\r
e1f414b6 22/**\r
9b002aa4
HW
23 Produces a Null-terminated Unicode string in an output buffer based on\r
24 a Null-terminated Unicode format string and a VA_LIST argument list.\r
25\r
26 This function is similar as vsnprintf_s defined in C11.\r
27\r
e1f414b6 28 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer\r
9b002aa4
HW
29 and BufferSize.\r
30 The Unicode string is produced by parsing the format string specified by FormatString.\r
31 Arguments are pulled from the variable argument list specified by Marker based on the\r
32 contents of the format string.\r
e1f414b6 33 The number of Unicode characters in the produced output buffer is returned not including\r
34 the Null-terminator.\r
e1f414b6 35\r
9b002aa4
HW
36 If StartOfBuffer is not aligned on a 16-bit boundary, then ASSERT().\r
37 If FormatString is not aligned on a 16-bit boundary, then ASSERT().\r
38\r
39 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT(). Also, the output buffer is\r
40 unmodified and 0 is returned.\r
41 If BufferSize > 1 and FormatString is NULL, then ASSERT(). Also, the output buffer is\r
42 unmodified and 0 is returned.\r
43 If PcdMaximumUnicodeStringLength is not zero, and BufferSize >\r
44 (PcdMaximumUnicodeStringLength * sizeof (CHAR16) + 1), then ASSERT(). Also, the output\r
45 buffer is unmodified and 0 is returned.\r
46 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than\r
e1f414b6 47 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then\r
9b002aa4 48 ASSERT(). Also, the output buffer is unmodified and 0 is returned.\r
e1f414b6 49\r
9b002aa4
HW
50 If BufferSize is 0 or 1, then the output buffer is unmodified and 0 is returned.\r
51\r
52 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated\r
e1f414b6 53 Unicode string.\r
54 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.\r
2fc59a00 55 @param FormatString A Null-terminated Unicode format string.\r
e1f414b6 56 @param Marker VA_LIST marker for the variable argument list.\r
9b002aa4 57\r
e1f414b6 58 @return The number of Unicode characters in the produced output buffer not including the\r
59 Null-terminator.\r
60\r
61**/\r
62UINTN\r
63EFIAPI\r
64UnicodeVSPrint (\r
65 OUT CHAR16 *StartOfBuffer,\r
66 IN UINTN BufferSize,\r
67 IN CONST CHAR16 *FormatString,\r
68 IN VA_LIST Marker\r
69 )\r
70{\r
2075236e 71 ASSERT_UNICODE_BUFFER (StartOfBuffer);\r
72 ASSERT_UNICODE_BUFFER (FormatString);\r
73 return BasePrintLibSPrintMarker ((CHAR8 *)StartOfBuffer, BufferSize >> 1, FORMAT_UNICODE | OUTPUT_UNICODE, (CHAR8 *)FormatString, Marker, NULL);\r
74}\r
75\r
76/**\r
9b002aa4
HW
77 Produces a Null-terminated Unicode string in an output buffer based on\r
78 a Null-terminated Unicode format string and a BASE_LIST argument list.\r
79\r
2075236e 80 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer\r
9b002aa4
HW
81 and BufferSize.\r
82 The Unicode string is produced by parsing the format string specified by FormatString.\r
83 Arguments are pulled from the variable argument list specified by Marker based on the\r
84 contents of the format string.\r
2075236e 85 The number of Unicode characters in the produced output buffer is returned not including\r
86 the Null-terminator.\r
2075236e 87\r
9b002aa4
HW
88 If StartOfBuffer is not aligned on a 16-bit boundary, then ASSERT().\r
89 If FormatString is not aligned on a 16-bit boundary, then ASSERT().\r
90\r
91 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT(). Also, the output buffer is\r
92 unmodified and 0 is returned.\r
93 If BufferSize > 1 and FormatString is NULL, then ASSERT(). Also, the output buffer is\r
94 unmodified and 0 is returned.\r
95 If PcdMaximumUnicodeStringLength is not zero, and BufferSize >\r
96 (PcdMaximumUnicodeStringLength * sizeof (CHAR16) + 1), then ASSERT(). Also, the output\r
97 buffer is unmodified and 0 is returned.\r
98 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than\r
2075236e 99 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then\r
9b002aa4
HW
100 ASSERT(). Also, the output buffer is unmodified and 0 is returned.\r
101\r
102 If BufferSize is 0 or 1, then the output buffer is unmodified and 0 is returned.\r
2075236e 103\r
9b002aa4 104 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated\r
2075236e 105 Unicode string.\r
106 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.\r
2fc59a00 107 @param FormatString A Null-terminated Unicode format string.\r
2075236e 108 @param Marker BASE_LIST marker for the variable argument list.\r
9b002aa4 109\r
2075236e 110 @return The number of Unicode characters in the produced output buffer not including the\r
111 Null-terminator.\r
112\r
113**/\r
114UINTN\r
115EFIAPI\r
116UnicodeBSPrint (\r
117 OUT CHAR16 *StartOfBuffer,\r
118 IN UINTN BufferSize,\r
119 IN CONST CHAR16 *FormatString,\r
120 IN BASE_LIST Marker\r
121 )\r
122{\r
123 ASSERT_UNICODE_BUFFER (StartOfBuffer);\r
124 ASSERT_UNICODE_BUFFER (FormatString);\r
ebd04fc2 125 return BasePrintLibSPrintMarker ((CHAR8 *)StartOfBuffer, BufferSize >> 1, FORMAT_UNICODE | OUTPUT_UNICODE, (CHAR8 *)FormatString, gNullVaList, Marker);\r
e1f414b6 126}\r
127\r
128/**\r
9b002aa4 129 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated\r
e1f414b6 130 Unicode format string and variable argument list.\r
9b002aa4
HW
131\r
132 This function is similar as snprintf_s defined in C11.\r
133\r
e1f414b6 134 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer\r
135 and BufferSize.\r
136 The Unicode string is produced by parsing the format string specified by FormatString.\r
137 Arguments are pulled from the variable argument list based on the contents of the format string.\r
138 The number of Unicode characters in the produced output buffer is returned not including\r
139 the Null-terminator.\r
e1f414b6 140\r
9b002aa4
HW
141 If StartOfBuffer is not aligned on a 16-bit boundary, then ASSERT().\r
142 If FormatString is not aligned on a 16-bit boundary, then ASSERT().\r
143\r
144 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT(). Also, the output buffer is\r
145 unmodified and 0 is returned.\r
146 If BufferSize > 1 and FormatString is NULL, then ASSERT(). Also, the output buffer is\r
147 unmodified and 0 is returned.\r
148 If PcdMaximumUnicodeStringLength is not zero, and BufferSize >\r
149 (PcdMaximumUnicodeStringLength * sizeof (CHAR16) + 1), then ASSERT(). Also, the output\r
150 buffer is unmodified and 0 is returned.\r
151 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than\r
e1f414b6 152 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then\r
9b002aa4
HW
153 ASSERT(). Also, the output buffer is unmodified and 0 is returned.\r
154\r
155 If BufferSize is 0 or 1, then the output buffer is unmodified and 0 is returned.\r
e1f414b6 156\r
9b002aa4 157 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated\r
e1f414b6 158 Unicode string.\r
159 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.\r
2fc59a00 160 @param FormatString A Null-terminated Unicode format string.\r
9b002aa4 161 @param ... Variable argument list whose contents are accessed based on the\r
285010e7 162 format string specified by FormatString.\r
9b002aa4 163\r
e1f414b6 164 @return The number of Unicode characters in the produced output buffer not including the\r
165 Null-terminator.\r
166\r
167**/\r
168UINTN\r
169EFIAPI\r
170UnicodeSPrint (\r
171 OUT CHAR16 *StartOfBuffer,\r
172 IN UINTN BufferSize,\r
173 IN CONST CHAR16 *FormatString,\r
174 ...\r
175 )\r
176{\r
177 VA_LIST Marker;\r
3bbe68a3 178 UINTN NumberOfPrinted;\r
e1f414b6 179\r
180 VA_START (Marker, FormatString);\r
3bbe68a3 181 NumberOfPrinted = UnicodeVSPrint (StartOfBuffer, BufferSize, FormatString, Marker);\r
182 VA_END (Marker);\r
183 return NumberOfPrinted;\r
e1f414b6 184}\r
185\r
186/**\r
187 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated\r
9b002aa4
HW
188 ASCII format string and a VA_LIST argument list.\r
189\r
190 This function is similar as vsnprintf_s defined in C11.\r
191\r
e1f414b6 192 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer\r
193 and BufferSize.\r
194 The Unicode string is produced by parsing the format string specified by FormatString.\r
9b002aa4 195 Arguments are pulled from the variable argument list specified by Marker based on the\r
e1f414b6 196 contents of the format string.\r
197 The number of Unicode characters in the produced output buffer is returned not including\r
198 the Null-terminator.\r
e1f414b6 199\r
9b002aa4
HW
200 If StartOfBuffer is not aligned on a 16-bit boundary, then ASSERT().\r
201\r
202 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT(). Also, the output buffer is\r
203 unmodified and 0 is returned.\r
204 If BufferSize > 1 and FormatString is NULL, then ASSERT(). Also, the output buffer is\r
205 unmodified and 0 is returned.\r
206 If PcdMaximumUnicodeStringLength is not zero, and BufferSize >\r
207 (PcdMaximumUnicodeStringLength * sizeof (CHAR16) + 1), then ASSERT(). Also, the output\r
208 buffer is unmodified and 0 is returned.\r
e1f414b6 209 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than\r
9b002aa4
HW
210 PcdMaximumAsciiStringLength Ascii characters not including the Null-terminator, then\r
211 ASSERT(). Also, the output buffer is unmodified and 0 is returned.\r
e1f414b6 212\r
9b002aa4
HW
213 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.\r
214\r
215 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated\r
e1f414b6 216 Unicode string.\r
217 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.\r
2fc59a00 218 @param FormatString A Null-terminated ASCII format string.\r
e1f414b6 219 @param Marker VA_LIST marker for the variable argument list.\r
9b002aa4 220\r
e1f414b6 221 @return The number of Unicode characters in the produced output buffer not including the\r
222 Null-terminator.\r
223\r
224**/\r
225UINTN\r
226EFIAPI\r
227UnicodeVSPrintAsciiFormat (\r
228 OUT CHAR16 *StartOfBuffer,\r
229 IN UINTN BufferSize,\r
230 IN CONST CHAR8 *FormatString,\r
231 IN VA_LIST Marker\r
232 )\r
233{\r
2075236e 234 ASSERT_UNICODE_BUFFER (StartOfBuffer);\r
235 return BasePrintLibSPrintMarker ((CHAR8 *)StartOfBuffer, BufferSize >> 1, OUTPUT_UNICODE, FormatString, Marker, NULL);\r
236}\r
237\r
238/**\r
239 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated\r
9b002aa4
HW
240 ASCII format string and a BASE_LIST argument list.\r
241\r
2075236e 242 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer\r
243 and BufferSize.\r
244 The Unicode string is produced by parsing the format string specified by FormatString.\r
9b002aa4 245 Arguments are pulled from the variable argument list specified by Marker based on the\r
2075236e 246 contents of the format string.\r
247 The number of Unicode characters in the produced output buffer is returned not including\r
248 the Null-terminator.\r
2075236e 249\r
9b002aa4
HW
250 If StartOfBuffer is not aligned on a 16-bit boundary, then ASSERT().\r
251\r
252 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT(). Also, the output buffer is\r
253 unmodified and 0 is returned.\r
254 If BufferSize > 1 and FormatString is NULL, then ASSERT(). Also, the output buffer is\r
255 unmodified and 0 is returned.\r
256 If PcdMaximumUnicodeStringLength is not zero, and BufferSize >\r
257 (PcdMaximumUnicodeStringLength * sizeof (CHAR16) + 1), then ASSERT(). Also, the output\r
258 buffer is unmodified and 0 is returned.\r
2075236e 259 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than\r
9b002aa4
HW
260 PcdMaximumAsciiStringLength Ascii characters not including the Null-terminator, then\r
261 ASSERT(). Also, the output buffer is unmodified and 0 is returned.\r
262\r
263 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.\r
2075236e 264\r
9b002aa4 265 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated\r
2075236e 266 Unicode string.\r
267 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.\r
2fc59a00 268 @param FormatString A Null-terminated ASCII format string.\r
2075236e 269 @param Marker BASE_LIST marker for the variable argument list.\r
9b002aa4 270\r
2075236e 271 @return The number of Unicode characters in the produced output buffer not including the\r
272 Null-terminator.\r
273\r
274**/\r
275UINTN\r
276EFIAPI\r
277UnicodeBSPrintAsciiFormat (\r
278 OUT CHAR16 *StartOfBuffer,\r
279 IN UINTN BufferSize,\r
280 IN CONST CHAR8 *FormatString,\r
281 IN BASE_LIST Marker\r
282 )\r
283{\r
284 ASSERT_UNICODE_BUFFER (StartOfBuffer);\r
ebd04fc2 285 return BasePrintLibSPrintMarker ((CHAR8 *)StartOfBuffer, BufferSize >> 1, OUTPUT_UNICODE, FormatString, gNullVaList, Marker);\r
e1f414b6 286}\r
287\r
288/**\r
9b002aa4 289 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated\r
e1f414b6 290 ASCII format string and variable argument list.\r
9b002aa4
HW
291\r
292 This function is similar as snprintf_s defined in C11.\r
293\r
e1f414b6 294 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer\r
295 and BufferSize.\r
296 The Unicode string is produced by parsing the format string specified by FormatString.\r
9b002aa4 297 Arguments are pulled from the variable argument list based on the contents of the\r
e1f414b6 298 format string.\r
299 The number of Unicode characters in the produced output buffer is returned not including\r
300 the Null-terminator.\r
e1f414b6 301\r
9b002aa4
HW
302 If StartOfBuffer is not aligned on a 16-bit boundary, then ASSERT().\r
303\r
304 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT(). Also, the output buffer is\r
305 unmodified and 0 is returned.\r
306 If BufferSize > 1 and FormatString is NULL, then ASSERT(). Also, the output buffer is\r
307 unmodified and 0 is returned.\r
308 If PcdMaximumUnicodeStringLength is not zero, and BufferSize >\r
309 (PcdMaximumUnicodeStringLength * sizeof (CHAR16) + 1), then ASSERT(). Also, the output\r
310 buffer is unmodified and 0 is returned.\r
e1f414b6 311 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than\r
9b002aa4
HW
312 PcdMaximumAsciiStringLength Ascii characters not including the Null-terminator, then\r
313 ASSERT(). Also, the output buffer is unmodified and 0 is returned.\r
314\r
315 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.\r
e1f414b6 316\r
9b002aa4 317 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated\r
e1f414b6 318 Unicode string.\r
319 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.\r
2fc59a00 320 @param FormatString A Null-terminated ASCII format string.\r
9b002aa4 321 @param ... Variable argument list whose contents are accessed based on the\r
285010e7 322 format string specified by FormatString.\r
9b002aa4 323\r
e1f414b6 324 @return The number of Unicode characters in the produced output buffer not including the\r
325 Null-terminator.\r
326\r
327**/\r
328UINTN\r
329EFIAPI\r
330UnicodeSPrintAsciiFormat (\r
331 OUT CHAR16 *StartOfBuffer,\r
332 IN UINTN BufferSize,\r
333 IN CONST CHAR8 *FormatString,\r
334 ...\r
335 )\r
336{\r
337 VA_LIST Marker;\r
3bbe68a3 338 UINTN NumberOfPrinted;\r
e1f414b6 339\r
340 VA_START (Marker, FormatString);\r
3bbe68a3 341 NumberOfPrinted = UnicodeVSPrintAsciiFormat (StartOfBuffer, BufferSize, FormatString, Marker);\r
342 VA_END (Marker);\r
343 return NumberOfPrinted;\r
e1f414b6 344}\r
345\r
342fdb6e
HW
346#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
347\r
e1f414b6 348/**\r
342fdb6e
HW
349 [ATTENTION] This function is deprecated for security reason.\r
350\r
e1f414b6 351 Converts a decimal value to a Null-terminated Unicode string.\r
9095d37b
LG
352\r
353 Converts the decimal number specified by Value to a Null-terminated Unicode\r
354 string specified by Buffer containing at most Width characters. No padding of spaces\r
e1f414b6 355 is ever performed. If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.\r
356 The number of Unicode characters in Buffer is returned not including the Null-terminator.\r
357 If the conversion contains more than Width characters, then only the first\r
9095d37b 358 Width characters are returned, and the total number of characters\r
e1f414b6 359 required to perform the conversion is returned.\r
9095d37b
LG
360 Additional conversion parameters are specified in Flags.\r
361\r
e1f414b6 362 The Flags bit LEFT_JUSTIFY is always ignored.\r
363 All conversions are left justified in Buffer.\r
364 If Width is 0, PREFIX_ZERO is ignored in Flags.\r
365 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas\r
366 are inserted every 3rd digit starting from the right.\r
9095d37b 367 If RADIX_HEX is set in Flags, then the output buffer will be\r
e1f414b6 368 formatted in hexadecimal format.\r
df8d0595 369 If Value is < 0 and RADIX_HEX is not set in Flags, then the fist character in Buffer is a '-'.\r
9095d37b
LG
370 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored,\r
371 then Buffer is padded with '0' characters so the combination of the optional '-'\r
e1f414b6 372 sign character, '0' characters, digit characters for Value, and the Null-terminator\r
373 add up to Width characters.\r
df8d0595 374 If both COMMA_TYPE and RADIX_HEX are set in Flags, then ASSERT().\r
e1f414b6 375 If Buffer is NULL, then ASSERT().\r
376 If Buffer is not aligned on a 16-bit boundary, then ASSERT().\r
377 If unsupported bits are set in Flags, then ASSERT().\r
df8d0595 378 If both COMMA_TYPE and RADIX_HEX are set in Flags, then ASSERT().\r
e1f414b6 379 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()\r
380\r
2fc59a00 381 @param Buffer The pointer to the output buffer for the produced Null-terminated\r
e1f414b6 382 Unicode string.\r
383 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.\r
384 @param Value The 64-bit signed value to convert to a string.\r
385 @param Width The maximum number of Unicode characters to place in Buffer, not including\r
386 the Null-terminator.\r
9095d37b 387\r
e1f414b6 388 @return The number of Unicode characters in Buffer not including the Null-terminator.\r
389\r
390**/\r
391UINTN\r
392EFIAPI\r
393UnicodeValueToString (\r
394 IN OUT CHAR16 *Buffer,\r
395 IN UINTN Flags,\r
396 IN INT64 Value,\r
397 IN UINTN Width\r
398 )\r
399{\r
400 ASSERT_UNICODE_BUFFER(Buffer);\r
401 return BasePrintLibConvertValueToString ((CHAR8 *)Buffer, Flags, Value, Width, 2);\r
402}\r
403\r
342fdb6e
HW
404#endif\r
405\r
51f0ceb4
HW
406/**\r
407 Converts a decimal value to a Null-terminated Unicode string.\r
408\r
409 Converts the decimal number specified by Value to a Null-terminated Unicode\r
410 string specified by Buffer containing at most Width characters. No padding of\r
411 spaces is ever performed. If Width is 0 then a width of\r
412 MAXIMUM_VALUE_CHARACTERS is assumed. If the conversion contains more than\r
413 Width characters, then only the first Width characters are placed in Buffer.\r
414 Additional conversion parameters are specified in Flags.\r
415\r
416 The Flags bit LEFT_JUSTIFY is always ignored.\r
417 All conversions are left justified in Buffer.\r
418 If Width is 0, PREFIX_ZERO is ignored in Flags.\r
419 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and\r
420 commas are inserted every 3rd digit starting from the right.\r
421 If RADIX_HEX is set in Flags, then the output buffer will be formatted in\r
422 hexadecimal format.\r
423 If Value is < 0 and RADIX_HEX is not set in Flags, then the fist character in\r
424 Buffer is a '-'.\r
425 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored, then\r
426 Buffer is padded with '0' characters so the combination of the optional '-'\r
427 sign character, '0' characters, digit characters for Value, and the\r
428 Null-terminator add up to Width characters.\r
429\r
430 If Buffer is not aligned on a 16-bit boundary, then ASSERT().\r
431 If an error would be returned, then the function will also ASSERT().\r
432\r
433 @param Buffer The pointer to the output buffer for the produced\r
434 Null-terminated Unicode string.\r
435 @param BufferSize The size of Buffer in bytes, including the\r
436 Null-terminator.\r
437 @param Flags The bitmask of flags that specify left justification,\r
438 zero pad, and commas.\r
439 @param Value The 64-bit signed value to convert to a string.\r
440 @param Width The maximum number of Unicode characters to place in\r
441 Buffer, not including the Null-terminator.\r
442\r
443 @retval RETURN_SUCCESS The decimal value is converted.\r
444 @retval RETURN_BUFFER_TOO_SMALL If BufferSize cannot hold the converted\r
445 value.\r
446 @retval RETURN_INVALID_PARAMETER If Buffer is NULL.\r
447 If PcdMaximumUnicodeStringLength is not\r
448 zero, and BufferSize is greater than\r
449 (PcdMaximumUnicodeStringLength *\r
450 sizeof (CHAR16) + 1).\r
451 If unsupported bits are set in Flags.\r
452 If both COMMA_TYPE and RADIX_HEX are set in\r
453 Flags.\r
454 If Width >= MAXIMUM_VALUE_CHARACTERS.\r
455\r
456**/\r
457RETURN_STATUS\r
458EFIAPI\r
459UnicodeValueToStringS (\r
460 IN OUT CHAR16 *Buffer,\r
461 IN UINTN BufferSize,\r
462 IN UINTN Flags,\r
463 IN INT64 Value,\r
464 IN UINTN Width\r
465 )\r
466{\r
467 ASSERT_UNICODE_BUFFER(Buffer);\r
468 return BasePrintLibConvertValueToStringS ((CHAR8 *)Buffer, BufferSize, Flags, Value, Width, 2);\r
469}\r
470\r
e1f414b6 471/**\r
472 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated\r
473 ASCII format string and a VA_LIST argument list.\r
9b002aa4
HW
474\r
475 This function is similar as vsnprintf_s defined in C11.\r
476\r
e1f414b6 477 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer\r
478 and BufferSize.\r
479 The ASCII string is produced by parsing the format string specified by FormatString.\r
9b002aa4 480 Arguments are pulled from the variable argument list specified by Marker based on\r
e1f414b6 481 the contents of the format string.\r
482 The number of ASCII characters in the produced output buffer is returned not including\r
483 the Null-terminator.\r
e1f414b6 484\r
9b002aa4
HW
485 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT(). Also, the output buffer is\r
486 unmodified and 0 is returned.\r
487 If BufferSize > 0 and FormatString is NULL, then ASSERT(). Also, the output buffer is\r
488 unmodified and 0 is returned.\r
489 If PcdMaximumAsciiStringLength is not zero, and BufferSize >\r
490 (PcdMaximumAsciiStringLength * sizeof (CHAR8)), then ASSERT(). Also, the output buffer\r
491 is unmodified and 0 is returned.\r
e1f414b6 492 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than\r
9b002aa4
HW
493 PcdMaximumAsciiStringLength Ascii characters not including the Null-terminator, then\r
494 ASSERT(). Also, the output buffer is unmodified and 0 is returned.\r
495\r
496 If BufferSize is 0, then no output buffer is produced and 0 is returned.\r
e1f414b6 497\r
9b002aa4 498 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated\r
e1f414b6 499 ASCII string.\r
500 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.\r
2fc59a00 501 @param FormatString A Null-terminated ASCII format string.\r
e1f414b6 502 @param Marker VA_LIST marker for the variable argument list.\r
9b002aa4 503\r
e1f414b6 504 @return The number of ASCII characters in the produced output buffer not including the\r
505 Null-terminator.\r
506\r
507**/\r
508UINTN\r
509EFIAPI\r
510AsciiVSPrint (\r
511 OUT CHAR8 *StartOfBuffer,\r
512 IN UINTN BufferSize,\r
513 IN CONST CHAR8 *FormatString,\r
514 IN VA_LIST Marker\r
515 )\r
516{\r
2075236e 517 return BasePrintLibSPrintMarker (StartOfBuffer, BufferSize, 0, FormatString, Marker, NULL);\r
518}\r
519\r
520/**\r
521 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated\r
522 ASCII format string and a BASE_LIST argument list.\r
9b002aa4 523\r
2075236e 524 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer\r
525 and BufferSize.\r
526 The ASCII string is produced by parsing the format string specified by FormatString.\r
9b002aa4 527 Arguments are pulled from the variable argument list specified by Marker based on\r
2075236e 528 the contents of the format string.\r
529 The number of ASCII characters in the produced output buffer is returned not including\r
530 the Null-terminator.\r
2075236e 531\r
9b002aa4
HW
532 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT(). Also, the output buffer is\r
533 unmodified and 0 is returned.\r
534 If BufferSize > 0 and FormatString is NULL, then ASSERT(). Also, the output buffer is\r
535 unmodified and 0 is returned.\r
536 If PcdMaximumAsciiStringLength is not zero, and BufferSize >\r
537 (PcdMaximumAsciiStringLength * sizeof (CHAR8)), then ASSERT(). Also, the output buffer\r
538 is unmodified and 0 is returned.\r
2075236e 539 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than\r
9b002aa4
HW
540 PcdMaximumAsciiStringLength Ascii characters not including the Null-terminator, then\r
541 ASSERT(). Also, the output buffer is unmodified and 0 is returned.\r
542\r
543 If BufferSize is 0, then no output buffer is produced and 0 is returned.\r
2075236e 544\r
9b002aa4 545 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated\r
2075236e 546 ASCII string.\r
547 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.\r
2fc59a00 548 @param FormatString A Null-terminated ASCII format string.\r
2075236e 549 @param Marker BASE_LIST marker for the variable argument list.\r
9b002aa4 550\r
2075236e 551 @return The number of ASCII characters in the produced output buffer not including the\r
552 Null-terminator.\r
553\r
554**/\r
555UINTN\r
556EFIAPI\r
557AsciiBSPrint (\r
558 OUT CHAR8 *StartOfBuffer,\r
559 IN UINTN BufferSize,\r
560 IN CONST CHAR8 *FormatString,\r
561 IN BASE_LIST Marker\r
562 )\r
563{\r
ebd04fc2 564 return BasePrintLibSPrintMarker (StartOfBuffer, BufferSize, 0, FormatString, gNullVaList, Marker);\r
e1f414b6 565}\r
566\r
567/**\r
568 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated\r
569 ASCII format string and variable argument list.\r
9b002aa4
HW
570\r
571 This function is similar as snprintf_s defined in C11.\r
572\r
e1f414b6 573 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer\r
574 and BufferSize.\r
575 The ASCII string is produced by parsing the format string specified by FormatString.\r
9b002aa4 576 Arguments are pulled from the variable argument list based on the contents of the\r
e1f414b6 577 format string.\r
578 The number of ASCII characters in the produced output buffer is returned not including\r
579 the Null-terminator.\r
e1f414b6 580\r
9b002aa4
HW
581 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT(). Also, the output buffer is\r
582 unmodified and 0 is returned.\r
583 If BufferSize > 0 and FormatString is NULL, then ASSERT(). Also, the output buffer is\r
584 unmodified and 0 is returned.\r
585 If PcdMaximumAsciiStringLength is not zero, and BufferSize >\r
586 (PcdMaximumAsciiStringLength * sizeof (CHAR8)), then ASSERT(). Also, the output buffer\r
587 is unmodified and 0 is returned.\r
e1f414b6 588 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than\r
9b002aa4
HW
589 PcdMaximumAsciiStringLength Ascii characters not including the Null-terminator, then\r
590 ASSERT(). Also, the output buffer is unmodified and 0 is returned.\r
e1f414b6 591\r
9b002aa4
HW
592 If BufferSize is 0, then no output buffer is produced and 0 is returned.\r
593\r
594 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated\r
e1f414b6 595 ASCII string.\r
596 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.\r
2fc59a00 597 @param FormatString A Null-terminated ASCII format string.\r
9b002aa4 598 @param ... Variable argument list whose contents are accessed based on the\r
285010e7 599 format string specified by FormatString.\r
9b002aa4 600\r
e1f414b6 601 @return The number of ASCII characters in the produced output buffer not including the\r
602 Null-terminator.\r
603\r
604**/\r
605UINTN\r
606EFIAPI\r
607AsciiSPrint (\r
608 OUT CHAR8 *StartOfBuffer,\r
609 IN UINTN BufferSize,\r
610 IN CONST CHAR8 *FormatString,\r
611 ...\r
612 )\r
613{\r
614 VA_LIST Marker;\r
3bbe68a3 615 UINTN NumberOfPrinted;\r
e1f414b6 616\r
617 VA_START (Marker, FormatString);\r
3bbe68a3 618 NumberOfPrinted = AsciiVSPrint (StartOfBuffer, BufferSize, FormatString, Marker);\r
619 VA_END (Marker);\r
620 return NumberOfPrinted;\r
e1f414b6 621}\r
622\r
623/**\r
624 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated\r
eceb3a4c 625 Unicode format string and a VA_LIST argument list.\r
9b002aa4
HW
626\r
627 This function is similar as vsnprintf_s defined in C11.\r
628\r
e1f414b6 629 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer\r
630 and BufferSize.\r
631 The ASCII string is produced by parsing the format string specified by FormatString.\r
9b002aa4 632 Arguments are pulled from the variable argument list specified by Marker based on\r
e1f414b6 633 the contents of the format string.\r
634 The number of ASCII characters in the produced output buffer is returned not including\r
635 the Null-terminator.\r
e1f414b6 636\r
9b002aa4
HW
637 If FormatString is not aligned on a 16-bit boundary, then ASSERT().\r
638\r
639 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT(). Also, the output buffer is\r
640 unmodified and 0 is returned.\r
641 If BufferSize > 0 and FormatString is NULL, then ASSERT(). Also, the output buffer is\r
642 unmodified and 0 is returned.\r
643 If PcdMaximumAsciiStringLength is not zero, and BufferSize >\r
644 (PcdMaximumAsciiStringLength * sizeof (CHAR8)), then ASSERT(). Also, the output buffer\r
645 is unmodified and 0 is returned.\r
e1f414b6 646 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than\r
647 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then\r
9b002aa4
HW
648 ASSERT(). Also, the output buffer is unmodified and 0 is returned.\r
649\r
650 If BufferSize is 0, then no output buffer is produced and 0 is returned.\r
e1f414b6 651\r
9b002aa4 652 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated\r
e1f414b6 653 ASCII string.\r
654 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.\r
2fc59a00 655 @param FormatString A Null-terminated Unicode format string.\r
e1f414b6 656 @param Marker VA_LIST marker for the variable argument list.\r
9b002aa4 657\r
e1f414b6 658 @return The number of ASCII characters in the produced output buffer not including the\r
659 Null-terminator.\r
660\r
661**/\r
662UINTN\r
663EFIAPI\r
664AsciiVSPrintUnicodeFormat (\r
665 OUT CHAR8 *StartOfBuffer,\r
666 IN UINTN BufferSize,\r
667 IN CONST CHAR16 *FormatString,\r
668 IN VA_LIST Marker\r
669 )\r
670{\r
671 ASSERT_UNICODE_BUFFER (FormatString);\r
2075236e 672 return BasePrintLibSPrintMarker (StartOfBuffer, BufferSize, FORMAT_UNICODE, (CHAR8 *)FormatString, Marker, NULL);\r
673}\r
674\r
675/**\r
676 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated\r
677 Unicode format string and a BASE_LIST argument list.\r
9b002aa4 678\r
2075236e 679 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer\r
680 and BufferSize.\r
681 The ASCII string is produced by parsing the format string specified by FormatString.\r
9b002aa4 682 Arguments are pulled from the variable argument list specified by Marker based on\r
2075236e 683 the contents of the format string.\r
684 The number of ASCII characters in the produced output buffer is returned not including\r
685 the Null-terminator.\r
2075236e 686\r
9b002aa4
HW
687 If FormatString is not aligned on a 16-bit boundary, then ASSERT().\r
688\r
689 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT(). Also, the output buffer is\r
690 unmodified and 0 is returned.\r
691 If BufferSize > 0 and FormatString is NULL, then ASSERT(). Also, the output buffer is\r
692 unmodified and 0 is returned.\r
693 If PcdMaximumAsciiStringLength is not zero, and BufferSize >\r
694 (PcdMaximumAsciiStringLength * sizeof (CHAR8)), then ASSERT(). Also, the output buffer\r
695 is unmodified and 0 is returned.\r
2075236e 696 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than\r
697 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then\r
9b002aa4 698 ASSERT(). Also, the output buffer is unmodified and 0 is returned.\r
2075236e 699\r
9b002aa4
HW
700 If BufferSize is 0, then no output buffer is produced and 0 is returned.\r
701\r
702 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated\r
2075236e 703 ASCII string.\r
704 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.\r
2fc59a00 705 @param FormatString A Null-terminated Unicode format string.\r
2075236e 706 @param Marker BASE_LIST marker for the variable argument list.\r
9b002aa4 707\r
2075236e 708 @return The number of ASCII characters in the produced output buffer not including the\r
709 Null-terminator.\r
710\r
711**/\r
712UINTN\r
713EFIAPI\r
714AsciiBSPrintUnicodeFormat (\r
715 OUT CHAR8 *StartOfBuffer,\r
716 IN UINTN BufferSize,\r
717 IN CONST CHAR16 *FormatString,\r
718 IN BASE_LIST Marker\r
719 )\r
720{\r
721 ASSERT_UNICODE_BUFFER (FormatString);\r
ebd04fc2 722 return BasePrintLibSPrintMarker (StartOfBuffer, BufferSize, FORMAT_UNICODE, (CHAR8 *)FormatString, gNullVaList, Marker);\r
e1f414b6 723}\r
724\r
725/**\r
726 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated\r
eceb3a4c 727 Unicode format string and variable argument list.\r
9b002aa4
HW
728\r
729 This function is similar as snprintf_s defined in C11.\r
730\r
e1f414b6 731 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer\r
732 and BufferSize.\r
733 The ASCII string is produced by parsing the format string specified by FormatString.\r
9b002aa4 734 Arguments are pulled from the variable argument list based on the contents of the\r
e1f414b6 735 format string.\r
736 The number of ASCII characters in the produced output buffer is returned not including\r
737 the Null-terminator.\r
e1f414b6 738\r
9b002aa4
HW
739 If FormatString is not aligned on a 16-bit boundary, then ASSERT().\r
740\r
741 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT(). Also, the output buffer is\r
742 unmodified and 0 is returned.\r
743 If BufferSize > 0 and FormatString is NULL, then ASSERT(). Also, the output buffer is\r
744 unmodified and 0 is returned.\r
745 If PcdMaximumAsciiStringLength is not zero, and BufferSize >\r
746 (PcdMaximumAsciiStringLength * sizeof (CHAR8)), then ASSERT(). Also, the output buffer\r
747 is unmodified and 0 is returned.\r
e1f414b6 748 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than\r
749 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then\r
9b002aa4
HW
750 ASSERT(). Also, the output buffer is unmodified and 0 is returned.\r
751\r
752 If BufferSize is 0, then no output buffer is produced and 0 is returned.\r
e1f414b6 753\r
9b002aa4 754 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated\r
e1f414b6 755 ASCII string.\r
756 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.\r
2fc59a00 757 @param FormatString A Null-terminated Unicode format string.\r
9b002aa4 758 @param ... Variable argument list whose contents are accessed based on the\r
285010e7 759 format string specified by FormatString.\r
9b002aa4 760\r
e1f414b6 761 @return The number of ASCII characters in the produced output buffer not including the\r
762 Null-terminator.\r
763\r
764**/\r
765UINTN\r
766EFIAPI\r
767AsciiSPrintUnicodeFormat (\r
768 OUT CHAR8 *StartOfBuffer,\r
769 IN UINTN BufferSize,\r
770 IN CONST CHAR16 *FormatString,\r
771 ...\r
772 )\r
773{\r
774 VA_LIST Marker;\r
3bbe68a3 775 UINTN NumberOfPrinted;\r
e1f414b6 776\r
777 VA_START (Marker, FormatString);\r
3bbe68a3 778 NumberOfPrinted = AsciiVSPrintUnicodeFormat (StartOfBuffer, BufferSize, FormatString, Marker);\r
779 VA_END (Marker);\r
780 return NumberOfPrinted;\r
e1f414b6 781}\r
782\r
783\r
342fdb6e
HW
784#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
785\r
e1f414b6 786/**\r
342fdb6e
HW
787 [ATTENTION] This function is deprecated for security reason.\r
788\r
e1f414b6 789 Converts a decimal value to a Null-terminated ASCII string.\r
9095d37b
LG
790\r
791 Converts the decimal number specified by Value to a Null-terminated ASCII string\r
792 specified by Buffer containing at most Width characters. No padding of spaces\r
e1f414b6 793 is ever performed.\r
794 If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.\r
795 The number of ASCII characters in Buffer is returned not including the Null-terminator.\r
796 If the conversion contains more than Width characters, then only the first Width\r
797 characters are returned, and the total number of characters required to perform\r
798 the conversion is returned.\r
9095d37b 799 Additional conversion parameters are specified in Flags.\r
e1f414b6 800 The Flags bit LEFT_JUSTIFY is always ignored.\r
801 All conversions are left justified in Buffer.\r
802 If Width is 0, PREFIX_ZERO is ignored in Flags.\r
803 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas\r
804 are inserted every 3rd digit starting from the right.\r
9095d37b 805 If RADIX_HEX is set in Flags, then the output buffer will be\r
e1f414b6 806 formatted in hexadecimal format.\r
df8d0595 807 If Value is < 0 and RADIX_HEX is not set in Flags, then the fist character in Buffer is a '-'.\r
9095d37b
LG
808 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored,\r
809 then Buffer is padded with '0' characters so the combination of the optional '-'\r
e1f414b6 810 sign character, '0' characters, digit characters for Value, and the Null-terminator\r
811 add up to Width characters.\r
9095d37b 812\r
e1f414b6 813 If Buffer is NULL, then ASSERT().\r
814 If unsupported bits are set in Flags, then ASSERT().\r
df8d0595 815 If both COMMA_TYPE and RADIX_HEX are set in Flags, then ASSERT().\r
e1f414b6 816 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()\r
817\r
2fc59a00 818 @param Buffer The pointer to the output buffer for the produced Null-terminated\r
e1f414b6 819 ASCII string.\r
820 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.\r
821 @param Value The 64-bit signed value to convert to a string.\r
822 @param Width The maximum number of ASCII characters to place in Buffer, not including\r
823 the Null-terminator.\r
9095d37b 824\r
e1f414b6 825 @return The number of ASCII characters in Buffer not including the Null-terminator.\r
826\r
827**/\r
828UINTN\r
829EFIAPI\r
830AsciiValueToString (\r
58125b7a 831 OUT CHAR8 *Buffer,\r
832 IN UINTN Flags,\r
833 IN INT64 Value,\r
834 IN UINTN Width\r
e1f414b6 835 )\r
836{\r
837 return BasePrintLibConvertValueToString (Buffer, Flags, Value, Width, 1);\r
838}\r
f405c067 839\r
342fdb6e
HW
840#endif\r
841\r
51f0ceb4
HW
842/**\r
843 Converts a decimal value to a Null-terminated Ascii string.\r
844\r
845 Converts the decimal number specified by Value to a Null-terminated Ascii\r
846 string specified by Buffer containing at most Width characters. No padding of\r
847 spaces is ever performed. If Width is 0 then a width of\r
848 MAXIMUM_VALUE_CHARACTERS is assumed. If the conversion contains more than\r
849 Width characters, then only the first Width characters are placed in Buffer.\r
850 Additional conversion parameters are specified in Flags.\r
851\r
852 The Flags bit LEFT_JUSTIFY is always ignored.\r
853 All conversions are left justified in Buffer.\r
854 If Width is 0, PREFIX_ZERO is ignored in Flags.\r
855 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and\r
856 commas are inserted every 3rd digit starting from the right.\r
857 If RADIX_HEX is set in Flags, then the output buffer will be formatted in\r
858 hexadecimal format.\r
859 If Value is < 0 and RADIX_HEX is not set in Flags, then the fist character in\r
860 Buffer is a '-'.\r
861 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored, then\r
862 Buffer is padded with '0' characters so the combination of the optional '-'\r
863 sign character, '0' characters, digit characters for Value, and the\r
864 Null-terminator add up to Width characters.\r
865\r
5923ef92 866 If an error would be returned, then the function will ASSERT().\r
51f0ceb4
HW
867\r
868 @param Buffer The pointer to the output buffer for the produced\r
869 Null-terminated Ascii string.\r
870 @param BufferSize The size of Buffer in bytes, including the\r
871 Null-terminator.\r
872 @param Flags The bitmask of flags that specify left justification,\r
873 zero pad, and commas.\r
874 @param Value The 64-bit signed value to convert to a string.\r
875 @param Width The maximum number of Ascii characters to place in\r
876 Buffer, not including the Null-terminator.\r
877\r
878 @retval RETURN_SUCCESS The decimal value is converted.\r
879 @retval RETURN_BUFFER_TOO_SMALL If BufferSize cannot hold the converted\r
880 value.\r
881 @retval RETURN_INVALID_PARAMETER If Buffer is NULL.\r
882 If PcdMaximumAsciiStringLength is not\r
883 zero, and BufferSize is greater than\r
884 PcdMaximumAsciiStringLength.\r
885 If unsupported bits are set in Flags.\r
886 If both COMMA_TYPE and RADIX_HEX are set in\r
887 Flags.\r
888 If Width >= MAXIMUM_VALUE_CHARACTERS.\r
889\r
890**/\r
891RETURN_STATUS\r
892EFIAPI\r
893AsciiValueToStringS (\r
894 IN OUT CHAR8 *Buffer,\r
895 IN UINTN BufferSize,\r
896 IN UINTN Flags,\r
897 IN INT64 Value,\r
898 IN UINTN Width\r
899 )\r
900{\r
901 return BasePrintLibConvertValueToStringS (Buffer, BufferSize, Flags, Value, Width, 1);\r
902}\r
903\r
f405c067 904/**\r
9095d37b 905 Returns the number of characters that would be produced by if the formatted\r
f405c067 906 output were produced not including the Null-terminator.\r
907\r
f405c067 908 If FormatString is not aligned on a 16-bit boundary, then ASSERT().\r
909\r
9b002aa4
HW
910 If FormatString is NULL, then ASSERT() and 0 is returned.\r
911 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more\r
912 than PcdMaximumUnicodeStringLength Unicode characters not including the\r
913 Null-terminator, then ASSERT() and 0 is returned.\r
914\r
f405c067 915 @param[in] FormatString A Null-terminated Unicode format string.\r
916 @param[in] Marker VA_LIST marker for the variable argument list.\r
917\r
9095d37b 918 @return The number of characters that would be produced, not including the\r
f405c067 919 Null-terminator.\r
920**/\r
921UINTN\r
922EFIAPI\r
923SPrintLength (\r
924 IN CONST CHAR16 *FormatString,\r
925 IN VA_LIST Marker\r
926 )\r
927{\r
f405c067 928 ASSERT_UNICODE_BUFFER (FormatString);\r
929 return BasePrintLibSPrintMarker (NULL, 0, FORMAT_UNICODE | OUTPUT_UNICODE | COUNT_ONLY_NO_PRINT, (CHAR8 *)FormatString, Marker, NULL);\r
930}\r
931\r
932/**\r
9095d37b 933 Returns the number of characters that would be produced by if the formatted\r
f405c067 934 output were produced not including the Null-terminator.\r
935\r
9b002aa4
HW
936 If FormatString is NULL, then ASSERT() and 0 is returned.\r
937 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more\r
938 than PcdMaximumAsciiStringLength Ascii characters not including the\r
939 Null-terminator, then ASSERT() and 0 is returned.\r
f405c067 940\r
941 @param[in] FormatString A Null-terminated ASCII format string.\r
942 @param[in] Marker VA_LIST marker for the variable argument list.\r
943\r
9095d37b 944 @return The number of characters that would be produced, not including the\r
f405c067 945 Null-terminator.\r
946**/\r
947UINTN\r
948EFIAPI\r
949SPrintLengthAsciiFormat (\r
950 IN CONST CHAR8 *FormatString,\r
951 IN VA_LIST Marker\r
952 )\r
953{\r
f405c067 954 return BasePrintLibSPrintMarker (NULL, 0, OUTPUT_UNICODE | COUNT_ONLY_NO_PRINT, (CHAR8 *)FormatString, Marker, NULL);\r
955}\r