* xbstr now will give the length of the value to its key, so working with it is more...
authorWilfried Göesgens <willi@citadel.org>
Thu, 3 Apr 2008 18:51:32 +0000 (18:51 +0000)
committerWilfried Göesgens <willi@citadel.org>
Thu, 3 Apr 2008 18:51:32 +0000 (18:51 +0000)
webcit/messages.c
webcit/webcit.c
webcit/webcit.h

index f42def11aac7305408549f301c13056f14cf6054..6f076e0a93a040b47416f9055ba104c33d17d563 100644 (file)
@@ -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,
index f578fe98ba529a42ca1fad9b29659ae9bc7e6ceb..ced1d04edb5a95a1154383bf2b2a25cd32d68d29 100644 (file)
@@ -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 
index c0f37eb0fd5f429e1f12c7a49e75bef9f9c55b0e..68e64fa2f90325727db8dff7996748542f4d6411 100644 (file)
@@ -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 *);