[Midnightbsd-cvs] src [9007] trunk/usr.bin/find: find: include nanoseconds when comparing timestamps.
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Thu Sep 29 21:44:59 EDT 2016
Revision: 9007
http://svnweb.midnightbsd.org/src/?rev=9007
Author: laffer1
Date: 2016-09-29 21:44:59 -0400 (Thu, 29 Sep 2016)
Log Message:
-----------
find: include nanoseconds when comparing timestamps.
Modified Paths:
--------------
trunk/usr.bin/find/find.h
trunk/usr.bin/find/function.c
Modified: trunk/usr.bin/find/find.h
===================================================================
--- trunk/usr.bin/find/find.h 2016-09-30 01:44:32 UTC (rev 9006)
+++ trunk/usr.bin/find/find.h 2016-09-30 01:44:59 UTC (rev 9007)
@@ -88,7 +88,7 @@
nlink_t _l_data; /* link count */
short _d_data; /* level depth (-1 to N) */
off_t _o_data; /* file size */
- time_t _t_data; /* time value */
+ struct timespec _t_data; /* time value */
uid_t _u_data; /* uid */
short _mt_data; /* mount flags */
struct _plandata *_p_data[2]; /* PLAN trees */
Modified: trunk/usr.bin/find/function.c
===================================================================
--- trunk/usr.bin/find/function.c 2016-09-30 01:44:32 UTC (rev 9006)
+++ trunk/usr.bin/find/function.c 2016-09-30 01:44:59 UTC (rev 9007)
@@ -238,7 +238,7 @@
*/
#define TIME_CORRECT(p) \
if (((p)->flags & F_ELG_MASK) == F_LESSTHAN) \
- ++((p)->t_data);
+ ++((p)->t_data.tv_sec);
/*
* -[acm]min n functions --
@@ -255,16 +255,16 @@
{
if (plan->flags & F_TIME_C) {
COMPARE((now - entry->fts_statp->st_ctime +
- 60 - 1) / 60, plan->t_data);
+ 60 - 1) / 60, plan->t_data.tv_sec);
} else if (plan->flags & F_TIME_A) {
COMPARE((now - entry->fts_statp->st_atime +
- 60 - 1) / 60, plan->t_data);
+ 60 - 1) / 60, plan->t_data.tv_sec);
} else if (plan->flags & F_TIME_B) {
COMPARE((now - entry->fts_statp->st_birthtime +
- 60 - 1) / 60, plan->t_data);
+ 60 - 1) / 60, plan->t_data.tv_sec);
} else {
COMPARE((now - entry->fts_statp->st_mtime +
- 60 - 1) / 60, plan->t_data);
+ 60 - 1) / 60, plan->t_data.tv_sec);
}
}
@@ -278,7 +278,8 @@
ftsoptions &= ~FTS_NOSTAT;
new = palloc(option);
- new->t_data = find_parsenum(new, option->name, nmins, NULL);
+ new->t_data.tv_sec = find_parsenum(new, option->name, nmins, NULL);
+ new->t_data.tv_nsec = 0;
TIME_CORRECT(new);
return new;
}
@@ -309,9 +310,9 @@
xtime = entry->fts_statp->st_mtime;
if (plan->flags & F_EXACTTIME)
- COMPARE(now - xtime, plan->t_data);
+ COMPARE(now - xtime, plan->t_data.tv_sec);
else
- COMPARE((now - xtime + 86400 - 1) / 86400, plan->t_data);
+ COMPARE((now - xtime + 86400 - 1) / 86400, plan->t_data.tv_sec);
}
PLAN *
@@ -324,7 +325,8 @@
ftsoptions &= ~FTS_NOSTAT;
new = palloc(option);
- new->t_data = find_parsetime(new, option->name, value);
+ new->t_data.tv_sec = find_parsetime(new, option->name, value);
+ new->t_data.tv_nsec = 0;
if (!(new->flags & F_EXACTTIME))
TIME_CORRECT(new);
return new;
@@ -1113,14 +1115,19 @@
int
f_newer(PLAN *plan, FTSENT *entry)
{
+ struct timespec ft;
+
if (plan->flags & F_TIME_C)
- return entry->fts_statp->st_ctime > plan->t_data;
+ ft = entry->fts_statp->st_ctim;
else if (plan->flags & F_TIME_A)
- return entry->fts_statp->st_atime > plan->t_data;
+ ft = entry->fts_statp->st_atim;
else if (plan->flags & F_TIME_B)
- return entry->fts_statp->st_birthtime > plan->t_data;
+ ft = entry->fts_statp->st_birthtim;
else
- return entry->fts_statp->st_mtime > plan->t_data;
+ ft = entry->fts_statp->st_mtim;
+ return (ft.tv_sec > plan->t_data.tv_sec ||
+ (ft.tv_sec == plan->t_data.tv_sec &&
+ ft.tv_nsec > plan->t_data.tv_nsec));
}
PLAN *
@@ -1136,20 +1143,22 @@
new = palloc(option);
/* compare against what */
if (option->flags & F_TIME2_T) {
- new->t_data = get_date(fn_or_tspec);
- if (new->t_data == (time_t) -1)
+ new->t_data.tv_sec = get_date(fn_or_tspec);
+ if (new->t_data.tv_sec == (time_t) -1)
errx(1, "Can't parse date/time: %s", fn_or_tspec);
+ /* Use the seconds only in the comparison. */
+ new->t_data.tv_nsec = 999999999;
} else {
if (stat(fn_or_tspec, &sb))
err(1, "%s", fn_or_tspec);
if (option->flags & F_TIME2_C)
- new->t_data = sb.st_ctime;
+ new->t_data = sb.st_ctim;
else if (option->flags & F_TIME2_A)
- new->t_data = sb.st_atime;
+ new->t_data = sb.st_atim;
else if (option->flags & F_TIME2_B)
- new->t_data = sb.st_birthtime;
+ new->t_data = sb.st_birthtim;
else
- new->t_data = sb.st_mtime;
+ new->t_data = sb.st_mtim;
}
return new;
}
More information about the Midnightbsd-cvs
mailing list