summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2021-10-02 20:01:46 +0000
committerJune McEnroe <june@causal.agency>2021-10-02 20:01:46 +0000
commitde7b9977f3ef93bf71a9aac32f94d4d58034afb7 (patch)
treefa1721826e0efa8910934543a7a87b0083c99727
parentReplace filter shell scripts with C program (diff)
downloadsrc-de7b9977f3ef93bf71a9aac32f94d4d58034afb7.tar.gz
src-de7b9977f3ef93bf71a9aac32f94d4d58034afb7.zip
Check sizes of mailboxes, not times
This fixes "you have mail" showing right after checking and deleting
mail, resulting in a modified but empty mailbox. Also somehow fixes
"you have mail" always showing 3(!) times.
-rw-r--r--bin/dash/src/mail.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/bin/dash/src/mail.c b/bin/dash/src/mail.c
index 8eacb2d0..e6baaa1b 100644
--- a/bin/dash/src/mail.c
+++ b/bin/dash/src/mail.c
@@ -52,8 +52,8 @@
 
 #define MAXMBOXES 10
 
-/* times of mailboxes */
-static time_t mailtime[MAXMBOXES];
+/* sizes of mailboxes */
+static off_t mailsize[MAXMBOXES];
 /* Set if MAIL or MAILPATH is changed. */
 static int changed;
 
@@ -70,13 +70,13 @@ chkmail(void)
 	const char *mpath;
 	char *p;
 	char *q;
-	time_t *mtp;
+	off_t *msp;
 	struct stackmark smark;
 	struct stat64 statb;
 
 	setstackmark(&smark);
 	mpath = mpathset() ? mpathval() : mailval();
-	for (mtp = mailtime; mtp < mailtime + MAXMBOXES; mtp++) {
+	for (msp = mailsize; msp < mailsize + MAXMBOXES; msp++) {
 		int len;
 
 		len = padvance_magic(&mpath, nullstr, 2);
@@ -92,16 +92,16 @@ chkmail(void)
 #endif
 		q[-1] = '\0';			/* delete trailing '/' */
 		if (stat64(p, &statb) < 0) {
-			*mtp = 0;
+			*msp = 0;
 			continue;
 		}
-		if (!changed && statb.st_mtime != *mtp) {
+		if (!changed && statb.st_size > *msp) {
 			outfmt(
 				&errout, snlfmt,
 				pathopt ? pathopt : "you have mail"
 			);
 		}
-		*mtp = statb.st_mtime;
+		*msp = statb.st_size;
 	}
 	changed = 0;
 	popstackmark(&smark);
TJune McEnroe