Skip site navigation (1)Skip section navigation (2)
Date:      Fri,  6 May 2005 19:29:26 +0200 (CEST)
From:      Roland Smith <rsmith@xs4all.nl>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/80709: [PATCH]: torsmo doesn't display mail count correctly.
Message-ID:  <20050506172926.5A86661F1@slackbox.xs4all.nl>
Resent-Message-ID: <200505061730.j46HU2Bm020598@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>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:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050506172926.5A86661F1>