};
/* Data which is passed between imap_rename() and imap_rename_backend() */
-struct irlparms {
- char *oldname;
- char *newname;
+typedef struct __irlparms {
+ const char *oldname;
+ long oldnamelen;
+ const char *newname;
+ long newnamelen;
struct irl **irl;
-};
+}irlparms;
/*
*/
cdbfr = cdb_fetch(CDB_MSGLISTS, &CC->room.QRnumber, sizeof(long));
if (cdbfr != NULL) {
- msglist = malloc(cdbfr->len);
+ msglist = malloc(cdbfr->len + 1);
if (msglist == NULL) {
syslog(LOG_CRIT, "IMAP: malloc() failed");
CC->kill_me = KILLME_MALLOC_FAILED;
* array.
*/
--Imap->num_msgs;
- memcpy(&Imap->msgids[i],
- &Imap->msgids[i + 1],
- (sizeof(long) *
- (Imap->num_msgs - i)));
- memcpy(&Imap->flags[i],
- &Imap->flags[i + 1],
- (sizeof(long) *
- (Imap->num_msgs - i)));
+ memmove(&Imap->msgids[i],
+ &Imap->msgids[i + 1],
+ (sizeof(long) *
+ (Imap->num_msgs - i)));
+ memmove(&Imap->flags[i],
+ &Imap->flags[i + 1],
+ (sizeof(long) *
+ (Imap->num_msgs - i)));
--i;
}
IAPrintf("* %d RECENT\r\n", num_recent);
}
- if (num_msgs != 0) {
+ if (msglist != NULL) {
free(msglist);
}
Imap->last_mtime = CC->room.QRmtime;
char newroomname[ROOMNAMELEN];
int newfloor = 0;
struct irl *irlp = NULL; /* scratch pointer */
- struct irlparms *irlparms;
+ irlparms *myirlparms;
- irlparms = (struct irlparms *) data;
+ myirlparms = (irlparms *) data;
imap_mailboxname(foldername, sizeof foldername, qrbuf);
/* Rename subfolders */
- if ((!strncasecmp(foldername, irlparms->oldname,
- strlen(irlparms->oldname))
- && (foldername[strlen(irlparms->oldname)] == '/'))) {
+ if ((!strncasecmp(foldername, myirlparms->oldname,
+ myirlparms->oldnamelen)
+ && (foldername[myirlparms->oldnamelen] == '/'))) {
sprintf(newfoldername, "%s/%s",
- irlparms->newname,
- &foldername[strlen(irlparms->oldname) + 1]
+ myirlparms->newname,
+ &foldername[myirlparms->oldnamelen + 1]
);
newfloor = imap_roomname(newroomname,
strcpy(irlp->irl_newroom, newroomname);
strcpy(irlp->irl_oldroom, qrbuf->QRname);
irlp->irl_newfloor = newfloor;
- irlp->next = *(irlparms->irl);
- *(irlparms->irl) = irlp;
+ irlp->next = *(myirlparms->irl);
+ *(myirlparms->irl) = irlp;
}
}
int r;
struct irl *irl = NULL; /* the list */
struct irl *irlp = NULL; /* scratch pointer */
- struct irlparms irlparms;
+ irlparms irlparms;
char aidemsg[1024];
if (strchr(Params[3].Key, '\\') != NULL) {
/* Otherwise, do the subfolders. Build a list of rooms to rename... */
else {
irlparms.oldname = Params[2].Key;
+ irlparms.oldnamelen = Params[2].len;
irlparms.newname = Params[3].Key;
+ irlparms.newnamelen = Params[3].len;
irlparms.irl = &irl;
CtdlForEachRoom(imap_rename_backend, (void *) &irlparms);