commit d6b3890af618511a4930cf4c6cc8b72a4c767769
parent 49ed53b46cfe2fbb48bd61f643e3856193298b86
Author: FRIGN <dev@frign.de>
Date: Mon, 9 Feb 2015 00:41:57 +0100
Add r-flag to touch(1), refactor manpage and code
and mark it as finished in README.
Diffstat:
M | README | | | 2 | +- |
M | touch.1 | | | 50 | ++++++++++++++++++++++++++++++++++++-------------- |
M | touch.c | | | 10 | +++++++++- |
3 files changed, 46 insertions(+), 16 deletions(-)
diff --git a/README b/README
@@ -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
@@ -1,4 +1,4 @@
-.Dd January 20, 2014
+.Dd February 9, 2014
.Dt TOUCH 1
.Os sbase
.Sh NAME
@@ -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
@@ -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 {
@@ -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;