From owner-freebsd-ports-bugs@FreeBSD.ORG Thu Apr 9 08:00:16 2009 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2EB03106588E for ; Thu, 9 Apr 2009 08:00:15 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 2DA058FC27 for ; Thu, 9 Apr 2009 08:00:15 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id n3980FDO080052 for ; Thu, 9 Apr 2009 08:00:15 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id n3980FpT080051; Thu, 9 Apr 2009 08:00:15 GMT (envelope-from gnats) Resent-Date: Thu, 9 Apr 2009 08:00:15 GMT Resent-Message-Id: <200904090800.n3980FpT080051@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Udo Schweigert Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 709591065860 for ; Thu, 9 Apr 2009 07:50:35 +0000 (UTC) (envelope-from udo.schweigert@siemens.com) Received: from goliath.siemens.de (goliath.siemens.de [192.35.17.28]) by mx1.freebsd.org (Postfix) with ESMTP id 79CC28FC08 for ; Thu, 9 Apr 2009 07:50:34 +0000 (UTC) (envelope-from udo.schweigert@siemens.com) Received: from mail1.siemens.de (localhost [127.0.0.1]) by goliath.siemens.de (8.12.11.20060308/8.12.11) with ESMTP id n3979oLB021427 for ; Thu, 9 Apr 2009 09:09:50 +0200 Received: from mars.cert.siemens.com (mars.cert.siemens.com [139.25.19.9]) by mail1.siemens.de (8.12.11.20060308/8.12.11) with ESMTP id n3979ni7011481 for ; Thu, 9 Apr 2009 09:09:49 +0200 Received: from alaska.cert.siemens.com (alaska.cert.siemens.com [139.25.19.64]) by mars.cert.siemens.com (8.14.2/8.14.2/$SiemensCERT: mail/cert.mc.pre, v 1.68 2006/12/29 07:12:05 mailadm Exp $) with ESMTP id n3979nn6032415 for ; Thu, 9 Apr 2009 09:09:49 +0200 (CEST) Received: from alaska.cert.siemens.com (alaska.cert.siemens.com [139.25.19.64]) by alaska.cert.siemens.com (8.14.3/8.14.3/$Ust: hosts/alaska/mail/config.mc, v 1.20 2006/06/21 05:39:02 ust Exp $) with ESMTP id n3979nPB051586 for ; Thu, 9 Apr 2009 09:09:49 +0200 (CEST) (envelope-from ust@alaska.cert.siemens.com) Received: (from ust@localhost) by alaska.cert.siemens.com (8.14.3/8.14.3/$Ust: hosts/alaska/mail/submit.mc,v 1.6 2004/08/29 16:18:57 ust Exp $) id n3979nUx051221; Thu, 9 Apr 2009 09:09:49 +0200 (CEST) (envelope-from ust) Message-Id: <200904090709.n3979nUx051221@alaska.cert.siemens.com> Date: Thu, 9 Apr 2009 09:09:49 +0200 (CEST) From: Udo Schweigert To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: Subject: ports/133535: maintainer-update of mail/coolmail X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Udo Schweigert List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Apr 2009 08:00:26 -0000 >Number: 133535 >Category: ports >Synopsis: maintainer-update of mail/coolmail >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: maintainer-update >Submitter-Id: current-users >Arrival-Date: Thu Apr 09 08:00:14 UTC 2009 >Closed-Date: >Last-Modified: >Originator: Udo Schweigert >Release: FreeBSD 7.1-RELEASE-p4 i386 >Organization: >Environment: >Description: Maintainer update of mail/coolmail: - Fix the "-vol" option for the system beep. - Delete non-FreeBSD feature from the man-page. - Bump PORTREVISION and re-organize the patch-files. Committer: Deleted file (cvs rm): files/patch-aa Added files (cvs add): files/patch-Makefile files/patch-coolmail.c files/patch-coolmail.man files/patch-display_list.c >How-To-Repeat: >Fix: diff -ru /usr/ports/mail/coolmail/Makefile ./Makefile --- /usr/ports/mail/coolmail/Makefile 2008-03-22 06:11:18.000000000 +0100 +++ ./Makefile 2009-04-08 09:27:17.000000000 +0200 @@ -7,7 +7,7 @@ PORTNAME= coolmail PORTVERSION= 1.3 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= mail MASTER_SITES= ${MASTER_SITE_SUNSITE} MASTER_SITE_SUBDIR=system/mail/biffs diff -ru /usr/ports/mail/coolmail/files/patch-Makefile ./files/patch-Makefile --- /usr/ports/mail/coolmail/files/patch-Makefile 1970-01-01 01:00:00.000000000 +0100 +++ ./files/patch-Makefile 2009-04-09 08:58:37.000000000 +0200 @@ -0,0 +1,50 @@ +--- Makefile.orig Thu Jan 11 11:55:40 1996 ++++ Makefile Mon Oct 12 17:55:05 1998 +@@ -22,31 +22,38 @@ + # your linker where to find the libraries it will need, and BINDIR and + # MANDIR specify the places to install the binary executable and manpage + # files for coolmail when you type `make install'. +-CFLAGS = ++CFLAGS = -DNO_CUSERID + LINK = $(CC) +-INCLUDES = -I/usr/X11R5/include +-LIB_DIRS = -L/usr/X11R5/lib ++INCLUDES = -I$(LOCALBASE)/include ++LIB_DIRS = -L$(LOCALBASE)/lib + BINDIR = /usr/local/bin + MANDIR = /usr/local/man/man1 + + # Comment these out if you can't or don't want to use the digitized audio + # feature. +-AUDIO = -DAUDIO +-AUDIO_MODULE = audio.o ++# AUDIO = -DAUDIO ++# AUDIO_MODULE = audio.o ++ ++# Comment these out if you don't want Maildir support ++MAILDIR = -DSUPPORT_MAILDIR ++# for debugging: ++#MAILDIR = $(MAILDIR) -DSUPPORT_MAILDIR_DEBUG ++# normally ignores non-regular files in the Maildir; uncomment to change ++#MAILDIR = $(MAILDIR) -DSUPPORT_MAILDIR_STRICTER + + #### You really don't need to read past this point. #### + + LIBS = $(LIB_DIRS) -lXt -lX11 -lm -lXext +-COPTS = $(CFLAGS) $(AUDIO) ++LIBS += -Wl,-rpath,$(LOCALBASE)/lib ++COPTS = $(CFLAGS) $(AUDIO) $(MAILDIR) + + all: coolmail + # Done. + +-new: +- rm -f *.o coolmail core ++new: clean all + + clean: +- rm -f *.o core ++ rm -f *.o core coolmail + + install: + @if [ -w $(BINDIR) ] ; then \ diff -ru /usr/ports/mail/coolmail/files/patch-aa ./files/patch-aa --- /usr/ports/mail/coolmail/files/patch-aa 2008-04-20 06:12:17.000000000 +0200 +++ ./files/patch-aa 1970-01-01 01:00:00.000000000 +0100 @@ -1,358 +0,0 @@ ---- Makefile.orig Thu Jan 11 11:55:40 1996 -+++ Makefile Mon Oct 12 17:55:05 1998 -@@ -22,31 +22,38 @@ - # your linker where to find the libraries it will need, and BINDIR and - # MANDIR specify the places to install the binary executable and manpage - # files for coolmail when you type `make install'. --CFLAGS = -+CFLAGS = -DNO_CUSERID - LINK = $(CC) --INCLUDES = -I/usr/X11R5/include --LIB_DIRS = -L/usr/X11R5/lib -+INCLUDES = -I$(LOCALBASE)/include -+LIB_DIRS = -L$(LOCALBASE)/lib - BINDIR = /usr/local/bin - MANDIR = /usr/local/man/man1 - - # Comment these out if you can't or don't want to use the digitized audio - # feature. --AUDIO = -DAUDIO --AUDIO_MODULE = audio.o -+# AUDIO = -DAUDIO -+# AUDIO_MODULE = audio.o -+ -+# Comment these out if you don't want Maildir support -+MAILDIR = -DSUPPORT_MAILDIR -+# for debugging: -+#MAILDIR = $(MAILDIR) -DSUPPORT_MAILDIR_DEBUG -+# normally ignores non-regular files in the Maildir; uncomment to change -+#MAILDIR = $(MAILDIR) -DSUPPORT_MAILDIR_STRICTER - - #### You really don't need to read past this point. #### - - LIBS = $(LIB_DIRS) -lXt -lX11 -lm -lXext --COPTS = $(CFLAGS) $(AUDIO) -+LIBS += -Wl,-rpath,$(LOCALBASE)/lib -+COPTS = $(CFLAGS) $(AUDIO) $(MAILDIR) - - all: coolmail - # Done. - --new: -- rm -f *.o coolmail core -+new: clean all - - clean: -- rm -f *.o core -+ rm -f *.o core coolmail - - install: - @if [ -w $(BINDIR) ] ; then \ -diff -rc coolmail-1.3.org/audio.c coolmail-1.3/audio.c -*** coolmail-1.3.org/audio.c Thu Jan 11 18:56:40 1996 ---- coolmail-1.3/audio.c Fri Jul 3 08:47:51 1998 -*************** -*** 128,133 **** ---- 128,134 ---- - INIT_FD; - audiofd = open( "/dev/audio", O_WRONLY | O_NDELAY ); - if (audiofd < 0) { -+ perror("/dev/audio"); - fprintf(stderr, "%s: Problem opening /dev/audio.\n", - "Coolmail"); - END_FD; -diff -rc coolmail-1.3.org/coolmail.c coolmail-1.3/coolmail.c -*** coolmail-1.3.org/coolmail.c Thu Jan 11 18:57:24 1996 ---- coolmail-1.3/coolmail.c Fri Jul 3 09:01:05 1998 -*************** -*** 25,32 **** ---- 25,34 ---- - #include - #include - #include -+ #include - #include - -+ - #ifdef AUDIO - #include - #endif -*************** -*** 34,41 **** - #include "render1.h" - #include "mailbox.h" - -! #define DEFAULT_MAIL_DIR "/var/spool/mail/" -! #define DEFAULT_COMMAND "xterm -n Elm -e mail\0" - #define DEFAULT_INTERVAL 30 - #define DEFAULT_FRAMES 15 - ---- 36,44 ---- - #include "render1.h" - #include "mailbox.h" - -! #define DEFAULT_MAIL_DIR "/var/mail/" -! -! #define DEFAULT_COMMAND "xterm -n Elm -e elm\0" - #define DEFAULT_INTERVAL 30 - #define DEFAULT_FRAMES 15 - -*************** -*** 96,102 **** ---- 99,107 ---- - int main(int argc, char *argv[]) - { - int reason; -+ #ifndef NO_CUSERID - char username[L_cuserid]; -+ #endif - - /* Quickly scan for the -h option -- if it is present don't do anything - * but print out some help and exit. */ -*************** -*** 104,110 **** - return(0); - - /* Get the username and use it to create a default mailfile name */ -! strcat(mailfile_str, cuserid(username)); - - /* Initialize the renderer */ - rend_init(&argc, argv, (float)150.0); ---- 109,126 ---- - return(0); - - /* Get the username and use it to create a default mailfile name */ -! #ifdef SUPPORT_MAILDIR -! if (getenv("MAILDIR") && strlen(getenv("MAILDIR"))) { -! strcpy(mailfile_str,getenv("MAILDIR")); -! } else if (getenv("MAIL") && strlen(getenv("MAIL"))) { -! strcpy(mailfile_str,getenv("MAIL")); -! } else -! #endif -! #ifndef NO_CUSERID -! strcat(mailfile_str, cuserid(username)); -! #else -! strcat(mailfile_str, getlogin()); -! #endif - - /* Initialize the renderer */ - rend_init(&argc, argv, (float)150.0); -*************** -*** 432,438 **** - printf(" -e command Specifies a command (usually in quotes) which\n"); - printf(" is used to invoke your favorite mail-reading\n"); - printf(" program.\n\n"); -! printf(" -f filename Watch filename, instead of the default mail\n"); - printf(" file, %s.\n\n", DEFAULT_MAIL_DIR); - printf(" -fr n Number of frames to generate for each animation.\n"); - printf(" Set to an appropriate value for your machine's.\n"); ---- 448,454 ---- - printf(" -e command Specifies a command (usually in quotes) which\n"); - printf(" is used to invoke your favorite mail-reading\n"); - printf(" program.\n\n"); -! printf(" -f filename Watch filename/maildir, instead of the default mail\n"); - printf(" file, %s.\n\n", DEFAULT_MAIL_DIR); - printf(" -fr n Number of frames to generate for each animation.\n"); - printf(" Set to an appropriate value for your machine's.\n"); -*************** -*** 626,631 **** ---- 642,680 ---- - - /* Get file modification time */ - -+ -+ /* Maildir notes (aqua@sonoma.net, Sun Jan 18 19:42:27 PST 1998): -+ * -+ * The maildir mail-storage standard is a replacement for the traditional -+ * 'mbox' format, intended to remove problems with file contention, locking, -+ * reduce corruption in the case of a program or system crash, etc, etc. -+ * Fairly detailed description of it can be had as part of the Qmail MTA -+ * documentation, http://www.qmail.org/qmail-manual-html/man5/maildir.html. -+ * -+ * The general gist of the maildir approach is that mail is stored, one -+ # message per file, in a subtree of ~/Maildir. New mail goes in /new, -+ * the "spool" goes in /cur, and /tmp is available to MUAs &c. Mail is -+ * theoretically supposed to be removed from /new immediately by the -+ * MUA, but I've observed that with mutt 0.88, at least, it isn't if -+ * the mailfile was generated by an import script (e.g. mbox2maildir) -+ * rather than the normal delivery agent, presumably due to naming -+ * differences. -+ * -+ * Checking for new mail mostly entails checking the mtime vs. atime of -+ * every file in /new, and the number of messages in /new; if the latter -+ * increases, new mail was delivered -- if not, but the files' atimes -+ * are all later than their mtimes, the MUA read the /new spool. -+ * -+ * The specifications suggest skipping over every .file, but reading all -+ * the others -- I've extended this to include skipping of all non-regular -+ * files, which seemed to make sense -- define SUPPORT_MAILDIR_STRICTER to -+ * override this behavior. -+ * -+ * This process is more resource-intensive than the old scheme of merely -+ * calling stat() for a single file -- it's an O(n) rather than O(1) -+ * operation. -+ * -+ */ - void cool_get_inboxstatus(char *filename, int *anymail, int *unreadmail, - int *newmail) - { -*************** -*** 633,670 **** - off_t newsize; - struct stat st; - int fd; - -- fd = open (filename, O_RDONLY, 0); -- if (fd < 0) -- { -- *anymail = 0; -- *newmail = 0; -- *unreadmail = 0; -- newsize = 0; -- } -- else -- { -- fstat(fd, &st); -- close(fd); -- newsize = st.st_size; -- -- if (newsize > 0) -- *anymail = 1; -- else -- *anymail = 0; -- -- if (st.st_mtime >= st.st_atime && newsize > 0) -- *unreadmail = 1; -- else -- *unreadmail = 0; - -! if (newsize > oldsize && *unreadmail) -! *newmail = 1; -! else -! *newmail = 0; -! } -! -! oldsize = newsize; - } - - /*---------------------------------------------------------------------------*/ ---- 682,800 ---- - off_t newsize; - struct stat st; - int fd; -+ #ifdef SUPPORT_MAILDIR -+ DIR *d; -+ struct dirent *de; -+ char maildir[256],mfn[256]; -+ #endif - - -! #ifdef SUPPORT_MAILDIR_DEBUG -! printf("B anymail=%d, newmail=%d, unreadmail=%d, oldsize=%d, newsize=%d\n", -! *anymail,*newmail,*unreadmail,oldsize,newsize); -! #endif -! #ifdef SUPPORT_MAILDIR -! if (stat(filename,&st)==-1) { -! *anymail = *newmail = *unreadmail = 0; -! newsize = oldsize = 0; -! perror(filename); -! return; -! } -! if (S_ISDIR(st.st_mode)) { -! /* likely a maildir */ -! strcpy(maildir,filename); -! if (maildir[strlen(maildir)-1]!='/') -! strcat(maildir,"/"); -! strcat(maildir,"new"); -! if (stat(maildir,&st)==-1) { -! perror(maildir); -! printf("%s is not a maildir (missing/inaccessible %s)\n",filename,maildir); -! *anymail = *newmail = *unreadmail = 0; -! newsize = oldsize = 0; -! return; -! } -! if (!S_ISDIR(st.st_mode)) { -! printf("%s is not a directory (mode %d)\n",maildir,st.st_mode); -! *anymail = *newmail = *unreadmail = 0; -! newsize = oldsize = 0; -! return; -! } -! d=opendir(maildir); -! newsize=0; -! *unreadmail = 0; -! while ((de=readdir(d))) { -! if (de->d_name[0]=='.') /* dotfiles ignored per the maildir specs */ -! continue; -! strcpy(mfn,maildir); -! if (mfn[strlen(mfn)-1]!='/') -! strcat(mfn,"/"); -! strcat(mfn,de->d_name); -! if (stat(mfn,&st)==-1) { -! perror(mfn); -! continue; -! } -! #ifndef SUPPORT_MAILDIR_STRICTER -! if (S_ISREG(st.st_mode)) -! #endif -! newsize++; -! if (st.st_mtime>=st.st_atime) { -! #ifdef SUPPORT_MAILDIR_DEBUG -! printf("unread: %s mtime = %d, atime = %d\n",de->d_name,st.st_mtime,st.st_atime); -! #endif -! *unreadmail = 1; -! } -! } -! closedir(d); -! if (newsize) { -! *anymail = 1; -! if (newsize>oldsize && *unreadmail) -! *newmail = 1; -! else -! *newmail = 0; -! } else { -! *anymail = *newmail = *unreadmail = 0; -! newsize = 0; -! } -! #ifdef SUPPORT_MAILDIR_DEBUG -! printf("A anymail=%d, newmail=%d, unreadmail=%d, oldsize=%d, newsize=%d\n", -! *anymail,*newmail,*unreadmail,oldsize,newsize); -! #endif -! oldsize=newsize; -! } else { -! #endif /* SUPPORT_MAILDIR */ -! fd = open (filename, O_RDONLY, 0); -! if (fd < 0) -! { -! *anymail = 0; -! *newmail = 0; -! *unreadmail = 0; -! newsize = 0; -! } -! else -! { -! fstat(fd, &st); -! close(fd); -! newsize = st.st_size; -! -! if (newsize > 0) -! *anymail = 1; -! else -! *anymail = 0; -! -! if (st.st_mtime >= st.st_atime && newsize > 0) -! *unreadmail = 1; -! else -! *unreadmail = 0; -! -! if (newsize > oldsize && *unreadmail) -! *newmail = 1; -! else -! *newmail = 0; -! } -! #ifdef SUPPORT_MAILDIR -! } -! #endif -! oldsize = newsize; - } - - /*---------------------------------------------------------------------------*/ diff -ru /usr/ports/mail/coolmail/files/patch-coolmail.c ./files/patch-coolmail.c --- /usr/ports/mail/coolmail/files/patch-coolmail.c 1970-01-01 01:00:00.000000000 +0100 +++ ./files/patch-coolmail.c 2009-04-09 08:59:14.000000000 +0200 @@ -0,0 +1,287 @@ +--- coolmail.c.orig 1996-01-11 18:57:24.000000000 +0100 ++++ coolmail.c 2009-04-08 09:14:08.000000000 +0200 +@@ -25,8 +25,10 @@ + #include + #include + #include ++#include + #include + ++ + #ifdef AUDIO + #include + #endif +@@ -34,14 +36,13 @@ + #include "render1.h" + #include "mailbox.h" + +-#define DEFAULT_MAIL_DIR "/var/spool/mail/" +-#define DEFAULT_COMMAND "xterm -n Elm -e mail\0" ++#define DEFAULT_MAIL_DIR "/var/mail/" ++ ++#define DEFAULT_COMMAND "xterm -n Elm -e elm\0" + #define DEFAULT_INTERVAL 30 + #define DEFAULT_FRAMES 15 + +-#ifdef AUDIO + #define DEFAULT_VOLUME 50 +-#endif + + #ifndef PI + #define PI 3.1415926536 +@@ -60,9 +61,9 @@ + unsigned int frames = DEFAULT_FRAMES; + int verbose = 0; + ++int cool_vol = DEFAULT_VOLUME; + #ifdef AUDIO + char *sndfile = NULL; /* default system sound */ +-int cool_vol = DEFAULT_VOLUME; + #endif + + float flag_angle = 0.0; +@@ -96,7 +97,9 @@ + int main(int argc, char *argv[]) + { + int reason; ++#ifndef NO_CUSERID + char username[L_cuserid]; ++#endif + + /* Quickly scan for the -h option -- if it is present don't do anything + * but print out some help and exit. */ +@@ -104,7 +107,18 @@ + return(0); + + /* Get the username and use it to create a default mailfile name */ +- strcat(mailfile_str, cuserid(username)); ++#ifdef SUPPORT_MAILDIR ++ if (getenv("MAILDIR") && strlen(getenv("MAILDIR"))) { ++ strcpy(mailfile_str,getenv("MAILDIR")); ++ } else if (getenv("MAIL") && strlen(getenv("MAIL"))) { ++ strcpy(mailfile_str,getenv("MAIL")); ++ } else ++#endif ++#ifndef NO_CUSERID ++ strcat(mailfile_str, cuserid(username)); ++#else ++ strcat(mailfile_str, getlogin()); ++#endif + + /* Initialize the renderer */ + rend_init(&argc, argv, (float)150.0); +@@ -379,7 +393,6 @@ + { + verbose++; + } +-#ifdef AUDIO + else if (!strcmp(argv[i], "-vol")) + { + i++; +@@ -387,6 +400,7 @@ + if (cool_vol < 0) cool_vol = 0; + else if (cool_vol > 100) cool_vol = 100; + } ++#ifdef AUDIO + else if (!strcmp(argv[i], "-af")) + { + i++; +@@ -432,7 +446,7 @@ + printf(" -e command Specifies a command (usually in quotes) which\n"); + printf(" is used to invoke your favorite mail-reading\n"); + printf(" program.\n\n"); +- printf(" -f filename Watch filename, instead of the default mail\n"); ++ printf(" -f filename Watch filename/maildir, instead of the default mail\n"); + printf(" file, %s.\n\n", DEFAULT_MAIL_DIR); + printf(" -fr n Number of frames to generate for each animation.\n"); + printf(" Set to an appropriate value for your machine's.\n"); +@@ -626,6 +640,39 @@ + + /* Get file modification time */ + ++ ++/* Maildir notes (aqua@sonoma.net, Sun Jan 18 19:42:27 PST 1998): ++ * ++ * The maildir mail-storage standard is a replacement for the traditional ++ * 'mbox' format, intended to remove problems with file contention, locking, ++ * reduce corruption in the case of a program or system crash, etc, etc. ++ * Fairly detailed description of it can be had as part of the Qmail MTA ++ * documentation, http://www.qmail.org/qmail-manual-html/man5/maildir.html. ++ * ++ * The general gist of the maildir approach is that mail is stored, one ++ # message per file, in a subtree of ~/Maildir. New mail goes in /new, ++ * the "spool" goes in /cur, and /tmp is available to MUAs &c. Mail is ++ * theoretically supposed to be removed from /new immediately by the ++ * MUA, but I've observed that with mutt 0.88, at least, it isn't if ++ * the mailfile was generated by an import script (e.g. mbox2maildir) ++ * rather than the normal delivery agent, presumably due to naming ++ * differences. ++ * ++ * Checking for new mail mostly entails checking the mtime vs. atime of ++ * every file in /new, and the number of messages in /new; if the latter ++ * increases, new mail was delivered -- if not, but the files' atimes ++ * are all later than their mtimes, the MUA read the /new spool. ++ * ++ * The specifications suggest skipping over every .file, but reading all ++ * the others -- I've extended this to include skipping of all non-regular ++ * files, which seemed to make sense -- define SUPPORT_MAILDIR_STRICTER to ++ * override this behavior. ++ * ++ * This process is more resource-intensive than the old scheme of merely ++ * calling stat() for a single file -- it's an O(n) rather than O(1) ++ * operation. ++ * ++ */ + void cool_get_inboxstatus(char *filename, int *anymail, int *unreadmail, + int *newmail) + { +@@ -633,38 +680,119 @@ + off_t newsize; + struct stat st; + int fd; ++#ifdef SUPPORT_MAILDIR ++ DIR *d; ++ struct dirent *de; ++ char maildir[256],mfn[256]; ++#endif + +- fd = open (filename, O_RDONLY, 0); +- if (fd < 0) +- { +- *anymail = 0; +- *newmail = 0; +- *unreadmail = 0; +- newsize = 0; +- } +- else +- { +- fstat(fd, &st); +- close(fd); +- newsize = st.st_size; +- +- if (newsize > 0) +- *anymail = 1; +- else +- *anymail = 0; +- +- if (st.st_mtime >= st.st_atime && newsize > 0) +- *unreadmail = 1; +- else +- *unreadmail = 0; +- +- if (newsize > oldsize && *unreadmail) +- *newmail = 1; +- else +- *newmail = 0; +- } + +- oldsize = newsize; ++#ifdef SUPPORT_MAILDIR_DEBUG ++ printf("B anymail=%d, newmail=%d, unreadmail=%d, oldsize=%d, newsize=%d\n", ++ *anymail,*newmail,*unreadmail,oldsize,newsize); ++#endif ++#ifdef SUPPORT_MAILDIR ++ if (stat(filename,&st)==-1) { ++ *anymail = *newmail = *unreadmail = 0; ++ newsize = oldsize = 0; ++ perror(filename); ++ return; ++ } ++ if (S_ISDIR(st.st_mode)) { ++ /* likely a maildir */ ++ strcpy(maildir,filename); ++ if (maildir[strlen(maildir)-1]!='/') ++ strcat(maildir,"/"); ++ strcat(maildir,"new"); ++ if (stat(maildir,&st)==-1) { ++ perror(maildir); ++ printf("%s is not a maildir (missing/inaccessible %s)\n",filename,maildir); ++ *anymail = *newmail = *unreadmail = 0; ++ newsize = oldsize = 0; ++ return; ++ } ++ if (!S_ISDIR(st.st_mode)) { ++ printf("%s is not a directory (mode %d)\n",maildir,st.st_mode); ++ *anymail = *newmail = *unreadmail = 0; ++ newsize = oldsize = 0; ++ return; ++ } ++ d=opendir(maildir); ++ newsize=0; ++ *unreadmail = 0; ++ while ((de=readdir(d))) { ++ if (de->d_name[0]=='.') /* dotfiles ignored per the maildir specs */ ++ continue; ++ strcpy(mfn,maildir); ++ if (mfn[strlen(mfn)-1]!='/') ++ strcat(mfn,"/"); ++ strcat(mfn,de->d_name); ++ if (stat(mfn,&st)==-1) { ++ perror(mfn); ++ continue; ++ } ++#ifndef SUPPORT_MAILDIR_STRICTER ++ if (S_ISREG(st.st_mode)) ++#endif ++ newsize++; ++ if (st.st_mtime>=st.st_atime) { ++#ifdef SUPPORT_MAILDIR_DEBUG ++ printf("unread: %s mtime = %d, atime = %d\n",de->d_name,st.st_mtime,st.st_atime); ++#endif ++ *unreadmail = 1; ++ } ++ } ++ closedir(d); ++ if (newsize) { ++ *anymail = 1; ++ if (newsize>oldsize && *unreadmail) ++ *newmail = 1; ++ else ++ *newmail = 0; ++ } else { ++ *anymail = *newmail = *unreadmail = 0; ++ newsize = 0; ++ } ++#ifdef SUPPORT_MAILDIR_DEBUG ++ printf("A anymail=%d, newmail=%d, unreadmail=%d, oldsize=%d, newsize=%d\n", ++ *anymail,*newmail,*unreadmail,oldsize,newsize); ++#endif ++ oldsize=newsize; ++ } else { ++#endif /* SUPPORT_MAILDIR */ ++ fd = open (filename, O_RDONLY, 0); ++ if (fd < 0) ++ { ++ *anymail = 0; ++ *newmail = 0; ++ *unreadmail = 0; ++ newsize = 0; ++ } ++ else ++ { ++ fstat(fd, &st); ++ close(fd); ++ newsize = st.st_size; ++ ++ if (newsize > 0) ++ *anymail = 1; ++ else ++ *anymail = 0; ++ ++ if (st.st_mtime >= st.st_atime && newsize > 0) ++ *unreadmail = 1; ++ else ++ *unreadmail = 0; ++ ++ if (newsize > oldsize && *unreadmail) ++ *newmail = 1; ++ else ++ *newmail = 0; ++ } ++#ifdef SUPPORT_MAILDIR ++ } ++#endif ++ oldsize = newsize; + } + + /*---------------------------------------------------------------------------*/ diff -ru /usr/ports/mail/coolmail/files/patch-coolmail.man ./files/patch-coolmail.man --- /usr/ports/mail/coolmail/files/patch-coolmail.man 1970-01-01 01:00:00.000000000 +0100 +++ ./files/patch-coolmail.man 2009-04-09 09:01:05.000000000 +0200 @@ -0,0 +1,32 @@ +--- coolmail.man.orig 1996-01-11 18:57:28.000000000 +0100 ++++ coolmail.man 2009-04-09 09:00:38.000000000 +0200 +@@ -37,12 +37,9 @@ + Ring bell when new mail is first detected, but not when more new mail is + detected. + .TP 8 +--af filename +-Specifies the audio file to use rather than the standard system beep. +-.TP 8 + -vol n +-Value between 0 and 100 for the volume setting for both the system +-beep and the sound file. The default is 50. ++Value between 0 and 100 for the volume setting for the system ++beep. The default is 50. + .TP 8 + -v + Print version and inbox path. +@@ -71,12 +68,9 @@ + .B monochrome (\fPclass\fB Monochrome) + A Boolean value that enables monochrome mode when true. + .TP 8 +-.B soundFile (\fPclass \fB SoundFile) +-Specifies the audio file to use rather than the standard system beep. +-.TP 8 + .B volume (\fPclass \fB Volume) +-Value between 0 and 100 for the volume setting for both the system +-beep and the sound file. ++Value between 0 and 100 for the volume setting for the system ++beep. + .SH COPYRIGHT + Copyright 1994 + diff -ru /usr/ports/mail/coolmail/files/patch-display_list.c ./files/patch-display_list.c --- /usr/ports/mail/coolmail/files/patch-display_list.c 1970-01-01 01:00:00.000000000 +0100 +++ ./files/patch-display_list.c 2009-04-08 09:27:07.000000000 +0200 @@ -0,0 +1,46 @@ +--- coolmail-1.3/system/X11/display_list.c.orig 1996-01-11 19:14:30.000000000 +0100 ++++ coolmail-1.3/system/X11/display_list.c 2009-04-08 09:14:08.000000000 +0200 +@@ -41,9 +41,9 @@ + extern char mailfile_str[]; /* to obtain the command and mail file. */ + extern unsigned int frames; + ++extern int cool_vol; + #ifdef AUDIO + extern char *sndfile; /* same hack as above */ +-extern int cool_vol; + void audio_beep(void); + #endif + +@@ -156,9 +156,9 @@ + #ifdef AUDIO + XtResource soundfile = {"soundFile", "SoundFile", XtRString, + sizeof(str), 0, XtRString, sndfile}; ++#endif + XtResource volume = {"volume", "Volume", XtRInt, + sizeof(cool_vol), 0, XtRInt, &cool_vol}; +-#endif + + XtGetApplicationResources(toplevel, &str, &mailcmd, 1, NULL, 0); + strcpy(command_str, str); +@@ -175,11 +175,11 @@ + XtGetApplicationResources(toplevel, &str, &soundfile, 1, NULL, 0); + if(str) + sndfile = (char *)strdup(str); ++#endif + + XtGetApplicationResources(toplevel, &cool_vol, &volume, 1, NULL, 0); + if (cool_vol < 0) cool_vol = 0; + else if (cool_vol > 100) cool_vol = 100; +-#endif + + } + +@@ -308,7 +308,7 @@ + else /* no sound file chosen then use system bell */ + XBell(XtDisplay(main_gfx_w), cool_vol); + #else +- XBell(XtDisplay(main_gfx_w), 50); ++ XBell(XtDisplay(main_gfx_w), cool_vol); + #endif + } + >Release-Note: >Audit-Trail: >Unformatted: