[PATCH 06/10] Move printer initialization to separate header

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Jun 21 13:57:51 UTC 2016


The RTEMS print user need to know nothing about a particular printer
implementation.  In particular get rid of the <stdio.h> include which
would be visible via <rtems.h>.
---
 c/src/lib/libbsp/shared/src/irq-info.c     |   2 +-
 c/src/lib/libbsp/shared/src/irq-shell.c    |   1 +
 cpukit/Makefile.am                         |   1 +
 cpukit/include/rtems/print.h               |  83 ++------------------
 cpukit/include/rtems/printer.h             | 119 +++++++++++++++++++++++++++++
 cpukit/libcsupport/src/print_fprintf.c     |   4 +-
 cpukit/libcsupport/src/print_printf.c      |   4 +-
 cpukit/libcsupport/src/printf_plugin.c     |   4 +-
 cpukit/libcsupport/src/printk_plugin.c     |   2 +-
 cpukit/libdl/rap.c                         |   1 +
 cpukit/libmisc/cpuuse/cpuusagereport.c     |   1 +
 cpukit/libmisc/cpuuse/cpuusagetop.c        |   1 +
 cpukit/libmisc/fb/mw_print.c               |   1 +
 cpukit/libmisc/shell/main_blkstats.c       |   1 +
 cpukit/libmisc/shell/main_cpuinfo.c        |   1 +
 cpukit/libmisc/shell/main_cpuuse.c         |   1 +
 cpukit/libmisc/shell/main_perioduse.c      |   1 +
 cpukit/libmisc/shell/main_profreport.c     |   1 +
 cpukit/libmisc/shell/main_stackuse.c       |   1 +
 cpukit/libmisc/shell/main_top.c            |   1 +
 cpukit/libmisc/stackchk/check.c            |   1 +
 cpukit/libmisc/testsupport/test.h          |   2 +-
 cpukit/mghttpd/mongoose.c                  |   2 +-
 cpukit/preinstall.am                       |   4 +
 cpukit/rtems/src/ratemonreportstatistics.c |   2 +-
 cpukit/score/src/cpusetprintsupport.c      |   4 +-
 testsuites/samples/hello/init.c            |   1 +
 27 files changed, 153 insertions(+), 94 deletions(-)
 create mode 100644 cpukit/include/rtems/printer.h

diff --git a/c/src/lib/libbsp/shared/src/irq-info.c b/c/src/lib/libbsp/shared/src/irq-info.c
index f5f2323..ef965d3 100644
--- a/c/src/lib/libbsp/shared/src/irq-info.c
+++ b/c/src/lib/libbsp/shared/src/irq-info.c
@@ -21,7 +21,7 @@
 
 #include <inttypes.h>
 
-#include <rtems/print.h>
+#include <rtems/printer.h>
 
 #include <bsp/irq-generic.h>
 #include <bsp/irq-info.h>
diff --git a/c/src/lib/libbsp/shared/src/irq-shell.c b/c/src/lib/libbsp/shared/src/irq-shell.c
index 512594c..ca936f8 100644
--- a/c/src/lib/libbsp/shared/src/irq-shell.c
+++ b/c/src/lib/libbsp/shared/src/irq-shell.c
@@ -21,6 +21,7 @@
 
 #include <stdio.h>
 
+#include <rtems/printer.h>
 #include <rtems/shell.h>
 
 #include <bsp/irq-info.h>
diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am
index aa1111e..ac97530 100644
--- a/cpukit/Makefile.am
+++ b/cpukit/Makefile.am
@@ -98,6 +98,7 @@ endif
 
 include_rtems_HEADERS += include/rtems/bspIo.h
 include_rtems_HEADERS += include/rtems/print.h
+include_rtems_HEADERS += include/rtems/printer.h
 include_rtems_HEADERS += include/rtems/userenv.h
 include_rtems_HEADERS += include/rtems/fs.h
 if !LIBPCI
diff --git a/cpukit/include/rtems/print.h b/cpukit/include/rtems/print.h
index 07e50d0..2fd744e 100644
--- a/cpukit/include/rtems/print.h
+++ b/cpukit/include/rtems/print.h
@@ -21,53 +21,21 @@
 #include <rtems/score/basedefs.h>
 
 #include <stdarg.h>
