Commit Graph

44 Commits (fdb9084da94067627941f4f7ee414c447866006a)

Author SHA1 Message Date
Michael Forney 3c12b287ec touch: Avoid unnecessary call to stat
Now, we first try a utimensat. If it succeeds, we are done, if not (and no -c
flag), create the file, then set the times with futimens.
2016-07-09 10:17:16 +01:00
Michael Forney 2e5f1281ed touch: Use special UTIME_NOW and UTIME_OMIT values
This allows users to touch files they have write access to, but aren't the

Also, remove utime.h include (not necessary since
4132561c17), and make sure to check the return
value of localtime (potentially preventing a NULL pointer derefence).
2016-07-09 10:17:16 +01:00
Michael Forney 36a0a6cd92 touch: Remove useless variable
The only possible return values of stat are 0 or -1, so it doesn't make sense to
store the return value in a variable to make sure it is not positive.
2016-07-09 10:17:16 +01:00
Michael Forney 0941c9ab2c touch: Respect caller's umask
Currently, if the caller has a umask of 002 or 000, the file gets created as 644

Also, add O_WRONLY to the open call, since POSIX says that "Applications shall
specify exactly one of the first five values (file access modes) below in the
value of oflag".
2016-07-09 10:17:16 +01:00
Hiltjo Posthuma 8d96afd4fb touch: make invalid date an error and fix uninitialised value
reproduce: touch -t 12345678 mytralala

would only give a warning and use uninitialised time values. The proper
way is to treat it as an error. Clear the "struct tm" and kill some lines
just in case.
2016-04-15 19:53:01 +01:00
Quentin Rameau 6e7743eb56 Cleanup usage() across sbase
Some tools didn't use argv0 for tool name, or usage() at all.
2015-12-21 18:07:25 +00:00
sin 2366164de7 No need for semicolon after ARGEND
This is also the style used in Plan 9.
2015-11-01 10:18:55 +00:00
Michael Forney b4adb4bb87 touch: Use both atime and mtime of reference file 2015-05-16 13:34:00 +01:00
Michael Forney 4132561c17 touch: Handle nanosecond timestamps 2015-05-16 13:34:00 +01:00
FRIGN 95fb7364a8 Audit touch(1)
Only minor things, as I already worked heavily on this tool a while
Fix style in the main loop and wording in the manpage.
2015-03-17 23:38:09 +01:00
Hiltjo Posthuma 0c17cd0fb3 staticize some functions 2015-03-07 13:33:39 +01:00
FRIGN d02327d0eb Get rid of the %Z-flag in strptime-format
We don't actually need it for Zulu-time and handroll it.
We can add the gmt-offset to hour without range-checking, because
the implementation will take care of it in mktime().
2015-02-19 19:27:17 +01:00
FRIGN 0f4192e6b2 Update usage and add actual d-parsing to touch(1) 2015-02-19 18:58:19 +01:00
FRIGN 14b1db88bf Correct error-handling in touch(1) 2015-02-19 18:56:59 +01:00
FRIGN b00a00703f Add proper d- and t-flag support to touch(1)
except the [,frac], [.frac] respectively, but that's ok.
2015-02-19 18:54:56 +01:00
FRIGN 31572c8b0e Clean up #includes 2015-02-14 21:12:23 +01:00
sin 8f5d77d8c7 Do not rely on the underlying type of time_t in date(1) and touch(1)
Use LLONG_MAX unconditionally.  In practice this only causes trouble
with systems that are not 2038 ready.
2015-02-08 23:45:03 +00:00
FRIGN d6b3890af6 Add r-flag to touch(1), refactor manpage and code
and mark it as finished in README.
2015-02-09 00:41:57 +01:00
FRIGN 27b770c02c Adjust some limits to more flexibility for strtonum 2015-02-01 01:24:03 +01:00
FRIGN fd562481f3 Convert estrto{l, ul} to estrtonum
Enough with this insanity!
2015-01-30 16:52:44 +01:00
sin 72f43adc54 touch: Style fix 2015-01-20 11:24:37 +00:00
sin 45c54bff0b touch: Add support for -a and -m
Update the manpage.
2015-01-20 11:16:17 +00:00
FRIGN 1436518f9d Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
FRIGN ec8246bbc6 Un-boolify sbase
It actually makes the binaries smaller, the code easier to read
(gems like "val == true", "val == false" are gone) and actually
predictable in the sense of that we actually know what we're
working with (one bitwise operator was quite adventurous and
should now be fixed).

This is also more consistent with the other suckless projects
around which don't use boolean types.
2014-11-14 10:54:20 +00:00
FRIGN 7d2683ddf2 Sort includes and more cleanup and fixes in util/ 2014-11-14 10:54:10 +00:00
FRIGN eee98ed3a4 Fix coding style
It was about damn time. Consistency is very important in such a
big codebase.
2014-11-13 18:08:43 +00:00
sin 0c5b7b9155 Stop using EXIT_{SUCCESS,FAILURE} 2014-10-02 23:46:59 +01:00
Hiltjo Posthuma 953ebf3573 code style
Signed-off-by: Hiltjo Posthuma <>
2014-06-01 18:02:30 +01:00
sin b5a511dacf Exit with EXIT_SUCCESS/EXIT_FAILURE instead of 0 and 1
Fixed for consistency purposes.
2013-10-07 16:44:22 +01:00
sin 428cd4fe84 None of these work without the proper # of arguments so print usage 2013-10-05 13:51:45 +01:00
stateless 7216a53a7e Remove unnecessary exit(1) in usage()
Signed-off-by: Christoph Lohmann <>
2013-06-19 19:58:19 +02:00
Christoph Lohmann 4d38f60685 Eliminating the getopt disgrace. 2013-06-14 20:20:47 +02:00
Connor Lane Smith 444de72fd3 touch: posix open 2011-06-18 06:43:10 +01:00
Connor Lane Smith 954106050f rename estrtol 2011-06-10 14:55:01 +01:00
Connor Lane Smith 7c251bcd4f refactor strnum 2011-06-10 05:41:40 +01:00
Connor Lane Smith d90ced2047 consistent error check 2011-06-04 12:20:41 +01:00
Connor Lane Smith 3172b979dc pwd -LP 2011-05-28 15:37:42 +01:00
Connor Lane Smith 262f357fdd add head 2011-05-25 11:42:17 +01:00
Connor Lane Smith f458397d5a no, getopt.h is gnu specific 2011-05-24 18:58:36 +01:00
pancake da547fb294 add missing #include <getopt.h>
do not override CC in
2011-05-24 14:34:26 +02:00
Connor Lane Smith 8c76381e91 add rm, thanks rob 2011-05-24 01:52:28 +01:00
Connor Lane Smith 9714d7b1d3 getopt 2011-05-24 01:13:34 +01:00
Connor Lane Smith 474ee643ed add sleep & date, thanks kamil 2011-05-23 19:00:31 +01:00
Connor Lane Smith 8e26716a5a initial commit 2011-05-23 02:36:34 +01:00