void LogTemplateError (StrBuf *Target, const char *Type, int ErrorPos, WCTemplputParams *TP, const char *Format, ...)
{
wcsession *WCC;
- StrBuf *Header;
StrBuf *Error;
StrBuf *Info;
va_list arg_ptr;
va_end(arg_ptr);
switch (ErrorPos) {
- default:
case ERR_NAME: /* the main token name... */
Err = (TP->Tokens!= NULL)? TP->Tokens->pName:"";
break;
- case ERR_PARM1:
- Err = ((TP->Tokens!= NULL) &&
- (TP->Tokens->nParameters > 0))?
- TP->Tokens->Params[0]->Start : "";
- break;
- case ERR_PARM2:
+ default:
Err = ((TP->Tokens!= NULL) &&
- (TP->Tokens->nParameters > 1))?
- TP->Tokens->Params[1]->Start : "";
+ (TP->Tokens->nParameters > ErrorPos - 1))?
+ TP->Tokens->Params[ErrorPos - 1]->Start : "";
break;
}
if (TP->Tokens != NULL)
return;
}
- Header = NewStrBuf();
+ if (WCC->WFBuf == NULL) WCC->WFBuf = NewStrBuf();
if (TP->Tokens != NULL)
{
/* deprecated:
ChrPtr(TP->Tokens->FlatToken));
- SerializeJson(Header, WildFireException(SKEY(TP->Tokens->FileName),
+ SerializeJson(WCC->WFBuf, WildFireException(SKEY(TP->Tokens->FileName),
TP->Tokens->Line,
Info,
1), 1);
Error,
eERROR), 1);
*/
- WildFireSerializePayload(Header, WCC->HBuf, &WCC->Hdr->nWildfireHeaders, NULL);
+
}
else
{
Err,
ChrPtr(Error),
ChrPtr(TP->Tokens->FlatToken));
- SerializeJson(Header, WildFireException(HKEY(__FILE__), __LINE__, Info, 1), 1);
- WildFireSerializePayload(Header, WCC->HBuf, &WCC->Hdr->nWildfireHeaders, NULL);
+ SerializeJson(WCC->WFBuf, WildFireException(HKEY(__FILE__), __LINE__, Info, 1), 1);
}
- FreeStrBuf(&Header);
FreeStrBuf(&Info);
FreeStrBuf(&Error);
/*
void LogError (StrBuf *Target, const char *Type, const char *Format, ...)
{
wcsession *WCC;
- StrBuf *Header;
StrBuf *Error;
StrBuf *Info;
va_list arg_ptr;
lprintf(1, ChrPtr(Error));
WCC = WC;
- Header = NewStrBuf();
+ if (WCC->WFBuf == NULL) WCC->WFBuf = NewStrBuf();
+ SerializeJson(WCC->WFBuf, WildFireException(Type, strlen(Type),
+ 0,
+ Info,
+ 1), 1);
- SerializeJson(Header, WildFireException(Type, strlen(Type),
- 0,
- Info,
- 1), 1);
- WildFireSerializePayload(Header, WCC->HBuf, &WCC->Hdr->nWildfireHeaders, NULL);
-
- FreeStrBuf(&Header);
FreeStrBuf(&Info);
FreeStrBuf(&Error);
/*
clear_substs (WC);
}
-int NeedNewBuf(type)
+int NeedNewBuf(int type)
{
switch(type) {
case WCS_STRING:
Template->Tokens[(Template->nTokensUsed)++] = NewToken;
}
-TemplateParam *GetNextParameter(StrBuf *Buf,
- const char **pCh,
- const char *pe,
- WCTemplateToken *Tokens,
- WCTemplate *pTmpl,
- WCTemplputParams *TP)
+int GetNextParameter(StrBuf *Buf,
+ const char **pCh,
+ const char *pe,
+ WCTemplateToken *Tokens,
+ WCTemplate *pTmpl,
+ WCTemplputParams *TP,
+ TemplateParam **pParm)
{
const char *pch = *pCh;
const char *pchs, *pche;
char quote = '\0';
int ParamBrace = 0;
- Parm = (TemplateParam *) malloc(sizeof(TemplateParam));
+ *pParm = Parm = (TemplateParam *) malloc(sizeof(TemplateParam));
memset(Parm, 0, sizeof(TemplateParam));
Parm->Type = TYPE_STR;
*pCh);
pch ++;
free(Parm);
- return NULL;
+ *pParm = NULL;
+ return 0;
}
else {
StrBufPeek(Buf, pch, -1, '\0');
*pCh);
*/
free(Parm);
- return NULL;
+ *pParm = NULL;
+ return 0;
}
}
while ((*pch == ' ' )||
}
else
{
- LogTemplateError(NULL, "Define", ERR_PARM1, TP,
+ LogTemplateError(NULL, "Define",
+ Tokens->nParameters,
+ TP,
"%s isn't known!!",
Parm->Start);
}}
/* well, we don't check the mobile stuff here... */
if (!GetHash(LocalTemplateCache, Parm->Start, Parm->len, &vTmpl) &&
!GetHash(TemplateCache, Parm->Start, Parm->len, &vTmpl)) {
- LogTemplateError(
- NULL, "SubTemplate", ERR_PARM1, TP,
- "referenced here doesn't exist");
+ LogTemplateError(NULL,
+ "SubTemplate",
+ Tokens->nParameters,
+ TP,
+ "referenced here doesn't exist");
}}
break;
}
*pCh = pch;
- return Parm;
+ return 1;
}
WCTemplateToken *NewTemplateSubstitute(StrBuf *Buf,
{
void *vVar;
const char *pch;
- TemplateParam *Param;
WCTemplateToken *NewToken;
WCTemplputParams TP;
"Warning, Non welformed Token; missing right parenthesis");
}
while (pch < pTokenEnd - 1) {
- Param = GetNextParameter(Buf, &pch, pTokenEnd - 1, NewToken, pTmpl, &TP);
- if (Param != NULL) {
+ NewToken->nParameters++;
+ if (GetNextParameter(Buf,
+ &pch,
+ pTokenEnd - 1,
+ NewToken,
+ pTmpl,
+ &TP,
+ &NewToken->Params[NewToken->nParameters - 1]))
+ {
NewToken->HaveParameters = 1;
if (NewToken->nParameters > MAXPARAM) {
LogTemplateError(
"only [%d] Params allowed in Tokens",
MAXPARAM);
- free(Param);
FreeToken(&NewToken);
return NULL;
}
- NewToken->Params[NewToken->nParameters++] = Param;
}
else break;
}
RegisterControlNS(HKEY("ITERATE:KEY"), 0, 0, tmplput_ITERATE_KEY, CTX_ITERATE);
RegisterControlNS(HKEY("ITERATE:N"), 0, 0, tmplput_ITERATE_LASTN, CTX_ITERATE);
RegisterNamespace("CURRENTFILE", 0, 1, tmplput_CURRENT_FILE, NULL, CTX_NONE);
- RegisterNamespace("DEF:STR", 0, 0, tmplput_DefStr, NULL, CTX_NONE);
- RegisterNamespace("DEF:VAL", 0, 0, tmplput_DefVal, NULL, CTX_NONE);
+ RegisterNamespace("DEF:STR", 1, 1, tmplput_DefStr, NULL, CTX_NONE);
+ RegisterNamespace("DEF:VAL", 1, 1, tmplput_DefVal, NULL, CTX_NONE);
(wcsession *sess)
{
DeleteHash(&sess->vars);
+ FreeStrBuf(&sess->WFBuf);
}
void