svn commit: r282608 - head/bin/date

Xin LI delphij at FreeBSD.org
Thu May 7 20:54:39 UTC 2015


Author: delphij
Date: Thu May  7 20:54:38 2015
New Revision: 282608
URL: https://svnweb.freebsd.org/changeset/base/282608

Log:
  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 time(1).
  
  MFC after:	2 weeks

Modified:
  head/bin/date/date.1
  head/bin/date/date.c

Modified: head/bin/date/date.1
==============================================================================
--- head/bin/date/date.1	Thu May  7 20:25:17 2015	(r282607)
+++ head/bin/date/date.1	Thu May  7 20:54:38 2015	(r282608)
@@ -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 .

Modified: head/bin/date/date.c
==============================================================================
--- head/bin/date/date.c	Thu May  7 20:25:17 2015	(r282607)
+++ head/bin/date/date.c	Thu May  7 20:54:38 2015	(r282608)
@@ -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" */


More information about the svn-src-head mailing list