From: Denys Vlasenko Date: Fri, 9 Oct 2015 13:52:03 +0000 (+0200) Subject: ash: simplify "you have mail" code X-Git-Tag: 1_24_0~13 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=2384162f6462f232a0d709e64f7d20bb3dbca503;p=oweals%2Fbusybox.git 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 --- 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);