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