* use strbuffer stresc functions
authorWilfried Göesgens <willi@citadel.org>
Tue, 19 Aug 2008 20:23:02 +0000 (20:23 +0000)
committerWilfried Göesgens <willi@citadel.org>
Tue, 19 Aug 2008 20:23:02 +0000 (20:23 +0000)
webcit/preferences.c
webcit/subst.c
webcit/webcit.c
webcit/webcit.h
webcit/who.c

index 116b5431670111dfdb97fde292013904ac128a9b..e84d911a7939e3c6cbd1c36a13857906a4f9e89d 100644 (file)
@@ -546,7 +546,7 @@ void display_preferences(void)
        get_preference("signature", &Signature);
        ebuf = NewStrBuf();
        StrBufEUid_unescapize(ebuf, Signature);
-       escputs((char*)ChrPtr(ebuf));///TODO
+       StrEscPuts(ebuf);
        FreeStrBuf(&ebuf);
        wprintf("</textarea>"
                "</div>"
@@ -563,14 +563,15 @@ void display_preferences(void)
 
        /** Character set to assume is in use for improperly encoded headers */
        if (!get_preference("default_header_charset", &Buf)) {
-               Buf = NewStrBuf();////TODO: freeme!
+               Buf = NewStrBuf();
                StrBufPrintf(Buf, "%s", "UTF-8");
+               set_preference("default_header_charset", Buf, 0);
        }
        wprintf("<tr class=\"even\"><td>");
        wprintf(PrefGetLocalStr(HKEY("default_header_charset")));
        wprintf("</td><td>");
        wprintf("<input type=\"text\" NAME=\"default_header_charset\" MAXLENGTH=\"32\" VALUE=\"");
-       escputs((char*)ChrPtr(Buf)); // here shouldn't be bad chars, so...
+       StrEscPuts(Buf); // here shouldn't be bad chars, so...
        wprintf("\">");
        wprintf("</td></tr>");
 
index 6bff320902448bca0f52d2c4136207aefb7fafa1..c3a1fffc02032e4da0e73edee2ac69b04e258076 100644 (file)
@@ -769,22 +769,22 @@ void tmplput_serv_ip(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *C
 
 void tmplput_serv_nodename(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
 {
-       escputs(serv_info.serv_nodename); ////TODO: respcect Target
+       StrEscAppend(Target, NULL, serv_info.serv_nodename, 0, 0);
 }
 
 void tmplput_serv_humannode(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
 {
-       escputs(serv_info.serv_humannode);////TODO: respcect Target
+       StrEscAppend(Target, NULL, serv_info.serv_humannode, 0, 0);
 }
 
 void tmplput_serv_fqdn(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
 {
-       escputs(serv_info.serv_fqdn);////TODO: respcect Target
+       StrEscAppend(Target, NULL, serv_info.serv_fqdn, 0, 0);
 }
 
 void tmmplput_serv_software(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
 {
-       escputs(serv_info.serv_software);////TODO: respcect Target
+       StrEscAppend(Target, NULL, serv_info.serv_software, 0, 0);
 }
 
 void tmplput_serv_rev_level(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
@@ -796,17 +796,17 @@ void tmplput_serv_rev_level(StrBuf *Target, int nArgs, WCTemplateToken *Tokens,
 
 void tmmplput_serv_bbs_city(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
 {
-       escputs(serv_info.serv_bbs_city);////TODO: respcect Target
+       StrEscAppend(Target, NULL, serv_info.serv_bbs_city, 0, 0);
 }
 
 void tmplput_current_user(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
 {
-       escputs(WC->wc_fullname);////TODO: respcect Target
+       StrEscAppend(Target, NULL, WC->wc_fullname, 0, 0);
 }
 
 void tmplput_current_room(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
 {
-       escputs(WC->wc_roomname);////TODO: respcect Target
+       StrEscAppend(Target, NULL, WC->wc_roomname, 0, 0);
 }
 
 
@@ -827,6 +827,7 @@ void tmpl_iterate_subtmpl(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, vo
        const char *Key;
        void *vContext;
        StrBuf *SubBuf;
+       int oddeven = 0;
        
        if (!GetHash(Iterators, 
                     Tokens->Params[0]->Start,
@@ -842,6 +843,7 @@ void tmpl_iterate_subtmpl(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, vo
        SubBuf = NewStrBuf();
        it = GetNewHashPos();
        while (GetNextHashPos(List, it, &len, &Key, &vContext)) {
+               svprintf(HKEY("ITERATE:ODDEVEN"), WCS_STRING, "%s", (oddeven)?"odd":"even");
                It->DoSubTemplate(SubBuf, vContext);
                DoTemplate(Tokens->Params[1]->Start,
                           Tokens->Params[1]->len,
index 3034419c8fed3628886f72f0bbec74ec68e2bd06..a63d9f383f6623cb23f272352edd8febfc7327d3 100644 (file)
@@ -409,89 +409,15 @@ void wDumpContent(int print_standard_html_footer)
 }
 
 
-/*
- * Copy a string, escaping characters which have meaning in HTML.  
- *
- * target              target buffer
- * strbuf              source buffer
- * nbsp                        If nonzero, spaces are converted to non-breaking spaces.
- * nolinebreaks                if set, linebreaks are removed from the string.
- */
-long stresc(char *target, long tSize, char *strbuf, int nbsp, int nolinebreaks)
-{
-       char *aptr, *bptr, *eptr;
-
-       *target = '\0';
-       aptr = strbuf;
-       bptr = target;
-       eptr = target + tSize - 6; // our biggest unit to put in... 
-
-       while ((bptr < eptr) && !IsEmptyStr(aptr) ){
-               if (*aptr == '<') {
-                       memcpy(bptr, "&lt;", 4);
-                       bptr += 4;
-               }
-               else if (*aptr == '>') {
-                       memcpy(bptr, "&gt;", 4);
-                       bptr += 4;
-               }
-               else if (*aptr == '&') {
-                       memcpy(bptr, "&amp;", 5);
-                       bptr += 5;
-               }
-               else if (*aptr == '\"') {
-                       memcpy(bptr, "&quot;", 6);
-                       bptr += 6;
-               }
-               else if (*aptr == '\'') {
-                       memcpy(bptr, "&#39;", 5);
-                       bptr += 5;
-               }
-               else if (*aptr == LB) {
-                       *bptr = '<';
-                       bptr ++;
-               }
-               else if (*aptr == RB) {
-                       *bptr = '>';
-                       bptr ++;
-               }
-               else if (*aptr == QU) {
-                       *bptr ='"';
-                       bptr ++;
-               }
-               else if ((*aptr == 32) && (nbsp == 1)) {
-                       memcpy(bptr, "&nbsp;", 6);
-                       bptr += 6;
-               }
-               else if ((*aptr == '\n') && (nolinebreaks)) {
-                       *bptr='\0';     /* nothing */
-               }
-               else if ((*aptr == '\r') && (nolinebreaks)) {
-                       *bptr='\0';     /* nothing */
-               }
-               else{
-                       *bptr = *aptr;
-                       bptr++;
-               }
-               aptr ++;
-       }
-       *bptr = '\0';
-       if ((bptr = eptr - 1 ) && !IsEmptyStr(aptr) )
-               return -1;
-       return (bptr - target);
-}
 
 void escputs1(char *strbuf, int nbsp, int nolinebreaks)
 {
-       char *buf;
-       long Siz;
+       StrEscAppend(WC->WBuf, NULL, strbuf, nbsp, nolinebreaks);
+}
 
-       if (strbuf == NULL) return;
-       Siz = (3 * strlen(strbuf)) + SIZ ;
-       buf = malloc(Siz);
-       stresc(buf, Siz, strbuf, nbsp, nolinebreaks);
-       wprintf("%s", buf);
-       free(buf);
+void StrEscputs1(const StrBuf *strbuf, int nbsp, int nolinebreaks)
+{
+       StrEscAppend(WC->WBuf, strbuf, NULL, nbsp, nolinebreaks);
 }
 
 /* 
@@ -503,24 +429,37 @@ void escputs(char *strbuf)
 }
 
 
+/* 
+ * static wrapper for ecsputs1
+ */
+void StrEscPuts(const StrBuf *strbuf)
+{
+       StrEscputs1(strbuf, 0, 0);
+}
+
+
 /*
  * urlescape buffer and print it to the client
  */
-void urlescputs(char *strbuf)
+void urlescputs(const char *strbuf)
 {
-       char outbuf[SIZ];
-       
-       urlesc(outbuf, SIZ, strbuf);
-       wprintf("%s", outbuf);
+       StrBufUrlescAppend(WC->WBuf, NULL, strbuf);
 }
+
+/*
+ * urlescape buffer and print it to the client
+ */
+void UrlescPutStrBuf(const StrBuf *strbuf)
+{
+       StrBufUrlescAppend(WC->WBuf, strbuf, NULL);
+}
+
 /**
  * urlescape buffer and print it as header 
  */
-void hurlescputs(char *strbuf) {
-       char outbuf[SIZ];
-       
-       urlesc(outbuf, SIZ, strbuf);
-       hprintf("%s", outbuf);
+void hurlescputs(const char *strbuf) 
+{
+       StrBufUrlescAppend(WC->HBuf, NULL, strbuf);
 }
 
 
index 7f01648f66a656a81058aa6b4582e8b0f50153bf..2058b0e7b09231fb5045e4d52a63e207cf4cb01b 100644 (file)
@@ -129,9 +129,6 @@ extern locale_t wc_locales[];
 #define        LIBCITADEL_MIN          738             /* min required libcitadel ver */
 #define DEFAULT_HOST           "localhost"     /* Default Citadel server */
 #define DEFAULT_PORT           "504"
-#define LB                     (1)             /* Internal escape chars */
-#define RB                     (2)
-#define QU                     (3)
 #define TARGET                 "webcit01"      /* Target for inline URL's */
 #define HOUSEKEEPING           15              /* Housekeeping frequency */
 #define MIN_WORKER_THREADS     5
@@ -593,8 +590,14 @@ int YESBSTR(char *key);
 const char *BSTR(char *key);
 const char *Bstr(char *key, size_t keylen);
 
-void urlescputs(char *);
-void hurlescputs(char *);
+
+
+void UrlescPutStrBuf(const StrBuf *strbuf);
+void StrEscPuts(const StrBuf *strbuf);
+void StrEscputs1(const StrBuf *strbuf, int nbsp, int nolinebreaks);
+
+void urlescputs(const char *);
+void hurlescputs(const char *);
 void jsesc(char *, size_t, char *);
 void jsescputs(char *);
 void output_headers(    int do_httpheaders,
index 47f152aa77320df5a99d8d150aeb80e7dc532272..5bf70b1a8634659f0bdf2b218cea256a6fec0c52 100644 (file)
@@ -167,7 +167,7 @@ void who_inner_div(void) {
 
                        /* (link to page this user) */
                        wprintf("<td width=\"5%%\"><a href=\"display_page?recp=");
-                       urlescputs(ChrPtr(User->UserName));
+                       UrlescPutStrBuf(User->UserName);
                        wprintf("\">"
                                "<img align=\"middle\" "
                                "src=\"static/citadelchat_24x.gif\" "
@@ -198,28 +198,28 @@ void who_inner_div(void) {
 
                        /* username (link to user bio/photo page) */
                        wprintf("<a href=\"showuser?who=");
-                       urlescputs(ChrPtr(User->UserName));
+                       UrlescPutStrBuf(User->UserName);
                        wprintf("\">");
-                       escputs(ChrPtr(User->UserName));
+                       StrEscPuts(User->UserName);
                        if (User->SessionCount > 1)
                                wprintf(" [%d] ", User->SessionCount);
                        wprintf("</a>");
 
                        /* room */
                        wprintf("</td>\n\t<td>");
-                       escputs(ChrPtr(User->Room));
+                       StrEscPuts(User->Room);
                        if (StrLength(User->RealRoom) > 0) {
                                wprintf("<br /><i>");
-                               escputs(User->RealRoom);
+                               StrEscPuts(User->RealRoom);
                                wprintf("</i>");
                        }
                        wprintf("</td>\n\t<td class=\"host_col\">");
 
                        /* hostname */
-                       escputs(ChrPtr(User->Host));
+                       StrEscPuts(User->Host);
                        if (StrLength(User->RealHost) > 0) {
                                wprintf("<br /><i>");
-                               escputs(User->RealHost);
+                               StrEscPuts(User->RealHost);
                                wprintf("</i>");
                        }
                        wprintf("</td>\n</tr>");
@@ -426,9 +426,9 @@ void wholist_section(void) {
                                        wprintf("activeuser");
                                }
                                wprintf("\"><a href=\"showuser?who=");
-                               urlescputs(ChrPtr(User->UserName));
+                               UrlescPutStrBuf(User->UserName);
                                wprintf("\">");
-                               escputs(ChrPtr(User->UserName));
+                               StrEscPuts(User->UserName);
                                wprintf("</a></li>");
                        }
                }