mirror of https://github.com/acidanthera/audk.git
MdeModulePkg: Add the EFI_PRINT2S_PROTOCOL
Add the EFI_PRINT2S_PROTOCOL as a safe version of the EFI_PRINT2_PROTOCOL, the EFI_PRINT2S_PROTOCOL replaces the following 2 services in EFI_PRINT2_PROTOCOL: UNICODE_VALUE_TO_STRING ASCII_VALUE_TO_STRING with: UNICODE_VALUE_TO_STRING_S ASCII_VALUE_TO_STRING_S The 2 new services perform checks to the input parameters and will return relative status to reflect the check result. Return RETURN_INVALID_PARAMETER when: 1). The input Buffer is NULL. 2). The input BufferSize is greater than (PcdMaximumUnicodeStringLength * sizeof (CHAR16) + 1) for UnicodeValueToStringS or greater than PcdMaximumAsciiStringLength for AsciiValueToStringS. 3). The input Flags is not set properly. 4). The input Width is not smaller than MAXIMUM_VALUE_CHARACTERS. Return RETURN_BUFFER_TOO_SMALL when: 1). The input BufferSize cannot hold the converted value. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
parent
51f0ceb4eb
commit
e43adbafe8
|
@ -1,7 +1,8 @@
|
|||
/** @file
|
||||
|
||||
This print protocol defines six basic print functions to
|
||||
print the format unicode and ascii string.
|
||||
Produces EFI_PRINT2_PROTOCOL and EFI_PRINT2S_PROTOCOL.
|
||||
These protocols define basic print functions to print the format unicode and
|
||||
ascii string.
|
||||
|
||||
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
|
@ -515,4 +516,149 @@ struct _EFI_PRINT2_PROTOCOL {
|
|||
|
||||
extern EFI_GUID gEfiPrint2ProtocolGuid;
|
||||
|
||||
|
||||
#define EFI_PRINT2S_PROTOCOL_GUID \
|
||||
{ 0xcc252d2, 0xc106, 0x4661, { 0xb5, 0xbd, 0x31, 0x47, 0xa4, 0xf8, 0x1f, 0x92 } }
|
||||
|
||||
//
|
||||
// Forward reference for pure ANSI compatability
|
||||
//
|
||||
typedef struct _EFI_PRINT2S_PROTOCOL EFI_PRINT2S_PROTOCOL;
|
||||
|
||||
/**
|
||||
Converts a decimal value to a Null-terminated Unicode string.
|
||||
|
||||
Converts the decimal number specified by Value to a Null-terminated Unicode
|
||||
string specified by Buffer containing at most Width characters. No padding of
|
||||
spaces is ever performed. If Width is 0 then a width of
|
||||
MAXIMUM_VALUE_CHARACTERS is assumed. If the conversion contains more than
|
||||
Width characters, then only the first Width characters are placed in Buffer.
|
||||
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 RADIX_HEX is set in Flags, then the output buffer will be formatted in
|
||||
hexadecimal format.
|
||||
If Value is < 0 and RADIX_HEX is not set in Flags, 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 not aligned on a 16-bit boundary, then ASSERT().
|
||||
If an error would be returned, then the function will also ASSERT().
|
||||
|
||||
@param Buffer The pointer to the output buffer for the produced
|
||||
Null-terminated Unicode string.
|
||||
@param BufferSize The size of Buffer in bytes, including the
|
||||
Null-terminator.
|
||||
@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 Unicode characters to place in
|
||||
Buffer, not including the Null-terminator.
|
||||
|
||||
@retval RETURN_SUCCESS The decimal value is converted.
|
||||
@retval RETURN_BUFFER_TOO_SMALL If BufferSize cannot hold the converted
|
||||
value.
|
||||
@retval RETURN_INVALID_PARAMETER If Buffer is NULL.
|
||||
If PcdMaximumUnicodeStringLength is not
|
||||
zero, and BufferSize is greater than
|
||||
(PcdMaximumUnicodeStringLength *
|
||||
sizeof (CHAR16) + 1).
|
||||
If unsupported bits are set in Flags.
|
||||
If both COMMA_TYPE and RADIX_HEX are set in
|
||||
Flags.
|
||||
If Width >= MAXIMUM_VALUE_CHARACTERS.
|
||||
|
||||
**/
|
||||
typedef
|
||||
RETURN_STATUS
|
||||
(EFIAPI *UNICODE_VALUE_TO_STRING_S)(
|
||||
IN OUT CHAR16 *Buffer,
|
||||
IN UINTN BufferSize,
|
||||
IN UINTN Flags,
|
||||
IN INT64 Value,
|
||||
IN UINTN Width
|
||||
);
|
||||
|
||||
/**
|
||||
Converts a decimal value to a Null-terminated Ascii string.
|
||||
|
||||
Converts the decimal number specified by Value to a Null-terminated Ascii
|
||||
string specified by Buffer containing at most Width characters. No padding of
|
||||
spaces is ever performed. If Width is 0 then a width of
|
||||
MAXIMUM_VALUE_CHARACTERS is assumed. If the conversion contains more than
|
||||
Width characters, then only the first Width characters are placed in Buffer.
|
||||
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 RADIX_HEX is set in Flags, then the output buffer will be formatted in
|
||||
hexadecimal format.
|
||||
If Value is < 0 and RADIX_HEX is not set in Flags, 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 not aligned on a 16-bit boundary, then ASSERT().
|
||||
If an error would be returned, then the function will also ASSERT().
|
||||
|
||||
@param Buffer The pointer to the output buffer for the produced
|
||||
Null-terminated Ascii string.
|
||||
@param BufferSize The size of Buffer in bytes, including the
|
||||
Null-terminator.
|
||||
@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 Ascii characters to place in
|
||||
Buffer, not including the Null-terminator.
|
||||
|
||||
@retval RETURN_SUCCESS The decimal value is converted.
|
||||
@retval RETURN_BUFFER_TOO_SMALL If BufferSize cannot hold the converted
|
||||
value.
|
||||
@retval RETURN_INVALID_PARAMETER If Buffer is NULL.
|
||||
If PcdMaximumAsciiStringLength is not
|
||||
zero, and BufferSize is greater than
|
||||
PcdMaximumAsciiStringLength.
|
||||
If unsupported bits are set in Flags.
|
||||
If both COMMA_TYPE and RADIX_HEX are set in
|
||||
Flags.
|
||||
If Width >= MAXIMUM_VALUE_CHARACTERS.
|
||||
|
||||
**/
|
||||
typedef
|
||||
RETURN_STATUS
|
||||
(EFIAPI *ASCII_VALUE_TO_STRING_S)(
|
||||
IN OUT CHAR8 *Buffer,
|
||||
IN UINTN BufferSize,
|
||||
IN UINTN Flags,
|
||||
IN INT64 Value,
|
||||
IN UINTN Width
|
||||
);
|
||||
|
||||
struct _EFI_PRINT2S_PROTOCOL {
|
||||
UNICODE_BS_PRINT UnicodeBSPrint;
|
||||
UNICODE_S_PRINT UnicodeSPrint;
|
||||
UNICODE_BS_PRINT_ASCII_FORMAT UnicodeBSPrintAsciiFormat;
|
||||
UNICODE_S_PRINT_ASCII_FORMAT UnicodeSPrintAsciiFormat;
|
||||
UNICODE_VALUE_TO_STRING_S UnicodeValueToStringS;
|
||||
ASCII_BS_PRINT AsciiBSPrint;
|
||||
ASCII_S_PRINT AsciiSPrint;
|
||||
ASCII_BS_PRINT_UNICODE_FORMAT AsciiBSPrintUnicodeFormat;
|
||||
ASCII_S_PRINT_UNICODE_FORMAT AsciiSPrintUnicodeFormat;
|
||||
ASCII_VALUE_TO_STRING_S AsciiValueToStringS;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiPrint2SProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -427,9 +427,10 @@
|
|||
# If developer need implement such functionality, they should use BasePeCoffLib.
|
||||
gEfiLoadPeImageProtocolGuid = { 0x5CB5C776, 0x60D5, 0x45EE, { 0x88, 0x3C, 0x45, 0x27, 0x08, 0xCD, 0x74, 0x3F }}
|
||||
|
||||
## Print protocol defines basic print functions to print the format unicode and ascii string.
|
||||
## Print protocols define basic print functions to print the format unicode and ascii string.
|
||||
# Include/Protocol/Print2.h
|
||||
gEfiPrint2ProtocolGuid = { 0xf05976ef, 0x83f1, 0x4f3d, { 0x86, 0x19, 0xf7, 0x59, 0x5d, 0x41, 0xe5, 0x38 } }
|
||||
gEfiPrint2SProtocolGuid = { 0xcc252d2, 0xc106, 0x4661, { 0xb5, 0xbd, 0x31, 0x47, 0xa4, 0xf8, 0x1f, 0x92 } }
|
||||
|
||||
## This protocol defines the generic memory test interfaces in Dxe phase.
|
||||
# Include/Protocol/GenericMemoryTest.h
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
This driver produces Print2 protocol layered on top of the PrintLib from the MdePkg.
|
||||
This driver produces Print2 protocols layered on top of the PrintLib from the MdePkg.
|
||||
|
||||
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
|
@ -35,6 +35,19 @@ CONST EFI_PRINT2_PROTOCOL mPrint2Protocol = {
|
|||
AsciiValueToString
|
||||
};
|
||||
|
||||
CONST EFI_PRINT2S_PROTOCOL mPrint2SProtocol = {
|
||||
UnicodeBSPrint,
|
||||
UnicodeSPrint,
|
||||
UnicodeBSPrintAsciiFormat,
|
||||
UnicodeSPrintAsciiFormat,
|
||||
UnicodeValueToStringS,
|
||||
AsciiBSPrint,
|
||||
AsciiSPrint,
|
||||
AsciiBSPrintUnicodeFormat,
|
||||
AsciiSPrintUnicodeFormat,
|
||||
AsciiValueToStringS
|
||||
};
|
||||
|
||||
/**
|
||||
The user Entry Point for Print module.
|
||||
|
||||
|
@ -59,6 +72,7 @@ PrintEntryPoint (
|
|||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&mPrintThunkHandle,
|
||||
&gEfiPrint2ProtocolGuid, &mPrint2Protocol,
|
||||
&gEfiPrint2SProtocolGuid, &mPrint2SProtocol,
|
||||
NULL
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
## @file
|
||||
# Print DXE driver that produces Print2 Protocol.
|
||||
# Print DXE driver that produces Print2 Protocols.
|
||||
#
|
||||
# This driver produces Print2 protocol layered on top of the PrintLib from the MdePkg.
|
||||
# This driver produces Print2 protocols layered on top of the PrintLib from the MdePkg.
|
||||
#
|
||||
# Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
# 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
|
||||
|
@ -44,6 +44,7 @@
|
|||
|
||||
[Protocols]
|
||||
gEfiPrint2ProtocolGuid ## PRODUCES
|
||||
gEfiPrint2SProtocolGuid ## PRODUCES
|
||||
|
||||
[Depex]
|
||||
TRUE
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// /** @file
|
||||
// Print DXE driver that produces Print2 Protocol.
|
||||
// Print DXE driver that produces Print2 Protocols.
|
||||
//
|
||||
// This driver produces Print2 protocol layered on top of the PrintLib from the MdePkg.
|
||||
// This driver produces Print2 protocols layered on top of the PrintLib from the MdePkg.
|
||||
//
|
||||
// Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
// Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
//
|
||||
// This program and the accompanying materials
|
||||
// are licensed and made available under the terms and conditions of the BSD License
|
||||
|
@ -16,7 +16,7 @@
|
|||
// **/
|
||||
|
||||
|
||||
#string STR_MODULE_ABSTRACT #language en-US "Print DXE driver that produces Print2 Protocol"
|
||||
#string STR_MODULE_ABSTRACT #language en-US "Print DXE driver that produces Print2 Protocols"
|
||||
|
||||
#string STR_MODULE_DESCRIPTION #language en-US "This driver produces Print2 protocol layered on top of the PrintLib from the MdePkg."
|
||||
#string STR_MODULE_DESCRIPTION #language en-US "This driver produces Print2 protocols layered on top of the PrintLib from the MdePkg."
|
||||
|
||||
|
|
Loading…
Reference in New Issue