Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 May 2015 20:54:38 +0000 (UTC)
From:      Xin LI <delphij@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r282608 - head/bin/date
Message-ID:  <201505072054.t47Kscmh065939@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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" */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201505072054.t47Kscmh065939>