Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
1e49e906
Unverified
Commit
1e49e906
authored
Dec 19, 2017
by
davidcunado-arm
Committed by
GitHub
Dec 19, 2017
Browse files
Merge pull request #1196 from antonio-nino-diaz-arm/an/zero-pad
Add support to left-pad with zeroes in tf_printf
parents
9f36f4c4
84816dcd
Changes
1
Hide whitespace changes
Inline
Side-by-side
common/tf_printf.c
View file @
1e49e906
/*
* Copyright (c) 2014-201
6
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014-201
7
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -31,7 +31,8 @@ void tf_string_print(const char *str)
putchar
(
*
str
++
);
}
static
void
unsigned_num_print
(
unsigned
long
long
int
unum
,
unsigned
int
radix
)
static
void
unsigned_num_print
(
unsigned
long
long
int
unum
,
unsigned
int
radix
,
char
padc
,
int
padn
)
{
/* Just need enough space to store 64 bit decimal integer */
unsigned
char
num_buf
[
20
];
...
...
@@ -45,6 +46,12 @@ static void unsigned_num_print(unsigned long long int unum, unsigned int radix)
num_buf
[
i
++
]
=
'a'
+
(
rem
-
0xa
);
}
while
(
unum
/=
radix
);
if
(
padn
>
0
)
{
while
(
i
<
padn
--
)
{
putchar
(
padc
);
}
}
while
(
--
i
>=
0
)
putchar
(
num_buf
[
i
]);
}
...
...
@@ -63,6 +70,9 @@ static void unsigned_num_print(unsigned long long int unum, unsigned int radix)
* %ll - long long int (64-bit on AArch64)
* %z - size_t sized integer formats (64 bit on AArch64)
*
* The following padding specifiers are supported by this print
* %0NN - Left-pad the number with 0s (NN is a decimal number)
*
* The print exits on all other formats specifiers other than valid
* combinations of the above specifiers.
*******************************************************************/
...
...
@@ -72,9 +82,12 @@ void tf_vprintf(const char *fmt, va_list args)
long
long
int
num
;
unsigned
long
long
int
unum
;
char
*
str
;
char
padc
=
0
;
/* Padding character */
int
padn
;
/* Number of characters to pad */
while
(
*
fmt
)
{
l_count
=
0
;
padn
=
0
;
if
(
*
fmt
==
'%'
)
{
fmt
++
;
...
...
@@ -87,10 +100,11 @@ loop:
if
(
num
<
0
)
{
putchar
(
'-'
);
unum
=
(
unsigned
long
long
int
)
-
num
;
padn
--
;
}
else
unum
=
(
unsigned
long
long
int
)
num
;
unsigned_num_print
(
unum
,
10
);
unsigned_num_print
(
unum
,
10
,
padc
,
padn
);
break
;
case
's'
:
str
=
va_arg
(
args
,
char
*
);
...
...
@@ -98,14 +112,16 @@ loop:
break
;
case
'p'
:
unum
=
(
uintptr_t
)
va_arg
(
args
,
void
*
);
if
(
unum
)
if
(
unum
)
{
tf_string_print
(
"0x"
);
padn
-=
2
;
}
unsigned_num_print
(
unum
,
16
);
unsigned_num_print
(
unum
,
16
,
padc
,
padn
);
break
;
case
'x'
:
unum
=
get_unum_va_args
(
args
,
l_count
);
unsigned_num_print
(
unum
,
16
);
unsigned_num_print
(
unum
,
16
,
padc
,
padn
);
break
;
case
'z'
:
if
(
sizeof
(
size_t
)
==
8
)
...
...
@@ -119,8 +135,21 @@ loop:
goto
loop
;
case
'u'
:
unum
=
get_unum_va_args
(
args
,
l_count
);
unsigned_num_print
(
unum
,
10
);
unsigned_num_print
(
unum
,
10
,
padc
,
padn
);
break
;
case
'0'
:
padc
=
'0'
;
padn
=
0
;
fmt
++
;
while
(
1
)
{
char
ch
=
*
fmt
;
if
(
ch
<
'0'
||
ch
>
'9'
)
{
goto
loop
;
}
padn
=
(
padn
*
10
)
+
(
ch
-
'0'
);
fmt
++
;
}
default:
/* Exit on any other format specifier */
return
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment