diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2015-10-09 15:52:03 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2015-10-09 15:52:03 +0200 |
commit | 2384162f6462f232a0d709e64f7d20bb3dbca503 (patch) | |
tree | af64a64fe51b8612f8870f8d295aed94b9e7d1f1 | |
parent | 4700fb5bead95d6457b943351b7dc6f49a09683e (diff) | |
download | busybox-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>
-rw-r--r-- | shell/ash.c | 25 |
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); |