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