[rtems-libbsd commit] Modify rtems_bsd_set_vprintf_handler()

Sebastian Huber sebh at rtems.org
Wed Nov 9 09:01:10 UTC 2016


Module:    rtems-libbsd
Branch:    master
Commit:    520ab224ca812287640930135d57bf9d781d4476
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=520ab224ca812287640930135d57bf9d781d4476

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Jun 28 08:35:06 2016 +0200

Modify rtems_bsd_set_vprintf_handler()

Return previous vprintf()-handler in rtems_bsd_set_vprintf_handler().

---

 rtemsbsd/include/rtems/bsd/bsd.h      | 13 ++++++++++---
 rtemsbsd/rtems/rtems-kernel-vprintf.c | 12 ++++++++----
 testsuite/log01/test_main.c           |  4 +++-
 3 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/rtemsbsd/include/rtems/bsd/bsd.h b/rtemsbsd/include/rtems/bsd/bsd.h
index 2b09b18..0968062 100644
--- a/rtemsbsd/include/rtems/bsd/bsd.h
+++ b/rtemsbsd/include/rtems/bsd/bsd.h
@@ -207,14 +207,21 @@ int rtems_bsd_bus_root_resume(void);
 int rtems_bsd_bus_root_detach(void);
 
 /**
+ * @brief The output back-end for logging functions.
+ */
+typedef int (*rtems_bsd_vprintf_handler)(int, const char *, va_list);
+
+/**
  * @brief Sets the output back-end for logging functions.
  *
- * @param new_vprintf_handler The new output back-end for logging functions.
+ * @param new_handler The new output back-end for logging functions.
+ *
+ * @return The previous handler.
  *
  * @see rtems_bsd_vprintf().
  */
-void rtems_bsd_set_vprintf_handler(int (*new_vprintf_handler)
-    (int, const char *, va_list));
+rtems_bsd_vprintf_handler rtems_bsd_set_vprintf_handler(
+    rtems_bsd_vprintf_handler new_handler);
 
 /**
  * @brief Output back-end for logging functions.
diff --git a/rtemsbsd/rtems/rtems-kernel-vprintf.c b/rtemsbsd/rtems/rtems-kernel-vprintf.c
index 6d0cf59..7364ec6 100644
--- a/rtemsbsd/rtems/rtems-kernel-vprintf.c
+++ b/rtemsbsd/rtems/rtems-kernel-vprintf.c
@@ -103,12 +103,16 @@ default_vprintf_handler(int level, const char *fmt, va_list ap)
 static int (*vprintf_handler)(int, const char *, va_list) =
     default_vprintf_handler;
 
-void
-rtems_bsd_set_vprintf_handler(int (*new_vprintf_handler)
-    (int, const char *, va_list))
+rtems_bsd_vprintf_handler
+rtems_bsd_set_vprintf_handler(rtems_bsd_vprintf_handler new_handler)
 {
+	rtems_bsd_vprintf_handler old_handler;
 
-	vprintf_handler = new_vprintf_handler;
+	VPRINTF_LOCK();
+	old_handler = vprintf_handler;
+	vprintf_handler = new_handler;
+	VPRINTF_UNLOCK();
+	return (old_handler);
 }
 
 int
diff --git a/testsuite/log01/test_main.c b/testsuite/log01/test_main.c
index 3a4ef65..63077a5 100644
--- a/testsuite/log01/test_main.c
+++ b/testsuite/log01/test_main.c
@@ -32,8 +32,8 @@
 #include <machine/rtems-bsd-kernel-space.h>
 
 #include <sys/types.h>
+#include <sys/syslog.h>
 #include <sys/systm.h>
-#include <syslog.h>
 
 #include <assert.h>
 #include <errno.h>
@@ -42,6 +42,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <rtems/bsd/bsd.h>
+
 #define TEST_NAME "LIBBSD LOG 1"
 
 typedef struct {




More information about the vc mailing list