suckless unix tools
git clone git://
Log | Files | Refs | README | LICENSE

commit d6b3890af618511a4930cf4c6cc8b72a4c767769
parent 49ed53b46cfe2fbb48bd61f643e3856193298b86
Author: FRIGN <>
Date:   Mon Feb  9 00:41:57 +0100

Add r-flag to touch(1), refactor manpage and code

and mark it as finished in README.

README | 2+-
touch.1 | 50++++++++++++++++++++++++++++++++++++--------------
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;