+++ /dev/null
-diff -urN epic4-1.0.1.orig/source/mail.c epic4-1.0.1/source/mail.c
---- epic4-1.0.1.orig/source/mail.c Tue Dec 5 01:11:57 2000
-+++ epic4-1.0.1/source/mail.c Sun Apr 14 12:28:16 2002
-@@ -5,7 +5,10 @@
- * Written by Jeremy Nelson
- * Copyright 1996 EPIC Software Labs
- */
--
-+/*
-+ * Maildirs are also supported.
-+ * Written by Olgierd Pieczul <wojrus@pld.org.pl>
-+ */
- #include "irc.h"
- #include "mail.h"
- #include "lastlog.h"
-@@ -18,7 +21,8 @@
- #endif
- #include <sys/stat.h>
- #include <utime.h>
--
-+#include <stdio.h>
-+#include <dirent.h>
- static char *mail_path = (char *) 0;
-
- /*
-@@ -31,7 +35,6 @@
- static time_t old_stat = 0;
- struct stat sb;
- struct stat * stat_buf;
--
- if (ptr)
- stat_buf = (struct stat *)ptr;
- else
-@@ -51,9 +54,14 @@
- if (!(tmp_mail_path = getenv("MAIL")))
- tmp_mail_path = path_search(username, mail_path_list);
-
-- if (tmp_mail_path)
-+ if (tmp_mail_path) {
- mail_path = m_strdup(tmp_mail_path);
--
-+ if (stat(mail_path, stat_buf) == -1)
-+ return 0;
-+ /* Check whether mailbox is a directory (Maildir) and add "new/" suffix */
-+ if ((stat_buf->st_mode & S_IFMT) == S_IFDIR)
-+ mail_path = m_2dup(mail_path, "/new/");
-+ }
- else
- mail_path = m_strdup("<unknown>");
- }
-@@ -70,22 +78,35 @@
- {
- old_stat = stat_buf->st_ctime;
- if (stat_buf->st_size)
-- return 2;
-+ return 2;
- }
-
- /*
- * If there is something in the mailbox
- */
-- if (stat_buf->st_size)
-- return 1;
--
-+ if (stat_buf->st_size) {
-+ /* if maildir - how many files */
-+ if ((stat_buf->st_mode & S_IFMT) == S_IFDIR) {
-+ DIR *dir;
-+ int i = -2;
-+ if ((dir = opendir(mail_path)) == NULL)
-+ return 0;
-+ while (readdir(dir) != NULL)
-+ i++;
-+ closedir(dir);
-+ if (i > 0)
-+ return 1;
-+ else
-+ return 0;
-+ }
-+ return 1;
-+ }
- /*
- * The mailbox is empty.
- */
- return 0;
- }
-
--
- /*
- * check_mail: report on status of inbox.
- *
-@@ -142,8 +163,10 @@
- case 3:
- {
- FILE * mail;
-+ DIR * dir;
- char buffer[255];
- int count = 0;
-+
- static int old_count = 0;
- static char ret_str[12];
- struct utimbuf ts;
-@@ -152,34 +175,43 @@
- {
- case 2:
- {
-- if (!(mail = fopen(mail_path, "r")))
-- return NULL;
--
-- while (fgets(buffer, 254, mail))
-- if (!strncmp("From ", buffer, 5))
-- count++;
--
-- fclose(mail);
--
-- if (state == 3)
-+ /* if maildir */
-+ if ((stat_buf.st_mode & S_IFMT) == S_IFDIR) {
-+ if ((dir = opendir(mail_path)) == NULL)
-+ return NULL;
-+ while (readdir(dir) != NULL)
-+ count++;
-+ closedir(dir);
-+ count -= 2;
-+ }
-+ else
-+ {
-+ if (!(mail = fopen(mail_path, "r")))
-+ return NULL;
-+
-+ while (fgets(buffer, 254, mail))
-+ if (!strncmp("From ", buffer, 5))
-+ count++;
-+ fclose(mail);
-+ }
-+ if (state == 3)
- {
-- /* XXX Ew. Evil. Gross. */
-- ts.actime = stat_buf.st_atime;
-- ts.modtime = stat_buf.st_mtime;
-- utime(mail_path, &ts); /* XXX Ick. Gross */
-+ /* XXX Ew. Evil. Gross. */
-+ ts.actime = stat_buf.st_atime;
-+ ts.modtime = stat_buf.st_mtime;
-+ utime(mail_path, &ts); /* XXX Ick. Gross */
- }
--
-- if (count > old_count)
-- {
-- if (do_hook(MAIL_LIST, "%d %d",
-- count - old_count, count))
-- {
-- int lastlog_level =
-+ if (count > old_count)
-+ {
-+ if (do_hook(MAIL_LIST, "%d %d",
-+ count - old_count, count))
-+ {
-+ int lastlog_level =
- set_lastlog_msg_level(LOG_CRAP);
- say("You have new email.");
- set_lastlog_msg_level(lastlog_level);
- }
-- }
-+ }
-
- old_count = count;
- sprintf(ret_str, "%d", old_count);