[hackers] [sbase] Add r-flag to touch(1), refactor manpage and code || FRIGN

From: <git_AT_suckless.org>
Date: Tue, 24 Mar 2015 23:53:38 +0100 (CET)

commit d6b3890af618511a4930cf4c6cc8b72a4c767769
Author: FRIGN <dev_AT_frign.de>
Date: Mon Feb 9 00:41:57 2015 +0100

    Add r-flag to touch(1), refactor manpage and code
    
    and mark it as finished in README.

diff --git a/README b/README
index 96b974f..ea3af59 100644
--- a/README
+++ b/README
_AT_@ -68,7 +68,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support,
 =* tar non-posix none
 =* tee yes none
    test yes none
-= touch no -r
+=* touch yes none
 #* tr yes none
 =* true yes none
 =* tty yes none
diff --git a/touch.1 b/touch.1
index 7284cb1..3408a3f 100644
--- a/touch.1
+++ b/touch.1
_AT_@ -1,4 +1,4 @@
-.Dd January 20, 2014
+.Dd February 9, 2014
 .Dt TOUCH 1
 .Os sbase
 .Sh NAME
_AT_@ -7,25 +7,47 @@
 .Sh SYNOPSIS
 .Nm
 .Op Fl acm
-.Op Fl t Ar stamp
+.Op Fl r Ar ref_file | t Ar timestamp
 .Ar file ...
 .Sh DESCRIPTION
 .Nm
-sets the access and modification times of files to the current time of day. If
-the file doesn't exist, it is created with the default permissions.
+sets the access or modification time of each
+.Ar file
+to the current time of day. If
+.Ar file
+doesn't exist, it is created with default permissions.
 .Sh OPTIONS
 .Bl -tag -width Ds
-.It Fl a
-Set the access time of the file.
+.It Fl a | Fl m
+Set the access | modification time of
+.Ar file.
 .It Fl c
-Do not create the file it it does not exist. The exit status is not affected.
-.It Fl m
-Change the modification time of the file.
-.It Fl t Ar stamp
-Set the timestamp to be used with
-.Op Fl am .
-The format of the timestamp is simply the number of seconds since Jan 1, 1970.
-This specification of time does not conform to POSIX.
+Don't create
+.Ar file
+if it doesn't exist, not affecting exit status.
+.It Fl r Ar ref_file
+Set the timestamp
+to be used with
+.Op Fl am
+to the modification time of
+.Ar ref_file .
+.It Fl t Ar timestamp
+Set the
+.Ar timestamp
+to be used with
+.Op Fl am
+given as the number of seconds since the
+Unix epoch 1970-01-01T00:00:00Z.
 .El
 .Sh SEE ALSO
 .Xr date 1
+.Sh STANDARDS
+The
+.Nm
+utility is compliant with the
+.St -p1003.1-2008
+specification except from the
+.Ar timestamp
+format of the
+.Fl t
+flag.
diff --git a/touch.c b/touch.c
index b762772..81c470c 100644
--- a/touch.c
+++ b/touch.c
_AT_@ -46,12 +46,14 @@ touch(const char *file)
 static void
 usage(void)
 {
- eprintf("usage: %s [-acm] [-t stamp] file ...\n", argv0);
+ eprintf("usage: %s [-acm] [-r ref_file | -t timestamp] file ...\n", argv0);
 }
 
 int
 main(int argc, char *argv[])
 {
+ struct stat st;
+ char *ref;
         t = time(NULL);
 
         ARGBEGIN {
_AT_@ -64,6 +66,12 @@ main(int argc, char *argv[])
         case 'm':
                 mflag = 1;
                 break;
+ case 'r':
+ ref = EARGF(usage());
+ if (stat(ref, &st) < 0)
+ eprintf("stat '%s':", ref);
+ t = st.st_mtime;
+ break;
         case 't':
                 t = estrtonum(EARGF(usage()), 0, MIN(LLONG_MAX, (time_t)-1));
                 break;
Received on Tue Mar 24 2015 - 23:53:38 CET

This archive was generated by hypermail 2.3.0 : Wed Mar 25 2015 - 00:08:23 CET