*** /dev/null Sat Nov 23 01:11:26 2024
--- - Sat Nov 23 01:11:28 2024
***************
*** 0 ****
--- 1,101 ----
+ /*
+ ** L2 - OSSP Logging Library
+ ** Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
+ ** Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
+ **
+ ** This file is part of OSSP L2, a flexible logging library which
+ ** can be found at http://www.ossp.com/pkg/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_param.c: parameter handling
+ **
+ */
+
+ #include "l2.h"
+ #include "l2_p.h"
+
+ int l2_param_parse(l2_param_t pa[], const char *fmt, va_list ap)
+ {
+ const char *cpB, *cpE;
+ const char *cpC, *cpG;
+ int ok;
+ int i;
+
+ cpE = fmt;
+ while (*cpE != '\0') {
+ /* determine begin of parameter name */
+ cpB = cpE;
+ while (*cpB == ',')
+ cpB++;
+
+ /* determine end of parameter name */
+ cpE = cpB;
+ while (*cpE != ',' && *cpE != '\0')
+ cpE++;
+
+ /* try to match with configured parameters */
+ ok = FALSE;
+ for (i = 0; pa[i].name != NULL; i++) {
+ cpC = pa[i].name;
+ cpG = cpB;
+ while (*cpC != '\0' && cpG < cpE) {
+ if (*cpC != *cpG)
+ break;
+ cpC++;
+ cpG++;
+ }
+ if (*cpC == '\0' && cpG == cpE) {
+ /* parameter matched, so store value */
+ switch (pa[i].type) {
+ case L2_TYPE_CHAR:
+ *(char *)(pa[i].store) = va_get(ap, char);
+ break;
+ case L2_TYPE_SHORT:
+ *(short *)(pa[i].store) = va_get(ap, short);
+ break;
+ case L2_TYPE_INT:
+ *(int *)(pa[i].store) = va_get(ap, int);
+ break;
+ case L2_TYPE_LONG:
+ *(long *)(pa[i].store) = va_get(ap, long);
+ break;
+ case L2_TYPE_FLOAT:
+ *(float *)(pa[i].store) = va_get(ap, float);
+ break;
+ case L2_TYPE_DOUBLE:
+ *(double *)(pa[i].store) = va_get(ap, double);
+ break;
+ case L2_TYPE_CHARPTR:
+ *(char **)(pa[i].store) = va_get(ap, charptr);
+ break;
+ case L2_TYPE_VOIDPTR:
+ *(void **)(pa[i].store) = va_get(ap, voidptr);
+ break;
+ }
+ ok = TRUE;
+ break;
+ }
+ }
+ if (!ok)
+ return L2_ERROR;
+ }
+ return L2_OK;
+ }
+
|