diff options
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | cfsysline.c | 27 | ||||
-rw-r--r-- | cfsysline.h | 11 | ||||
-rw-r--r-- | linkedlist.c | 9 | ||||
-rw-r--r-- | linkedlist.h | 5 | ||||
-rw-r--r-- | rsyslog.h | 2 |
6 files changed, 29 insertions, 27 deletions
@@ -15,6 +15,8 @@ Version 1.17.6 (rgerhards), 2007-07-3? - added output of config file line number when a parsing error occured - fixed bug in objomsr.c that caused program to abort in debug mode with an invalid assertion (in some cases) +- fixed a typo that caused the default template for MySQL to be wrong. + thanks to mildew for catching this. --------------------------------------------------------------------------- Version 1.17.5 (rgerhards), 2007-07-30 - continued to work on output module modularization diff --git a/cfsysline.c b/cfsysline.c index ae0166e2..daebdd05 100644 --- a/cfsysline.c +++ b/cfsysline.c @@ -39,8 +39,7 @@ /* static data */ -cslCmd_t *pCmdListRoot = NULL; /* The list of known configuration commands. */ -cslCmd_t *pCmdListLast = NULL; +linkedList_t llCmdList; /* this is NOT a pointer - no typo here ;) */ /* --------------- START functions for handling canned syntaxes --------------- */ @@ -352,8 +351,10 @@ finalize_it: /* --------------- END functions for handling canned syntaxes --------------- */ /* destructor for cslCmdHdlr + * pThis is actually a cslCmdHdlr_t, but we do not cast it as all we currently + * need to do is free it. */ -rsRetVal cslchDestruct(cslCmdHdlr_t *pThis) +rsRetVal cslchDestruct(void *pThis) { assert(pThis != NULL); free(pThis); @@ -401,10 +402,12 @@ rsRetVal cslchCallHdlr(cslCmdHdlr_t *pThis, uchar **ppConfLine) assert(pThis != NULL); assert(ppConfLine != NULL); + // TODO: implement return RS_RET_OK; } + /* ---------------------------------------------------------------------- * * now come the handlers for cslCmd_t * ---------------------------------------------------------------------- */ @@ -413,23 +416,16 @@ rsRetVal cslchCallHdlr(cslCmdHdlr_t *pThis, uchar **ppConfLine) */ rsRetVal cslcDestruct(cslCmd_t *pThis) { - cslCmdHdlr_t *pHdlr; - cslCmdHdlr_t *pHdlrPrev; assert(pThis != NULL); - for(pHdlr = pThis->pHdlrRoot ; pHdlr != NULL ; pHdlr = pHdlrPrev->pNext) { - pHdlrPrev = pHdlr; /* else we get a segfault */ - cslchDestruct(pHdlr); - } - - free(pThis->pszCmdString); + llDestroy(pThis->pllCmdHdlrs); free(pThis); return RS_RET_OK; } -/* constructor for cslCmdHdlr +/* constructor for cslCmd */ rsRetVal cslcConstruct(cslCmd_t **ppThis) { @@ -438,11 +434,12 @@ rsRetVal cslcConstruct(cslCmd_t **ppThis) assert(ppThis != NULL); if((pThis = calloc(1, sizeof(cslCmd_t))) == NULL) { - iRet = RS_RET_OUT_OF_MEMORY; - goto abort_it; + ABORT_FINALIZE(RS_RET_OUT_OF_MEMORY); } -abort_it: + CHKiRet(llInit(pThis->pllCmdHdlrs, cslchDestruct, NULL)); + +finalize_it: *ppThis = pThis; return iRet; } diff --git a/cfsysline.h b/cfsysline.h index cdb98834..a1a51d91 100644 --- a/cfsysline.h +++ b/cfsysline.h @@ -22,6 +22,8 @@ #ifndef CFSYSLINE_H_INCLUDED #define CFSYSLINE_H_INCLUDED +#include "linkedlist.h" + /* types of configuration handlers */ typedef enum cslCmdHdlrType { @@ -40,7 +42,6 @@ typedef enum cslCmdHdlrType { * The short name is cslch (Configfile SysLine CommandHandler) */ struct cslCmdHdlr_s { /* config file sysline parse entry */ - struct cslCmdHdlr_s *pNext; ecslCmdHdrlType eType; /* which type of handler is this? */ rsRetVal (*cslCmdHdlr)(); /* function pointer to use with handler (params depending on eType) */ void *pData; /* user-supplied data pointer */ @@ -53,18 +54,16 @@ typedef struct cslCmdHdlr_s cslCmdHdlr_t; * The short name is cslc (Configfile SysLine Command) */ struct cslCmd_s { /* config file sysline parse entry */ - struct cslCmd_s *pNext; - uchar *pszCmdString; - struct cslCmdHdlr_s *pHdlrRoot; /* linked list of to-be-called command handlers */ - struct cslCmdHdlr_s *pHdlrLast; + linkedList_t *pllCmdHdlrs; /* linked list of command handlers */ }; typedef struct cslCmd_s cslCmd_t; /* prototypes */ -rsRetVal cslchDestruct(cslCmdHdlr_t *pThis); +rsRetVal cslchDestruct(void *pThis); rsRetVal cslchConstruct(cslCmdHdlr_t **ppThis); rsRetVal cslchSetEntry(cslCmdHdlr_t *pThis, ecslCmdHdrlType eType, rsRetVal (*pHdlr)(), void *pData); rsRetVal cslchCallHdlr(cslCmdHdlr_t *pThis, uchar **ppConfLine); +rsRetVal cslcConstruct(cslCmd_t **ppThis); /* the next ones go away later */ rsRetVal doBinaryOptionLine(uchar **pp, rsRetVal (*pSetHdlr)(void*, int), void *pVal); diff --git a/linkedlist.c b/linkedlist.c index 1238ea08..a75652a5 100644 --- a/linkedlist.c +++ b/linkedlist.c @@ -40,13 +40,15 @@ /* Initialize an existing linkedList_t structure + * pKey destructor may be zero to take care of non-keyed lists. */ -rsRetVal llInit(linkedList_t *pThis, rsRetVal (*pEltDestructor)(void*, void*)) +rsRetVal llInit(linkedList_t *pThis, rsRetVal (*pEltDestructor)(void*), rsRetVal (*pKeyDestructor)(void*)) { assert(pThis != NULL); assert(pEltDestructor != NULL); pThis->pEltDestruct = pEltDestructor; + pThis->pKeyDestruct = pKeyDestructor; pThis->cmpOp = NULL; pThis->pKey = NULL; pThis->iNumElts = 0; @@ -74,7 +76,10 @@ rsRetVal llDestroy(linkedList_t *pThis) /* we ignore errors during destruction, as we need to try * finish the linked list in any case. */ - pThis->pEltDestruct(pEltPrev->pData, pEltPrev->pKey); + if(pEltPrev->pData != NULL) + pThis->pEltDestruct(pEltPrev->pData); + if(pEltPrev->pKey != NULL) + pThis->pKeyDestruct(pEltPrev->pKey); free(pEltPrev); } diff --git a/linkedlist.h b/linkedlist.h index 046c7ba9..0f061b59 100644 --- a/linkedlist.h +++ b/linkedlist.h @@ -40,7 +40,8 @@ typedef struct llElt_s llElt_t; */ struct linkedList_s { /* config file sysline parse entry */ int iNumElts; /* number of elements in list */ - rsRetVal (*pEltDestruct)(void*pData, void*pKey); /* destructor for user pointer in llElt_t's */ + rsRetVal (*pEltDestruct)(void*pData); /* destructor for user pointer in llElt_t's */ + rsRetVal (*pKeyDestruct)(void*pKey); /* destructor for key pointer in llElt_t's */ int (*cmpOp)(void*, void*); /* pointer to key compare operation function, retval like strcmp */ void *pKey; /* the list key (searchable, if set) */ llElt_t *pRoot; /* list root */ @@ -51,7 +52,7 @@ typedef struct linkedList_s linkedList_t; typedef llElt_t* linkedListCookie_t; /* this type avoids exposing internals and keeps us flexible */ /* prototypes */ -rsRetVal llInit(linkedList_t *pThis, rsRetVal (*pEltDestructor)(void*, void*)); +rsRetVal llInit(linkedList_t *pThis, rsRetVal (*pEltDestructor)(void*), rsRetVal (*pKeyDestructor)(void*)); rsRetVal llDestroy(linkedList_t *pThis); rsRetVal llGetNextElt(linkedList_t *pThis, linkedListCookie_t *ppElt, void **ppUsr); rsRetVal llAppend(linkedList_t *pThis, void *pKey, void *pData); @@ -65,8 +65,6 @@ enum rsRetVal_ /** return value. All methods return this if not specified oth RS_RET_VAL_OUT_OF_RANGE = -2012, /**< value out of range */ RS_RET_FOPEN_FAILURE = -2013, /**< failure during fopen, for example file not found - see errno */ RS_RET_END_OF_LINKEDLIST = -2014, /**< end of linked list, not an error, but a status */ - RS_RET_IS_EQUAL = -2015, /**< outcome of a compare is equal */ - RS_RET_IS_NOT_EQUAL = -2016, /**< outcome of a compare is not equal */ RS_RET_OK = 0 /**< operation successful */ }; typedef enum rsRetVal_ rsRetVal; /**< friendly type for global return value */ |