]> code.citadel.org Git - citadel.git/blobdiff - citadel/server/modules/imap/serv_imap.c
Where gettimeofday() is required, include both time.h and sys/time.h
[citadel.git] / citadel / server / modules / imap / serv_imap.c
index 621d21396b8a03000eafecb2a1c3fa0d328b179b..d55971bb5f76de414b88cd4122b3bf9ad3ea2d8a 100644 (file)
@@ -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.
@@ -15,6 +15,7 @@
 #include <errno.h>
 #include <sys/types.h>
 #include <time.h>
+#include <sys/time.h>
 #include <sys/wait.h>
 #include <ctype.h>
 #include <string.h>
@@ -26,6 +27,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 +258,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 +268,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 +288,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 +309,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 +378,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;
 }