Author: delphij
Date: Thu May 21 18:59:11 2015
New Revision: 283258
URL: https://svnweb.freebsd.org/changeset/base/283258

Log:
  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).

Modified:
  stable/10/bin/date/date.1
  stable/10/bin/date/date.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/bin/date/date.1
==============================================================================
--- stable/10/bin/date/date.1   Thu May 21 18:29:36 2015        (r283257)
+++ stable/10/bin/date/date.1   Thu May 21 18:59:11 2015        (r283258)
@@ -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: stable/10/bin/date/date.c
==============================================================================
--- stable/10/bin/date/date.c   Thu May 21 18:29:36 2015        (r283257)
+++ stable/10/bin/date/date.c   Thu May 21 18:59:11 2015        (r283258)
@@ -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" */
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to