get_preference("signature", &Signature);
ebuf = NewStrBuf();
StrBufEUid_unescapize(ebuf, Signature);
- escputs((char*)ChrPtr(ebuf));///TODO
+ StrEscPuts(ebuf);
FreeStrBuf(&ebuf);
wprintf("</textarea>"
"</div>"
/** 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>");
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)
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);
}
const char *Key;
void *vContext;
StrBuf *SubBuf;
+ int oddeven = 0;
if (!GetHash(Iterators,
Tokens->Params[0]->Start,
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,
}
-/*
- * 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, "<", 4);
- bptr += 4;
- }
- else if (*aptr == '>') {
- memcpy(bptr, ">", 4);
- bptr += 4;
- }
- else if (*aptr == '&') {
- memcpy(bptr, "&", 5);
- bptr += 5;
- }
- else if (*aptr == '\"') {
- memcpy(bptr, """, 6);
- bptr += 6;
- }
- else if (*aptr == '\'') {
- memcpy(bptr, "'", 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, " ", 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);
}
/*
}
+/*
+ * 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);
}
#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
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,
/* (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\" "
/* 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>");
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>");
}
}