if (Imap->num_msgs > Imap->num_alloc) {
Imap->num_alloc += REALLOC_INCREMENT;
Imap->msgids = realloc(Imap->msgids, (Imap->num_alloc * sizeof(long)) );
- Imap->flags = realloc(Imap->flags, (Imap->num_alloc * sizeof(long)) );
+ Imap->flags = realloc(Imap->flags, (Imap->num_alloc * sizeof(unsigned int)) );
}
Imap->msgids[Imap->num_msgs - 1] = msgnum;
Imap->flags[Imap->num_msgs - 1] = 0;
/* Load the message list */
cdbfr = cdb_fetch(CDB_MSGLISTS, &CC->room.QRnumber, sizeof(long));
if (cdbfr != NULL) {
- Imap->msgids = malloc(cdbfr->len);
- memcpy(Imap->msgids, cdbfr->ptr, cdbfr->len);
+ Imap->msgids = (long*)cdbfr->ptr;
Imap->num_msgs = cdbfr->len / sizeof(long);
Imap->num_alloc = cdbfr->len / sizeof(long);
+ cdbfr->ptr = NULL;
+ cdbfr->len = 0;
cdb_free(cdbfr);
}
if (Imap->num_msgs) {
- Imap->flags = malloc(Imap->num_alloc * sizeof(long));
- memset(Imap->flags, 0, (Imap->num_alloc * sizeof(long)) );
+ Imap->flags = malloc(Imap->num_alloc * sizeof(unsigned int));
+ memset(Imap->flags, 0, (Imap->num_alloc * sizeof(unsigned int)) );
}
imap_set_seen_flags(0);
*/
cdbfr = cdb_fetch(CDB_MSGLISTS, &CC->room.QRnumber, sizeof(long));
if (cdbfr != NULL) {
- msglist = malloc(cdbfr->len + 1);
- if (msglist == NULL) {
- IMAPM_syslog(LOG_CRIT, "malloc() failed");
- CC->kill_me = KILLME_MALLOC_FAILED;
- return;
- }
- memcpy(msglist, cdbfr->ptr, (size_t)cdbfr->len);
+ msglist = (long*)cdbfr->ptr;
+ cdbfr->ptr = NULL;
num_msgs = cdbfr->len / sizeof(long);
+ cdbfr->len = 0;
cdb_free(cdbfr);
} else {
num_msgs = 0;
(Imap->num_msgs - i)));
memmove(&Imap->flags[i],
&Imap->flags[i + 1],
- (sizeof(long) *
+ (sizeof(unsigned int) *
(Imap->num_msgs - i)));
-
--i;
}
CtdlRegisterServiceHook(config.c_imaps_port,
NULL, imaps_greeting, imap_command_loop, NULL, CitadelServiceIMAPS);
#endif
- CtdlRegisterSessionHook(imap_cleanup_function, EVT_STOP);
+ CtdlRegisterSessionHook(imap_cleanup_function, EVT_STOP, PRIO_STOP + 30);
CtdlRegisterCleanupHook(imap_cleanup);
}