freebsd-ports/mail/coolmail/files/patch-aa
Justin M. Seger 81d9e0e4c2 Unbreak for ELF.
Submitted by:	steve
1998-10-13 04:18:50 +00:00

360 lines
11 KiB
Text

--- Makefile.orig Thu Jan 11 11:55:40 1996
+++ Makefile Mon Oct 12 17:55:05 1998
@@ -22,31 +22,40 @@
# 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$(X11BASE)/include
+LIB_DIRS = -L$(X11BASE)/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)
+.if $(PORTOBJFORMAT) == "elf"
+LIBS += -Wl,-rpath,$(X11BASE)/lib
+.endif
+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 <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
+ #include <dirent.h>
#include <fcntl.h>
+
#ifdef AUDIO
#include <string.h>
#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<username>.\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<username>.\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;
}
/*---------------------------------------------------------------------------*/