[dovecot-cvs] dovecot/src/pop3 client.c, 1.17, 1.18 client.h, 1.3,
1.4 commands.c, 1.13, 1.14
cras at procontrol.fi
cras at procontrol.fi
Mon May 10 04:28:22 EEST 2004
Update of /home/cvs/dovecot/src/pop3
In directory talvi:/tmp/cvs-serv31294
Modified Files:
client.c client.h commands.c
Log Message:
Fixes to commands after mails have been deleted. Patch by Nic Bellamy.
Index: client.c
===================================================================
RCS file: /home/cvs/dovecot/src/pop3/client.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- client.c 28 Apr 2004 00:21:01 -0000 1.17
+++ client.c 10 May 2004 01:28:19 -0000 1.18
@@ -55,6 +55,7 @@
}
client->messages_count = status.messages;
+ client->deleted_size = 0;
client->uidvalidity = status.uidvalidity;
if (client->messages_count == 0)
@@ -76,6 +77,7 @@
}
client->total_size = 0;
+ client->deleted_size = 0;
failed = FALSE;
while ((mail = mailbox_search_next(ctx)) != NULL) {
uoff_t size = mail->get_size(mail);
Index: client.h
===================================================================
RCS file: /home/cvs/dovecot/src/pop3/client.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- client.h 16 Apr 2003 14:24:12 -0000 1.3
+++ client.h 10 May 2004 01:28:19 -0000 1.4
@@ -16,9 +16,11 @@
unsigned int bad_counter;
unsigned int messages_count;
+ unsigned int deleted_count;
unsigned int uidvalidity;
uoff_t *message_sizes;
uoff_t total_size;
+ uoff_t deleted_size;
unsigned char *deleted_bitmask;
Index: commands.c
===================================================================
RCS file: /home/cvs/dovecot/src/pop3/commands.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- commands.c 1 May 2004 23:15:51 -0000 1.13
+++ commands.c 10 May 2004 01:28:19 -0000 1.14
@@ -105,6 +105,8 @@
}
client->deleted_bitmask[msgnum / CHAR_BIT] |= 1 << (msgnum % CHAR_BIT);
+ client->deleted_count++;
+ client->deleted_size += client->message_sizes[msgnum];
client_send_line(client, "+OK Marked to be deleted.");
return TRUE;
}
@@ -115,8 +117,13 @@
if (*args == '\0') {
client_send_line(client, "+OK %u messages:",
- client->messages_count);
+ client->messages_count - client->deleted_count);
for (i = 0; i < client->messages_count; i++) {
+ if (client->deleted) {
+ if (client->deleted_bitmask[i / CHAR_BIT] &
+ (1 << (i % CHAR_BIT)))
+ continue;
+ }
client_send_line(client, "%u %"PRIuUOFF_T,
i+1, client->message_sizes[i]);
}
@@ -321,6 +328,8 @@
if (client->deleted) {
client->deleted = FALSE;
memset(client->deleted_bitmask, 0, MSGS_BITMASK_SIZE(client));
+ client->deleted_count = 0;
+ client->deleted_size = 0;
}
client_send_line(client, "+OK");
@@ -330,7 +339,8 @@
static int cmd_stat(struct client *client, const char *args __attr_unused__)
{
client_send_line(client, "+OK %u %"PRIuUOFF_T, client->
- messages_count, client->total_size);
+ messages_count - client->deleted_count,
+ client->total_size - client->deleted_size);
return TRUE;
}
@@ -379,6 +389,13 @@
}
while ((mail = mailbox_search_next(ctx)) != NULL) {
+ if (client->deleted) {
+ uint32_t idx = mail->seq - 1;
+ if (client->deleted_bitmask[idx / CHAR_BIT] &
+ (1 << (idx % CHAR_BIT)))
+ continue;
+ }
+
client_send_line(client, message == 0 ?
"%u %u.%u" : "+OK %u %u.%u",
mail->seq, client->uidvalidity, mail->uid);
More information about the dovecot-cvs
mailing list