-#include <stdio.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+typedef struct rtems_printer rtems_printer;
+
 /**
- * @defgroup RTEMS Print Support
+ * @defgroup RTEMSPrintSupport RTEMS Print Support
  *
  * This module contains all methods and support related to providing the user
  * with an interface to the kernel level print support.
  */
 
 /**
- * Type definition for function which can be plugged in to certain reporting
- * routines to redirect the output.
- *
- * Use the RTEMS Print interface to call these functions. Do not directly use
- * them.
- *
- * If the user provides their own printer, then they may redirect those reports
- * as they see fit.
- */
-typedef int (*rtems_print_printer)(void *, const char *format, va_list ap);
-
-/**
- * Type definition for the printer structure used to access the kernel print
- * support.
- */
-typedef struct rtems_printer {
-  void                *context;
-  rtems_print_printer  printer;
-} rtems_printer;
-
-/**
- * @brief check if the printer is valid.
- *
- * @param[in] printer Pointer to the printer structure.
- *
- * @return true The printer is valid else false is returned.
- */
-static inline bool rtems_print_printer_valid(const rtems_printer *printer)
-{
-  return printer != NULL && printer->printer != NULL;
-}
-
-/**
  * @brief Print to the kernel plugin handler. This has to be a macro because
  * there is no vprint version of the plug in handlers.
  *
@@ -95,51 +63,10 @@ extern int rtems_vprintf(const rtems_printer *printer,
                          const char          *format,
                          va_list              ap);
 
-/**
- * @brief Intiialise the rtems_printer struct to empty.
- *
- * An empty printer prints nothing. You can use this to implement an enable and
- * disable type print implementation.
- *
- * @param[in] printer Pointer to the printer structure.
- */
-static inline void rtems_print_printer_empty(rtems_printer *printer)
-{
-  printer->context = NULL;
-  printer->printer = NULL;
-}
-
-/**
- * @brief Intiialise the rtems_printer struct to printk
- *
- * The printer will output to the kernel printk support.
- *
- * @param[in] printer Pointer to the printer structure.
- */
-void rtems_print_printer_printk(rtems_printer *printer);
-
-/**
- * @brief Intiialise the rtems_printer struct to printf
- *
- * The printer will output to the libc printf support.
- *
- * @param[in] printer Pointer to the printer structure.
- */
-extern void rtems_print_printer_printf(rtems_printer *printer);
-
-/**
- * @brief Intiialise the rtems_printer struct to a fprintf device.
- *
- * The printer will output to the libc fprintf file provided.
- *
- * @param[in] printer Pointer to the printer structure.
- */
-extern void rtems_print_printer_fprintf(rtems_printer *printer, FILE *file);
-
-/**@}*/
+/** @} */
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif
+#endif /* _RTEMS_PRINT_H */
diff --git a/cpukit/include/rtems/printer.h b/cpukit/include/rtems/printer.h
new file mode 100644
index 0000000..2ed6b6a
--- /dev/null
+++ b/cpukit/include/rtems/printer.h
@@ -0,0 +1,119 @@
+/**
+ * @file rtems/print.h
+ *
+ * @brief User print interface to the bspIO print plug in.
+ *
+ * This include file defines the user interface to kernel print methods.
+ */
+
+/*
+ *  Copyright (c) 2016 Chris Johns <chrisj at rtems.org>
+ *  All rights reserved.
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef _RTEMS_PRINTER_H
+#define _RTEMS_PRINTER_H
+
+#include <rtems/print.h>
+
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup XXX
+ *
+ * @{
+ */
+
+/**
+ * @defgroup RTEMSPrintSupport
+ */
+
+/**
+ * Type definition for function which can be plugged in to certain reporting
+ * routines to redirect the output.
+ *
+ * Use the RTEMS Print interface to call these functions. Do not directly use
+ * them.
+ *
+ * If the user provides their own printer, then they may redirect those reports
+ * as they see fit.
+ */
+typedef int (*rtems_print_printer)(void *, const char *format, va_list ap);
+
+/**
+ * Type definition for the printer structure used to access the kernel print
+ * support.
+ */
+struct rtems_printer {
+  void                *context;
+  rtems_print_printer  printer;
+};
+
+/**
+ * @brief check if the printer is valid.
+ *
+ * @param[in] printer Pointer to the printer structure.
+ *
+ * @return true The printer is valid else false is returned.
+ */
+static inline bool rtems_print_printer_valid(const rtems_printer *printer)
+{
+  return printer != NULL && printer->printer != NULL;
+}
+
+/**
+ * @brief Initializes the rtems_printer struct to empty.
+ *
+ * An empty printer prints nothing. You can use this to implement an enable and
+ * disable type print implementation.
+ *
+ * @param[in] printer Pointer to the printer structure.
+ */
+static inline void rtems_print_printer_empty(rtems_printer *printer)
+{
+  printer->context = NULL;
+  printer->printer = NULL;
+}
+
+/**
+ * @brief Initializes the rtems_printer struct to printk
+ *
+ * The printer will output to the kernel printk support.
+ *
+ * @param[in] printer Pointer to the printer structure.
+ */
+void rtems_print_printer_printk(rtems_printer *printer);
+
+/**
+ * @brief Initializes the rtems_printer struct to printf
+ *
+ * The printer will output to the libc printf support.
+ *
+ * @param[in] printer Pointer to the printer structure.
+ */
+extern void rtems_print_printer_printf(rtems_printer *printer);
+
+/**
+ * @brief Initializes the rtems_printer struct to a fprintf device.
+ *
+ * The printer will output to the libc fprintf file provided.
+ *
+ * @param[in] printer Pointer to the printer structure.
+ */
+extern void rtems_print_printer_fprintf(rtems_printer *printer, FILE *file);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RTEMS_PRINTER_H */
diff --git a/cpukit/libcsupport/src/print_fprintf.c b/cpukit/libcsupport/src/print_fprintf.c
index 3ff80f7..43ff478 100644
--- a/cpukit/libcsupport/src/print_fprintf.c
+++ b/cpukit/libcsupport/src/print_fprintf.c
@@ -18,9 +18,7 @@
   #include "config.h"
 #endif
 
