};
/* 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;
int ra = 0;
struct ctdlroom QRscratch;
int msgs, new;
- int floornum;
- int roomflags;
int i;
/* Convert the supplied folder name to a roomname */
Imap->selected = 0;
return;
}
- floornum = (i & 0x00ff);
- roomflags = (i & 0xff00);
/* First try a regular match */
c = CtdlGetRoom(&QRscratch, towhere);
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;
}
}
{
char old_room[ROOMNAMELEN];
char new_room[ROOMNAMELEN];
- int oldr, newr;
+ int newr;
int new_floor;
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) {
return;
}
- oldr = imap_roomname(old_room, sizeof old_room, Params[2].Key);
+ imap_roomname(old_room, sizeof old_room, Params[2].Key);
newr = imap_roomname(new_room, sizeof new_room, Params[3].Key);
new_floor = (newr & 0xFF);
/* 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);
{
struct timeval tv1, tv2;
suseconds_t total_time = 0;
- int untagged_ok = 1;
citimap *Imap;
const char *pchs, *pche;
const imap_handler_hook *h;
* If the command just submitted does not contain a literal, we
* might think about delivering some untagged stuff...
*/
- if (*(ChrPtr(Imap->Cmd.CmdBuf) + StrLength(Imap->Cmd.CmdBuf) - 1)
- == '}') {
- untagged_ok = 0;
- }
/* Grab the tag, command, and parameters. */
imap_parameterize(&Imap->Cmd);
CtdlRegisterCleanupHook(imap_cleanup);
}
- /* return our Subversion id for the Log */
+ /* return our module name for the log */
return "imap";
}