From: Wilfried Goesgens Date: Tue, 28 Feb 2012 20:44:32 +0000 (+0100) Subject: Don't put functionpointer into the hash directly, some gcc warninglevels don't like... X-Git-Tag: v8.11~156 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=5908cd95dd4b42dbc40fc80ae0e1cf453c5dc68b Don't put functionpointer into the hash directly, some gcc warninglevels don't like this. --- diff --git a/citadel/modules/smtp/serv_smtpqueue.c b/citadel/modules/smtp/serv_smtpqueue.c index b2c0ea233..4704d31ce 100644 --- a/citadel/modules/smtp/serv_smtpqueue.c +++ b/citadel/modules/smtp/serv_smtpqueue.c @@ -101,6 +101,15 @@ static const long MaxRetry = SMTP_RETRY_INTERVAL * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 int MsgCount = 0; int run_queue_now = 0; /* Set to 1 to ignore SMTP send retry times */ +void RegisterQItemHandler(const char *Key, long Len, QItemHandler H) +{ + QItemHandlerStruct *HS = (QItemHandlerStruct*)malloc(sizeof(QItemHandlerStruct)); + HS->H = H; + Put(QItemHandlers, Key, Len, HS, NULL); +} + + + void smtp_try_one_queue_entry(OneQueItem *MyQItem, MailQEntry *MyQEntry, StrBuf *MsgText, @@ -270,9 +279,9 @@ OneQueItem *DeserializeQueueItem(StrBuf *RawQItem, long QueMsgID) StrBufExtract_NextToken(Token, Line, &pItemPart, '|'); if (GetHash(QItemHandlers, SKEY(Token), &vHandler)) { - QItemHandler H; - H = (QItemHandler) vHandler; - H(Item, Line, &pItemPart); + QItemHandlerStruct *HS; + HS = (QItemHandlerStruct*) vHandler; + HS->H(Item, Line, &pItemPart); } } FreeStrBuf(&Line); @@ -1092,14 +1101,15 @@ CTDL_MODULE_INIT(smtp_queu) QItemHandlers = NewHash(0, NULL); - Put(QItemHandlers, HKEY("msgid"), QItem_Handle_MsgID, reference_free_handler); - Put(QItemHandlers, HKEY("envelope_from"), QItem_Handle_EnvelopeFrom, reference_free_handler); - Put(QItemHandlers, HKEY("retry"), QItem_Handle_retry, reference_free_handler); - Put(QItemHandlers, HKEY("attempted"), QItem_Handle_Attempted, reference_free_handler); - Put(QItemHandlers, HKEY("remote"), QItem_Handle_Recipient, reference_free_handler); - Put(QItemHandlers, HKEY("bounceto"), QItem_Handle_BounceTo, reference_free_handler); - Put(QItemHandlers, HKEY("source_room"), QItem_Handle_SenderRoom, reference_free_handler); - Put(QItemHandlers, HKEY("submitted"), QItem_Handle_Submitted, reference_free_handler); + RegisterQItemHandler(HKEY("msgid"), QItem_Handle_MsgID); + RegisterQItemHandler(HKEY("envelope_from"), QItem_Handle_EnvelopeFrom); + RegisterQItemHandler(HKEY("retry"), QItem_Handle_retry); + RegisterQItemHandler(HKEY("attempted"), QItem_Handle_Attempted); + RegisterQItemHandler(HKEY("remote"), QItem_Handle_Recipient); + RegisterQItemHandler(HKEY("bounceto"), QItem_Handle_BounceTo); + RegisterQItemHandler(HKEY("source_room"), QItem_Handle_SenderRoom); + RegisterQItemHandler(HKEY("submitted"), QItem_Handle_Submitted); + smtp_init_spoolout(); CtdlRegisterEVCleanupHook(smtp_evq_cleanup); diff --git a/citadel/modules/smtp/smtpqueue.h b/citadel/modules/smtp/smtpqueue.h index be14ea5b5..6c6dc5311 100644 --- a/citadel/modules/smtp/smtpqueue.h +++ b/citadel/modules/smtp/smtpqueue.h @@ -65,6 +65,10 @@ typedef struct queueitem { typedef void (*QItemHandler)(OneQueItem *Item, StrBuf *Line, const char **Pos); + +typedef struct __QItemHandlerStruct { + QItemHandler H; +} QItemHandlerStruct; int DecreaseQReference(OneQueItem *MyQItem); void RemoveQItem(OneQueItem *MyQItem); int CountActiveQueueEntries(OneQueItem *MyQItem); diff --git a/webcit/smtpqueue.c b/webcit/smtpqueue.c index f5e390825..45389ee55 100644 --- a/webcit/smtpqueue.c +++ b/webcit/smtpqueue.c @@ -310,6 +310,16 @@ typedef struct queueitem { typedef void (*QItemHandler)(OneQueItem *Item, StrBuf *Line, const char **Pos); +typedef struct __QItemHandlerStruct { + QItemHandler H; +} QItemHandlerStruct; + +void RegisterQItemHandler(const char *Key, long Len, QItemHandler H) +{ + QItemHandlerStruct *HS = (QItemHandlerStruct*)malloc(sizeof(QItemHandlerStruct)); + HS->H = H; + Put(QItemHandlers, Key, Len, HS, NULL); +} void FreeMailQEntry(void *qv) { @@ -358,9 +368,9 @@ OneQueItem *DeserializeQueueItem(StrBuf *RawQItem, long QueMsgID) StrBufExtract_NextToken(Token, Line, &pItemPart, '|'); if (GetHash(QItemHandlers, SKEY(Token), &vHandler)) { - QItemHandler H; - H = (QItemHandler) vHandler; - H(Item, Line, &pItemPart); + QItemHandlerStruct *HS; + HS = (QItemHandlerStruct*) vHandler; + HS->H(Item, Line, &pItemPart); } } FreeStrBuf(&Line); @@ -642,14 +652,14 @@ InitModule_SMTP_QUEUE (void) { - Put(QItemHandlers, HKEY("msgid"), QItem_Handle_MsgID, reference_free_handler); - Put(QItemHandlers, HKEY("envelope_from"), QItem_Handle_EnvelopeFrom, reference_free_handler); - Put(QItemHandlers, HKEY("retry"), QItem_Handle_retry, reference_free_handler); - Put(QItemHandlers, HKEY("attempted"), QItem_Handle_Attempted, reference_free_handler); - Put(QItemHandlers, HKEY("remote"), QItem_Handle_Recipient, reference_free_handler); - Put(QItemHandlers, HKEY("bounceto"), QItem_Handle_BounceTo, reference_free_handler); - Put(QItemHandlers, HKEY("source_room"), QItem_Handle_SenderRoom, reference_free_handler); - Put(QItemHandlers, HKEY("submitted"), QItem_Handle_Submitted, reference_free_handler); + RegisterQItemHandler(HKEY("msgid"), QItem_Handle_MsgID); + RegisterQItemHandler(HKEY("envelope_from"), QItem_Handle_EnvelopeFrom); + RegisterQItemHandler(HKEY("retry"), QItem_Handle_retry); + RegisterQItemHandler(HKEY("attempted"), QItem_Handle_Attempted); + RegisterQItemHandler(HKEY("remote"), QItem_Handle_Recipient); + RegisterQItemHandler(HKEY("bounceto"), QItem_Handle_BounceTo); + RegisterQItemHandler(HKEY("source_room"), QItem_Handle_SenderRoom); + RegisterQItemHandler(HKEY("submitted"), QItem_Handle_Submitted); WebcitAddUrlHandler(HKEY("display_smtpqueue"), "", 0, display_smtpqueue, 0); WebcitAddUrlHandler(HKEY("display_smtpqueue_inner_div"), "", 0, display_smtpqueue_inner_div, 0);