-#include <rtems/print.h>
-
-#include <stdio.h>
+#include <rtems/printer.h>
 
 static int rtems_fprintf_plugin(void *context, const char *fmt, va_list ap)
 {
diff --git a/cpukit/libcsupport/src/print_printf.c b/cpukit/libcsupport/src/print_printf.c
index c869523..c9b273a 100644
--- a/cpukit/libcsupport/src/print_printf.c
+++ b/cpukit/libcsupport/src/print_printf.c
@@ -18,9 +18,7 @@
   #include "config.h"
 #endif
 
-#include <rtems/print.h>
-
-#include <stdio.h>
+#include <rtems/printer.h>
 
 int rtems_vprintf(
   const rtems_printer *printer,
diff --git a/cpukit/libcsupport/src/printf_plugin.c b/cpukit/libcsupport/src/printf_plugin.c
index 23ac9f6..d8da6a0 100644
--- a/cpukit/libcsupport/src/printf_plugin.c
+++ b/cpukit/libcsupport/src/printf_plugin.c
@@ -23,9 +23,7 @@
   #include "config.h"
 #endif
 
-#include <rtems/print.h>
-
-#include <stdio.h>
+#include <rtems/printer.h>
 
 static int rtems_printf_plugin(void *context, const char *format, va_list ap)
 {
diff --git a/cpukit/libcsupport/src/printk_plugin.c b/cpukit/libcsupport/src/printk_plugin.c
index 38214f8..3b4a911 100644
--- a/cpukit/libcsupport/src/printk_plugin.c
+++ b/cpukit/libcsupport/src/printk_plugin.c
@@ -18,7 +18,7 @@
 #include "config.h"
 #endif
 
-#include <rtems/print.h>
+#include <rtems/printer.h>
 #include <rtems/bspIo.h>
 
 static int printk_plugin(
diff --git a/cpukit/libdl/rap.c b/cpukit/libdl/rap.c
index 4e07c54..87b3bc3 100644
--- a/cpukit/libdl/rap.c
+++ b/cpukit/libdl/rap.c
@@ -19,6 +19,7 @@
 #include "config.h"
 #endif
 
+#include <stdarg.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
diff --git a/cpukit/libmisc/cpuuse/cpuusagereport.c b/cpukit/libmisc/cpuuse/cpuusagereport.c
index 2a6eaf3..370eb05 100644
--- a/cpukit/libmisc/cpuuse/cpuusagereport.c
+++ b/cpukit/libmisc/cpuuse/cpuusagereport.c
@@ -25,6 +25,7 @@
 #include <inttypes.h>
 
 #include <rtems/cpuuse.h>
+#include <rtems/printer.h>
 #include <rtems/score/objectimpl.h>
 #include <rtems/score/threadimpl.h>
 #include <rtems/score/todimpl.h>
diff --git a/cpukit/libmisc/cpuuse/cpuusagetop.c b/cpukit/libmisc/cpuuse/cpuusagetop.c
index e300ee7..aa2b74c 100644
--- a/cpukit/libmisc/cpuuse/cpuusagetop.c
+++ b/cpukit/libmisc/cpuuse/cpuusagetop.c
@@ -32,6 +32,7 @@
 #include <inttypes.h>
 
 #include <rtems/cpuuse.h>
+#include <rtems/printer.h>
 #include <rtems/malloc.h>
 #include <rtems/score/objectimpl.h>
 #include <rtems/score/protectedheap.h>
diff --git a/cpukit/libmisc/fb/mw_print.c b/cpukit/libmisc/fb/mw_print.c
index 25a3456..c04f5a2 100644
--- a/cpukit/libmisc/fb/mw_print.c
+++ b/cpukit/libmisc/fb/mw_print.c
@@ -21,6 +21,7 @@
 #include <stdio.h>
 
 #include <rtems/mw_uid.h>
+#include <rtems/printer.h>
 
 static const char *uid_buttons(
   unsigned short  btns,
diff --git a/cpukit/libmisc/shell/main_blkstats.c b/cpukit/libmisc/shell/main_blkstats.c
index d814df6..69548cf 100644
--- a/cpukit/libmisc/shell/main_blkstats.c
+++ b/cpukit/libmisc/shell/main_blkstats.c
@@ -17,6 +17,7 @@
 #endif
 
 #include <rtems/blkdev.h>
+#include <rtems/printer.h>
 #include <rtems/shellconfig.h>
 
 #include <string.h>
diff --git a/cpukit/libmisc/shell/main_cpuinfo.c b/cpukit/libmisc/shell/main_cpuinfo.c
index c5bc9a3..9245c0f 100644
--- a/cpukit/libmisc/shell/main_cpuinfo.c
+++ b/cpukit/libmisc/shell/main_cpuinfo.c
@@ -19,6 +19,7 @@
 #include <rtems/shell.h>
 #include <rtems/shellconfig.h>
 #include <rtems/cpuuse.h>
+#include <rtems/printer.h>
 
 static int rtems_shell_main_cpuinfo(int argc, char **argv)
 {
diff --git a/cpukit/libmisc/shell/main_cpuuse.c b/cpukit/libmisc/shell/main_cpuuse.c
index 190fd03..726d907 100644
--- a/cpukit/libmisc/shell/main_cpuuse.c
+++ b/cpukit/libmisc/shell/main_cpuuse.c
@@ -18,6 +18,7 @@
 
 #include <rtems.h>
 #include <rtems/cpuuse.h>
+#include <rtems/printer.h>
 #include <rtems/shell.h>
 #include "internal.h"
 
diff --git a/cpukit/libmisc/shell/main_perioduse.c b/cpukit/libmisc/shell/main_perioduse.c
index 023e154..6b74bb5 100644
--- a/cpukit/libmisc/shell/main_perioduse.c
+++ b/cpukit/libmisc/shell/main_perioduse.c
@@ -17,6 +17,7 @@
 #include <string.h>
 
 #include <rtems.h>
+#include <rtems/printer.h>
 #include <rtems/shell.h>
 #include "internal.h"
 
diff --git a/cpukit/libmisc/shell/main_profreport.c b/cpukit/libmisc/shell/main_profreport.c
index a98b8ba..499e55d 100644
--- a/cpukit/libmisc/shell/main_profreport.c
+++ b/cpukit/libmisc/shell/main_profreport.c
@@ -19,6 +19,7 @@
 #include <stdio.h>
 
 #include <rtems/profiling.h>
+#include <rtems/printer.h>
 #include <rtems/shell.h>
 #include <rtems/shellconfig.h>
 
diff --git a/cpukit/libmisc/shell/main_stackuse.c b/cpukit/libmisc/shell/main_stackuse.c
index 40fc711..66ab863 100644
--- a/cpukit/libmisc/shell/main_stackuse.c
+++ b/cpukit/libmisc/shell/main_stackuse.c
@@ -16,6 +16,7 @@
 #include <stdio.h>
 
 #include <rtems.h>
+#include <rtems/printer.h>
 #include <rtems/stackchk.h>
 #include <rtems/shell.h>
 #include "internal.h"
diff --git a/cpukit/libmisc/shell/main_top.c b/cpukit/libmisc/shell/main_top.c
index aea50d8..1596ff0 100644
--- a/cpukit/libmisc/shell/main_top.c
+++ b/cpukit/libmisc/shell/main_top.c
@@ -18,6 +18,7 @@
 
 #include <rtems.h>
 #include <rtems/cpuuse.h>
+#include <rtems/printer.h>
 #include <rtems/shell.h>
 #include "internal.h"
 
diff --git a/cpukit/libmisc/stackchk/check.c b/cpukit/libmisc/stackchk/check.c
index 39650f5..a4b606a 100644
--- a/cpukit/libmisc/stackchk/check.c
+++ b/cpukit/libmisc/stackchk/check.c
@@ -40,6 +40,7 @@
 #include <stdlib.h>
 
 #include <rtems/bspIo.h>
+#include <rtems/printer.h>
 #include <rtems/stackchk.h>
 #include <rtems/score/percpu.h>
 #include "internal.h"
diff --git a/cpukit/libmisc/testsupport/test.h b/cpukit/libmisc/testsupport/test.h
index ce5172f..94f917f 100644
--- a/cpukit/libmisc/testsupport/test.h
+++ b/cpukit/libmisc/testsupport/test.h
@@ -16,7 +16,7 @@
 #define _RTEMS_TEST_H
 
 #include <rtems.h>
-#include <rtems/print.h>
+#include <rtems/printer.h>
 #include <rtems/score/atomic.h>
 #include <rtems/score/smpbarrier.h>
 
diff --git a/cpukit/mghttpd/mongoose.c b/cpukit/mghttpd/mongoose.c
index a89fc56..3dd0d4b 100644
--- a/cpukit/mghttpd/mongoose.c
+++ b/cpukit/mghttpd/mongoose.c
@@ -5520,7 +5520,7 @@ struct mg_context *mg_start(const struct mg_callbacks *callbacks,
   return ctx;
 }
 #ifdef __rtems__
-#include <rtems/print.h>
+#include <rtems/printer.h>
 
 static int mg_printer_plugin(void *context, const char *fmt, va_list ap) {
   return mg_vprintf(context, fmt, ap);
diff --git a/cpukit/preinstall.am b/cpukit/preinstall.am
index fdf2016..5ba1ee4 100644
--- a/cpukit/preinstall.am
+++ b/cpukit/preinstall.am
@@ -228,6 +228,10 @@ $(PROJECT_INCLUDE)/rtems/print.h: include/rtems/print.h $(PROJECT_INCLUDE)/rtems
 	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/print.h
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/print.h
 
+$(PROJECT_INCLUDE)/rtems/printer.h: include/rtems/printer.h $(PROJECT_INCLUDE)/rtems/$(dirstamp)
+	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/printer.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/printer.h
+
 $(PROJECT_INCLUDE)/rtems/userenv.h: include/rtems/userenv.h $(PROJECT_INCLUDE)/rtems/$(dirstamp)
 	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/userenv.h
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/userenv.h
diff --git a/cpukit/rtems/src/ratemonreportstatistics.c b/cpukit/rtems/src/ratemonreportstatistics.c
index 3f264df..a1bab4a 100644
--- a/cpukit/rtems/src/ratemonreportstatistics.c
+++ b/cpukit/rtems/src/ratemonreportstatistics.c
@@ -20,7 +20,7 @@
 
 #include <rtems/rtems/ratemonimpl.h>
 #include <rtems/rtems/object.h>
-#include <rtems/print.h>
+#include <rtems/printer.h>
 
 #include <inttypes.h>
 
diff --git a/cpukit/score/src/cpusetprintsupport.c b/cpukit/score/src/cpusetprintsupport.c
index 83345d9..13cffd9 100644
--- a/cpukit/score/src/cpusetprintsupport.c
+++ b/cpukit/score/src/cpusetprintsupport.c
@@ -23,7 +23,7 @@
 #include <stdio.h>
 #include <ctype.h>
 #include <inttypes.h>
-#include <rtems/print.h>
+#include <rtems/printer.h>
 #include <rtems/score/cpusetimpl.h>
 
 #ifdef __RTEMS_HAVE_SYS_CPUSET_H__
@@ -49,7 +49,7 @@
     int i;
     rtems_printf(printer ,"%s: ", description);
     for(i=0; i<_NCPUWORDS; i++)
-      rtems_printf(printer ,"%x", cpuset->__bits[i]);
+      rtems_printf(printer ,"%" PRIx32 "", cpuset->__bits[i]);
     rtems_printf(printer ,"\n");
   }
 
diff --git a/testsuites/samples/hello/init.c b/testsuites/samples/hello/init.c
index ea9af89..acdabd8 100644
--- a/testsuites/samples/hello/init.c
+++ b/testsuites/samples/hello/init.c
@@ -11,6 +11,7 @@
 #include "config.h"
 #endif
 
+#include <rtems/printer.h>
 #include <rtems/test.h>
 
 #include <bsp.h> /* for device driver prototypes */
-- 
1.8.4.5




More information about the devel mailing list