summaryrefslogtreecommitdiff
path: root/CWRU/maildir-patch
diff options
context:
space:
mode:
Diffstat (limited to 'CWRU/maildir-patch')
-rw-r--r--CWRU/maildir-patch175
1 files changed, 0 insertions, 175 deletions
diff --git a/CWRU/maildir-patch b/CWRU/maildir-patch
deleted file mode 100644
index 1fcb3b6f..00000000
--- a/CWRU/maildir-patch
+++ /dev/null
@@ -1,175 +0,0 @@
-# DP: From: Miquel van Smoorenburg <miquels@cistron.nl>
-# DP: A patch that adds support for Maildir type mailboxes.
-
---- ./mailcheck.c.orig Wed Feb 4 21:30:33 1998
-+++ ./mailcheck.c Sun Nov 14 15:35:07 1999
-@@ -21,8 +21,10 @@
- #include "config.h"
-
- #include <stdio.h>
-+#include <errno.h>
- #include "bashtypes.h"
- #include "posixstat.h"
-+#include "posixdir.h"
- #ifndef _MINIX
- # include <sys/param.h>
- #endif
-@@ -37,6 +39,8 @@
- #include "mailcheck.h"
- #include <tilde/tilde.h>
-
-+#include "mailstat.c"
-+
- #ifndef NOW
- #define NOW ((time_t)time ((time_t *)0))
- #endif
-@@ -131,7 +135,7 @@
- struct stat finfo;
-
- file = mailfiles[i]->name;
-- if (stat (file, &finfo) == 0)
-+ if (mailstat (file, &finfo) == 0)
- {
- mailfiles[i]->access_time = finfo.st_atime;
- mailfiles[i]->mod_time = finfo.st_mtime;
-@@ -155,7 +159,7 @@
- i = find_mail_file (filename);
- if (i >= 0)
- {
-- if (stat (filename, &finfo) == 0)
-+ if (mailstat (filename, &finfo) == 0)
- {
- mailfiles[i]->mod_time = finfo.st_mtime;
- mailfiles[i]->access_time = finfo.st_atime;
-@@ -221,7 +225,7 @@
- file = mailfiles[i]->name;
- mtime = mailfiles[i]->mod_time;
-
-- if ((stat (file, &finfo) == 0) && (finfo.st_size > 0))
-+ if ((mailstat (file, &finfo) == 0) && (finfo.st_size > 0))
- return (mtime != finfo.st_mtime);
-
- return (0);
-@@ -239,7 +243,7 @@
- file = mailfiles[i]->name;
- atime = mailfiles[i]->access_time;
-
-- if ((stat (file, &finfo) == 0) && (finfo.st_size > 0))
-+ if ((mailstat (file, &finfo) == 0) && (finfo.st_size > 0))
- return (atime != finfo.st_atime);
-
- return (0);
-@@ -257,7 +261,7 @@
- file = mailfiles[i]->name;
- size = mailfiles[i]->file_size;
-
-- return ((stat (file, &finfo) == 0) && (finfo.st_size > size));
-+ return ((mailstat (file, &finfo) == 0) && (finfo.st_size > size));
- }
-
- /* Take an element from $MAILPATH and return the portion from
-
-
-diff -ruN bash-2.01.1.b4/mailstat.c bash-2.01.1/mailstat.c
---- bash-2.01.1.b4/mailstat.c Thu Jan 1 01:00:00 1970
-+++ bash-2.01.1/mailstat.c Wed Jun 2 12:05:04 1999
-@@ -0,0 +1,98 @@
-+/*
-+ * Stat a file. If it's a maildir, check all messages
-+ * in the maildir and present the grand total as a file.
-+ * The fields in the 'struct stat' are from the mail directory.
-+ * The following fields are emulated:
-+ *
-+ * st_nlink always 1
-+ * st_size total number of bytes in all files
-+ * st_blocks total number of messages
-+ * st_atime access time of newest file in maildir
-+ * st_mtime modify time of newest file in maildir
-+ * st_mode S_IFDIR changed to S_IFREG
-+ *
-+ * This is good enough for most mail-checking applications.
-+ */
-+int
-+mailstat(char *path, struct stat *st)
-+{
-+ DIR *dd;
-+ struct dirent *fn;
-+ struct stat st_ret, st_tmp;
-+ static struct stat st_new_last, st_ret_last;
-+ char dir[PATH_MAX * 2];
-+ char file[PATH_MAX * 2];
-+ int i, l;
-+ time_t atime = 0, mtime = 0;
-+
-+ /* First see if it's a directory. */
-+ if ((i = stat(path, st)) != 0 || !S_ISDIR(st->st_mode))
-+ return i;
-+ if (strlen(path) > sizeof(dir) - 5) {
-+ errno = ENAMETOOLONG;
-+ return -1;
-+ }
-+
-+ st_ret = *st;
-+ st_ret.st_nlink = 1;
-+ st_ret.st_size = 0;
-+ st_ret.st_blocks = 0;
-+ st_ret.st_mode &= ~S_IFDIR;
-+ st_ret.st_mode |= S_IFREG;
-+
-+ /* See if cur/ is present */
-+ sprintf(dir, "%s/cur", path);
-+ if (stat(dir, &st_tmp) || !S_ISDIR(st_tmp.st_mode)) return 0;
-+ st_ret.st_atime = st_tmp.st_atime;
-+
-+ /* See if tmp/ is present */
-+ sprintf(dir, "%s/tmp", path);
-+ if (stat(dir, &st_tmp) || !S_ISDIR(st_tmp.st_mode)) return 0;
-+ st_ret.st_mtime = st_tmp.st_mtime;
-+
-+ /* And new/ */
-+ sprintf(dir, "%s/new", path);
-+ if (stat(dir, &st_tmp) || !S_ISDIR(st_tmp.st_mode)) return 0;
-+ st_ret.st_mtime = st_tmp.st_mtime;
-+
-+ /* Optimization - if new/ didn't change, nothing else did. */
-+ if (st_tmp.st_dev == st_new_last.st_dev &&
-+ st_tmp.st_ino == st_new_last.st_ino &&
-+ st_tmp.st_atime == st_new_last.st_atime &&
-+ st_tmp.st_mtime == st_new_last.st_mtime) {
-+ *st = st_ret_last;
-+ return 0;
-+ }
-+ st_new_last = st_tmp;
-+
-+ /* Loop over new/ and cur/ */
-+ for (i = 0; i < 2; i++) {
-+ sprintf(dir, "%s/%s", path, i ? "cur" : "new");
-+ sprintf(file, "%s/", dir);
-+ l = strlen(file);
-+ if ((dd = opendir(dir)) == NULL)
-+ return 0;
-+ while ((fn = readdir(dd)) != NULL) {
-+ if (fn->d_name[0] == '.' ||
-+ strlen(fn->d_name) + l >= sizeof(file))
-+ continue;
-+ strcpy(file + l, fn->d_name);
-+ if (stat(file, &st_tmp) != 0)
-+ continue;
-+ st_ret.st_size += st_tmp.st_size;
-+ st_ret.st_blocks++;
-+ if (st_tmp.st_atime != st_tmp.st_mtime &&
-+ st_tmp.st_atime > atime)
-+ atime = st_tmp.st_atime;
-+ if (st_tmp.st_mtime > mtime)
-+ mtime = st_tmp.st_mtime;
-+ }
-+ closedir(dd);
-+ }
-+
-+ if (atime) st_ret.st_atime = atime;
-+ if (mtime) st_ret.st_mtime = mtime;
-+
-+ *st = st_ret_last = st_ret;
-+ return 0;
-+}
-