From 0c7439d969d42ea85ecd26202d709f2550ff1c58 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Tue, 19 Aug 2008 20:23:02 +0000 Subject: [PATCH] * use strbuffer stresc functions --- webcit/preferences.c | 7 +-- webcit/subst.c | 16 +++--- webcit/webcit.c | 117 +++++++++++-------------------------------- webcit/webcit.h | 13 +++-- webcit/who.c | 18 +++---- 5 files changed, 58 insertions(+), 113 deletions(-) diff --git a/webcit/preferences.c b/webcit/preferences.c index 116b54316..e84d911a7 100644 --- a/webcit/preferences.c +++ b/webcit/preferences.c @@ -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("" "" @@ -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(""); wprintf(PrefGetLocalStr(HKEY("default_header_charset"))); wprintf(""); wprintf(""); wprintf(""); diff --git a/webcit/subst.c b/webcit/subst.c index 6bff32090..c3a1fffc0 100644 --- a/webcit/subst.c +++ b/webcit/subst.c @@ -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, diff --git a/webcit/webcit.c b/webcit/webcit.c index 3034419c8..a63d9f383 100644 --- a/webcit/webcit.c +++ b/webcit/webcit.c @@ -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, "<", 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); } /* @@ -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); } diff --git a/webcit/webcit.h b/webcit/webcit.h index 7f01648f6..2058b0e7b 100644 --- a/webcit/webcit.h +++ b/webcit/webcit.h @@ -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, diff --git a/webcit/who.c b/webcit/who.c index 47f152aa7..5bf70b1a8 100644 --- a/webcit/who.c +++ b/webcit/who.c @@ -167,7 +167,7 @@ void who_inner_div(void) { /* (link to page this user) */ wprintf("UserName)); + UrlescPutStrBuf(User->UserName); wprintf("\">" "UserName)); + UrlescPutStrBuf(User->UserName); wprintf("\">"); - escputs(ChrPtr(User->UserName)); + StrEscPuts(User->UserName); if (User->SessionCount > 1) wprintf(" [%d] ", User->SessionCount); wprintf(""); /* room */ wprintf("\n\t"); - escputs(ChrPtr(User->Room)); + StrEscPuts(User->Room); if (StrLength(User->RealRoom) > 0) { wprintf("
"); - escputs(User->RealRoom); + StrEscPuts(User->RealRoom); wprintf(""); } wprintf("\n\t"); /* hostname */ - escputs(ChrPtr(User->Host)); + StrEscPuts(User->Host); if (StrLength(User->RealHost) > 0) { wprintf("
"); - escputs(User->RealHost); + StrEscPuts(User->RealHost); wprintf(""); } wprintf("\n"); @@ -426,9 +426,9 @@ void wholist_section(void) { wprintf("activeuser"); } wprintf("\">UserName)); + UrlescPutStrBuf(User->UserName); wprintf("\">"); - escputs(ChrPtr(User->UserName)); + StrEscPuts(User->UserName); wprintf(""); } } -- 2.30.2