diff --git a/fs/Makefile b/fs/Makefile index 0c72506041..33e6b315c6 100644 --- a/fs/Makefile +++ b/fs/Makefile @@ -48,6 +48,7 @@ include vfs/Make.defs include driver/Make.defs include dirent/Make.defs include aio/Make.defs +include syslog/Make.defs include mmap/Make.defs # OS resources diff --git a/fs/driver/Make.defs b/fs/driver/Make.defs index 64338dece7..1a7ea9e558 100644 --- a/fs/driver/Make.defs +++ b/fs/driver/Make.defs @@ -41,14 +41,6 @@ CSRCS += fs_registerdriver.c fs_unregisterdriver.c CSRCS += fs_registerblockdriver.c fs_unregisterblockdriver.c CSRCS += fs_findblockdriver.c fs_openblockdriver.c fs_closeblockdriver.c -# System logging to a character device (or file) - -ifeq ($(CONFIG_SYSLOG),y) -ifeq ($(CONFIG_SYSLOG_CHAR),y) -CSRCS += fs_syslog.c -endif -endif - # Include driver build support DEPPATH += --dep-path driver diff --git a/fs/syslog/Make.defs b/fs/syslog/Make.defs new file mode 100644 index 0000000000..21e04e9e62 --- /dev/null +++ b/fs/syslog/Make.defs @@ -0,0 +1,59 @@ +############################################################################ +# libc/syslog/Make.defs +# +# Copyright (C) 2014 Gregory Nutt. All rights reserved. +# Author: Gregory Nutt +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name NuttX nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +# Add the internal C files to the build + +CSRCS += fs_vsyslog.c fs_lowvsyslog.c fs_setlogmask.c + +ifeq ($(CONFIG_SYSLOG),y) +CSRCS += fs_syslogstream.c +endif + +ifeq ($(CONFIG_SYSLOG_ENABLE),y) +CSRCS += fs_syslogenable.c +endif + +# System logging to a character device (or file) + +ifeq ($(CONFIG_SYSLOG),y) +ifeq ($(CONFIG_SYSLOG_CHAR),y) +CSRCS += fs_syslog.c +endif +endif + +# Add the syslog directory to the build + +DEPPATH += --dep-path syslog +VPATH += :syslog diff --git a/fs/syslog/fs_lowvsyslog.c b/fs/syslog/fs_lowvsyslog.c new file mode 100644 index 0000000000..52d493a73e --- /dev/null +++ b/fs/syslog/fs_lowvsyslog.c @@ -0,0 +1,129 @@ +/**************************************************************************** + * fs/syslog/fs_lowsyslog.c + * + * Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include + +#include + +#include "syslog/syslog.h" + +#if defined(CONFIG_ARCH_LOWPUTC) || defined(CONFIG_SYSLOG) + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/**************************************************************************** + * Private Type Declarations + ****************************************************************************/ + +/**************************************************************************** + * Private Function Prototypes + ****************************************************************************/ + +/**************************************************************************** + * Global Function Prototypes + ****************************************************************************/ + +/**************************************************************************** + * Global Constant Data + ****************************************************************************/ + +/**************************************************************************** + * Global Variables + ****************************************************************************/ + +/**************************************************************************** + * Private Constant Data + ****************************************************************************/ + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: lowvsyslog_internal + ****************************************************************************/ + +static inline int lowvsyslog_internal(FAR const char *fmt, va_list ap) +{ + struct lib_outstream_s stream; + + /* Wrap the stdout in a stream object and let lib_vsprintf do the work. */ + +#ifdef CONFIG_SYSLOG + lib_syslogstream((FAR struct lib_outstream_s *)&stream); +#else + lib_lowoutstream((FAR struct lib_outstream_s *)&stream); +#endif + return lib_vsprintf((FAR struct lib_outstream_s *)&stream, fmt, ap); +} + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: lowvsyslog + ****************************************************************************/ + +int lowvsyslog(int priority, FAR const char *fmt, va_list ap) +{ + int ret = 0; + + /* Check if this priority is enabled */ + + if ((g_syslog_mask & LOG_MASK(priority)) != 0) + { + /* Yes.. let vsylog_internal to the deed */ + + ret = lowvsyslog_internal(fmt, ap); + } + + return ret; +} + +#endif /* CONFIG_ARCH_LOWPUTC || CONFIG_SYSLOG */ diff --git a/fs/syslog/fs_setlogmask.c b/fs/syslog/fs_setlogmask.c new file mode 100644 index 0000000000..802fb5ba58 --- /dev/null +++ b/fs/syslog/fs_setlogmask.c @@ -0,0 +1,121 @@ +/**************************************************************************** + * fs/syslog/fs_setlogmask.c + * + * Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include + +#include + +#include "syslog/syslog.h" + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +#ifdef CONFIG_SYSLOG_ENABLE +/* The initial mask is all disabled */ + +# define INITIAL_SYSLOG_MASK 0 +#else +/* The initial mask is all enabled */ + +# define INITIAL_SYSLOG_MASK LOG_ALL +#endif + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +/* The currently enabled set of syslog priorities */ + +uint8_t g_syslog_mask = INITIAL_SYSLOG_MASK; + +#ifdef CONFIG_SYSLOG_ENABLE +/* True if the syslog is enabled */ + +bool g_syslog_enabled; + +/* The set of syslog priorities to use when the syslog is enabled */ + +uint8_t g_syslog_enablemask = LOG_ALL; +#endif + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: setlogmask + * + * Description: + * Enable or disable debug output. + * + ****************************************************************************/ + +int setlogmask(int mask) +{ + uint8_t oldmask; + irqstate_t flags; + + /* These operations must be exclusive with respect to other threads as well + * as interrupts. + */ + + flags = irqsave(); + +#ifdef CONFIG_SYSLOG_ENABLE + /* If the syslog is disabled, use the saved enable mask */ + + if (!g_syslog_enabled) + { + oldmask = g_syslog_enablemask; + g_syslog_enablemask = (uint8_t)mask; + } + else +#endif + { + oldmask = g_syslog_mask; + g_syslog_mask = (uint8_t)mask; + } + + irqrestore(flags); + return oldmask; +} diff --git a/fs/driver/fs_syslog.c b/fs/syslog/fs_syslog.c similarity index 99% rename from fs/driver/fs_syslog.c rename to fs/syslog/fs_syslog.c index ef35fb548e..151f1cab9f 100644 --- a/fs/driver/fs_syslog.c +++ b/fs/syslog/fs_syslog.c @@ -1,5 +1,5 @@ /**************************************************************************** - * fs/syslog.c + * fs/syslog/syslog.c * * Copyright (C) 2012 Gregory Nutt. All rights reserved. * Author: Gregory Nutt diff --git a/libc/syslog/lib_syslogenable.c b/fs/syslog/fs_syslogenable.c similarity index 72% rename from libc/syslog/lib_syslogenable.c rename to fs/syslog/fs_syslogenable.c index adba5b7081..2395a6dc63 100644 --- a/libc/syslog/lib_syslogenable.c +++ b/fs/syslog/fs_syslogenable.c @@ -1,7 +1,7 @@ /**************************************************************************** - * libc/syslog/lib_syslogenable.c + * fs/syslog/fs_syslogenable.c * - * Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved. + * Copyright (C) 2007-2009, 2011-2012, 2014 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -40,19 +40,14 @@ #include #include +#include -#include "lib_internal.h" +#include + +#include "syslog/syslog.h" #ifdef CONFIG_SYSLOG_ENABLE -/**************************************************************************** - * Public Data - ****************************************************************************/ - -/* Debug output is initially disabled */ - -bool g_syslogenable; - /**************************************************************************** * Public Functions ****************************************************************************/ @@ -67,7 +62,29 @@ bool g_syslogenable; void syslog_enable(bool enable) { - g_syslogenable = enable; + irqstate_t flags; + + /* These operations must be exclusive with respect to other threads as well + * as interrupts. + */ + + flags = irqsave(); + if (enable && !g_syslog_enabled) + { + /* Transition from the disabled to the enabled state */ + + g_syslog_mask = g_syslog_enablemask; /* Restore the enabled mask */ + g_syslog_enabled = true; /* Mark enabled */ + } + else if (!enabled && g_syslog_enabled) + { + /* Transition from the enabled to the disabled state */ + + g_syslog_enablemask = g_syslog_mask; /* Save the enabled mask */ + g_syslog_mask = 0; /* Clear the current mask */ + g_syslog_enabled = false /* Remember not enabled */ + } + irqrestore(flags); } #endif /* CONFIG_SYSLOG_ENABLE */ diff --git a/libc/syslog/lib_syslogstream.c b/fs/syslog/fs_syslogstream.c similarity index 98% rename from libc/syslog/lib_syslogstream.c rename to fs/syslog/fs_syslogstream.c index 7d485e74c8..4c6cfa8c2e 100644 --- a/libc/syslog/lib_syslogstream.c +++ b/fs/syslog/fs_syslogstream.c @@ -39,13 +39,14 @@ #include +#include #include #include #include #include +#include -#include "lib_internal.h" #include "syslog/syslog.h" #ifdef CONFIG_SYSLOG diff --git a/fs/syslog/fs_vsyslog.c b/fs/syslog/fs_vsyslog.c new file mode 100644 index 0000000000..8d49570ecf --- /dev/null +++ b/fs/syslog/fs_vsyslog.c @@ -0,0 +1,151 @@ +/**************************************************************************** + * libc/syslog/fs_vsyslog.c + * + * Copyright (C) 2007-2009, 2011-2014 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include + +#include + +#include "syslog/syslog.h" + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/**************************************************************************** + * Private Type Declarations + ****************************************************************************/ + +/**************************************************************************** + * Private Function Prototypes + ****************************************************************************/ + +/**************************************************************************** + * Global Function Prototypes + ****************************************************************************/ + +/**************************************************************************** + * Global Constant Data + ****************************************************************************/ + +/**************************************************************************** + * Global Variables + ****************************************************************************/ + +/**************************************************************************** + * Private Constant Data + ****************************************************************************/ + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: vsyslog_internal + ****************************************************************************/ + +static inline int vsyslog_internal(FAR const char *fmt, va_list ap) +{ +#if defined(CONFIG_SYSLOG) + + struct lib_outstream_s stream; + + /* Wrap the low-level output in a stream object and let lib_vsprintf + * do the work. + */ + + lib_syslogstream((FAR struct lib_outstream_s *)&stream); + return lib_vsprintf((FAR struct lib_outstream_s *)&stream, fmt, ap); + +#elif CONFIG_NFILE_DESCRIPTORS > 0 + + struct lib_rawoutstream_s rawoutstream; + + /* Wrap the stdout in a stream object and let lib_vsprintf + * do the work. + */ + + lib_rawoutstream(&rawoutstream, 1); + return lib_vsprintf(&rawoutstream.public, fmt, ap); + +#elif defined(CONFIG_ARCH_LOWPUTC) + + struct lib_outstream_s stream; + + /* Wrap the low-level output in a stream object and let lib_vsprintf + * do the work. + */ + + lib_lowoutstream((FAR struct lib_outstream_s *)&stream); + return lib_vsprintf((FAR struct lib_outstream_s *)&stream, fmt, ap); + +#else + return 0; +#endif +} + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: vsyslog + ****************************************************************************/ + +int vsyslog(int priority, FAR const char *fmt, va_list ap) +{ + int ret = 0; + + /* Check if this priority is enabled */ + + if ((g_syslog_mask & LOG_MASK(priority)) != 0) + { + /* Yes.. let vsylog_internal to the deed */ + + ret = vsyslog_internal(fmt, ap); + } + + return ret; +} diff --git a/libc/syslog/syslog.h b/fs/syslog/syslog.h similarity index 92% rename from libc/syslog/syslog.h rename to fs/syslog/syslog.h index 6f9cb5ffa8..bd5d1a7243 100644 --- a/libc/syslog/syslog.h +++ b/fs/syslog/syslog.h @@ -41,6 +41,7 @@ ****************************************************************************/ #include +#include /**************************************************************************** * Pre-processor Definitions @@ -63,9 +64,17 @@ extern "C" #define EXTERN extern #endif -/* Debug output is initially disabled */ +/* The currently enabled set of syslog priorities */ + +EXTERN uint8_t g_syslog_mask; #ifdef CONFIG_SYSLOG_ENABLE +/* True if the syslog is enabled */ + +EXTERN bool g_syslogenable; + +/* The set of syslog priorities to use when the syslog is enabled */ + EXTERN bool g_syslogenable; #endif diff --git a/include/nuttx/streams.h b/include/nuttx/streams.h index 01ec965c3a..139741ff05 100644 --- a/include/nuttx/streams.h +++ b/include/nuttx/streams.h @@ -372,6 +372,51 @@ void lib_nulloutstream(FAR struct lib_outstream_s *nulloutstream); void lib_syslogstream(FAR struct lib_outstream_s *stream); #endif +/**************************************************************************** + * Name: lib_noflush + * + * Description: + * lib_noflush() provides a common, dummy flush method for output streams + * that are not flushable. Only used if CONFIG_STDIO_LINEBUFFER is selected. + * + * Return: + * Always returns OK + * + ****************************************************************************/ + +#ifdef CONFIG_STDIO_LINEBUFFER +int lib_noflush(FAR struct lib_outstream_s *stream); +#endif + +/**************************************************************************** + * Name: lib_snoflush + * + * Description: + * lib_snoflush() provides a common, dummy flush method for seekable output + * streams that are not flushable. Only used if CONFIG_STDIO_LINEBUFFER + * is selected. + * + * Return: + * Always returns OK + * + ****************************************************************************/ + +#ifdef CONFIG_STDIO_LINEBUFFER +int lib_snoflush(FAR struct lib_sostream_s *this); +#endif + +/**************************************************************************** + * Name: lib_sprintf and lib_vsprintf + * + * Description: + * Stream-oriented versions of sprintf and vsprintf. + * + ****************************************************************************/ + +int lib_sprintf(FAR struct lib_outstream_s *obj, FAR const char *fmt, ...); +int lib_vsprintf(FAR struct lib_outstream_s *obj, + FAR const char *src, va_list ap); + #undef EXTERN #if defined(__cplusplus) } diff --git a/libc/lib_internal.h b/libc/lib_internal.h index b6518da6dd..a9f8a3fbce 100644 --- a/libc/lib_internal.h +++ b/libc/lib_internal.h @@ -148,28 +148,6 @@ void stream_semtake(FAR struct streamlist *list); void stream_semgive(FAR struct streamlist *list); #endif -/* Defined in lib_libnoflush.c */ - -#ifdef CONFIG_STDIO_LINEBUFFER -int lib_noflush(FAR struct lib_outstream_s *this); -#endif - -/* Defined in lib_libsnoflush.c */ - -#ifdef CONFIG_STDIO_LINEBUFFER -int lib_snoflush(FAR struct lib_sostream_s *this); -#endif - -/* Defined in lib_libsprintf.c */ - -int lib_sprintf(FAR struct lib_outstream_s *obj, - const char *fmt, ...); - -/* Defined lib_libvsprintf.c */ - -int lib_vsprintf(FAR struct lib_outstream_s *obj, - FAR const char *src, va_list ap); - /* Defined in lib_dtoa.c */ #ifdef CONFIG_LIBC_FLOATINGPOINT diff --git a/libc/stdio/lib_libnoflush.c b/libc/stdio/lib_libnoflush.c index 076f8a17e6..eafe63977b 100644 --- a/libc/stdio/lib_libnoflush.c +++ b/libc/stdio/lib_libnoflush.c @@ -45,6 +45,7 @@ #include #include +#include #include "lib_internal.h" diff --git a/libc/syslog/Make.defs b/libc/syslog/Make.defs index fe6e620ed2..9df5c32288 100644 --- a/libc/syslog/Make.defs +++ b/libc/syslog/Make.defs @@ -37,14 +37,6 @@ CSRCS += lib_syslog.c lib_lowsyslog.c -ifeq ($(CONFIG_SYSLOG),y) -CSRCS += lib_syslogstream.c -endif - -ifeq ($(CONFIG_SYSLOG_ENABLE),y) -CSRCS += lib_syslogenable.c -endif - # Add the syslog directory to the build DEPPATH += --dep-path syslog diff --git a/libc/syslog/lib_lowsyslog.c b/libc/syslog/lib_lowsyslog.c index f7287c517b..53de47aba4 100644 --- a/libc/syslog/lib_lowsyslog.c +++ b/libc/syslog/lib_lowsyslog.c @@ -39,14 +39,10 @@ #include -#include -#include +#include +#include -#include "lib_internal.h" - -/* This interface can only be used from within the kernel */ - -#if !defined(CONFIG_BUILD_PROTECTED) || defined(__KERNEL__) +#if defined(CONFIG_ARCH_LOWPUTC) || defined(CONFIG_SYSLOG) /**************************************************************************** * Pre-processor Definitions @@ -77,33 +73,17 @@ ****************************************************************************/ /**************************************************************************** - * Private Variables + * Private Data + ****************************************************************************/ + +/**************************************************************************** + * Private Functions ****************************************************************************/ /**************************************************************************** * Public Functions ****************************************************************************/ -/**************************************************************************** - * Name: lowvsyslog - ****************************************************************************/ - -#if defined(CONFIG_ARCH_LOWPUTC) || defined(CONFIG_SYSLOG) - -int lowvsyslog(int priority, FAR const char *fmt, va_list ap) -{ - struct lib_outstream_s stream; - - /* Wrap the stdout in a stream object and let lib_vsprintf do the work. */ - -#ifdef CONFIG_SYSLOG - lib_syslogstream((FAR struct lib_outstream_s *)&stream); -#else - lib_lowoutstream((FAR struct lib_outstream_s *)&stream); -#endif - return lib_vsprintf((FAR struct lib_outstream_s *)&stream, fmt, ap); -} - /**************************************************************************** * Name: lowsyslog ****************************************************************************/ @@ -111,20 +91,15 @@ int lowvsyslog(int priority, FAR const char *fmt, va_list ap) int lowsyslog(int priority, FAR const char *fmt, ...) { va_list ap; - int ret; + int ret; -#ifdef CONFIG_SYSLOG_ENABLE - ret = 0; - if (g_syslogenable) -#endif - { - va_start(ap, fmt); - ret = lowvsyslog(priority, fmt, ap); - va_end(ap); - } + /* Let lowvsyslog do the work */ + + va_start(ap, fmt); + ret = lowvsyslog(priority, fmt, ap); + va_end(ap); return ret; } #endif /* CONFIG_ARCH_LOWPUTC || CONFIG_SYSLOG */ -#endif /* __KERNEL__ */ diff --git a/libc/syslog/lib_syslog.c b/libc/syslog/lib_syslog.c index 21993ecc41..16655a28c9 100644 --- a/libc/syslog/lib_syslog.c +++ b/libc/syslog/lib_syslog.c @@ -39,23 +39,13 @@ #include -#include +#include #include -#include "lib_internal.h" -#include "syslog/syslog.h" - /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ -/* Some output destinations are only available from within the kernel */ - -#if defined(CONFIG_BUILD_PROTECTED) && !defined(__KERNEL__) -# undef CONFIG_SYSLOG -# undef CONFIG_ARCH_LOWPUTC -#endif - /**************************************************************************** * Private Type Declarations ****************************************************************************/ @@ -81,57 +71,17 @@ ****************************************************************************/ /**************************************************************************** - * Private Variables + * Private Data + ****************************************************************************/ + +/**************************************************************************** + * Private Functions ****************************************************************************/ /**************************************************************************** * Public Functions ****************************************************************************/ -/**************************************************************************** - * Name: vsyslog - ****************************************************************************/ - -int vsyslog(int priority, FAR const char *fmt, va_list ap) -{ -#if defined(CONFIG_SYSLOG) - - struct lib_outstream_s stream; - - /* Wrap the low-level output in a stream object and let lib_vsprintf - * do the work. - */ - - lib_syslogstream((FAR struct lib_outstream_s *)&stream); - return lib_vsprintf((FAR struct lib_outstream_s *)&stream, fmt, ap); - -#elif CONFIG_NFILE_DESCRIPTORS > 0 - - struct lib_rawoutstream_s rawoutstream; - - /* Wrap the stdout in a stream object and let lib_vsprintf - * do the work. - */ - - lib_rawoutstream(&rawoutstream, 1); - return lib_vsprintf(&rawoutstream.public, fmt, ap); - -#elif defined(CONFIG_ARCH_LOWPUTC) - - struct lib_outstream_s stream; - - /* Wrap the low-level output in a stream object and let lib_vsprintf - * do the work. - */ - - lib_lowoutstream((FAR struct lib_outstream_s *)&stream); - return lib_vsprintf((FAR struct lib_outstream_s *)&stream, fmt, ap); - -#else - return 0; -#endif -} - /**************************************************************************** * Name: syslog ****************************************************************************/ @@ -139,17 +89,13 @@ int vsyslog(int priority, FAR const char *fmt, va_list ap) int syslog(int priority, FAR const char *fmt, ...) { va_list ap; - int ret; + int ret; -#ifdef CONFIG_SYSLOG_ENABLE - ret = 0; - if (g_syslogenable) -#endif - { - va_start(ap, fmt); - ret = vsyslog(priority, fmt, ap); - va_end(ap); - } + /* Let vsyslog do the work */ + + va_start(ap, fmt); + ret = vsyslog(priority, fmt, ap); + va_end(ap); return ret; }