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
|
/** @file
|
||||||
|
|
||||||
This print protocol defines six basic print functions to
|
Produces EFI_PRINT2_PROTOCOL and EFI_PRINT2S_PROTOCOL.
|
||||||
print the format unicode and ascii string.
|
These protocols define basic print functions to print the format unicode and
|
||||||
|
ascii string.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials are licensed and made available under
|
This program and the accompanying materials are licensed and made available under
|
||||||
|
@ -515,4 +516,149 @@ struct _EFI_PRINT2_PROTOCOL {
|
||||||
|
|
||||||
extern EFI_GUID gEfiPrint2ProtocolGuid;
|
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
|
#endif
|
||||||
|
|
|
@ -427,9 +427,10 @@
|
||||||
# If developer need implement such functionality, they should use BasePeCoffLib.
|
# If developer need implement such functionality, they should use BasePeCoffLib.
|
||||||
gEfiLoadPeImageProtocolGuid = { 0x5CB5C776, 0x60D5, 0x45EE, { 0x88, 0x3C, 0x45, 0x27, 0x08, 0xCD, 0x74, 0x3F }}
|
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
|
# Include/Protocol/Print2.h
|
||||||
gEfiPrint2ProtocolGuid = { 0xf05976ef, 0x83f1, 0x4f3d, { 0x86, 0x19, 0xf7, 0x59, 0x5d, 0x41, 0xe5, 0x38 } }
|
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.
|
## This protocol defines the generic memory test interfaces in Dxe phase.
|
||||||
# Include/Protocol/GenericMemoryTest.h
|
# Include/Protocol/GenericMemoryTest.h
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @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
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -35,6 +35,19 @@ CONST EFI_PRINT2_PROTOCOL mPrint2Protocol = {
|
||||||
AsciiValueToString
|
AsciiValueToString
|
||||||
};
|
};
|
||||||
|
|
||||||
|
CONST EFI_PRINT2S_PROTOCOL mPrint2SProtocol = {
|
||||||
|
UnicodeBSPrint,
|
||||||
|
UnicodeSPrint,
|
||||||
|
UnicodeBSPrintAsciiFormat,
|
||||||
|
UnicodeSPrintAsciiFormat,
|
||||||
|
UnicodeValueToStringS,
|
||||||
|
AsciiBSPrint,
|
||||||
|
AsciiSPrint,
|
||||||
|
AsciiBSPrintUnicodeFormat,
|
||||||
|
AsciiSPrintUnicodeFormat,
|
||||||
|
AsciiValueToStringS
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The user Entry Point for Print module.
|
The user Entry Point for Print module.
|
||||||
|
|
||||||
|
@ -59,6 +72,7 @@ PrintEntryPoint (
|
||||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||||
&mPrintThunkHandle,
|
&mPrintThunkHandle,
|
||||||
&gEfiPrint2ProtocolGuid, &mPrint2Protocol,
|
&gEfiPrint2ProtocolGuid, &mPrint2Protocol,
|
||||||
|
&gEfiPrint2SProtocolGuid, &mPrint2SProtocol,
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
## @file
|
## @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
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# 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
|
# which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -44,6 +44,7 @@
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiPrint2ProtocolGuid ## PRODUCES
|
gEfiPrint2ProtocolGuid ## PRODUCES
|
||||||
|
gEfiPrint2SProtocolGuid ## PRODUCES
|
||||||
|
|
||||||
[Depex]
|
[Depex]
|
||||||
TRUE
|
TRUE
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
// /** @file
|
// /** @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
|
// This program and the accompanying materials
|
||||||
// are licensed and made available under the terms and conditions of the BSD License
|
// 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