MdePkg: Add %u and %lu support for PrintLib and DebugLib.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Qiu Shumin <shumin.qiu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17571 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Qiu Shumin 2015-06-08 05:37:31 +00:00 committed by shenshushi
parent 796fecd84b
commit 9ade433965
3 changed files with 28 additions and 6 deletions

View File

@ -2,7 +2,7 @@
Provides services to print a formatted string to a buffer. All combinations of Provides services to print a formatted string to a buffer. All combinations of
Unicode and ASCII strings are supported. Unicode and ASCII strings are supported.
Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2015, 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
the terms and conditions of the BSD License that accompanies this distribution. the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at The full text of the license may be found at
@ -89,6 +89,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
- d - d
- The argument is a signed decimal number. If the flag 'L' is not specified, - The argument is a signed decimal number. If the flag 'L' is not specified,
then the argument is assumed to be size int. then the argument is assumed to be size int.
- u
- The argument is a unsigned decimal number. If the flag 'L' is not specified,
then the argument is assumed to be size int.
- p - p
- The argument is a pointer that is a (VOID *), and it is printed as an - The argument is a pointer that is a (VOID *), and it is printed as an
unsigned hexadecimal number The characters used are 0..9 and A..F. unsigned hexadecimal number The characters used are 0..9 and A..F.

View File

@ -1,7 +1,7 @@
/** @file /** @file
Print Library internal worker functions. Print Library internal worker functions.
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2015, 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
@ -547,10 +547,18 @@ BasePrintLibSPrintMarker (
// //
// break skipped on purpose // break skipped on purpose
// //
case 'u':
if ((Flags & RADIX_HEX) == 0) {
Flags &= ~((UINTN) (PREFIX_SIGN));
Flags |= UNSIGNED_TYPE;
}
//
// break skipped on purpose
//
case 'd': case 'd':
if ((Flags & LONG_TYPE) == 0) { if ((Flags & LONG_TYPE) == 0) {
// //
// 'd','x', and 'X' that are not preceded by 'l' or 'L' are assumed to be type "int". // 'd', 'u', 'x', and 'X' that are not preceded by 'l' or 'L' are assumed to be type "int".
// This assumption is made so the format string definition is compatible with the ANSI C // This assumption is made so the format string definition is compatible with the ANSI C
// Specification for formatted strings. It is recommended that the Base Types be used // Specification for formatted strings. It is recommended that the Base Types be used
// everywhere, but in this one case, compliance with ANSI C is more important, and // everywhere, but in this one case, compliance with ANSI C is more important, and
@ -584,17 +592,27 @@ BasePrintLibSPrintMarker (
Flags &= ~((UINTN) PREFIX_ZERO); Flags &= ~((UINTN) PREFIX_ZERO);
Precision = 1; Precision = 1;
} }
if (Value < 0) { if (Value < 0 && (Flags & UNSIGNED_TYPE) == 0) {
Flags |= PREFIX_SIGN; Flags |= PREFIX_SIGN;
Prefix = '-'; Prefix = '-';
Value = -Value; Value = -Value;
} else if ((Flags & UNSIGNED_TYPE) != 0 && (Flags & LONG_TYPE) == 0) {
//
// 'd', 'u', 'x', and 'X' that are not preceded by 'l' or 'L' are assumed to be type "int".
// This assumption is made so the format string definition is compatible with the ANSI C
// Specification for formatted strings. It is recommended that the Base Types be used
// everywhere, but in this one case, compliance with ANSI C is more important, and
// provides an implementation that is compatible with that largest possible set of CPU
// architectures. This is why the type "unsigned int" is used in this one case.
//
Value = (unsigned int)Value;
} }
} else { } else {
Radix = 16; Radix = 16;
Comma = FALSE; Comma = FALSE;
if ((Flags & LONG_TYPE) == 0 && Value < 0) { if ((Flags & LONG_TYPE) == 0 && Value < 0) {
// //
// 'd','x', and 'X' that are not preceded by 'l' or 'L' are assumed to be type "int". // 'd', 'u', 'x', and 'X' that are not preceded by 'l' or 'L' are assumed to be type "int".
// This assumption is made so the format string definition is compatible with the ANSI C // This assumption is made so the format string definition is compatible with the ANSI C
// Specification for formatted strings. It is recommended that the Base Types be used // Specification for formatted strings. It is recommended that the Base Types be used
// everywhere, but in this one case, compliance with ANSI C is more important, and // everywhere, but in this one case, compliance with ANSI C is more important, and

View File

@ -1,7 +1,7 @@
/** @file /** @file
Base Print Library instance Internal Functions definition. Base Print Library instance Internal Functions definition.
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2015, 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
@ -34,6 +34,7 @@
#define PRECISION BIT11 #define PRECISION BIT11
#define ARGUMENT_REVERSED BIT12 #define ARGUMENT_REVERSED BIT12
#define COUNT_ONLY_NO_PRINT BIT13 #define COUNT_ONLY_NO_PRINT BIT13
#define UNSIGNED_TYPE BIT14
// //
// Record date and time information // Record date and time information