From ef374e062bfbb19f6b3cc3185f4311b3c8c3dd19 Mon Sep 17 00:00:00 2001 From: Soren Brinkmann Date: Tue, 9 Jun 2015 14:55:39 -0700 Subject: [PATCH] bsp: xil_printf: Handle 'u' conversions Signed-off-by: Soren Brinkmann --- lib/bsp/standalone/src/cortexa53/32bit/xil_printf.c | 8 +++++++- lib/bsp/standalone/src/cortexa53/64bit/xil_printf.c | 9 +++++++-- lib/bsp/standalone/src/cortexa9/xil_printf.c | 9 +++++++-- lib/bsp/standalone/src/cortexr5/xil_printf.c | 9 +++++++-- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/lib/bsp/standalone/src/cortexa53/32bit/xil_printf.c b/lib/bsp/standalone/src/cortexa53/32bit/xil_printf.c index f0d934d4..efdaf83e 100644 --- a/lib/bsp/standalone/src/cortexa53/32bit/xil_printf.c +++ b/lib/bsp/standalone/src/cortexa53/32bit/xil_printf.c @@ -24,6 +24,7 @@ typedef struct params_s { char8 pad_character; s32 do_padding; s32 left_flag; + s32 unsigned_flag; } params_t; @@ -104,7 +105,7 @@ static void outnum( const s32 n, const s32 base, struct params_s *par) } /* Check if number is negative */ - if ((base == 10) && (n < 0L)) { + if ((par->unsigned_flag == 0) && (base == 10) && (n < 0L)) { negative = 1; num =(-(n)); } @@ -215,6 +216,7 @@ void xil_printf( const char8 *ctrl1, ...) /* initialize all the flags for this format. */ dot_flag = 0; long_flag = 0; + par.unsigned_flag = 0; par.left_flag = 0; par.do_padding = 0; par.pad_character = ' '; @@ -275,6 +277,9 @@ void xil_printf( const char8 *ctrl1, ...) Check = 0; break; + case 'u': + par.unsigned_flag = 1; + /* fall through */ case 'i': case 'd': if ((long_flag != 0) || (ch == 'D')) { @@ -288,6 +293,7 @@ void xil_printf( const char8 *ctrl1, ...) case 'p': case 'X': case 'x': + par.unsigned_flag = 1; outnum((s32)va_arg(argp, s32), 16L, &par); Check = 1; break; diff --git a/lib/bsp/standalone/src/cortexa53/64bit/xil_printf.c b/lib/bsp/standalone/src/cortexa53/64bit/xil_printf.c index 05a219c9..8d13cc14 100644 --- a/lib/bsp/standalone/src/cortexa53/64bit/xil_printf.c +++ b/lib/bsp/standalone/src/cortexa53/64bit/xil_printf.c @@ -19,11 +19,11 @@ typedef struct params_s { char8 pad_character; s32 do_padding; s32 left_flag; + s32 unsigned_flag; } params_t; static void padding( const s32 l_flag,const params_t *par); static void outs(const charptr lp, params_t *par); -static void outnum( const s32 n, const s32 base, params_t *par); static s32 getnum( charptr* linep); /*---------------------------------------------------*/ @@ -99,7 +99,7 @@ static void outnum( const s32 n, const s32 base, params_t *par) } /* Check if number is negative */ - if ((base == 10) && (n < 0L)) { + if ((par->unsigned_flag == 0) && (base == 10) && (n < 0L)) { negative = 1; num =(-(n)); } @@ -206,6 +206,7 @@ void xil_printf( const char8 *ctrl1, ...) /* initialize all the flags for this format. */ dot_flag = 0; long_flag = 0; + par.unsigned_flag = 0; par.left_flag = 0; par.do_padding = 0; par.pad_character = ' '; @@ -264,6 +265,9 @@ void xil_printf( const char8 *ctrl1, ...) Check = 0; break; + case 'u': + par.unsigned_flag = 1; + /* fall through */ case 'i': case 'd': if ((long_flag != 0) || (ch == 'D')) { @@ -277,6 +281,7 @@ void xil_printf( const char8 *ctrl1, ...) case 'p': case 'X': case 'x': + par.unsigned_flag = 1; outnum((s32)va_arg(argp, s32), 16L, &par); Check = 1; break; diff --git a/lib/bsp/standalone/src/cortexa9/xil_printf.c b/lib/bsp/standalone/src/cortexa9/xil_printf.c index f0d934d4..0f0db4fc 100644 --- a/lib/bsp/standalone/src/cortexa9/xil_printf.c +++ b/lib/bsp/standalone/src/cortexa9/xil_printf.c @@ -14,7 +14,6 @@ static void padding( const s32 l_flag,const struct params_s *par); static void outs(const charptr lp, struct params_s *par); -static void outnum( const s32 n, const s32 base, struct params_s *par); static s32 getnum( charptr* linep); typedef struct params_s { @@ -24,6 +23,7 @@ typedef struct params_s { char8 pad_character; s32 do_padding; s32 left_flag; + s32 unsigned_flag; } params_t; @@ -104,7 +104,7 @@ static void outnum( const s32 n, const s32 base, struct params_s *par) } /* Check if number is negative */ - if ((base == 10) && (n < 0L)) { + if ((par->unsigned_flag == 0) && (base == 10) && (n < 0L)) { negative = 1; num =(-(n)); } @@ -215,6 +215,7 @@ void xil_printf( const char8 *ctrl1, ...) /* initialize all the flags for this format. */ dot_flag = 0; long_flag = 0; + par.unsigned_flag = 0; par.left_flag = 0; par.do_padding = 0; par.pad_character = ' '; @@ -275,6 +276,9 @@ void xil_printf( const char8 *ctrl1, ...) Check = 0; break; + case 'u': + par.unsigned_flag = 1; + /* fall through */ case 'i': case 'd': if ((long_flag != 0) || (ch == 'D')) { @@ -288,6 +292,7 @@ void xil_printf( const char8 *ctrl1, ...) case 'p': case 'X': case 'x': + par.unsigned_flag = 1; outnum((s32)va_arg(argp, s32), 16L, &par); Check = 1; break; diff --git a/lib/bsp/standalone/src/cortexr5/xil_printf.c b/lib/bsp/standalone/src/cortexr5/xil_printf.c index f0d934d4..0f0db4fc 100644 --- a/lib/bsp/standalone/src/cortexr5/xil_printf.c +++ b/lib/bsp/standalone/src/cortexr5/xil_printf.c @@ -14,7 +14,6 @@ static void padding( const s32 l_flag,const struct params_s *par); static void outs(const charptr lp, struct params_s *par); -static void outnum( const s32 n, const s32 base, struct params_s *par); static s32 getnum( charptr* linep); typedef struct params_s { @@ -24,6 +23,7 @@ typedef struct params_s { char8 pad_character; s32 do_padding; s32 left_flag; + s32 unsigned_flag; } params_t; @@ -104,7 +104,7 @@ static void outnum( const s32 n, const s32 base, struct params_s *par) } /* Check if number is negative */ - if ((base == 10) && (n < 0L)) { + if ((par->unsigned_flag == 0) && (base == 10) && (n < 0L)) { negative = 1; num =(-(n)); } @@ -215,6 +215,7 @@ void xil_printf( const char8 *ctrl1, ...) /* initialize all the flags for this format. */ dot_flag = 0; long_flag = 0; + par.unsigned_flag = 0; par.left_flag = 0; par.do_padding = 0; par.pad_character = ' '; @@ -275,6 +276,9 @@ void xil_printf( const char8 *ctrl1, ...) Check = 0; break; + case 'u': + par.unsigned_flag = 1; + /* fall through */ case 'i': case 'd': if ((long_flag != 0) || (ch == 'D')) { @@ -288,6 +292,7 @@ void xil_printf( const char8 *ctrl1, ...) case 'p': case 'X': case 'x': + par.unsigned_flag = 1; outnum((s32)va_arg(argp, s32), 16L, &par); Check = 1; break;