find: Unify time comparisons
Split the common part into a function, to be reused. The tail call is optimized, meaning now mmin/mtime just prepare arguments and jump into the common code, thus near zero overhead. This reduces code size slightly, e.g. on x86_64: text data bss dec hex filename 4806 0 0 4806 12c6 findutils/find.o.orig 4782 0 0 4782 12ae findutils/find.o Of course, the savings are even greater when implementing atime/ctime variants. Signed-off-by: Ismael Luceno <ismael@iodev.co.uk> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
0084c44799
commit
421c8767ba
@ -618,30 +618,34 @@ ACTF(perm)
|
||||
return (statbuf->st_mode & 07777) == ap->perm_mask;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if \
|
||||
ENABLE_FEATURE_FIND_MMIN || \
|
||||
ENABLE_FEATURE_FIND_MTIME
|
||||
static int time_cmp(time_t ftime, char time_char, time_t secs, time_t delta)
|
||||
{
|
||||
time_t file_age = time(NULL) - ftime;
|
||||
switch (time_char) {
|
||||
case '+': return file_age >= secs + delta;
|
||||
case '-': return file_age < secs;
|
||||
/* just numeric time */
|
||||
default: return file_age >= secs && file_age < secs + delta;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ENABLE_FEATURE_FIND_MTIME
|
||||
ACTF(mtime)
|
||||
{
|
||||
time_t file_age = time(NULL) - statbuf->st_mtime;
|
||||
time_t mtime_secs = ap->mtime_days * 24*60*60;
|
||||
if (ap->mtime_char == '+')
|
||||
return file_age >= mtime_secs + 24*60*60;
|
||||
if (ap->mtime_char == '-')
|
||||
return file_age < mtime_secs;
|
||||
/* just numeric mtime */
|
||||
return file_age >= mtime_secs && file_age < (mtime_secs + 24*60*60);
|
||||
return time_cmp(statbuf->st_mtime, ap->mtime_char,
|
||||
ap->mtime_days * 24*60*60, 24*60*60);
|
||||
}
|
||||
#endif
|
||||
#if ENABLE_FEATURE_FIND_MMIN
|
||||
ACTF(mmin)
|
||||
{
|
||||
time_t file_age = time(NULL) - statbuf->st_mtime;
|
||||
time_t mmin_secs = ap->mmin_mins * 60;
|
||||
if (ap->mmin_char == '+')
|
||||
return file_age >= mmin_secs + 60;
|
||||
if (ap->mmin_char == '-')
|
||||
return file_age < mmin_secs;
|
||||
/* just numeric mmin */
|
||||
return file_age >= mmin_secs && file_age < (mmin_secs + 60);
|
||||
return time_cmp(statbuf->st_mtime, ap->mmin_char,
|
||||
ap->mmin_mins * 60, 60);
|
||||
}
|
||||
#endif
|
||||
#if ENABLE_FEATURE_FIND_NEWER
|
||||
|
Loading…
Reference in New Issue
Block a user