]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BasePrintLib/PrintLibInternal.h
MdePkg/BasePrintLib: Add safe print functions [A|U]ValueToStringS
[mirror_edk2.git] / MdePkg / Library / BasePrintLib / PrintLibInternal.h
index 4482cc266c4c8bd35de4cdaaad7f7e63a1138ec1..052e699574c646c6d3b1d97406de90f4a0fb22e4 100644 (file)
-/** @file
-  Print Library Internal Functions.
-
-  Copyright (c) 2006 - 2007, Intel Corporation
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-  Module Name:  PrintLibInternal.h
-
-**/
-
-#ifndef __PRINT_LIB_INTERNAL_H
-#define __PRINT_LIB_INTERNAL_H
-
-//
-// Print primitives
-//
-//#define LEFT_JUSTIFY      0x01
-#define PREFIX_SIGN       0x02
-#define PREFIX_BLANK      0x04
-//#define COMMA_TYPE        0x08
-#define LONG_TYPE         0x10
-//#define PREFIX_ZERO       0x20
-#define OUTPUT_UNICODE    0x40
-//#define RADIX_HEX         0x80
-#define FORMAT_UNICODE    0x100
-#define PAD_TO_WIDTH      0x200
-#define ARGUMENT_UNICODE  0x400
-#define PRECISION         0x800
-#define ARGUMENT_REVERSED 0x1000
-
-//
-// Record date and time information
-//
-typedef struct {
-  UINT16  Year;
-  UINT8   Month;
-  UINT8   Day;
-  UINT8   Hour;
-  UINT8   Minute;
-  UINT8   Second;
-  UINT8   Pad1;
-  UINT32  Nanosecond;
-  INT16   TimeZone;
-  UINT8   Daylight;
-  UINT8   Pad2;
-} TIME;
-
-/**
-  Worker function that produces a Null-terminated string in an output buffer 
-  based on a Null-terminated format string and a VA_LIST argument list.
-
-  VSPrint function to process format and place the results in Buffer. Since a 
-  VA_LIST is used this rountine allows the nesting of Vararg routines. Thus 
-  this is the main print working routine.
-
-  @param  Buffer      Character buffer to print the results of the parsing
-                      of Format into.
-  @param  BufferSize  Maximum number of characters to put into buffer.
-  @param  Flags       Intial flags value.
-                      Can only have FORMAT_UNICODE and OUTPUT_UNICODE set.
-  @param  Format      Null-terminated format string.
-  @param  Marker      Vararg list consumed by processing Format.
-
-  @return Number of characters printed not including the Null-terminator.
-
-**/
-UINTN
-BasePrintLibVSPrint (
-  OUT CHAR8        *Buffer,
-  IN  UINTN        BufferSize,
-  IN  UINTN        Flags,
-  IN  CONST CHAR8  *Format,
-  IN  VA_LIST      Marker
-  );
-
-/**
-  Worker function that produces a Null-terminated string in an output buffer 
-  based on a Null-terminated format string and variable argument list.
-
-  VSPrint function to process format and place the results in Buffer. Since a 
-  VA_LIST is used this rountine allows the nesting of Vararg routines. Thus 
-  this is the main print working routine
-
-  @param  Buffer        Character buffer to print the results of the parsing
-                        of Format into.
-  @param  BufferSize    Maximum number of characters to put into buffer.
-                        Zero means no limit.
-  @param  Flags         Intial flags value.
-                        Can only have FORMAT_UNICODE and OUTPUT_UNICODE set
-  @param  FormatString  Null-terminated format string.
-
-  @return Number of characters printed.
-
-**/
-UINTN
-BasePrintLibSPrint (
-  OUT CHAR8        *Buffer,
-  IN  UINTN        BufferSize,
-  IN  UINTN        Flags,
-  IN  CONST CHAR8  *FormatString,
-  ...
-  );
-
-/**
-  Internal function that places the character into the Buffer.
-
-  Internal function that places ASCII or Unicode character into the Buffer.
-
-  @param  Buffer      Buffer to place the Unicode or ASCII string.
-  @param  EndBuffer   The end of the input Buffer. No characters will be
-                      placed after that. 
-  @param  Length      Count of character to be placed into Buffer.
-  @param  Character   Character to be placed into Buffer.
-  @param  Increment   Character increment in Buffer.
-
-  @return Number of characters printed.
-
-**/
-CHAR8 *
-BasePrintLibFillBuffer (
-  CHAR8   *Buffer,
-  CHAR8   *EndBuffer,
-  INTN    Length,
-  UINTN   Character,
-  INTN    Increment
-  );
-
-/**
-  Internal function that convert a decimal number to a string in Buffer.
-
-  Print worker function that convert a decimal number to a string in Buffer.
-
-  @param  Buffer    Location to place the Unicode or ASCII string of Value.
-  @param  Value     Value to convert to a Decimal or Hexidecimal string in Buffer.
-  @param  Radix     Radix of the value
-
-  @return Number of characters printed.
-
-**/
-UINTN
-EFIAPI
-BasePrintLibValueToString (
-  IN OUT CHAR8  *Buffer, 
-  IN INT64      Value, 
-  IN UINTN      Radix
-  );
-
-/**
-  Internal function that converts a decimal value to a Null-terminated string.
-  
-  Converts the decimal number specified by Value to a Null-terminated  
-  string specified by Buffer containing at most Width characters.
-  If Width is 0 then a width of  MAXIMUM_VALUE_CHARACTERS is assumed.
-  The total number of characters placed in Buffer is returned.
-  If the conversion contains more than Width characters, then only the first
-  Width characters are returned, and the total number of characters 
-  required to perform the conversion is returned.
-  Additional conversion parameters are specified in Flags.  
-  The Flags bit LEFT_JUSTIFY is always ignored.
-  All conversions are left justified in Buffer.
-  If Width is 0, PREFIX_ZERO is ignored in Flags.
-  If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
-  are inserted every 3rd digit starting from the right.
-  If Value is < 0, then the fist character in Buffer is a '-'.
-  If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored, 
-  then Buffer is padded with '0' characters so the combination of the optional '-' 
-  sign character, '0' characters, digit characters for Value, and the Null-terminator
-  add up to Width characters.
-
-  If Buffer is NULL, then ASSERT().
-  If unsupported bits are set in Flags, then ASSERT().
-  If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
-
-  @param  Buffer    Pointer to the output buffer for the produced Null-terminated
-                    string.
-  @param  Flags     The bitmask of flags that specify left justification, zero pad,
-                    and commas.
-  @param  Value     The 64-bit signed value to convert to a string.
-  @param  Width     The maximum number of characters to place in Buffer, not including
-                    the Null-terminator.
-  @param  Increment Character increment in Buffer.
-  
-  @return Total number of characters required to perform the conversion.
-
-**/
-UINTN
-BasePrintLibConvertValueToString (
-  IN OUT CHAR8   *Buffer,
-  IN UINTN       Flags,
-  IN INT64       Value,
-  IN UINTN       Width,
-  IN UINTN       Increment
-  );
-
-#endif
+/** @file\r
+  Base Print Library instance Internal Functions definition.\r
+\r
+  Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php.\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef __PRINT_LIB_INTERNAL_H__\r
+#define __PRINT_LIB_INTERNAL_H__\r
+\r
+#include <Base.h>\r
+#include <Library/PrintLib.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/PcdLib.h>\r
+\r
+\r
+//\r
+// Print primitives\r
+//\r
+#define PREFIX_SIGN           BIT1\r
+#define PREFIX_BLANK          BIT2\r
+#define LONG_TYPE             BIT4\r
+#define OUTPUT_UNICODE        BIT6\r
+#define FORMAT_UNICODE        BIT8\r
+#define PAD_TO_WIDTH          BIT9\r
+#define ARGUMENT_UNICODE      BIT10\r
+#define PRECISION             BIT11\r
+#define ARGUMENT_REVERSED     BIT12\r
+#define COUNT_ONLY_NO_PRINT   BIT13\r
+#define UNSIGNED_TYPE         BIT14\r
+\r
+//\r
+// Record date and time information\r
+//\r
+typedef struct {\r
+  UINT16  Year;\r
+  UINT8   Month;\r
+  UINT8   Day;\r
+  UINT8   Hour;\r
+  UINT8   Minute;\r
+  UINT8   Second;\r
+  UINT8   Pad1;\r
+  UINT32  Nanosecond;\r
+  INT16   TimeZone;\r
+  UINT8   Daylight;\r
+  UINT8   Pad2;\r
+} TIME;\r
+\r
+/**\r
+  Worker function that produces a Null-terminated string in an output buffer \r
+  based on a Null-terminated format string and a VA_LIST argument list.\r
+\r
+  VSPrint function to process format and place the results in Buffer. Since a \r
+  VA_LIST is used this routine allows the nesting of Vararg routines. Thus \r
+  this is the main print working routine.\r
+\r
+  If COUNT_ONLY_NO_PRINT is set in Flags, Buffer will not be modified at all.\r
+\r
+  @param[out] Buffer          The character buffer to print the results of the \r
+                              parsing of Format into.\r
+  @param[in]  BufferSize      The maximum number of characters to put into \r
+                              buffer.\r
+  @param[in]  Flags           Initial flags value.\r
+                              Can only have FORMAT_UNICODE, OUTPUT_UNICODE, \r
+                              and COUNT_ONLY_NO_PRINT set.\r
+  @param[in]  Format          A Null-terminated format string.\r
+  @param[in]  VaListMarker    VA_LIST style variable argument list consumed by\r
+                              processing Format.\r
+  @param[in]  BaseListMarker  BASE_LIST style variable argument list consumed\r
+                              by processing Format.\r
+\r
+  @return The number of characters printed not including the Null-terminator.\r
+          If COUNT_ONLY_NO_PRINT was set returns the same, but without any\r
+          modification to Buffer.\r
+\r
+**/\r
+UINTN\r
+BasePrintLibSPrintMarker (\r
+  OUT CHAR8        *Buffer,\r
+  IN  UINTN        BufferSize,\r
+  IN  UINTN        Flags,\r
+  IN  CONST CHAR8  *Format,\r
+  IN  VA_LIST      VaListMarker,   OPTIONAL\r
+  IN  BASE_LIST    BaseListMarker  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Worker function that produces a Null-terminated string in an output buffer \r
+  based on a Null-terminated format string and variable argument list.\r
+\r
+  VSPrint function to process format and place the results in Buffer. Since a \r
+  VA_LIST is used this routine allows the nesting of Vararg routines. Thus \r
+  this is the main print working routine\r
+\r
+  @param  StartOfBuffer The character buffer to print the results of the parsing\r
+                        of Format into.\r
+  @param  BufferSize    The maximum number of characters to put into buffer.\r
+                        Zero means no limit.\r
+  @param  Flags         Initial flags value.\r
+                        Can only have FORMAT_UNICODE and OUTPUT_UNICODE set\r
+  @param  FormatString  Null-terminated format string.\r
+  @param  ...           The variable argument list.\r
+\r
+  @return The number of characters printed.\r
+\r
+**/\r
+UINTN\r
+EFIAPI\r
+BasePrintLibSPrint (\r
+  OUT CHAR8        *StartOfBuffer,\r
+  IN  UINTN        BufferSize,\r
+  IN  UINTN        Flags,\r
+  IN  CONST CHAR8  *FormatString,\r
+  ...\r
+  );\r
+\r
+/**\r
+  Internal function that places the character into the Buffer.\r
+\r
+  Internal function that places ASCII or Unicode character into the Buffer.\r
+\r
+  @param  Buffer      Buffer to place the Unicode or ASCII string.\r
+  @param  EndBuffer   The end of the input Buffer. No characters will be\r
+                      placed after that. \r
+  @param  Length      The count of character to be placed into Buffer.\r
+                      (Negative value indicates no buffer fill.)\r
+  @param  Character   The character to be placed into Buffer.\r
+  @param  Increment   The character increment in Buffer.\r
+\r
+  @return Buffer      Buffer filled with the input Character.\r
+\r
+**/\r
+CHAR8 *\r
+BasePrintLibFillBuffer (\r
+  OUT CHAR8   *Buffer,\r
+  IN  CHAR8   *EndBuffer,\r
+  IN  INTN    Length,\r
+  IN  UINTN   Character,\r
+  IN  INTN    Increment\r
+  );\r
+\r
+/**\r
+  Internal function that convert a number to a string in Buffer.\r
+\r
+  Print worker function that converts a decimal or hexadecimal number to an ASCII string in Buffer.\r
+\r
+  @param  Buffer    Location to place the ASCII string of Value.\r
+  @param  Value     The value to convert to a Decimal or Hexadecimal string in Buffer.\r
+  @param  Radix     Radix of the value\r
+\r
+  @return A pointer to the end of buffer filled with ASCII string.\r
+\r
+**/\r
+CHAR8 *\r
+BasePrintLibValueToString (\r
+  IN OUT CHAR8  *Buffer, \r
+  IN INT64      Value, \r
+  IN UINTN      Radix\r
+  );\r
+\r
+/**\r
+  Internal function that converts a decimal value to a Null-terminated string.\r
+  \r
+  Converts the decimal number specified by Value to a Null-terminated  \r
+  string specified by Buffer containing at most Width characters.\r
+  If Width is 0 then a width of  MAXIMUM_VALUE_CHARACTERS is assumed.\r
+  The total number of characters placed in Buffer is returned.\r
+  If the conversion contains more than Width characters, then only the first\r
+  Width characters are returned, and the total number of characters \r
+  required to perform the conversion is returned.\r
+  Additional conversion parameters are specified in Flags.  \r
+  The Flags bit LEFT_JUSTIFY is always ignored.\r
+  All conversions are left justified in Buffer.\r
+  If Width is 0, PREFIX_ZERO is ignored in Flags.\r
+  If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas\r
+  are inserted every 3rd digit starting from the right.\r
+  If Value is < 0, then the fist character in Buffer is a '-'.\r
+  If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored, \r
+  then Buffer is padded with '0' characters so the combination of the optional '-' \r
+  sign character, '0' characters, digit characters for Value, and the Null-terminator\r
+  add up to Width characters.\r
+\r
+  If Buffer is NULL, then ASSERT().\r
+  If unsupported bits are set in Flags, then ASSERT().\r
+  If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()\r
+\r
+  @param  Buffer    The pointer to the output buffer for the produced Null-terminated\r
+                    string.\r
+  @param  Flags     The bitmask of flags that specify left justification, zero pad,\r
+                    and commas.\r
+  @param  Value     The 64-bit signed value to convert to a string.\r
+  @param  Width     The maximum number of characters to place in Buffer, not including\r
+                    the Null-terminator.\r
+  @param  Increment Character increment in Buffer.\r
+  \r
+  @return Total number of characters required to perform the conversion.\r
+\r
+**/\r
+UINTN\r
+BasePrintLibConvertValueToString (\r
+  IN OUT CHAR8   *Buffer,\r
+  IN UINTN       Flags,\r
+  IN INT64       Value,\r
+  IN UINTN       Width,\r
+  IN UINTN       Increment\r
+  );\r
+\r
+/**\r
+  Internal function that converts a decimal value to a Null-terminated string.\r
+\r
+  Converts the decimal number specified by Value to a Null-terminated string\r
+  specified by Buffer containing at most Width characters. If Width is 0 then a\r
+  width of MAXIMUM_VALUE_CHARACTERS is assumed. If the conversion contains more\r
+  than Width characters, then only the first Width characters are placed in\r
+  Buffer. Additional conversion parameters are specified in Flags.\r
+  The Flags bit LEFT_JUSTIFY is always ignored.\r
+  All conversions are left justified in Buffer.\r
+  If Width is 0, PREFIX_ZERO is ignored in Flags.\r
+  If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and\r
+  commas are inserted every 3rd digit starting from the right.\r
+  If Value is < 0, then the fist character in Buffer is a '-'.\r
+  If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored,\r
+  then Buffer is padded with '0' characters so the combination of the optional\r
+  '-' sign character, '0' characters, digit characters for Value, and the\r
+  Null-terminator add up to Width characters.\r
+\r
+  If an error would be returned, the function will ASSERT().\r
+\r
+  @param  Buffer      The pointer to the output buffer for the produced\r
+                      Null-terminated string.\r
+  @param  BufferSize  The size of Buffer in bytes, including the\r
+                      Null-terminator.\r
+  @param  Flags       The bitmask of flags that specify left justification,\r
+                      zero pad, and commas.\r
+  @param  Value       The 64-bit signed value to convert to a string.\r
+  @param  Width       The maximum number of characters to place in Buffer,\r
+                      not including the Null-terminator.\r
+  @param  Increment   The character increment in Buffer.\r
+\r
+  @retval RETURN_SUCCESS           The decimal value is converted.\r
+  @retval RETURN_BUFFER_TOO_SMALL  If BufferSize cannot hold the converted\r
+                                   value.\r
+  @retval RETURN_INVALID_PARAMETER If Buffer is NULL.\r
+                                   If Increment is 1 and\r
+                                   PcdMaximumAsciiStringLength is not zero,\r
+                                   BufferSize is greater than\r
+                                   PcdMaximumAsciiStringLength.\r
+                                   If Increment is not 1 and\r
+                                   PcdMaximumUnicodeStringLength is not zero,\r
+                                   BufferSize is greater than\r
+                                   (PcdMaximumUnicodeStringLength *\r
+                                   sizeof (CHAR16) + 1).\r
+                                   If unsupported bits are set in Flags.\r
+                                   If both COMMA_TYPE and RADIX_HEX are set in\r
+                                   Flags.\r
+                                   If Width >= MAXIMUM_VALUE_CHARACTERS.\r
+\r
+**/\r
+RETURN_STATUS\r
+BasePrintLibConvertValueToStringS (\r
+  IN OUT CHAR8   *Buffer,\r
+  IN UINTN       BufferSize,\r
+  IN UINTN       Flags,\r
+  IN INT64       Value,\r
+  IN UINTN       Width,\r
+  IN UINTN       Increment\r
+  );\r
+\r
+#endif\r