[PATCH] Add and use kputc()

Sebastian Huber sebastian.huber at embedded-brains.de
Mon Aug 13 09:30:48 UTC 2012


This reduces code size and provides a function similar to fputc().
---
 cpukit/include/rtems/bspIo.h     |    1 +
 cpukit/libcsupport/Makefile.am   |    1 +
 cpukit/libcsupport/src/kputc.c   |   24 ++++++++++++++++++++++++
 cpukit/libcsupport/src/vprintk.c |   18 +++++++++---------
 4 files changed, 35 insertions(+), 9 deletions(-)
 create mode 100644 cpukit/libcsupport/src/kputc.c

diff --git a/cpukit/include/rtems/bspIo.h b/cpukit/include/rtems/bspIo.h
index d5a004a..9a035ec 100644
--- a/cpukit/include/rtems/bspIo.h
+++ b/cpukit/include/rtems/bspIo.h
@@ -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 kputc(char c);
 
 /*
  *  This routine is passed into RTEMS reporting functions
diff --git a/cpukit/libcsupport/Makefile.am b/cpukit/libcsupport/Makefile.am
index ae23338..f9486a1 100644
--- a/cpukit/libcsupport/Makefile.am
+++ b/cpukit/libcsupport/Makefile.am
@@ -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/kputc.c \
     src/printf_plugin.c \
     src/sup_fs_location.c \
     src/sup_fs_eval_path.c \
diff --git a/cpukit/libcsupport/src/kputc.c b/cpukit/libcsupport/src/kputc.c
new file mode 100644
index 0000000..6d7a059
--- /dev/null
+++ b/cpukit/libcsupport/src/kputc.c
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems at 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 kputc(char c)
+{
+  (*BSP_output_char)(c);
+}
diff --git a/cpukit/libcsupport/src/vprintk.c b/cpukit/libcsupport/src/vprintk.c
index 1a8d5dd..7ee0539 100644
--- a/cpukit/libcsupport/src/vprintk.c
+++ b/cpukit/libcsupport/src/vprintk.c
@@ -55,7 +55,7 @@ void vprintk(
     char c;
 
     if (*fmt != '%') {
-      BSP_output_char(*fmt);
+      kputc(*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);
+      kputc(chr);
       continue;
     }
     if ( c == 's' ) {
@@ -100,7 +100,7 @@ void vprintk(
       /* leading spaces */
       if ( !minus )
         for ( i=len ; i<width ; i++ )
-          BSP_output_char(' ');
+          kputc(' ');
 
       /* 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);
+        kputc(*str);
 
       /* trailing spaces */
       if ( minus )
         for ( i=len ; i<width ; i++ )
-          BSP_output_char(' ');
+          kputc(' ');
 
       continue;
     }
@@ -132,7 +132,7 @@ void vprintk(
     } else if ( c == 'p' ) {
       base = 16; sign = false; lflag = true;
     } else {
-      BSP_output_char(c);
+      kputc(c);
       continue;
     }
 
@@ -166,7 +166,7 @@ static void printNum(
   char toPrint[20];
 
   if ( sign && (num <  0) ) {
-    BSP_output_char('-');
+    kputc('-');
     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);
+    kputc(lead);
 
   for (n = 0; n < count; n++) {
-    BSP_output_char("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]);
+    kputc("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]);
   }
 }
-- 
1.7.7




More information about the devel mailing list