head 1.18;
access;
symbols
L2_0_9_13:1.18
FSL_1_7_0:1.18
L2_0_9_12:1.18
LMTP2NNTP_1_4_1:1.18
LMTP2NNTP_1_4_0:1.18
FSL_1_6_1:1.18
L2_0_9_11:1.18
FSL_1_6_0:1.17
FSL_1_6b2:1.17
L2_0_9_10:1.17
FSL_1_6b1:1.17
L2_0_9_9:1.17
LMTP2NNTP_1_3_0:1.16
LMTP2NNTP_1_3b2:1.16
LMTP2NNTP_1_3b1:1.16
LMTP2NNTP_1_3a3:1.16
FSL_1_5_0:1.16
LMTP2NNTP_1_3a2:1.16
FSL_1_5a3:1.16
LMTP2NNTP_1_3a1:1.16
FSL_1_5a2:1.16
L2_0_9_8:1.16
FSL_1_5a1:1.16
L2_0_9_7:1.16
L2_0_9_6:1.16
FSL_1_4_0:1.15
FSL_1_4b1:1.15
L2_0_9_5:1.15
FSL_1_4a1:1.15
FSL_1_3_0:1.15
FSL_1_3b1:1.15
L2_0_9_4:1.15
FSL_1_2_1:1.15
L2_0_9_3:1.15
FSL_1_2_0:1.15
L2_0_9_2:1.15
FSL_1_1_0:1.14
FSL_1_1b1:1.14
WORKOFF:1.14.0.2
WORKOFF_BP:1.14
FSL_1_0_8:1.14
LMTP2NNTP_1_2_0:1.14
LMTP2NNTP_1_2b4:1.14
LMTP2NNTP_1_2b3:1.14
LMTP2NNTP_1_2b2:1.14
LMTP2NNTP_1_2b1:1.14
LMTP2NNTP_1_2a8:1.14
LMTP2NNTP_1_2a7:1.14
FSL_1_0_7:1.14
FSL_1_0_6:1.13
FSL_1_0_5:1.13
FSL_1_0_4:1.13
L2_0_9_1:1.13
FSL_1_0_3:1.13
LMTP2NNTP_1_2a6:1.13
FSL_1_0_2:1.13
FSL_1_0_1:1.13
FSL_1_0_0:1.13
FSL_0_9_0:1.13
L2_0_9_0:1.13
FSL_0_1_12:1.12
FSL_0_1_11:1.12
FSL_0_1_10:1.12
FSL_0_1_9:1.12
FSL_0_1_8:1.12
FSL_0_1_7:1.12
FSL_0_1_6:1.12
FSL_0_1_5:1.12
FSL_0_1_1:1.12
LMTP2NNTP_1_2a5:1.12
LMTP2NNTP_1_2a4:1.12
LMTP2NNTP_1_2a3:1.12
LMTP2NNTP_1_2a1:1.11
LMTP2NNTP_1_1_1:1.7
LMTP2NNTP_1_1_0:1.7
LMTP2NNTP_1_1b4:1.7
LMTP2NNTP_1_1b3:1.7
L2_CHANNEL_ONLY_REVAMPING_BEFORE:1.7
LMTP2NNTP_1_1b2:1.7
LMTP2NNTP_1_1b1:1.7
L2_0_1_0:1.4
START_MICHAEL:1.4
L2_INITIAL:1.1.1.1
OSSP:1.1.1;
locks; strict;
comment @# @;
1.18
date 2005.10.03.08.08.11; author rse; state Exp;
branches;
next 1.17;
1.17
date 2005.01.24.15.03.17; author rse; state Exp;
branches;
next 1.16;
1.16
date 2004.02.17.09.21.04; author thl; state Exp;
branches;
next 1.15;
1.15
date 2003.06.30.11.13.08; author thl; state Exp;
branches;
next 1.14;
1.14
date 2003.01.06.11.41.51; author rse; state Exp;
branches
1.14.2.1;
next 1.13;
1.13
date 2002.07.30.19.08.24; author rse; state Exp;
branches;
next 1.12;
1.12
date 2002.01.02.17.07.38; author rse; state Exp;
branches;
next 1.11;
1.11
date 2001.12.08.20.58.14; author rse; state Exp;
branches;
next 1.10;
1.10
date 2001.11.16.23.00.47; author rse; state Exp;
branches;
next 1.9;
1.9
date 2001.11.15.09.47.32; author ms; state Exp;
branches;
next 1.8;
1.8
date 2001.11.09.12.45.37; author rse; state Exp;
branches;
next 1.7;
1.7
date 2001.09.20.16.26.56; author ms; state Exp;
branches;
next 1.6;
1.6
date 2001.09.14.19.22.38; author rse; state Exp;
branches;
next 1.5;
1.5
date 2001.09.14.13.26.16; author rse; state Exp;
branches;
next 1.4;
1.4
date 2001.08.15.10.36.03; author rse; state Exp;
branches;
next 1.3;
1.3
date 2001.05.11.19.50.52; author rse; state Exp;
branches;
next 1.2;
1.2
date 2001.05.10.20.00.31; author rse; state Exp;
branches;
next 1.1;
1.1
date 2001.05.10.19.46.01; author rse; state Exp;
branches
1.1.1.1;
next ;
1.14.2.1
date 2004.02.17.09.22.00; author thl; state Exp;
branches;
next ;
1.1.1.1
date 2001.05.10.19.46.01; author rse; state Exp;
branches;
next ;
desc
@@
1.18
log
@Adjust copyright messages for new year 2005.
@
text
@##
## 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.pod: Unix manual page for C API
##
=pod
=head1 NAME
B - Flexible Logging
=head1 VERSION
OSSP l2 L2_VERSION_STR
=head1 SYNOPSIS
...
=head1 DESCRIPTION
B is a C library providing a very flexible and sophisticated
Unix logging facility. It is based on the model of arbitrary number of
channels, stacked together in a top-down data flow tree structure with
filtering channels in internal nodes and output channels on the leave
nodes.
Channel trees can be either constructed manually through lower-level
API functions or all at once with a single API function controlled by
a compact syntactical description of the channel tree. For generating
log messages a printf-style formatting engine is provided which can be
extended through callback functions. The data flow inside the channel
tree is controlled by (eight fixed and nine custom) logging message
severity levels which are assigned to each individual channel.
Channels are implemented by channel handlers which can be even
customer supplied for creating own channels which seamlessly integrate
into the framework. For convenience reasons, B already ships with
pre-implemented filtering (noop, filter, prefix, buffer) and output
(null, fd, file, pipe, socket, syslog, smtp) channels which already
cover mostly all use cases of logging.
A language is provided to allow for channel specification and configuration.
Thus, the channel tree can be constructed either by the API and its ANSI C
bindings or through the use of this B channel definition language. Applying
the API allows fine grained control of the channel tree. Additionally, the
API allows for a more interactive channel definition. However, using the
channel definition language to define the channel tree is more convenient,
and takes less coding effort. The channel definition language is almost
always sufficient for an application using B.
=head1 LOGGING LEVELS
PANIC fatal error -> immediate abort (SIGBUS, SIGSEGV)
CRITICAL temporary failure -> sleep, retry possible (malloc == NULL)
ERROR functionality error
WARNING functionality successful
NOTICE operation, statistics, start/stop
--- border line production/testing ---
INFO step-by-step
TRACE I/O tracing
--- border line end-user/developer
DEBUG debugging messages
=head1 CHANNEL TREE SPECIFICATION
An B channel tree can be descriped by a textual specification according
to the following Backus-Naur-Form (BNF):
tree ::= stream
stream ::= channel
| channel "->" stream
| channel "->" "{" streams "}"
streams ::= stream
| stream ";" streams
channel ::= channel_level "/" channel_level ":" channel_cons
| channel_level ":" channel_cons
| channel_cons
channel_level ::= IDENTIFIER
| "(" channel_level_mask ")"
channel_level_mask ::= IDENTIFIER
| IDENTIFIER "|" channel_level_mask
channel_cons ::= IDENTIFIER channel_params
channel_params ::= EMPTY
| "(" channel_param_list ")"
channel_param_list ::= EMPTY
| channel_param
| channel_param "," channel_param_list
channel_param ::= IDENTIFIER "=" PARAMETER
An example of such a channel tree specification is:
noop -> {
debug: prefix(prefix="[%d-%m-%Y/%H:%M:%S] ")
-> buffer(size=16384)
-> file(path=foo.log, trunc=0);
error: syslog(ident=foo, facility=user,
remotehost=syslog.example.com,
target=remote);
panic: smtp(host=mail.example.com,
rcpt=foo@@example.com);
}
=head1 FUNCTIONS
The following functions are provided by the B API:
=head1 AVAILABLE CHANNEL HANDLERS
=head2 Syslog Output Channel Handler (l2_handler_syslog)
The Syslog output channel handler C sends the
incoming message either via syslog(3) to a local syslogd(8) or via BSD
Syslog protocol to a remote Syslog service. It conforms to RFC 3164 (The
BSD syslog Protocol; C. Lonvick; August 2001).
It provides the following channel parameters:
=over 4
=item B (optional, C)
Sets the location of the target Syslog service. Possible values
are C (the default) or C. If C is used, the
parameters C has to be set, too.
=item B (optional, C)
Host name or IP address of the remote Syslog service.
No default exists, user has to provide value.
=item B (optional, C)
Port number of the remote SMTP service.
Default is C<514>.
=item B (optional, C)
The name of the local host, I any domain appended.
=item B (optional, C)
The Syslog facility used for all messages. It has to be one of the
following: C, C, C, C, C, C,
C, C, C, C, C, C, C,
C, C, C, C, C, C,
C, C, C, C, C.
=item B (I, C)
Arbitrary string identifying the program.
There is no default, user has to provide value.
=item B (optional, C)
Boolean flag whether to add the Process ID (pid)
to the B tag in messages. Default is C<0>.
=back
=head2 Pipe Output Channel Handler (l2_handler_pipe)
The Pipe output channel handler C sends the incoming
message to the standard input of a chosen command, passed to the l2
library as a parameter when calling l2_configure.
Any command that operates on the standard input (c language descriptor
stdin) can be used, but attention is advised due to the wide
variety of commands and their particular exit behaviours.
Attention! Commands that exit on their own and with a success return value will
not be restarted, however those returning with non-zero exit codes will be
restarted. B reopens closed pipe channels due to faulted command processes in
this way. Should such a reconnection be required after a command's successful
self-termination, l2_channel_open() may be called again on the same pipe channel
pointer previously used. Stream logging will then write to the pipe channel
handler, which will forward the log messages to the given command as always. To
find out if a pipe channel has closed due to the behaviour of its command
process, the l2_channel_write() operation may be called on it with a non-NULL
message parameter, and 0 as the buffsize parameter. The return result will be
L2_OK if the channel is open. Using the C language, such a check might look
like:
TODO NOTE FROM MICHAEL: This info will change once the pipe channel handler is
redesigned to allow for proper process termination, signal handling of such
processes, and subsequent channel closing!!!!!!!!!!!
if (l2_channel_write(pPipechannel, L2_LEVEL_NOTICE, "", 0) != L2_OK)
if (l2_channel_open(pPipechannel) != L2_OK)
exit(1); /* failure */
The command passed to the pipe channel handler may also be stopped while still
using a B stream log. If a command process is stopped no action is taken
until further logging occurs. As soon as the pipe channel handler receives a
message due to a l2_stream_log operation, it will attempt to restart the
stopped command process and write to its standard input. If the effort to
restart the command process fails then the command process is considered
dead, and B will terminate the process and close the channel. A
l2_channel_open() will then reopen the pipe channel using configuration
information previously entered with l2_channel_configure().
It provides the following channel parameters:
=over 4
=item B (optional, C)
B will execute the command at this user-provided path, and pipe messages to
its standard input when l2_stream_log operations are called.
=back
=head2 SMTP Output Channel Handler (l2_handler_smtp)
The SMTP output channel handler C sends the incoming
message via Simple Mail Transfer Protocol (SMTP) as an Email to a remote
mail service. It conforms to RFC 2821 (Simple Mail Transfer Protocol; J.
Klensin; April 2001) and RFC 2822 (Internet Message Format; P. Resnick;
April 2001).
It provides the following channel parameters:
=over 4
=item B (optional, C)
Arbitrary string identifying the program using B.
Default is C which means no program identification.
=item B (optional, C)
Hostname of the underlying machine.
Default is set through uname(3) or C.
=item B (optional, C)
Username corresponding to the UID of the underlying process.
Default is set through resolving getuid(2) or C.
=item B (optional, C)
Sender Email address for outgoing mails.
Default is set through B and B.
=item B (I, C)
Recipient Email address for outgoing mails.
No default exists, user has to provide value.
=item B (optional, C)
Arbitrary string identifying the generated Email message.
Default is C<[L2] log channel output on {localhost}>.
=item B (I, C)
Host name or IP address of the remote SMTP service.
No default exists, user has to provide value.
=item B (optional, C)
Port name or number of the remote SMTP service.
Default is C (25).
=item B (optional, C)
Timeout in seconds for all I/O operations.
Default is C<30>.
=back
=cut
@
1.17
log
@Adjust copyright messages for new year 2005.
@
text
@d3 3
a5 3
## Copyright (c) 2001-2004 Cable & Wireless
## Copyright (c) 2001-2004 The OSSP Project
## Copyright (c) 2001-2004 Ralf S. Engelschall
@
1.16
log
@correct spelling: privileges, convenient;
@
text
@d3 3
a5 3
## Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
## Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
## Copyright (c) 2001-2003 Ralf S. Engelschall
@
1.15
log
@introduce "trunc=" option for file channel; change default to append; keep support for obsolete "append" option
@
text
@d63 1
a63 1
into the framework. For convinience reasons, B already ships with
@
1.14
log
@- remove trailing whitespaces
- adjust copyright messages
- consistently use "OSSP l2"
- consistently talk about "Flexible Logging"
- use standard OSSP ASCII-art
@
text
@d121 1
a121 1
-> file(path=foo.log, append=1);
@
1.14.2.1
log
@correct spelling: privileges, convenient;
@
text
@d63 1
a63 1
into the framework. For convenience reasons, B already ships with
@
1.13
log
@polish for release
@
text
@d2 4
a5 3
## OSSP l2 - Logging Library
## Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
## Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
d7 1
a7 1
## This file is part of OSSP L2, a flexible logging library which
d27 1
a27 1
##
d35 1
a35 1
B - Logging Library
d39 1
a39 1
L2 L2_VERSION_STR
d47 1
a47 1
OSSP L2 is a C library providing a very flexible and sophisticated
d63 1
a63 1
into the framework. For convinience reasons, L2 already ships with
d70 1
a70 1
bindings or through the use of this L2 channel definition language. Applying
d75 1
a75 1
always sufficient for an application using L2.
d92 1
a92 1
An L2 channel tree can be descriped by a textual specification according
d131 1
a131 1
The following functions are provided by the B API:
d157 1
a157 1
=item B (optional, C)
d162 1
a162 1
=item B (optional, C)
d166 1
a166 1
=item B (optional, C)
d174 1
a174 1
=item B (I, C)
d179 1
a179 1
=item B (optional, C)
d198 1
a198 1
restarted. L2 reopens closed pipe channels due to faulted command processes in
d218 1
a218 1
using a L2 stream log. If a command process is stopped no action is taken
d223 1
a223 1
dead, and L2 will terminate the process and close the channel. A
d233 1
a233 1
L2 will execute the command at this user-provided path, and pipe messages to
d252 1
a252 1
Arbitrary string identifying the program using B.
d285 1
a285 1
=item B (optional, C)
@
1.12
log
@bump copyright year
@
text
@d2 1
a2 1
## L2 - OSSP Logging Library
d7 1
a7 1
## can be found at http://www.ossp.org/pkg/l2/.
@
1.11
log
@rember a few things from the past team meetings
@
text
@d3 2
a4 2
## Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
## Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
@
1.10
log
@Birthday commit:
Shorten grammar to the usual BNF notation and add an example.
@
text
@d76 13
@
1.9
log
@Added L2CDL grammar text (L2 Channel Definition Language.) Looks crappy.
@
text
@d76 1
a76 1
=head1 L2 CHANNEL DEFINITION EBNF GRAMMAR
d78 2
a79 3
/* channel tree */
tree : stream
;
d81 33
a113 45
/* stream of channels */
stream : channel
| channel T_OP_ARROW stream
| channel T_OP_ARROW '{' streams '}'
;
/* list of sibling streams */
streams : stream
| stream ';' streams
;
/* channel */
channel : channel_level '/' channel_level ':' channel_cons
| channel_level ':' channel_cons
| channel_cons
;
/* channel level */
channel_level : T_ID
| '(' channel_level_mask ')'
;
/* channel level mask */
channel_level_mask : T_ID
| T_ID '|' channel_level_mask
;
/* channel constructor */
channel_cons : T_ID channel_params
;
/* channel parameters */
channel_params : /* empty */
| '(' channel_param_list ')'
;
/* channel parameter list */
channel_param_list : /* empty */
| channel_param
| channel_param ',' channel_param_list
;
/* channel parameter */
channel_param : T_ID '=' T_PARAM
;
@
1.8
log
@first cut for an L2 summary
@
text
@d67 61
@
1.7
log
@Debugging of channel's behavior logic when facing problematic children.
@
text
@d46 20
a65 1
The B library is...
@
1.6
log
@document syslog channel
@
text
@d105 52
@
1.5
log
@provide documentation for SMTP channel
@
text
@d54 51
d107 1
a107 1
The SMTP output channel handler C sends the incoming
@
1.4
log
@Fix more ossp.com references by replacing with the
correct domain name ossp.org.
@
text
@d52 61
@
1.3
log
@Major overhaul and improvement of build environment. Especially we now
added optional support for C++ building with --with-cxx.
@
text
@d7 1
a7 1
## can be found at http://www.ossp.com/pkg/l2/.
@
1.2
log
@get rid of old Str stuff
@
text
@d27 1
a27 1
## l2.pod: Unix manual page
d50 1
a50 1
The following functions are provided by the B API:
@
1.1
log
@Initial revision
@
text
@d2 3
a4 2
## Str - String Library
## Copyright (c) 1999-2000 Ralf S. Engelschall
d6 2
a7 2
## This file is part of Str, a string handling and manipulation
## library which can be found at http://www.engelschall.com/sw/str/.
d26 2
a28 39
## str.pod: Unix manual page
##
# Parts of this manual page (the str_format description) is:
#
# Copyright (c) 1990, 1991, 1993
# The Regents of the University of California. All rights reserved.
#
# This code is derived from software contributed to Berkeley by
# Chris Torek and the American National Standards Committee X3,
# on Information Processing Systems.
#
# 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. All advertising materials mentioning features or use of this software
# must display the following acknowledgement:
# This product includes software developed by the University of
# California, Berkeley and its contributors.
# 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
d34 1
a34 1
B - String Library
d38 1
a38 1
Str STR_VERSION_STR
d42 1
a42 13
B,
B,
B,
B,
B,
B,
B,
B,
B,
B,
B,
B,
B.
d46 1
a46 5
The B library is a generic string library written in ANSI C which
provides functions for handling, matching, parsing, searching and
formatting of C strings. So it can be considered as a superset of POSIX
string(3), but its main intention is to provide a more convinient and
compact API plus a more generalized functionality.
a50 666
=over 4
=item str_size_t B(const char *I);
This function determines the length of string I, i.e., the number
of characters starting at I that precede the terminating C
character. It returns C if I is C.
=item char *B(char *I, const char *I, size_t I);
This copies the characters in string I into the string I, but never more
than I characters (if I is greater than C<0>). The two involved strings
can overlap and the characters in I are always C-terminated. The
string I has to be large enough to hold all characters to be copied.
function returns C if I or I are C. Else it returns the
pointer to the written C-terminating character in I.
=item char *B(const char *I, str_size_t I);
This returns a copy of the characters in string I, but never more than I
characters if I is greater than C<0>. It returns C if I is
C. The returned string has to be deallocated later with free(3).
=item char *B(char *I, ...);
This functions concatenates the characters of all string arguments into a new
allocated string and returns this new string. If I is C the function
returns C. Else it returns the pointer to the written final
C-terminating character in I. The returned string later has to be
deallicated with free(3).
=item char *B(char *I, str_size_t I, str_size_t I, char *I, str_size_t I);
This splices the string I into string I, i.e., the I characters
at offset I in I are removed and at their location the string
I is inserted (or just the first I characters of I if I is
greater than C<0>). It returns C if I or I are C.
Else the string I is returned. The function supports also the
situation where I is a sub-string of I as long as the area
I...I and I...I do not overlap. The caller
always has to make sure that enough room exists in I.
=item int B(const char *I, const char *I, str_size_t I, int I);
This performs a lexicographical comparison of the two strings I
and I (but never compares more than I characters of them)
and returns one of three return values: a value lower than C<0> if
I is lexicographically lower than I, a vlue of exactly C<0>
if I and I are equal and a value greater than C<0> if I is
lexicographically higher than I. Per default (I is C<0>) the
comparison is case-sensitive, but if C is used for I
the comparison is done in a case-insensitive way.
=item char *B(const char *I, size_t I, const char *I, int I);
This functions spans a string I according to the characters specified in
I. If I is C<0>, this means that I is spanned from left to
right starting at I (and ending either when reaching the terminating C
character or already after I spanned characters) as long as the characters
of I are contained in I.
Alternatively one can use a I of C to indicate that I
is spanned as long as the characters of I are I contained in
I, i.e., I then specifies the complement of the spanning
characters.
In both cases one can additionally "or" (with the C operator ``C<|>'')
C into I to indicate that the spanning is done right to
left starting at the terminating C character of I (and ending
either when reaching I or already after I spanned characters).
=item char *B(const char *I, str_size_t I, const char *I);
This functions searches for the (smaller) string I inside (larger) string
I. If I is not C<0>, the search is performed only inside the first I
characters of I.
=item char *B(char **I, const char *I, const char *I, const char *I, int I