From: Art Cancro Date: Sat, 19 Aug 2023 21:34:34 +0000 (-0900) Subject: serv_imap.c: moved to new CtdlFetchMsgList() API. X-Git-Tag: v989~63 X-Git-Url: https://code.citadel.org/?a=commitdiff_plain;h=4432ed8e18a3c8c4326a9b6692a4c5f641671171;p=citadel.git serv_imap.c: moved to new CtdlFetchMsgList() API. This should be the last of them. Next step is to audit all other use of cdb_free(). --- diff --git a/citadel/server/euidindex.c b/citadel/server/euidindex.c index 0c603617e..b992d6f82 100644 --- a/citadel/server/euidindex.c +++ b/citadel/server/euidindex.c @@ -188,8 +188,8 @@ void cmd_euid(char *cmdbuf) { return; } } - free(msglist); } + free(msglist); cprintf("%d not found\n", ERROR + MESSAGE_NOT_FOUND); } diff --git a/citadel/server/modules/expire/serv_expire.c b/citadel/server/modules/expire/serv_expire.c index 9bf180ad0..af53a1ed3 100644 --- a/citadel/server/modules/expire/serv_expire.c +++ b/citadel/server/modules/expire/serv_expire.c @@ -117,7 +117,7 @@ void GatherPurgeMessages(struct ctdlroom *qrbuf, void *data) { // Nothing to do if there aren't any messages if (num_msgs <= 0) { - if (msglist != NULL) free(msglist); + free(msglist); return; } diff --git a/citadel/server/modules/imap/serv_imap.c b/citadel/server/modules/imap/serv_imap.c index 621d21396..5fc769652 100644 --- a/citadel/server/modules/imap/serv_imap.c +++ b/citadel/server/modules/imap/serv_imap.c @@ -1,6 +1,6 @@ // IMAP server for the Citadel system // -// Copyright (c) 1987-2022 by the citadel.org team +// Copyright (c) 1987-2023 by the citadel.org team // // This program is open source software. Use, duplication, or disclosure // is subject to the terms of the GNU General Public License, version 3. @@ -26,6 +26,7 @@ #include "../../support.h" #include "../../config.h" #include "../../user_ops.h" +#include "../../room_ops.h" #include "../../database.h" #include "../../msgbase.h" #include "../../internet_addressing.h" @@ -256,7 +257,6 @@ void imap_add_single_msgid(long msgnum, void *userdata) { * Set up a message ID map for the current room (folder) */ void imap_load_msgids(void) { - struct cdbdata *cdbfr; citimap *Imap = IMAP; if (Imap->selected == 0) { @@ -267,21 +267,13 @@ void imap_load_msgids(void) { imap_free_msgids(); /* If there was already a map, free it */ /* Load the message list */ - cdbfr = cdb_fetch(CDB_MSGLISTS, &CC->room.QRnumber, sizeof(long)); - if (cdbfr != NULL) { - Imap->msgids = (long*)cdbfr->ptr; - Imap->num_msgs = cdbfr->len / sizeof(long); - Imap->num_alloc = cdbfr->len / sizeof(long); - cdbfr->ptr = NULL; // (this needs attention if we move to LMDB) - cdbfr->len = 0; - cdb_free(cdbfr); - } + Imap->num_msgs = CtdlFetchMsgList(CC->room.QRnumber, &Imap->msgids); + Imap->num_alloc = Imap->num_msgs; if (Imap->num_msgs) { Imap->flags = malloc(Imap->num_alloc * sizeof(unsigned int)); memset(Imap->flags, 0, (Imap->num_alloc * sizeof(unsigned int)) ); } - imap_set_seen_flags(0); } @@ -295,7 +287,6 @@ void imap_rescan_msgids(void) { long original_highest = 0L; int i, j, jstart; int message_still_exists; - struct cdbdata *cdbfr; long *msglist = NULL; int num_msgs = 0; int num_recent = 0; @@ -317,17 +308,7 @@ void imap_rescan_msgids(void) { /* Load the *current* message list from disk, so we can compare it * to what we have in memory. */ - cdbfr = cdb_fetch(CDB_MSGLISTS, &CC->room.QRnumber, sizeof(long)); - if (cdbfr != NULL) { - msglist = (long*)cdbfr->ptr; - cdbfr->ptr = NULL; // (this needs attention if we move to LMDB) - num_msgs = cdbfr->len / sizeof(long); - cdbfr->len = 0; - cdb_free(cdbfr); - } - else { - num_msgs = 0; - } + num_msgs = CtdlFetchMsgList(CC->room.QRnumber, &msglist); /* * Check to see if any of the messages we know about have been expunged @@ -396,9 +377,7 @@ void imap_rescan_msgids(void) { IAPrintf("* %d RECENT\r\n", num_recent); } - if (msglist != NULL) { - free(msglist); - } + free(msglist); Imap->last_mtime = CC->room.QRmtime; } diff --git a/citadel/server/msgbase.c b/citadel/server/msgbase.c index daee42762..5e054ac86 100644 --- a/citadel/server/msgbase.c +++ b/citadel/server/msgbase.c @@ -446,9 +446,7 @@ void CtdlSetSeen(long *target_msgnums, int num_target_msgnums, // Load the message list num_msgs = CtdlFetchMsgList(which_room->QRnumber, &msglist); if (num_msgs <= 0) { - if (msglist != NULL) { - free(msglist); - } + free(msglist); return; } @@ -653,7 +651,7 @@ int CtdlForEachMessage(int mode, long ref, char *search_string, // Load the message list num_msgs = CtdlFetchMsgList(CC->room.QRnumber, &msglist); if (num_msgs <= 0) { - if (msglist) free(msglist); + free(msglist); if (need_to_free_re) regfree(&re); return 0; // No messages at all? No further action. } @@ -3299,8 +3297,7 @@ int CtdlDeleteMessages(const char *room_name, // which room /* * GetMetaData() - Get the supplementary record for a message */ -void GetMetaData(struct MetaData *smibuf, long msgnum) -{ +void GetMetaData(struct MetaData *smibuf, long msgnum) { struct cdbdata *cdbsmi; long TheIndex; diff --git a/citadel/server/room_ops.c b/citadel/server/room_ops.c index 749bcacb9..65a410688 100644 --- a/citadel/server/room_ops.c +++ b/citadel/server/room_ops.c @@ -612,7 +612,8 @@ int CtdlFetchMsgList(long roomnum, long **msgs) { cdbfr = cdb_fetch(CDB_MSGLISTS, &roomnum, sizeof(long)); if (cdbfr == NULL) { syslog(LOG_ERR, "room_ops: no msglist for room %ld", roomnum); - *msgs = NULL; + *msgs = malloc(sizeof(long)); // dummy buffer + *msgs[0] = 0; return (0); } diff --git a/citadel/server/user_ops.c b/citadel/server/user_ops.c index a82014c21..d6303ebcf 100644 --- a/citadel/server/user_ops.c +++ b/citadel/server/user_ops.c @@ -1101,9 +1101,7 @@ int InitialMailCheck() { } } } - if (msglist != NULL) - free(msglist); - + free(msglist); return(num_newmsgs); }