Implement setlogmask(); move some syslog logic from libc/syslog to fs/syslog

This commit is contained in:
Gregory Nutt 2014-10-08 19:08:26 -06:00
parent f824b59f43
commit ec57ab6391
16 changed files with 575 additions and 158 deletions

View File

@ -48,6 +48,7 @@ include vfs/Make.defs
include driver/Make.defs include driver/Make.defs
include dirent/Make.defs include dirent/Make.defs
include aio/Make.defs include aio/Make.defs
include syslog/Make.defs
include mmap/Make.defs include mmap/Make.defs
# OS resources # OS resources

View File

@ -41,14 +41,6 @@ CSRCS += fs_registerdriver.c fs_unregisterdriver.c
CSRCS += fs_registerblockdriver.c fs_unregisterblockdriver.c CSRCS += fs_registerblockdriver.c fs_unregisterblockdriver.c
CSRCS += fs_findblockdriver.c fs_openblockdriver.c fs_closeblockdriver.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 # Include driver build support
DEPPATH += --dep-path driver DEPPATH += --dep-path driver

59
fs/syslog/Make.defs Normal file
View File

@ -0,0 +1,59 @@
############################################################################
# libc/syslog/Make.defs
#
# Copyright (C) 2014 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>
#
# 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

129
fs/syslog/fs_lowvsyslog.c Normal file
View File

@ -0,0 +1,129 @@
/****************************************************************************
* fs/syslog/fs_lowsyslog.c
*
* Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* 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 <nuttx/config.h>
#include <stdio.h>
#include <syslog.h>
#include <nuttx/streams.h>
#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 */

121
fs/syslog/fs_setlogmask.c Normal file
View File

@ -0,0 +1,121 @@
/****************************************************************************
* fs/syslog/fs_setlogmask.c
*
* Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* 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 <nuttx/config.h>
#include <stdint.h>
#include <syslog.h>
#include <arch/irq.h>
#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;
}

View File

@ -1,5 +1,5 @@
/**************************************************************************** /****************************************************************************
* fs/syslog.c * fs/syslog/syslog.c
* *
* Copyright (C) 2012 Gregory Nutt. All rights reserved. * Copyright (C) 2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org> * Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -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 <gnutt@nuttx.org> * Author: Gregory Nutt <gnutt@nuttx.org>
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -40,19 +40,14 @@
#include <nuttx/config.h> #include <nuttx/config.h>
#include <stdbool.h> #include <stdbool.h>
#include <syslog.h>
#include "lib_internal.h" #include <arch/irq.h>
#include "syslog/syslog.h"
#ifdef CONFIG_SYSLOG_ENABLE #ifdef CONFIG_SYSLOG_ENABLE
/****************************************************************************
* Public Data
****************************************************************************/
/* Debug output is initially disabled */
bool g_syslogenable;
/**************************************************************************** /****************************************************************************
* Public Functions * Public Functions
****************************************************************************/ ****************************************************************************/
@ -67,7 +62,29 @@ bool g_syslogenable;
void syslog_enable(bool enable) 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 */ #endif /* CONFIG_SYSLOG_ENABLE */

View File

@ -39,13 +39,14 @@
#include <nuttx/config.h> #include <nuttx/config.h>
#include <stdio.h>
#include <unistd.h> #include <unistd.h>
#include <assert.h> #include <assert.h>
#include <errno.h> #include <errno.h>
#include <nuttx/syslog/syslog.h> #include <nuttx/syslog/syslog.h>
#include <nuttx/streams.h>
#include "lib_internal.h"
#include "syslog/syslog.h" #include "syslog/syslog.h"
#ifdef CONFIG_SYSLOG #ifdef CONFIG_SYSLOG

151
fs/syslog/fs_vsyslog.c Normal file
View File

@ -0,0 +1,151 @@
/****************************************************************************
* libc/syslog/fs_vsyslog.c
*
* Copyright (C) 2007-2009, 2011-2014 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* 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 <nuttx/config.h>
#include <stdio.h>
#include <syslog.h>
#include <nuttx/streams.h>
#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;
}

View File

@ -41,6 +41,7 @@
****************************************************************************/ ****************************************************************************/
#include <nuttx/config.h> #include <nuttx/config.h>
#include <stdbool.h>
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
@ -63,9 +64,17 @@ extern "C"
#define EXTERN extern #define EXTERN extern
#endif #endif
/* Debug output is initially disabled */ /* The currently enabled set of syslog priorities */
EXTERN uint8_t g_syslog_mask;
#ifdef CONFIG_SYSLOG_ENABLE #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; EXTERN bool g_syslogenable;
#endif #endif

