/*
- * Copyright (c) 1987-2015 by the citadel.org team
+ * Copyright (c) 1987-2017 by the citadel.org team
*
* This program is open source software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* are both globally unique and persistent across a room-to-room copy, we
* can get this done quite easily.
*/
-void imap_output_copyuid_response(void) {
- citimap *Imap = IMAP;
+void imap_output_copyuid_response(citimap *Imap) {
int i;
- int num_output = 0;
-
+ StrBuf *MsgsCopied = NewStrBuf();
+
for (i = 0; i < Imap->num_msgs; ++i) {
if (Imap->flags[i] & IMAP_SELECTED) {
- ++num_output;
- if (num_output == 1) {
- IAPuts("[COPYUID ");
- }
- else if (num_output > 1) {
- IAPuts(",");
+ if (StrLength(MsgsCopied) > 0) {
+ StrBufAppendBufPlain(MsgsCopied, HKEY(","), 0);
}
- IAPrintf("%ld", Imap->msgids[i]);
+ StrBufAppendPrintf(MsgsCopied, "%ld", Imap->msgids[i]);
}
}
- if (num_output > 0) {
- IAPuts("] ");
+
+ if (StrLength(MsgsCopied) > 0) {
+ IAPrintf("[COPYUID %ld %s %s] ", GLOBAL_UIDVALIDITY_VALUE, ChrPtr(MsgsCopied), ChrPtr(MsgsCopied));
}
+
+ FreeStrBuf(&MsgsCopied);
}
ret = imap_do_copy(Params[3].Key);
if (!ret) {
IAPrintf("%s OK ", Params[0].Key);
- imap_output_copyuid_response();
+ imap_output_copyuid_response(IMAP);
IAPuts("COPY completed\r\n");
}
else {
if (imap_do_copy(Params[4].Key) == 0) {
IAPrintf("%s OK ", Params[0].Key);
- imap_output_copyuid_response();
+ imap_output_copyuid_response(IMAP);
IAPuts("UID COPY completed\r\n");
}
else {
client_getln(dummy, sizeof dummy);
/* Convert RFC822 newlines (CRLF) to Unix newlines (LF) */
- IMAPM_syslog(LOG_DEBUG, "Converting CRLF to LF");
+ syslog(LOG_DEBUG, "Converting CRLF to LF");
StrBufToUnixLF(Imap->TransmittedMessage);
- IMAPM_syslog(LOG_DEBUG, "Converting message format");
+ syslog(LOG_DEBUG, "Converting message format");
msg = convert_internet_message_buf(&Imap->TransmittedMessage);
ret = imap_grabroom(roomname, Params[2].Key, 1);