static const char *bound_pat = "boundary\\s*=\\s*\"?([\\da-z'()+,-./:=?_ \r\n]+)\"?";
static pcre *bound_re;
+static msgproc_module *text_module = &msgproc_text,
+ *html_module = &msgproc_html,
+ *multipart_module = &msgproc_multipart,
+ *quoted_module = &msgproc_quoted,
+ *base64_module = &msgproc_base64;
+
static void
message_init(void)
{
type_re = pcre_compile(type_pat, options, &etxt, &epos, 0);
enc_re = pcre_compile(enc_pat, options, &etxt, &epos, 0);
bound_re = pcre_compile(bound_pat, options, &etxt, &epos, 0);
+ msgproc_module_init(text_module);
+ msgproc_module_init(html_module);
+ msgproc_module_init(multipart_module);
+ msgproc_module_init(quoted_module);
+ msgproc_module_init(base64_module);
}
-static msgproc_module *text_module = &msgproc_text,
- *html_module = &msgproc_html,
- *multipart_module = &msgproc_multipart,
- *quoted_module = &msgproc_quoted,
- *base64_module = &msgproc_base64;
#define MESSAGE_MODULE_TEXT 0
#define MESSAGE_MODULE_HTML 1
static void
message_module_set(int type, void *data, size_t size)
{
+ msgproc_module *mpm;
switch(type) {
- case MESSAGE_MODULE_TEXT: text_module = data; break;
- case MESSAGE_MODULE_HTML: html_module = data; break;
- case MESSAGE_MODULE_MULTIPART: multipart_module = data; break;
- case MESSAGE_MODULE_QUOTED: quoted_module = data; break;
- case MESSAGE_MODULE_BASE64: base64_module = data; break;
+ case MESSAGE_MODULE_TEXT: mpm = text_module = data; break;
+ case MESSAGE_MODULE_HTML: mpm = html_module = data; break;
+ case MESSAGE_MODULE_MULTIPART: mpm = multipart_module = data; break;
+ case MESSAGE_MODULE_QUOTED: mpm = quoted_module = data; break;
+ case MESSAGE_MODULE_BASE64: mpm = base64_module = data; break;
+ default: return;
}
+ msgproc_module_init(mpm);
}
#define HDRALLOC 512
int state;
};
+static void
+multipart_init(void)
+{
+ static int initialized = 0;
+ if (initialized++) return;
+ msgproc_module_init(nextmod);
+}
+
static void
multipart_start(msgproc *m)
{
{
if (type != MULTIPART_MODULE_NEXTMOD) return;
nextmod = (msgproc_module *)data;
+ msgproc_module_init(nextmod);
}
static void
msgproc_module msgproc_multipart = {
MSGPROC_MULTIPART, /* type */
- NULL, /* module init */
+ multipart_init, /* module init */
setnextmod, /* set module parameter */
multipart_start, /* start module instance */
setboundary, /* set module instance parameter */