View File

@ -372,6 +372,51 @@ void lib_nulloutstream(FAR struct lib_outstream_s *nulloutstream);
void lib_syslogstream(FAR struct lib_outstream_s *stream); void lib_syslogstream(FAR struct lib_outstream_s *stream);
#endif #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 #undef EXTERN
#if defined(__cplusplus) #if defined(__cplusplus)
} }

View File

@ -148,28 +148,6 @@ void stream_semtake(FAR struct streamlist *list);
void stream_semgive(FAR struct streamlist *list); void stream_semgive(FAR struct streamlist *list);
#endif #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 */ /* Defined in lib_dtoa.c */
#ifdef CONFIG_LIBC_FLOATINGPOINT #ifdef CONFIG_LIBC_FLOATINGPOINT

View File

@ -45,6 +45,7 @@
#include <errno.h> #include <errno.h>
#include <nuttx/fs/fs.h> #include <nuttx/fs/fs.h>
#include <nuttx/streams.h>
#include "lib_internal.h" #include "lib_internal.h"

View File

@ -37,14 +37,6 @@
CSRCS += lib_syslog.c lib_lowsyslog.c 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 # Add the syslog directory to the build
DEPPATH += --dep-path syslog DEPPATH += --dep-path syslog

View File

@ -39,14 +39,10 @@
#include <nuttx/config.h> #include <nuttx/config.h>
#include <stdio.h> #include <stdarg.h>
#include <debug.h> #include <syslog.h>
#include "lib_internal.h" #if defined(CONFIG_ARCH_LOWPUTC) || defined(CONFIG_SYSLOG)
/* This interface can only be used from within the kernel */
#if !defined(CONFIG_BUILD_PROTECTED) || defined(__KERNEL__)
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
@ -77,33 +73,17 @@
****************************************************************************/ ****************************************************************************/
/**************************************************************************** /****************************************************************************
* Private Variables * Private Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/ ****************************************************************************/
/**************************************************************************** /****************************************************************************
* Public 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 * Name: lowsyslog
****************************************************************************/ ****************************************************************************/
@ -113,18 +93,13 @@ int lowsyslog(int priority, FAR const char *fmt, ...)
va_list ap; va_list ap;
int ret; int ret;
#ifdef CONFIG_SYSLOG_ENABLE /* Let lowvsyslog do the work */
ret = 0;
if (g_syslogenable)
#endif
{
va_start(ap, fmt); va_start(ap, fmt);
ret = lowvsyslog(priority, fmt, ap); ret = lowvsyslog(priority, fmt, ap);
va_end(ap); va_end(ap);
}
return ret; return ret;
} }
#endif /* CONFIG_ARCH_LOWPUTC || CONFIG_SYSLOG */ #endif /* CONFIG_ARCH_LOWPUTC || CONFIG_SYSLOG */
#endif /* __KERNEL__ */

View File

@ -39,23 +39,13 @@
#include <nuttx/config.h> #include <nuttx/config.h>
#include <stdio.h> #include <stdarg.h>
#include <syslog.h> #include <syslog.h>
#include "lib_internal.h"
#include "syslog/syslog.h"
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * 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 * Private Type Declarations
****************************************************************************/ ****************************************************************************/
@ -81,57 +71,17 @@
****************************************************************************/ ****************************************************************************/
/**************************************************************************** /****************************************************************************
* Private Variables * Private Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/ ****************************************************************************/
/**************************************************************************** /****************************************************************************
* Public 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 * Name: syslog
****************************************************************************/ ****************************************************************************/
@ -141,15 +91,11 @@ int syslog(int priority, FAR const char *fmt, ...)
va_list ap; va_list ap;
int ret; int ret;
#ifdef CONFIG_SYSLOG_ENABLE /* Let vsyslog do the work */
ret = 0;
if (g_syslogenable)
#endif
{
va_start(ap, fmt); va_start(ap, fmt);
ret = vsyslog(priority, fmt, ap); ret = vsyslog(priority, fmt, ap);
va_end(ap); va_end(ap);
}
return ret; return ret;
} }