MFC r282608:

date(1): Make -r behave like GNU's version when the option can not be
interpreted as a number, which checks the file's modification time and
use that as the date/time value.

This improves compatibility with GNU coreutils's version of date(1).
This commit is contained in:
delphij 2015-05-21 18:59:11 +00:00
parent 6ce5eda96c
commit f14ca7e990
2 changed files with 13 additions and 4 deletions

View File

@ -32,7 +32,7 @@
.\" @(#)date.1 8.3 (Berkeley) 4/28/95
.\" $FreeBSD$
.\"
.Dd April 26, 2014
.Dd May 7, 2015
.Dt DATE 1
.Os
.Sh NAME
@ -41,7 +41,7 @@
.Sh SYNOPSIS
.Nm
.Op Fl jRu
.Op Fl r Ar seconds
.Op Fl r Ar seconds | Ar filename
.Oo
.Fl v
.Sm off
@ -150,6 +150,9 @@ is the number of seconds since the Epoch
see
.Xr time 3 ) ,
and can be specified in decimal, octal, or hex.
.It Fl r Ar filename
Print the date and time of the last modification of
.Ar filename .
.It Fl t Ar minutes_west
Set the system's value for minutes west of
.Tn GMT .

View File

@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <ctype.h>
#include <err.h>
@ -85,6 +86,7 @@ main(int argc, char *argv[])
struct vary *v;
const struct vary *badv;
struct tm lt;
struct stat sb;
v = NULL;
fmt = NULL;
@ -116,8 +118,12 @@ main(int argc, char *argv[])
case 'r': /* user specified seconds */
rflag = 1;
tval = strtoq(optarg, &tmp, 0);
if (*tmp != 0)
usage();
if (*tmp != 0) {
if (stat(optarg, &sb) == 0)
tval = sb.st_mtim.tv_sec;
else
usage();
}
break;
case 't': /* minutes west of UTC */
/* error check; don't allow "PST" */