From ac50491fa5855cef50dcdcb2e1ce896438e63c34 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Thu, 17 Jun 2010 21:33:54 +0000 Subject: [PATCH] * bust the other places still accessing token values directly: * ConditionalPreference() * ConditionalServCfg() * ConditionalBstr() * tmplput_url_part() + IS_NUMBER(): check whether a token parameter is a native number in first place for autodetecting how to compare them to other data. --- webcit/paramhandling.c | 27 ++++++++++++++++++++------- webcit/preferences.c | 17 +++++++++++++---- webcit/siteconfig.c | 16 +++++++++++++--- webcit/subst.h | 1 + 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/webcit/paramhandling.c b/webcit/paramhandling.c index e257e4517..c65673441 100644 --- a/webcit/paramhandling.c +++ b/webcit/paramhandling.c @@ -352,11 +352,21 @@ int ConditionalBstr(StrBuf *Target, WCTemplputParams *TP) if(TP->Tokens->nParameters == 3) return HaveBstr(TKEY(2)); else { - if (TP->Tokens->Params[3]->Type == TYPE_LONG) - return LBstr(TKEY(2)) == TP->Tokens->Params[3]->lvalue; - else - return strcmp(Bstr(TKEY(2)), - TP->Tokens->Params[3]->Start) == 0; + if (IS_NUMBER(TP->Tokens->Params[3]->Type)) + { + return LBstr(TKEY(2)) == + GetTemplateTokenNumber(Target, + TP, + 3, + 0); + } + else { + const char *pch; + long len; + + GetTemplateTokenString (Target, TP, 3, &pch, &len); + return strcmp(Bstr(TKEY(2)), pch) == 0; + } } } @@ -394,11 +404,14 @@ void tmplput_url_part(StrBuf *Target, WCTemplputParams *TP) wcsession *WCC = WC; if (WCC != NULL) { - if (TP->Tokens->Params[0]->lvalue == 0) { + long n; + + n = GetTemplateTokenNumber(Target, TP, 0, 0); + if (n == 0) { if (WCC->Hdr->HR.Handler != NULL) UrlBuf = Name = WCC->Hdr->HR.Handler->Name; } - else if (TP->Tokens->Params[0]->lvalue == 1) { + else if (n == 1) { UrlBuf = NewStrBuf(); StrBufExtract_token(UrlBuf, WCC->Hdr->HR.ReqLine, 0, '/'); } diff --git a/webcit/preferences.c b/webcit/preferences.c index 1891beae4..f929fe72d 100644 --- a/webcit/preferences.c +++ b/webcit/preferences.c @@ -868,11 +868,20 @@ int ConditionalPreference(StrBuf *Target, WCTemplputParams *TP) if (!HAVE_PARAM(3)) { return 1; } - else if (TP->Tokens->Params[3]->Type == TYPE_STR) - return ((TP->Tokens->Params[3]->len == StrLength(Pref)) && - (strcmp(TP->Tokens->Params[3]->Start, ChrPtr(Pref)) == 0)); + else if (IS_NUMBER(TP->Tokens->Params[3]->Type)) + { + return StrTol(Pref) == GetTemplateTokenNumber (Target, TP, 3, 0); + } else - return (StrTol(Pref) == TP->Tokens->Params[3]->lvalue); + { + const char *pch; + long len; + + GetTemplateTokenString(Target, TP, 3, &pch, &len); + + return ((len == StrLength(Pref)) && + (strcmp(pch, ChrPtr(Pref)) == 0)); + } } int ConditionalHasPreference(StrBuf *Target, WCTemplputParams *TP) diff --git a/webcit/siteconfig.c b/webcit/siteconfig.c index 1516e9044..e024424ac 100644 --- a/webcit/siteconfig.c +++ b/webcit/siteconfig.c @@ -333,9 +333,19 @@ int ConditionalServCfg(StrBuf *Target, WCTemplputParams *TP) if (TP->Tokens->nParameters == 3) { return 1; } - else if (TP->Tokens->Params[3]->Type == TYPE_STR) - return (strcmp(TP->Tokens->Params[3]->Start, ChrPtr(Buf)) == 0); - else return (StrTol(Buf) == TP->Tokens->Params[3]->lvalue); + else if (IS_NUMBER(TP->Tokens->Params[3]->Type)) + return (StrTol(Buf) == GetTemplateTokenNumber (Target, TP, 3, 0)); + else + { + const char *pch; + long len; + + GetTemplateTokenString(Target, TP, 3, &pch, &len); + + return ((len == StrLength(Buf)) && + (strcmp(pch, ChrPtr(Buf)) == 0)); + } + } else return 0; } diff --git a/webcit/subst.h b/webcit/subst.h index 241cc7cba..970aa0368 100644 --- a/webcit/subst.h +++ b/webcit/subst.h @@ -18,6 +18,7 @@ extern HashList *LocalTemplateCache; #define TYPE_INTDEFINE 8 #define MAXPARAM 20 +#define IS_NUMBER(a) ((a == TYPE_LONG) || (a == TYPE_PREFINT) || (a == TYPE_INTDEFINE)) /* * \brief Values for wcs_type -- 2.30.2