From baa3aca94eeb9d4b5c833ef91cfcba0c6bc47fc9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Thu, 3 Apr 2008 18:51:32 +0000 Subject: [PATCH] * xbstr now will give the length of the value to its key, so working with it is more easy. --- webcit/messages.c | 41 +++++++++++------------------------------ webcit/webcit.c | 30 ++++++++++++++++++++++++++++++ webcit/webcit.h | 4 +++- 3 files changed, 44 insertions(+), 31 deletions(-) diff --git a/webcit/messages.c b/webcit/messages.c index f42def11a..6f076e0a9 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -3084,6 +3084,7 @@ void post_message(void) const char *my_email_addr = ""; char *CmdBuf = NULL;; long len = 0; + size_t nLen; if (GetHash(WCC->urlstrings, HKEY("subject"), &U)) { u = (urlcontent*) U; @@ -3101,39 +3102,19 @@ void post_message(void) } } len += sizeof (CMD) + dpLen; - - if (GetHash(WCC->urlstrings, HKEY("recp"), &U)) { - u = (urlcontent*) U; - Recp = u->url_data; - len += u->url_data_size; } - - if (GetHash(WCC->urlstrings, HKEY("cc"), &U)) { - u = (urlcontent*) U; - Cc = u->url_data; - len += u->url_data_size; - } - - if (GetHash(WCC->urlstrings, HKEY("bcc"), &U)) { - u = (urlcontent*) U; - Bcc = u->url_data; - len += u->url_data_size; - } - - if (GetHash(WCC->urlstrings, HKEY("wikipage"), &U)) { - u = (urlcontent*) U; - Wikipage = u->url_data; - len += u->url_data_size; - } - - if (GetHash(WCC->urlstrings, HKEY("my_email_addr"), &U)) { - u = (urlcontent*) U; - my_email_addr = u->url_data; - len += u->url_data_size; - } + Recp = xbstr("recp", &nLen); + len += nLen; + Cc = xbstr("cc", &nLen); + len += nLen; + Bcc = xbstr("bcc", &nLen); + len += nLen; + Wikipage = xbstr("wikipage", &nLen); + len += nLen; + my_email_addr = xbstr("my_email_addr", &nLen); + len += nLen; CmdBuf = (char*) malloc (len + 1); - snprintf(CmdBuf, len + 1, CMD, Recp, is_anonymous, diff --git a/webcit/webcit.c b/webcit/webcit.c index f578fe98b..ced1d04ed 100644 --- a/webcit/webcit.c +++ b/webcit/webcit.c @@ -176,6 +176,21 @@ const char *BSTR(char *key) return (""); } +const char *XBSTR(char *key, size_t *len) +{ + void *U; + + if ((WC->urlstrings != NULL) && + GetHash(WC->urlstrings, key, strlen (key), &U)){ + *len = ((urlcontent *)U)->url_data_size; + return ((urlcontent *)U)->url_data; + } + else { + *len = 0; + return (""); + } +} + const char *Bstr(char *key, size_t keylen) { void *U; @@ -187,6 +202,21 @@ const char *Bstr(char *key, size_t keylen) return (""); } +const char *XBstr(char *key, size_t keylen, size_t *len) +{ + void *U; + + if ((WC->urlstrings != NULL) && + GetHash(WC->urlstrings, key, keylen, &U)) { + *len = ((urlcontent *)U)->url_data_size; + return ((urlcontent *)U)->url_data; + } + else { + *len = 0; + return (""); + } +} + /** * \brief web-printing funcion. uses our vsnprintf wrapper * \param format printf format string diff --git a/webcit/webcit.h b/webcit/webcit.h index c0f37eb0f..68e64fa2f 100644 --- a/webcit/webcit.h +++ b/webcit/webcit.h @@ -227,7 +227,6 @@ struct httprequest { */ typedef struct urlcontent urlcontent; struct urlcontent { - struct urlcontent *next; /**< the next variable in the list */ char url_key[32]; /**< the variable name */ char *url_data; /**< its value */ size_t url_data_size; /**< how big is it? */ @@ -504,9 +503,12 @@ void pullquote_fmout(void); void wDumpContent(int); void serv_printf(const char *format,...); const char *Bstr(char *key, size_t keylen); +const char *XBstr(char *key, size_t keylen, size_t *len); /* TODO: get rid of the non-const-typecast */ #define bstr(a) (char*) Bstr(a, sizeof(a) - 1) +#define xbstr(a, b) (char*) XBstr(a, sizeof(a) - 1, b) const char *BSTR(char *key); +const char *XBSTR(char *key, size_t *len); void urlescputs(char *); void jsesc(char *, size_t, char *); void jsescputs(char *); -- 2.39.2