aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2015-10-09 15:52:03 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2015-10-09 15:52:03 +0200
commit2384162f6462f232a0d709e64f7d20bb3dbca503 (patch)
treeaf64a64fe51b8612f8870f8d295aed94b9e7d1f1 /shell
parent4700fb5bead95d6457b943351b7dc6f49a09683e (diff)
downloadbusybox-2384162f6462f232a0d709e64f7d20bb3dbca503.tar.gz
ash: simplify "you have mail" code
function old new delta mailtime_hash - 4 +4 redirect 1282 1280 -2 mailtime 40 - -40 cmdloop 429 378 -51 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 0/2 up/down: 4/-93) Total: -89 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 38ff4b62e..07e7f621a 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -10029,10 +10029,8 @@ setinputstring(char *string)
#if ENABLE_ASH_MAIL
-#define MAXMBOXES 10
-
-/* times of mailboxes */
-static time_t mailtime[MAXMBOXES];
+/* Hash of mtimes of mailboxes */
+static unsigned mailtime_hash;
/* Set if MAIL or MAILPATH is changed. */
static smallint mail_var_path_changed;
@@ -10048,13 +10046,14 @@ chkmail(void)
const char *mpath;
char *p;
char *q;
- time_t *mtp;
+ unsigned new_hash;
struct stackmark smark;
struct stat statb;
setstackmark(&smark);
mpath = mpathset() ? mpathval() : mailval();
- for (mtp = mailtime; mtp < mailtime + MAXMBOXES; mtp++) {
+ new_hash = 0;
+ for (;;) {
p = path_advance(&mpath, nullstr);
if (p == NULL)
break;
@@ -10068,16 +10067,14 @@ chkmail(void)
#endif
q[-1] = '\0'; /* delete trailing '/' */
if (stat(p, &statb) < 0) {
- *mtp = 0;
continue;
}
- if (!mail_var_path_changed && statb.st_mtime != *mtp) {
- fprintf(
- stderr, "%s\n",
- pathopt ? pathopt : "you have mail"
- );
- }
- *mtp = statb.st_mtime;
+ /* Very simplistic "hash": just a sum of all mtimes */
+ new_hash += (unsigned)statb.st_mtime;
+ }
+ if (!mail_var_path_changed && mailtime_hash != new_hash) {
+ mailtime_hash = new_hash;
+ out2str("you have mail\n");
}
mail_var_path_changed = 0;
popstackmark(&smark);