[hackers] [sbase] Add r-flag to touch(1), refactor manpage and code || FRIGN
commit 3c586483bf7dba0c05dc16335543e816feda2e48
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 Mon Feb 09 2015 - 09:38:16 CET
This archive was generated by hypermail 2.3.0
: Mon Feb 09 2015 - 09:48:13 CET