Index: ossp-pkg/l2/LICENSE
RCS File: /v/ossp/cvs/ossp-pkg/l2/LICENSE,v
rcsdiff -q -kk '-r1.6' '-r1.7' -u '/v/ossp/cvs/ossp-pkg/l2/LICENSE,v' 2>/dev/null
--- LICENSE 2005/01/24 15:03:17 1.6
+++ LICENSE 2005/10/03 08:08:11 1.7
@@ -1,9 +1,9 @@
OSSP l2 - Flexible Logging
- Copyright (c) 2001-2004 Cable & Wireless
- Copyright (c) 2001-2004 The OSSP Project
- Copyright (c) 2001-2004 Ralf S. Engelschall
+ Copyright (c) 2001-2005 Cable & Wireless
+ Copyright (c) 2001-2005 The OSSP Project
+ Copyright (c) 2001-2005 Ralf S. Engelschall
This file is part of OSSP l2, a flexible logging library which
can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/Makefile.in
RCS File: /v/ossp/cvs/ossp-pkg/l2/Makefile.in,v
rcsdiff -q -kk '-r1.48' '-r1.49' -u '/v/ossp/cvs/ossp-pkg/l2/Makefile.in,v' 2>/dev/null
--- Makefile.in 2005/01/24 15:03:17 1.48
+++ Makefile.in 2005/10/03 08:08:11 1.49
@@ -1,8 +1,8 @@
##
## OSSP l2 - Flexible Logging
-## Copyright (c) 2001-2004 Cable & Wireless
-## Copyright (c) 2001-2004 The OSSP Project
-## Copyright (c) 2001-2004 Ralf S. Engelschall
+## Copyright (c) 2001-2005 Cable & Wireless
+## Copyright (c) 2001-2005 The OSSP Project
+## Copyright (c) 2001-2005 Ralf S. Engelschall
##
## This file is part of OSSP l2, a flexible logging library which
## can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/README
RCS File: /v/ossp/cvs/ossp-pkg/l2/README,v
rcsdiff -q -kk '-r1.22' '-r1.23' -u '/v/ossp/cvs/ossp-pkg/l2/README,v' 2>/dev/null
--- README 2005/10/03 07:58:48 1.22
+++ README 2005/10/03 08:08:11 1.23
@@ -32,9 +32,9 @@
COPYRIGHT AND LICENSE
- Copyright (c) 2001-2004 Cable & Wireless
- Copyright (c) 2001-2004 The OSSP Project
- Copyright (c) 2001-2004 Ralf S. Engelschall
+ Copyright (c) 2001-2005 Cable & Wireless
+ Copyright (c) 2001-2005 The OSSP Project
+ Copyright (c) 2001-2005 Ralf S. Engelschall
This file is part of OSSP l2, a flexible logging library which
can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/aclocal.m4
RCS File: /v/ossp/cvs/ossp-pkg/l2/aclocal.m4,v
rcsdiff -q -kk '-r1.17' '-r1.18' -u '/v/ossp/cvs/ossp-pkg/l2/aclocal.m4,v' 2>/dev/null
--- aclocal.m4 2005/02/03 09:40:34 1.17
+++ aclocal.m4 2005/10/03 08:08:11 1.18
@@ -1,8 +1,8 @@
dnl ##
dnl ## OSSP l2 - Flexible Logging
-dnl ## Copyright (c) 2001-2004 Cable & Wireless
-dnl ## Copyright (c) 2001-2004 The OSSP Project
-dnl ## Copyright (c) 2001-2004 Ralf S. Engelschall
+dnl ## Copyright (c) 2001-2005 Cable & Wireless
+dnl ## Copyright (c) 2001-2005 The OSSP Project
+dnl ## Copyright (c) 2001-2005 Ralf S. Engelschall
dnl ##
dnl ## This file is part of OSSP l2, a flexible logging library which
dnl ## can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/configure.ac
RCS File: /v/ossp/cvs/ossp-pkg/l2/configure.ac,v
co -q -kk -p'1.31' '/v/ossp/cvs/ossp-pkg/l2/configure.ac,v' | diff -u /dev/null - -L'ossp-pkg/l2/configure.ac' 2>/dev/null
--- ossp-pkg/l2/configure.ac
+++ - 2025-05-20 08:46:36.849285398 +0200
@@ -0,0 +1,80 @@
+dnl ##
+dnl ## OSSP l2 - Flexible Logging
+dnl ## Copyright (c) 2001-2005 Cable & Wireless
+dnl ## Copyright (c) 2001-2005 The OSSP Project
+dnl ## Copyright (c) 2001-2005 Ralf S. Engelschall
+dnl ##
+dnl ## This file is part of OSSP l2, a flexible logging library which
+dnl ## can be found at http://www.ossp.org/pkg/lib/l2/.
+dnl ##
+dnl ## Permission to use, copy, modify, and distribute this software for
+dnl ## any purpose with or without fee is hereby granted, provided that
+dnl ## the above copyright notice and this permission notice appear in all
+dnl ## copies.
+dnl ##
+dnl ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+dnl ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+dnl ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+dnl ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+dnl ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+dnl ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+dnl ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+dnl ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+dnl ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+dnl ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+dnl ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+dnl ## SUCH DAMAGE.
+dnl ##
+dnl ## configure.in: Autoconf specification
+dnl ##
+
+AC_PREREQ(2.57)
+AC_INIT
+AC_HEADLINE(dnl
+OSSP l2, Flexible Logging, dnl
+L2_VERSION, l2_version.c, dnl
+[Copyright (c) 2001-2005 The OSSP Project
+Copyright (c) 2001-2005 Ralf S. Engelschall (rse@engelschall.com)
+Copyright (c) 2001-2005 Cable & Wireless ])
+AC_PREFIX_DEFAULT(/usr/local)
+AC_PLATFORM(PLATFORM)
+
+AC_PROG_MAKE_SET
+AC_PROG_CC
+AC_PROG_CPP
+AC_CHECK_DEBUGGING
+AC_CHECK_MAINTAINER
+AC_CONFIGURE_LIBTOOL
+
+AC_CHECK_BISON(BISON, 1.875d, [1.[[8-9]][[0-9]]|1.[[8-9]][[0-9]][[0-9]]]|[2.[[0-9]]])
+AC_CHECK_FLEX(FLEX, 2.5.31, [2.5.1[[0-9]]|2.5.[[2-9]][[0-9]]|2.[[6-9]].*])
+
+AC_CHECK_LIB(nsl, gethostname)
+if test ".`echo $LIBS | grep nsl`" = . ;then
+ AC_CHECK_LIB(nsl, gethostbyname)
+fi
+AC_CHECK_LIB(socket, accept)
+
+AC_CHECK_HEADERS(sys/time.h)
+
+AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf setitimer isnan isinf)
+
+CHECK_VA_COPY
+
+case $PLATFORM in
+ *-*-solaris2.[[6-8]]* )
+ AC_DEFINE(HAVE_VSYSLOG_USVALIST, 1, [Define to 1 if vsyslog has underscored va_list])
+ ;;
+esac
+
+sinclude(l2_ut_sa.ac)
+SA_CHECK_ALL
+
+AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h,
+ [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
+
+AC_CONFIG_HEADERS(l2_config.h)
+AC_CONFIG_FILES([Makefile l2.h l2-config])
+AC_CONFIG_COMMANDS([adjustment], [chmod a+x l2-config])
+AC_OUTPUT
+
Index: ossp-pkg/l2/devtool.conf
RCS File: /v/ossp/cvs/ossp-pkg/l2/devtool.conf,v
rcsdiff -q -kk '-r1.21' '-r1.22' -u '/v/ossp/cvs/ossp-pkg/l2/devtool.conf,v' 2>/dev/null
--- devtool.conf 2005/10/03 08:02:10 1.21
+++ devtool.conf 2005/10/03 08:08:11 1.22
@@ -1,8 +1,8 @@
##
## OSSP l2 - Flexible Logging
-## Copyright (c) 2001-2004 Cable & Wireless
-## Copyright (c) 2001-2004 The OSSP Project
-## Copyright (c) 2001-2004 Ralf S. Engelschall
+## Copyright (c) 2001-2005 Cable & Wireless
+## Copyright (c) 2001-2005 The OSSP Project
+## Copyright (c) 2001-2005 Ralf S. Engelschall
##
## This file is part of OSSP l2, a flexible logging library which
## can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/devtool.func
RCS File: /v/ossp/cvs/ossp-pkg/l2/devtool.func,v
rcsdiff -q -kk '-r1.6' '-r1.7' -u '/v/ossp/cvs/ossp-pkg/l2/devtool.func,v' 2>/dev/null
--- devtool.func 2005/01/24 15:03:17 1.6
+++ devtool.func 2005/10/03 08:08:11 1.7
@@ -1,6 +1,6 @@
##
## devtool.func -- Development Tool Functions
-## Copyright (c) 2001-2004 Ralf S. Engelschall
+## Copyright (c) 2001-2005 Ralf S. Engelschall
##
devtool_require () {
Index: ossp-pkg/l2/l2-config.in
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2-config.in,v
rcsdiff -q -kk '-r1.8' '-r1.9' -u '/v/ossp/cvs/ossp-pkg/l2/l2-config.in,v' 2>/dev/null
--- l2-config.in 2005/01/24 15:03:17 1.8
+++ l2-config.in 2005/10/03 08:08:11 1.9
@@ -1,9 +1,9 @@
#!/bin/sh
##
## OSSP l2 - Flexible Logging
-## Copyright (c) 2001-2004 Cable & Wireless
-## Copyright (c) 2001-2004 The OSSP Project
-## Copyright (c) 2001-2004 Ralf S. Engelschall
+## Copyright (c) 2001-2005 Cable & Wireless
+## Copyright (c) 2001-2005 The OSSP Project
+## Copyright (c) 2001-2005 Ralf S. Engelschall
##
## This file is part of OSSP l2, a flexible logging library which
## can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2-config.pod
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2-config.pod,v
rcsdiff -q -kk '-r1.8' '-r1.9' -u '/v/ossp/cvs/ossp-pkg/l2/l2-config.pod,v' 2>/dev/null
--- l2-config.pod 2005/01/24 15:03:17 1.8
+++ l2-config.pod 2005/10/03 08:08:11 1.9
@@ -1,8 +1,8 @@
##
## OSSP l2 - Flexible Logging
-## Copyright (c) 2001-2004 Cable & Wireless
-## Copyright (c) 2001-2004 The OSSP Project
-## Copyright (c) 2001-2004 Ralf S. Engelschall
+## Copyright (c) 2001-2005 Cable & Wireless
+## Copyright (c) 2001-2005 The OSSP Project
+## Copyright (c) 2001-2005 Ralf S. Engelschall
##
## This file is part of OSSP l2, a flexible logging library which
## can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2.h.in
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2.h.in,v
rcsdiff -q -kk '-r1.33' '-r1.34' -u '/v/ossp/cvs/ossp-pkg/l2/l2.h.in,v' 2>/dev/null
--- l2.h.in 2005/01/24 15:03:17 1.33
+++ l2.h.in 2005/10/03 08:08:11 1.34
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2.m4
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2.m4,v
rcsdiff -q -kk '-r1.7' '-r1.8' -u '/v/ossp/cvs/ossp-pkg/l2/l2.m4,v' 2>/dev/null
--- l2.m4 2005/01/24 15:03:17 1.7
+++ l2.m4 2005/10/03 08:08:11 1.8
@@ -1,8 +1,8 @@
dnl ##
dnl ## OSSP l2 - Flexible Logging
-dnl ## Copyright (c) 2001-2004 Cable & Wireless
-dnl ## Copyright (c) 2001-2004 The OSSP Project
-dnl ## Copyright (c) 2001-2004 Ralf S. Engelschall
+dnl ## Copyright (c) 2001-2005 Cable & Wireless
+dnl ## Copyright (c) 2001-2005 The OSSP Project
+dnl ## Copyright (c) 2001-2005 Ralf S. Engelschall
dnl ##
dnl ## This file is part of OSSP l2, a flexible logging library which
dnl ## can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2.pod
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2.pod,v
rcsdiff -q -kk '-r1.17' '-r1.18' -u '/v/ossp/cvs/ossp-pkg/l2/l2.pod,v' 2>/dev/null
--- l2.pod 2005/01/24 15:03:17 1.17
+++ l2.pod 2005/10/03 08:08:11 1.18
@@ -1,8 +1,8 @@
##
## OSSP l2 - Flexible Logging
-## Copyright (c) 2001-2004 Cable & Wireless
-## Copyright (c) 2001-2004 The OSSP Project
-## Copyright (c) 2001-2004 Ralf S. Engelschall
+## Copyright (c) 2001-2005 Cable & Wireless
+## Copyright (c) 2001-2005 The OSSP Project
+## Copyright (c) 2001-2005 Ralf S. Engelschall
##
## This file is part of OSSP l2, a flexible logging library which
## can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_ch_buffer.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ch_buffer.c,v
co -q -kk -p'1.41' '/v/ossp/cvs/ossp-pkg/l2/l2_ch_buffer.c,v' | diff -u /dev/null - -L'ossp-pkg/l2/l2_ch_buffer.c' 2>/dev/null
--- ossp-pkg/l2/l2_ch_buffer.c
+++ - 2025-05-20 08:46:36.881130483 +0200
@@ -0,0 +1,355 @@
+/*
+** OSSP l2 - Flexible Logging
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
+**
+** This file is part of OSSP l2, a flexible logging library which
+** can be found at http://www.ossp.org/pkg/lib/l2/.
+**
+** Permission to use, copy, modify, and distribute this software for
+** any purpose with or without fee is hereby granted, provided that
+** the above copyright notice and this permission notice appear in all
+** copies.
+**
+** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+** 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.
+**
+** l2_ch_buffer.c: buffering channel implementation
+*/
+
+#include "l2.h"
+#include "l2_p.h" /* for TRACE macro */
+
+#include
+#include /* for alarm(3) */
+#include /* for sigaction(2) and SIGALRM */
+
+#ifdef HAVE_SYS_TIME_H
+#include /* for setitimer(2) */
+#endif
+
+#define L2_BUFFER_TIMER ITIMER_REAL /* calls to [s|g]etitimer() and alarm() */
+
+/* declare private channel configuration */
+typedef struct {
+ char *buf;
+ int bufpos;
+ int bufsize;
+ long bufinterval;
+ struct sigaction sigalrm;
+#if defined(HAVE_SETITIMER) && defined(HAVE_SYS_TIME_H)
+ struct itimerval valprev;
+#endif
+ int levelflush;
+ l2_level_t level;
+} l2_ch_buffer_t;
+
+/* Sets the VIRTUAL timer to preconfigured value in cfg */
+static int set_alarm(l2_ch_buffer_t *cfg)
+{
+#if defined(HAVE_SETITIMER) && defined(HAVE_SYS_TIME_H)
+ struct itimerval valtest, valnew;
+
+ /* initialize auto vars before using them */
+ memset(&valnew, 0, sizeof(valnew));
+
+ valnew.it_interval.tv_sec = cfg->bufinterval;
+ valnew.it_interval.tv_usec = 0;
+ valnew.it_value.tv_sec = cfg->bufinterval;
+ valnew.it_value.tv_usec = 0;
+ if ((getitimer(L2_BUFFER_TIMER, &valtest) == 0) &&
+ ((valtest.it_value.tv_sec | valtest.it_value.tv_usec |
+ valtest.it_interval.tv_sec | valtest.it_interval.tv_usec) == 0))
+ return setitimer(L2_BUFFER_TIMER, &valnew, &cfg->valprev);
+ else {
+ cfg->bufinterval = -1L; /* mark this timer as broken */
+ assert(FALSE);
+ return 1; /* to make the compiler happy */
+ }
+#else
+ unsigned int uiAlarmed = 0;
+
+ assert(uiAlarmed = alarm(cfg->bufinterval));
+ if (uiAlarmed) { /* check if SIGALRM is occupied */
+ alarm(uiAlarmed); /* ...if so, then hack in the old value */
+ cfg->bufinterval = -1L; /* ...mark this timer as broken */
+ }
+ return 0;
+#endif
+}
+
+/* Resets the VIRTUAL timer to preconfigured value in cfg */
+static int reset_alarm(l2_ch_buffer_t *cfg)
+{
+#if defined(HAVE_SETITIMER) && defined(HAVE_SYS_TIME_H)
+ struct itimerval valnew;
+
+ /* initialize auto vars before using them */
+ memset(&valnew, 0, sizeof(valnew));
+
+ valnew.it_interval.tv_sec = cfg->bufinterval;
+ valnew.it_interval.tv_usec = 0;
+ valnew.it_value.tv_sec = cfg->bufinterval;
+ valnew.it_value.tv_usec = 0;
+ return setitimer(L2_BUFFER_TIMER, &valnew, 0);
+#else
+ alarm(cfg->bufinterval);
+ return 0;
+#endif
+}
+
+static void catchsignal(int sig, ...)
+{
+ va_list ap;
+ static l2_channel_t *ch = NULL;
+ static l2_ch_buffer_t *cfg = NULL;
+
+ if (sig == 0) {
+ va_start(ap, sig);
+ ch = va_arg(ap, l2_channel_t *); /* init the handler just like */
+ cfg = va_arg(ap, l2_ch_buffer_t *); /* Thomas Lotterer does */
+ va_end(ap);
+ }
+ else if (sig == SIGALRM) {
+ TRACE("SIGALRM caught");
+ l2_channel_flush(ch);
+ reset_alarm(cfg); /* alarm(3) doesn't auto-reset like setitime(2) */
+ }
+}
+
+/* create channel */
+static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
+{
+ l2_ch_buffer_t *cfg;
+
+ /* allocate private channel configuration */
+ if ((cfg = (l2_ch_buffer_t *)malloc(sizeof(l2_ch_buffer_t))) == NULL)
+ return L2_ERR_MEM;
+
+ /* initialize configuration with reasonable defaults */
+ cfg->buf = NULL;
+ cfg->bufpos = 0;
+ cfg->bufsize = 4096;
+ cfg->bufinterval = 0;
+ cfg->levelflush = 0;
+ cfg->level = L2_LEVEL_NONE;
+ memset(&cfg->sigalrm, 0, sizeof(cfg->sigalrm));
+#if defined(HAVE_SETITIMER) && defined(HAVE_SYS_TIME_H)
+ memset(&cfg->valprev, 0, sizeof(cfg->valprev));
+#endif
+
+ /* link private channel configuration into channel context */
+ ctx->vp = cfg;
+
+ return L2_OK;
+}
+
+/* configure channel */
+static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
+{
+ l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
+ l2_param_t pa[4];
+ l2_result_t rv;
+ l2_env_t *env;
+
+ /* feed and call generic parameter parsing engine */
+ L2_PARAM_SET(pa[0], size, INT, &cfg->bufsize);
+ L2_PARAM_SET(pa[1], interval, INT, &cfg->bufinterval);
+ L2_PARAM_SET(pa[2], levelflush, INT, &cfg->levelflush);
+ L2_PARAM_END(pa[3]);
+ l2_channel_env(ch, &env);
+ rv = l2_util_setparams(env, pa, fmt, ap);
+ if (cfg->bufinterval == -1L) /* -1 is reserved by L2 */
+ return L2_ERR_ARG; /* set_alarm() uses it */
+
+ if (cfg->bufsize < 0)
+ return L2_ERR_ARG;
+
+ return rv;
+}
+
+/* open channel */
+static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
+{
+ l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
+ struct sigaction locact;
+
+ if ((cfg->bufinterval != 0) && (cfg->bufinterval != -1L)) {
+ /* initialize auto vars before using them */
+ memset(&locact, 0, sizeof(locact));
+
+ locact.sa_handler = (void(*)(int))catchsignal;
+ sigemptyset(&locact.sa_mask);
+ locact.sa_flags = 0;
+
+ catchsignal(0, ch, (l2_ch_buffer_t *)ctx->vp);
+ /* save old signal context before replacing with our own */
+ if (sigaction(SIGALRM, &locact, &cfg->sigalrm) < 0)
+ return L2_ERR_SYS;
+
+ if (set_alarm(cfg)) /* this is our own L2 set_alarm */
+ return L2_ERR_SYS;
+ }
+
+ /* open channel buffer */
+ if (cfg->bufsize > 0) {
+ if ((cfg->buf = malloc(cfg->bufsize)) == NULL)
+ return L2_ERR_MEM;
+ cfg->bufpos = 0;
+ }
+
+ return L2_OK_PASS;
+}
+
+/* write to channel */
+static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
+ l2_level_t level, const char *buf, size_t buf_size)
+{
+ l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
+ l2_channel_t *downstream;
+ l2_result_t rv;
+
+ if (buf_size > (cfg->bufsize - cfg->bufpos)) {
+ /* flush buffer if necessary */
+ if (cfg->bufpos > 0) {
+ downstream = NULL;
+ while ((rv = l2_channel_downstream(ch, &downstream)) == L2_OK)
+ if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
+ return rv;
+ cfg->bufpos = 0;
+ cfg->level = L2_LEVEL_NONE;
+ }
+ /* pass through immediately to downstream if still too large */
+ if (buf_size > cfg->bufsize) {
+ downstream = NULL;
+ while ((rv = l2_channel_downstream(ch, &downstream)) == L2_OK)
+ if ((rv = l2_channel_write(downstream, level, buf, buf_size)) != L2_OK)
+ return rv;
+ return L2_OK;
+ }
+ }
+
+ /* flush if incoming message level differs from those already in buffer */
+ if ( (cfg->levelflush) /* if different levels force a flush */
+ && (cfg->bufpos > 0) /* and there is something in the buffer */
+ && (cfg->level != L2_LEVEL_NONE) /* and a remembered level is known */
+ && (level != cfg->level) /* and the levels really differ */)
+ {
+ downstream = NULL;
+ while (l2_channel_downstream(ch, &downstream) == L2_OK)
+ if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
+ return rv;
+ cfg->bufpos = 0;
+ cfg->level = L2_LEVEL_NONE;
+ }
+
+ /* finally write incoming message to channel buffer */
+ memcpy(cfg->buf+cfg->bufpos, buf, buf_size);
+ cfg->bufpos += buf_size;
+ cfg->level = level;
+
+ return L2_OK;
+}
+
+/* flush channel */
+static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
+{
+ l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
+ l2_channel_t *downstream;
+ l2_result_t rv;
+
+ /* write the buffer contents downstream */
+TRACE("l2_ch_buffer hook_flush called\n");
+ if (cfg->bufpos > 0) {
+ downstream = NULL;
+ while (l2_channel_downstream(ch, &downstream) == L2_OK)
+ if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
+ return rv;
+ cfg->bufpos = 0;
+ cfg->level = L2_LEVEL_NONE; /* reset this->context->level */
+ }
+
+ /* reset the flush alarm timer to synchronize the buffer */
+ if ((cfg->bufinterval != 0) && (cfg->bufinterval != -1L))
+ if (reset_alarm(cfg))
+ return L2_ERR_SYS;
+
+ return L2_OK_PASS;
+}
+
+/* close channel */
+static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
+{
+ l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
+ l2_channel_t *downstream;
+ l2_result_t rv;
+
+ if ((cfg->bufinterval != 0) && (cfg->bufinterval != -1L)) {
+#if defined(HAVE_SETITIMER) && defined(HAVE_SYS_TIME_H)
+ if (setitimer(L2_BUFFER_TIMER, &cfg->valprev, 0)) /* restore timer */
+ return L2_ERR_SYS;
+#else
+ alarm(0);
+#endif
+ /* restore previous signal context if previously saved & replaced */
+ if (&cfg->sigalrm.sa_handler)
+ if (sigaction(SIGALRM, &cfg->sigalrm, 0) < 0)
+ rv = L2_ERR_SYS;
+ }
+
+ /* write pending data before closing down */
+ if (cfg->bufpos > 0) {
+ downstream = NULL;
+ while (l2_channel_downstream(ch, &downstream) == L2_OK)
+ if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
+ return rv;
+ cfg->bufpos = 0;
+ cfg->level = L2_LEVEL_NONE; /* reset this->context->level */
+ }
+
+ /* close channel buffer */
+ if (cfg->buf != NULL) {
+ free(cfg->buf);
+ cfg->buf = NULL;
+ }
+
+ return L2_OK_PASS;
+}
+
+/* destroy channel */
+static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
+{
+ l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
+
+ /* destroy channel configuration */
+ if (cfg->buf != NULL)
+ free(cfg->buf);
+ free(cfg);
+
+ return L2_OK_PASS;
+}
+
+/* exported channel handler structure */
+l2_handler_t l2_handler_buffer = {
+ "buffer",
+ L2_CHANNEL_FILTER,
+ hook_create,
+ hook_configure,
+ hook_open,
+ hook_write,
+ hook_flush,
+ hook_close,
+ hook_destroy
+};
+
Index: ossp-pkg/l2/l2_ch_fd.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ch_fd.c,v
rcsdiff -q -kk '-r1.18' '-r1.19' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ch_fd.c,v' 2>/dev/null
--- l2_ch_fd.c 2005/01/24 15:03:17 1.18
+++ l2_ch_fd.c 2005/10/03 08:08:11 1.19
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_ch_file.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ch_file.c,v
rcsdiff -q -kk '-r1.32' '-r1.33' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ch_file.c,v' 2>/dev/null
--- l2_ch_file.c 2005/01/24 15:03:17 1.32
+++ l2_ch_file.c 2005/10/03 08:08:11 1.33
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_ch_filter.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ch_filter.c,v
co -q -kk -p'1.21' '/v/ossp/cvs/ossp-pkg/l2/l2_ch_filter.c,v' | diff -u /dev/null - -L'ossp-pkg/l2/l2_ch_filter.c' 2>/dev/null
--- ossp-pkg/l2/l2_ch_filter.c
+++ - 2025-05-20 08:46:36.948751568 +0200
@@ -0,0 +1,158 @@
+/*
+** OSSP l2 - Flexible Logging
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
+**
+** This file is part of OSSP l2, a flexible logging library which
+** can be found at http://www.ossp.org/pkg/lib/l2/.
+**
+** Permission to use, copy, modify, and distribute this software for
+** any purpose with or without fee is hereby granted, provided that
+** the above copyright notice and this permission notice appear in all
+** copies.
+**
+** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+** 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.
+**
+** l2_ch_filter.c: filtering channel implementation
+*/
+
+#include "l2.h"
+#include "l2_ut_pcre.h"
+
+/* declare private channel configuration */
+typedef struct {
+ char *szRegex;
+ int bNegate;
+ int bNoCase;
+ pcre *pcreRegex;
+ pcre_extra *pcreExtra;
+} l2_ch_filter_t;
+
+/* create channel */
+static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
+{
+ l2_ch_filter_t *cfg;
+
+ /* allocate private channel configuration */
+ if ((cfg = (l2_ch_filter_t *)malloc(sizeof(l2_ch_filter_t))) == NULL)
+ return L2_ERR_MEM;
+
+ /* initialize configuration with reasonable defaults */
+ cfg->szRegex = NULL;
+ cfg->bNegate = FALSE;
+ cfg->bNoCase = FALSE;
+ cfg->pcreRegex = NULL;
+ cfg->pcreExtra = NULL;
+
+ /* link private channel configuration into channel context */
+ ctx->vp = cfg;
+
+ return L2_OK;
+}
+
+/* configure channel */
+static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
+{
+ l2_ch_filter_t *cfg = (l2_ch_filter_t *)ctx->vp;
+ l2_env_t *env;
+ l2_param_t pa[4];
+ l2_result_t rv;
+ const char *szError;
+ int nErrorOffset;
+ int opt;
+
+ /* feed and call generic parameter parsing engine */
+ L2_PARAM_SET(pa[0], regex, STR, &cfg->szRegex);
+ L2_PARAM_SET(pa[1], negate, INT, &cfg->bNegate);
+ L2_PARAM_SET(pa[2], nocase, INT, &cfg->bNoCase);
+ L2_PARAM_END(pa[3]);
+ l2_channel_env(ch, &env);
+ if ((rv = l2_util_setparams(env, pa, fmt, ap)) != L2_OK)
+ return rv;
+
+ /* translate regular expression into finite state machine */
+ if (cfg->szRegex != NULL) {
+ /* compile regular expression into FSM */
+ opt = 0;
+ if (cfg->bNoCase)
+ opt |= PCRE_CASELESS;
+ if ((cfg->pcreRegex = pcre_compile(cfg->szRegex, opt, &szError, &nErrorOffset, NULL)) == NULL) {
+ l2_env_errorinfo(env, L2_ERR_ARG, "%s ('%c')", szError, cfg->szRegex[nErrorOffset]);
+ return L2_ERR_ARG;
+ }
+ /* study FSM for more performance */
+ cfg->pcreExtra = pcre_study(cfg->pcreRegex, 0, &szError);
+ if (szError != NULL) {
+ free(cfg->pcreRegex);
+ cfg->pcreRegex = NULL;
+ l2_env_errorinfo(env, L2_ERR_ARG, "%s", szError);
+ return L2_ERR_ARG;
+ }
+ }
+
+ return L2_OK;
+}
+
+/* write to channel */
+static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
+ l2_level_t level, const char *buf, size_t buf_size)
+{
+ l2_ch_filter_t *cfg = (l2_ch_filter_t *)ctx->vp;
+ int bPass, iCheck;
+
+ bPass = TRUE;
+
+ /* apply filter */
+ if (cfg->pcreRegex != NULL) {
+ iCheck = pcre_exec(cfg->pcreRegex, cfg->pcreExtra, buf, buf_size, 0, 0, NULL, 0);
+ if (iCheck >= 0)
+ bPass = TRUE;
+ else
+ bPass = FALSE;
+ if (cfg->bNegate)
+ bPass = !bPass;
+ }
+
+ return (bPass ? L2_OK_PASS : L2_OK);
+}
+
+static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
+{
+ l2_ch_filter_t *cfg = (l2_ch_filter_t *)ctx->vp;
+
+ /* destroy channel configuration */
+ if (cfg->szRegex != NULL)
+ free(cfg->szRegex);
+ if (cfg->pcreRegex != NULL)
+ free(cfg->pcreRegex);
+ if (cfg->pcreExtra != NULL)
+ free(cfg->pcreExtra);
+ free(cfg);
+
+ return L2_OK_PASS;
+}
+
+l2_handler_t l2_handler_filter = {
+ "filter",
+ L2_CHANNEL_FILTER,
+ hook_create,
+ hook_configure,
+ NULL,
+ hook_write,
+ NULL,
+ NULL,
+ hook_destroy
+};
+
Index: ossp-pkg/l2/l2_ch_irc.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ch_irc.c,v
rcsdiff -q -kk '-r1.9' '-r1.10' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ch_irc.c,v' 2>/dev/null
--- l2_ch_irc.c 2005/01/24 15:03:17 1.9
+++ l2_ch_irc.c 2005/10/03 08:08:11 1.10
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_ch_noop.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ch_noop.c,v
rcsdiff -q -kk '-r1.6' '-r1.7' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ch_noop.c,v' 2>/dev/null
--- l2_ch_noop.c 2005/01/24 15:03:17 1.6
+++ l2_ch_noop.c 2005/10/03 08:08:11 1.7
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_ch_null.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ch_null.c,v
rcsdiff -q -kk '-r1.14' '-r1.15' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ch_null.c,v' 2>/dev/null
--- l2_ch_null.c 2005/01/24 15:03:17 1.14
+++ l2_ch_null.c 2005/10/03 08:08:11 1.15
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_ch_pipe.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ch_pipe.c,v
rcsdiff -q -kk '-r1.33' '-r1.34' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ch_pipe.c,v' 2>/dev/null
--- l2_ch_pipe.c 2005/02/03 09:41:38 1.33
+++ l2_ch_pipe.c 2005/10/03 08:08:11 1.34
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_ch_prefix.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ch_prefix.c,v
rcsdiff -q -kk '-r1.26' '-r1.27' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ch_prefix.c,v' 2>/dev/null
--- l2_ch_prefix.c 2005/01/24 15:03:17 1.26
+++ l2_ch_prefix.c 2005/10/03 08:08:11 1.27
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_ch_smtp.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ch_smtp.c,v
rcsdiff -q -kk '-r1.12' '-r1.13' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ch_smtp.c,v' 2>/dev/null
--- l2_ch_smtp.c 2005/01/24 15:03:17 1.12
+++ l2_ch_smtp.c 2005/10/03 08:08:11 1.13
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_ch_socket.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ch_socket.c,v
rcsdiff -q -kk '-r1.39' '-r1.40' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ch_socket.c,v' 2>/dev/null
--- l2_ch_socket.c 2005/01/24 15:03:17 1.39
+++ l2_ch_socket.c 2005/10/03 08:08:11 1.40
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_ch_syslog.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ch_syslog.c,v
rcsdiff -q -kk '-r1.34' '-r1.35' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ch_syslog.c,v' 2>/dev/null
--- l2_ch_syslog.c 2005/01/24 15:03:17 1.34
+++ l2_ch_syslog.c 2005/10/03 08:08:11 1.35
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_channel.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_channel.c,v
rcsdiff -q -kk '-r1.34' '-r1.35' -u '/v/ossp/cvs/ossp-pkg/l2/l2_channel.c,v' 2>/dev/null
--- l2_channel.c 2005/01/24 15:03:17 1.34
+++ l2_channel.c 2005/10/03 08:08:11 1.35
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_env.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_env.c,v
rcsdiff -q -kk '-r1.11' '-r1.12' -u '/v/ossp/cvs/ossp-pkg/l2/l2_env.c,v' 2>/dev/null
--- l2_env.c 2005/01/24 15:03:17 1.11
+++ l2_env.c 2005/10/03 08:08:11 1.12
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_p.h
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_p.h,v
rcsdiff -q -kk '-r1.36' '-r1.37' -u '/v/ossp/cvs/ossp-pkg/l2/l2_p.h,v' 2>/dev/null
--- l2_p.h 2005/01/24 15:03:17 1.36
+++ l2_p.h 2005/10/03 08:08:11 1.37
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_spec.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_spec.c,v
rcsdiff -q -kk '-r1.11' '-r1.12' -u '/v/ossp/cvs/ossp-pkg/l2/l2_spec.c,v' 2>/dev/null
--- l2_spec.c 2005/01/24 15:03:17 1.11
+++ l2_spec.c 2005/10/03 08:08:11 1.12
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_spec.h
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_spec.h,v
rcsdiff -q -kk '-r1.5' '-r1.6' -u '/v/ossp/cvs/ossp-pkg/l2/l2_spec.h,v' 2>/dev/null
--- l2_spec.h 2005/01/24 15:03:18 1.5
+++ l2_spec.h 2005/10/03 08:08:11 1.6
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_spec_parse.y
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_spec_parse.y,v
rcsdiff -q -kk '-r1.12' '-r1.13' -u '/v/ossp/cvs/ossp-pkg/l2/l2_spec_parse.y,v' 2>/dev/null
--- l2_spec_parse.y 2005/01/24 15:03:18 1.12
+++ l2_spec_parse.y 2005/10/03 08:08:11 1.13
@@ -1,9 +1,9 @@
%{
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_spec_scan.l
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_spec_scan.l,v
rcsdiff -q -kk '-r1.15' '-r1.16' -u '/v/ossp/cvs/ossp-pkg/l2/l2_spec_scan.l,v' 2>/dev/null
--- l2_spec_scan.l 2005/02/03 09:42:36 1.15
+++ l2_spec_scan.l 2005/10/03 08:08:11 1.16
@@ -1,9 +1,9 @@
%{
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_test.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_test.c,v
rcsdiff -q -kk '-r1.55' '-r1.56' -u '/v/ossp/cvs/ossp-pkg/l2/l2_test.c,v' 2>/dev/null
--- l2_test.c 2005/01/24 15:03:18 1.55
+++ l2_test.c 2005/10/03 08:08:11 1.56
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_ut_fmtcb.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ut_fmtcb.c,v
rcsdiff -q -kk '-r1.8' '-r1.9' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ut_fmtcb.c,v' 2>/dev/null
--- l2_ut_fmtcb.c 2005/01/24 15:03:18 1.8
+++ l2_ut_fmtcb.c 2005/10/03 08:08:11 1.9
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_ut_format.h
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ut_format.h,v
rcsdiff -q -kk '-r1.5' '-r1.6' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ut_format.h,v' 2>/dev/null
--- l2_ut_format.h 2005/01/24 15:03:18 1.5
+++ l2_ut_format.h 2005/10/03 08:08:11 1.6
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2_ut_level.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ut_level.c,v
co -q -kk -p'1.11' '/v/ossp/cvs/ossp-pkg/l2/l2_ut_level.c,v' | diff -u /dev/null - -L'ossp-pkg/l2/l2_ut_level.c' 2>/dev/null
--- ossp-pkg/l2/l2_ut_level.c
+++ - 2025-05-20 08:46:37.027239460 +0200
@@ -0,0 +1,147 @@
+/*
+** OSSP l2 - Flexible Logging
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
+**
+** This file is part of OSSP l2, a flexible logging library which
+** can be found at http://www.ossp.org/pkg/lib/l2/.
+**
+** Permission to use, copy, modify, and distribute this software for
+** any purpose with or without fee is hereby granted, provided that
+** the above copyright notice and this permission notice appear in all
+** copies.
+**
+** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+** 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.
+**
+** l2_ut_level.c: level mask transformations
+*/
+
+#include "l2.h"
+#include "l2_p.h"
+
+#include
+#include
+
+static struct {
+ l2_level_t level;
+ char *string;
+} l2s_table[] = {
+ { L2_LEVEL_PANIC, "panic" },
+ { L2_LEVEL_CRITICAL, "critical" },
+ { L2_LEVEL_ERROR, "error" },
+ { L2_LEVEL_WARNING, "warning" },
+ { L2_LEVEL_NOTICE, "notice" },
+ { L2_LEVEL_INFO, "info" },
+ { L2_LEVEL_TRACE, "trace" },
+ { L2_LEVEL_DEBUG, "debug" },
+ { 0, NULL }
+};
+
+l2_result_t l2_util_l2s(char *string, size_t maxlen, int sep, unsigned int levelmask)
+{
+ char hexbuf[2+(sizeof(unsigned int)*2)+1];
+ int len;
+ int i;
+ int l;
+
+ len = maxlen;
+ string[0] = '\0';
+ for (i = 0; l2s_table[i].level != 0; i++) {
+ if (levelmask & l2s_table[i].level) {
+ levelmask &= ~(l2s_table[i].level);
+ l = strlen(l2s_table[i].string) + 1;
+ if (len < l)
+ return L2_ERR_MEM;
+ sprintf(string+(maxlen-len), "%s%c", l2s_table[i].string, sep);
+ len -= l;
+ }
+ }
+ if (levelmask != 0) {
+ sprintf(hexbuf, "0x%x", levelmask);
+ l = strlen(hexbuf) + 1;
+ if (len < l)
+ return L2_ERR_MEM;
+ sprintf(string+(maxlen-len), "%s%c", hexbuf, sep);
+ len -= l;
+ }
+ /* remove trailing comma */
+ if ((maxlen-len) > 0)
+ string[(maxlen-len)-1] = '\0';
+
+ return L2_OK;
+}
+
+static unsigned int hexval(const char *cpB, const char *cpE)
+{
+ unsigned int hv;
+ unsigned int nibble;
+
+ hv = 0;
+ while (cpB < cpE) {
+ nibble = tolower((unsigned int)(*cpB++));
+ if (isdigit(nibble))
+ nibble = nibble - '0';
+ else
+ nibble = nibble - 'a';
+ hv = ((hv << 4) | nibble);
+ }
+ return hv;
+}
+
+static int myishexnumber(int c)
+{
+ if (isdigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))
+ return 1;
+ return 0;
+}
+
+l2_result_t l2_util_s2l(const char *string, size_t maxlen, int sep, unsigned int *levelmask)
+{
+ const char *cpB;
+ const char *cpE;
+ int bFound;
+ int i;
+
+ *levelmask = 0;
+ cpE = string;
+ while (1) {
+ cpB = cpE;
+ if (cpB >= (string+maxlen))
+ break;
+ if ((int)(*cpB) == sep)
+ cpB++;
+ for (cpE = cpB; cpE < (string+maxlen) && (int)(*cpE) != sep; cpE++)
+ ;
+ if (cpE > (string+maxlen))
+ break;
+ bFound = 0;
+ for (i = 0; l2s_table[i].level != 0; i++) {
+ if (strncasecmp(cpB, l2s_table[i].string, cpE-cpB) == 0) {
+ *levelmask |= l2s_table[i].level;
+ bFound = 1;
+ break;
+ }
+ }
+ if (!bFound) {
+ if ((cpE > cpB+2) && strncasecmp(cpB, "0x", 2) == 0 && myishexnumber((int)(*(cpB+2)))) {
+ *levelmask |= hexval(cpB+2, cpE);
+ }
+ else
+ return L2_ERR_ARG;
+ }
+ }
+ return L2_OK;
+}
+
Index: ossp-pkg/l2/l2_ut_param.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ut_param.c,v
rcsdiff -q -kk '-r1.12' '-r1.13' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ut_param.c,v' 2>/dev/null
--- l2_ut_param.c 2005/01/24 15:03:18 1.12
+++ l2_ut_param.c 2005/10/03 08:08:11 1.13
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2tool.c
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2tool.c,v
rcsdiff -q -kk '-r1.7' '-r1.8' -u '/v/ossp/cvs/ossp-pkg/l2/l2tool.c,v' 2>/dev/null
--- l2tool.c 2005/02/03 09:43:52 1.7
+++ l2tool.c 2005/10/03 08:08:11 1.8
@@ -1,8 +1,8 @@
/*
** OSSP l2 - Flexible Logging
-** Copyright (c) 2001-2004 Cable & Wireless
-** Copyright (c) 2001-2004 The OSSP Project
-** Copyright (c) 2001-2004 Ralf S. Engelschall
+** Copyright (c) 2001-2005 Cable & Wireless
+** Copyright (c) 2001-2005 The OSSP Project
+** Copyright (c) 2001-2005 Ralf S. Engelschall
**
** This file is part of OSSP l2, a flexible logging library which
** can be found at http://www.ossp.org/pkg/lib/l2/.
Index: ossp-pkg/l2/l2tool.pod
RCS File: /v/ossp/cvs/ossp-pkg/l2/l2tool.pod,v
rcsdiff -q -kk '-r1.5' '-r1.6' -u '/v/ossp/cvs/ossp-pkg/l2/l2tool.pod,v' 2>/dev/null
--- l2tool.pod 2005/01/24 15:03:18 1.5
+++ l2tool.pod 2005/10/03 08:08:11 1.6
@@ -1,8 +1,8 @@
##
## OSSP l2 - Flexible Logging
-## Copyright (c) 2001-2004 Cable & Wireless
-## Copyright (c) 2001-2004 The OSSP Project
-## Copyright (c) 2001-2004 Ralf S. Engelschall
+## Copyright (c) 2001-2005 Cable & Wireless
+## Copyright (c) 2001-2005 The OSSP Project
+## Copyright (c) 2001-2005 Ralf S. Engelschall
##
## This file is part of OSSP l2, a flexible logging library which
## can be found at http://www.ossp.org/pkg/lib/l2/.