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// 24VA_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**/ 62UINTN 63EFIAPI 64UnicodeVSPrint ( 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**/ 110UINTN 111EFIAPI 112UnicodeBSPrint ( 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**/ 158UINTN 159EFIAPI 160UnicodeSPrint ( 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**/ 209UINTN 210EFIAPI 211UnicodeVSPrintAsciiFormat ( 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**/ 255UINTN 256EFIAPI 257UnicodeBSPrintAsciiFormat ( 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**/ 302UINTN 303EFIAPI 304UnicodeSPrintAsciiFormat ( 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**/ 361UINTN 362EFIAPI 363UnicodeValueToString ( 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**/ 406UINTN 407EFIAPI 408AsciiVSPrint ( 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**/ 450UINTN 451EFIAPI 452AsciiBSPrint ( 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**/ 495UINTN 496EFIAPI 497AsciiSPrint ( 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**/ 546UINTN 547EFIAPI 548AsciiVSPrintUnicodeFormat ( 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**/ 592UINTN 593EFIAPI 594AsciiBSPrintUnicodeFormat ( 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**/ 639UINTN 640EFIAPI 641AsciiSPrintUnicodeFormat ( 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**/ 698UINTN 699EFIAPI 700AsciiValueToString ( 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**/ 723UINTN 724EFIAPI 725SPrintLength ( 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**/ 747UINTN 748EFIAPI 749SPrintLengthAsciiFormat ( 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} 757