From 520ab224ca812287640930135d57bf9d781d4476 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 28 Jun 2016 08:35:06 +0200 Subject: 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 2b09b180..09680623 100644 --- a/rtemsbsd/include/rtems/bsd/bsd.h +++ b/rtemsbsd/include/rtems/bsd/bsd.h @@ -206,15 +206,22 @@ 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 6d0cf59f..7364ec6d 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 3a4ef65e..63077a56 100644 --- a/testsuite/log01/test_main.c +++ b/testsuite/log01/test_main.c @@ -32,8 +32,8 @@ #include #include +#include #include -#include #include #include @@ -42,6 +42,8 @@ #include #include +#include + #define TEST_NAME "LIBBSD LOG 1" typedef struct { -- cgit v1.2.3