libcsupport: Add and use rtems_putc()

This reduces code size and provides a function similar to fputc().
This commit is contained in:
Sebastian Huber
2012-08-13 11:29:13 +02:00
parent 25802b42a6
commit bd5a138629
4 changed files with 35 additions and 9 deletions

View File

@@ -53,6 +53,7 @@ extern int getchark(void);
extern void vprintk(const char *fmt, va_list ap);
extern void printk(const char *fmt, ...);
extern void putk(const char *s);
extern void rtems_putc(char c);
/*
* This routine is passed into RTEMS reporting functions

View File

@@ -120,6 +120,7 @@ BSD_LIBC_C_FILES = src/strlcpy.c src/strlcat.c src/issetugid.c
libcsupport_a_SOURCES = src/gxx_wrappers.c src/getchark.c src/printk.c \
src/printk_plugin.c src/putk.c src/vprintk.c \
src/rtems_putc.c \
src/printf_plugin.c \
src/sup_fs_location.c \
src/sup_fs_eval_path.c \

View File

@@ -0,0 +1,24 @@
/*
* Copyright (c) 2012 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Obere Lagerstr. 30
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*/
#if HAVE_CONFIG_H
#include "config.h"
#endif
#include <rtems/bspIo.h>
void rtems_putc(char c)
{
(*BSP_output_char)(c);
}

View File

@@ -55,7 +55,7 @@ void vprintk(
char c;
if (*fmt != '%') {
BSP_output_char(*fmt);
rtems_putc(*fmt);
continue;
}
fmt++;
@@ -80,7 +80,7 @@ void vprintk(
if ( c == 'c' ) {
/* need a cast here since va_arg() only takes fully promoted types */
char chr = (char) va_arg(ap, int);
BSP_output_char(chr);
rtems_putc(chr);
continue;
}
if ( c == 's' ) {
@@ -100,7 +100,7 @@ void vprintk(
/* leading spaces */
if ( !minus )
for ( i=len ; i<width ; i++ )
BSP_output_char(' ');
rtems_putc(' ');
/* no width option */
if (width == 0) {
@@ -109,12 +109,12 @@ void vprintk(
/* output the string */
for ( i=0 ; i<width && *str ; str++ )
BSP_output_char(*str);
rtems_putc(*str);
/* trailing spaces */
if ( minus )
for ( i=len ; i<width ; i++ )
BSP_output_char(' ');
rtems_putc(' ');
continue;
}
@@ -132,7 +132,7 @@ void vprintk(
} else if ( c == 'p' ) {
base = 16; sign = false; lflag = true;
} else {
BSP_output_char(c);
rtems_putc(c);
continue;
}
@@ -166,7 +166,7 @@ static void printNum(
char toPrint[20];
if ( sign && (num < 0) ) {
BSP_output_char('-');
rtems_putc('-');
unsigned_num = (unsigned long) -num;
if (maxwidth) maxwidth--;
} else {
@@ -181,9 +181,9 @@ static void printNum(
toPrint[count++] = (char) unsigned_num;
for (n=maxwidth ; n > count; n-- )
BSP_output_char(lead);
rtems_putc(lead);
for (n = 0; n < count; n++) {
BSP_output_char("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]);
rtems_putc("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]);
}
}