示例#1
0
/* parse a syslog name from the string. This is the generic code that is
 * called by the facility/severity functions. Note that we do not check the
 * validity of numerical values, something that should probably change over
 * time (TODO). -- rgerhards, 2008-02-14
 */
static rsRetVal
doSyslogName(uchar **pp, rsRetVal (*pSetHdlr)(void*, int),
	  	    void *pVal, syslogName_t *pNameTable)
{
	DEFiRet;
	cstr_t *pStrB;
	int iNewVal;

	ASSERT(pp != NULL);
	ASSERT(*pp != NULL);

	CHKiRet(getWord(pp, &pStrB)); /* get word */
	iNewVal = decodeSyslogName(cstrGetSzStr(pStrB), pNameTable);

	if(pSetHdlr == NULL) {
		/* we should set value directly to var */
		*((int*)pVal) = iNewVal; /* set new one */
	} else {
		/* we set value via a set function */
		CHKiRet(pSetHdlr(pVal, iNewVal));
	}

	skipWhiteSpace(pp); /* skip over any whitespace */

finalize_it:
	if(pStrB != NULL)
		rsCStrDestruct(&pStrB);

	RETiRet;
}
示例#2
0
文件: vm.c 项目: DooDleZzz/rsyslog
/* The "tolower" function, which converts its sole argument to lower case.
 * Quite honestly, currently this is primarily a test driver for me...
 * rgerhards, 2009-04-06
 */
static rsRetVal
rsf_tolower(vmstk_t *pStk, int numOperands)
{
	DEFiRet;
	var_t *operand1;
	uchar *pSrc;
	cstr_t *pcstr;
	int iStrlen;

	if(numOperands != 1)
		ABORT_FINALIZE(RS_RET_INVLD_NBR_ARGUMENTS);

	/* pop args and do operaton */
	CHKiRet(cstrConstruct(&pcstr));
	vmstk.PopString(pStk, &operand1);
	pSrc = cstrGetSzStr(operand1->val.pStr);
	iStrlen = strlen((char*)pSrc); // TODO: use count from string!
	while(iStrlen--) {
		CHKiRet(cstrAppendChar(pcstr, tolower(*pSrc++)));
	}

	/* Store result and cleanup */
	CHKiRet(cstrFinalize(pcstr));
	var.SetString(operand1, pcstr);
	vmstk.Push(pStk, operand1);
finalize_it:
	RETiRet;
}