* bust the other places still accessing token values directly:
authorWilfried Göesgens <willi@citadel.org>
Thu, 17 Jun 2010 21:33:54 +0000 (21:33 +0000)
committerWilfried Göesgens <willi@citadel.org>
Thu, 17 Jun 2010 21:33:54 +0000 (21:33 +0000)
 * 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
webcit/preferences.c
webcit/siteconfig.c
webcit/subst.h

index e257e4517e61aecc38fc7efe21d6a45dae93cc8a..c656734410b6a8a12683b6351891c3fe62cfdfa1 100644 (file)
@@ -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, '/');
                }
index 1891beae4cfe1c41294904bb7e35067104aa8ba6..f929fe72db4c7e027a741e156a439b30ad2434dd 100644 (file)
@@ -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)
index 1516e904463e7a71409b7a29eb5874de66aba4a0..e024424ac2c20fc3b9ee9b9b28246bd3bc370b68 100644 (file)
@@ -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;
 }
index 241cc7cba9332c747a13622cf300ff90d7fe749c..970aa0368e837eb6649aab0f32cc1c1ec2a6885f 100644 (file)
@@ -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