>Number: 80709
>Category: ports
>Synopsis: [PATCH]: torsmo doesn't display mail count correctly.
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Fri May 06 17:30:02 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator: Roland Smith
>Release: FreeBSD 5.4-STABLE amd64
>Organization:
>Environment:
System: FreeBSD slackbox.xs4all.nl 5.4-STABLE FreeBSD 5.4-STABLE #0: Fri Apr 15 17:37:34 CEST 2005 rsmith@slackbox.xs4all.nl:/usr/obj/usr/src/sys/RFS amd64
>Description:
Torsmo 0.18 does not display the mail count of an mbox type mailbox
correctly. If mails are deleted from a mailbox, the mail count
isn't altered. Possibly because it checks for stat.st_mtime instead
of stat.st_ctime. The update is also done very unfrequently. A posible
error in stat(2) is also not detected. There are two overlapping
variables.
>How-To-Repeat:
Run Torsmo.
>Fix:
Apply the following patch (patch-mail.c):
--------------------- patch -----------------------------
--- mail.c.orig Fri May 6 10:47:22 2005
+++ mail.c Fri May 6 19:17:15 2005
@@ -12,30 +12,26 @@
static double last_mail_update;
void update_mail_count() {
- struct stat buf;
+ struct stat sbuf;
if (current_mail_spool == NULL) return;
/* TODO: use that fine file modification notify on Linux 2.4 */
- /* don't check mail so often (9.5s is minimum interval) */
- if (current_update_time - last_mail_update < 9.5)
+ /* don't check mail so often (5.5s is minimum interval) */
+ if (current_update_time - last_mail_update < 5.5)
return;
else
last_mail_update = current_update_time;
- if (stat(current_mail_spool, &buf)) {
- static int rep;
- if (!rep) {
+ if (stat(current_mail_spool, &sbuf) == -1) {
ERR("can't stat %s: %s", current_mail_spool, strerror(errno));
- rep = 1;
- }
- return;
+ return;
}
#if HAVE_DIRENT_H
/* maildir format */
- if (S_ISDIR(buf.st_mode)){
+ if (S_ISDIR(sbuf.st_mode)){
DIR *dir;
char *dirname;
struct dirent *dirent;
@@ -95,7 +91,7 @@
/* mbox format */
- if (buf.st_mtime != last_mail_mtime) {
+ if (sbuf.st_ctime != last_mail_mtime) {
/* yippee, modification time has changed, let's read mail count! */
static int rep;
FILE *fp;
@@ -127,7 +123,6 @@
reading_status = 1;
}
}
- else {
if (reading_status && strncmp(buf, "X-Mozilla-Status:", 17) == 0) {
/* check that mail isn't already read */
if (strchr(buf+21, '0'))
@@ -144,7 +139,6 @@
reading_status = 0;
continue;
}
- }
/* skip until \n */
while (strchr(buf, '\n') == NULL && !feof(fp))
@@ -155,7 +149,7 @@
if (reading_status) info.new_mail_count++;
- last_mail_mtime = buf.st_mtime;
+ last_mail_mtime = sbuf.st_mtime;
}
}
--------------------- patch -----------------------------
>Release-Note:
>Audit-Trail:
>Unformatted: