#
1.40 |
|
10-Feb-2024 |
kre |
Add a -D option to touch, which acts like the -d option added to chmod/chown/chgrp (probably others) in the not too far distant past, and causes the operation to be a no-op if no actual change would be made (avoiding updating the file's ctime for no reason).
That is, with touch, -D causes no modifying sys call to be made to a file if that file's atime and mtime are already set to the values that would be used. A common case for this is when a "-r ref-file" is also a target file for the operation.
Unfortunately -d was already taken in touch, so next best available is -D.
|
#
1.39 |
|
09-Feb-2024 |
kre |
Add a -R option, which is identical to -r, except that if the reference file is a symbolic link, the times to use are taken from those of the symbolic link itself, instead of from the file it references. If the reference file is not a symbolic link, -R and -r are identical.
This allows the BUGS entry in the manual page to be removed.
|
#
1.38 |
|
08-Feb-2024 |
kre |
Check that mktime() (or timegm() the one time it is used) do not alter any of the material fields of the struct tm that was handed to it. If any were altered, then the time string passed in was not a valid time representation, and so should be rejected.
This one is not an invisible change, it prevents use of things like "-t 202402300000" (which previously would have been interpreted as "-t 202403010000" - the day after the 29th of Feb in 2024).
I believe this is an improvement however, and in line with the general intent that if you specify a date and time, that exact date and time is what touch should be using. It does mean that specifying "60" for the seconds field is almost guaranteed to fail on any POSIX system, as leap seconds simply don't exist there (on a non-POSIX-conforming system that uses leap seconds, the :60 should work, if specified with the correct date and time at which the leap second actually occurs).
The one exception is when parsedate(3) is used, as that does not do this check (which allows things like "-1 day" on the 1st of a month to work).
(This is the last of this sequence of updates to touch.c, an update to touch.1 follows).
|
#
1.37 |
|
08-Feb-2024 |
kre |
Properly implement the POSIX format -d option.
Previously we have hacked that using parsedate(3) - but parsedate() returns a time_t and consequently while it "handles" fractional seconds, all that meant (all it really can mean) is that they're ignored.
The POSIX spec expects that (at least if the filesystem supports them) fractional seconds can be set using the -d option.
Handle that by first attempting to parse the -d arg as a posix format date-time string (using a reasonably strict parser), and if that fails, then fall back on parsedate(3) to parse the arg.
If the posix format parse succeeds, the result will be the same as parsedate(3) would return for the same string - except any fractional seconds will be handled properly. If it fails, then nothing changes from what we currently do.
Note the POSIX string is YYYY-MM-DDThh:mm:ss[.frac][Z] where YYYY is (at least) 4 digits (leading 0's are acceptable if you really must!) all the MM DD hh mm ss fields are exactly 2 digits, T is either 'T' or ' ', '.' is either itself, or ',', and 'frac' is one or more digits. Z (if given) is 'Z'. The [.,]frac and Z fields are optional. Specify a time in a slight shorthand like 2024-2-8T7:44:20 and the POSIX parse will fail, leaving parsedate() to handle that (which it should). But any fractional seconds which were given would be ignored.
Doc update coming - note the doc will call the YYYY field CCYY instead, that's just a convenience to make other parts of what is there make more sense - it is still one 4 (or more) digit field.
This should be an almost invisible change.
|
#
1.36 |
|
08-Feb-2024 |
kre |
Sprinkle come const - but not too much of a good thing.
NFCI
|
#
1.35 |
|
08-Feb-2024 |
kre |
Parameterise the "if year < 69 it is 20xx and if >=69 it is 19xx" rule to make it simpler to (eventually, many years hence) to change that rule to be "if year is < NN it is 21xx and if >= NN it is 20xx" instead.
Avoid comparing a time_t to -1 directly, as time_t might be unsigned. Instead define NO_TIME as ((time_t)-1) and compare with that instead. This makes no difference at all when time_t is signed (as it is on NetBSD).
Use "ss" rather than "SS" as the seconds indicators (in messages) to match with hh (hours) and mm (minutes) rather than looking like some relation to YY (year) MM (month) and DD (day). Why this was ever written as SS is beyond me, but it has been that way forever. (doc update will follow).
Minor improvement to the error message if the arg to a -t option is unable to be parsed correctly.
NMFCI (No meaningful...)
|
#
1.34 |
|
08-Feb-2024 |
kre |
KNF (space after keyword, and 80 column police).
NFCI
(This is the first of a series of changes to be committed in rapid sequence).
|
Revision tags: netbsd-10-0-RC4 netbsd-10-0-RC3 netbsd-10-0-RC2 netbsd-10-0-RC1 netbsd-10-base netbsd-9-3-RELEASE cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 netbsd-9-2-RELEASE cjep_staticlib_x-base netbsd-9-1-RELEASE phil-wifi-20200421 phil-wifi-20200411 is-mlppp-base phil-wifi-20200406 netbsd-8-2-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 netbsd-8-1-RELEASE netbsd-8-1-RC1 pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 netbsd-8-0-RELEASE phil-wifi-base pgoyette-compat-0625 netbsd-8-0-RC2 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 netbsd-8-0-RC1 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base matt-nb8-mediatek-base perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 pgoyette-localcount-20170320 bouyer-socketcan-base pgoyette-localcount-20170107 pgoyette-localcount-20161104 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base
|
#
1.33 |
|
02-Mar-2015 |
enami |
Don't truncate at microseconds while preserving timestamps.
One of motivation of this change is to make the behavior of test(1) -nt/ot with preserved copy (like cp -p) closer to the NetBSD 6. Of course whether full timestamps are kept or not depends also on underlying file system.
The ifdef added in mv(1) since existing ifdefs was our local change to compile it on solaris (though I couldn't test it): http://mail-index.netbsd.org/tech-userlevel/2014/11/28/msg008831.html
|
Revision tags: netbsd-7-0-RELEASE netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6 tls-maxphys-base
|
#
1.32 |
|
22-Oct-2012 |
christos |
branches: 1.32.8; 1.32.10; Recognize --date and --reference like gnu.
|
#
1.31 |
|
25-Jul-2012 |
christos |
branches: 1.31.2; add an option to parse human dates.
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 netbsd-6-1-RC2 netbsd-6-1-RC1 netbsd-6-0-1-RELEASE matt-nb6-plus-nbase netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 yamt-pagecache-base5 yamt-pagecache-base4 netbsd-6-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.30 |
|
06-Sep-2011 |
joerg |
branches: 1.30.2; ANSIfy, static + __dead
|
Revision tags: cherry-xenmp-base bouyer-quota2-nbase
|
#
1.29 |
|
22-Feb-2011 |
pooka |
-f no longer has effect. from Snader_LB on irc.
|
Revision tags: bouyer-quota2-base matt-mips64-premerge-20101231 matt-premerge-20091211 jym-xensuspend-nbase jym-xensuspend-base
|
#
1.28 |
|
28-Apr-2009 |
yamt |
branches: 1.28.2; remove read-write code because it's dangerous. there's no point to try this hard anyway.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 netbsd-5-base matt-mips64-base2 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2
|
#
1.27 |
|
21-Jul-2008 |
lukem |
branches: 1.27.6; Remove the \n and tabs from the __COPYRIGHT() strings. Tweak to use a consistent format.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-revivesa-base-1 yamt-pf42-base4 yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 wrstuden-revivesa-base yamt-pf42-base keiichi-mipv6-nbase keiichi-mipv6-base matt-armv6-nbase matt-armv6-prevmlocking wrstuden-fixsa-base-1 netbsd-4-0-RELEASE cube-autoconf-base netbsd-4-0-RC5 netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 matt-armv6-base matt-mips64-base hpcarm-cleanup-base wrstuden-fixsa-base abandoned-netbsd-4-base netbsd-4-base chap-midi-nbase chap-midi-base
|
#
1.26 |
|
18-Mar-2006 |
dsl |
branches: 1.26.22; Coverty 1212: Avoid close(-1).
|
#
1.25 |
|
26-Nov-2005 |
tsutsui |
Fix more FALLTHOUGH -> FALLTHROUGH typo.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 netbsd-2-0-3-RELEASE netbsd-2-1-RELEASE netbsd-2-1-RC6 netbsd-2-1-RC5 netbsd-2-1-RC4 netbsd-2-1-RC3 netbsd-2-1-RC2 netbsd-2-1-RC1 netbsd-2-0-2-RELEASE netbsd-3-base netbsd-2-0-1-RELEASE netbsd-2-base netbsd-2-0-RELEASE netbsd-2-0-RC5 netbsd-2-0-RC4 netbsd-2-0-RC3 netbsd-2-0-RC2 netbsd-2-0-RC1 netbsd-2-0-base
|
#
1.24 |
|
07-Aug-2003 |
agc |
Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22365, verified by myself.
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 fvdl_fs64_base netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base netbsd-1-5-PATCH003 netbsd-1-5-PATCH002 netbsd-1-5-PATCH001 netbsd-1-5-RELEASE netbsd-1-5-BETA2 netbsd-1-5-BETA netbsd-1-5-ALPHA2 netbsd-1-5-base minoura-xpg4dl-base wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base
|
#
1.23 |
|
05-Nov-1999 |
mycroft |
branches: 1.23.2; Nit: In the compatibility case, set the seconds to 0.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 netbsd-1-4-PATCH001 netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.22 |
|
25-Aug-1998 |
ross |
branches: 1.22.4; Add { and } to shut up egcs. Reformat the more questionable code.
|
#
1.21 |
|
21-Jan-1998 |
mycroft |
Fix the old-style date parsing code as well.
|
#
1.20 |
|
21-Jan-1998 |
mycroft |
Minor code rearrangement, and allow less of the time stamp to be specified.
|
#
1.19 |
|
20-Jan-1998 |
mycroft |
Pull in tzfile.h.
|
#
1.18 |
|
20-Jan-1998 |
mycroft |
Use TM_YEAR_BASE to adjust tm_year, not 1900.
|
#
1.17 |
|
22-Oct-1997 |
fvdl |
Revert to previous version; new libc function "versioning" works with the original.
|
#
1.16 |
|
21-Oct-1997 |
thorpej |
Make this work with the new versioned stat(2) functions.
|
Revision tags: netbsd-1-3-base
|
#
1.15 |
|
20-Oct-1997 |
lukem |
branches: 1.15.2; WARNSify, fix .Nm usage, getopt returns -1 not EOF
|
#
1.14 |
|
19-Oct-1997 |
mycroft |
Purely cosmetic change.
|
#
1.13 |
|
11-Oct-1997 |
enami |
Add h option to usage.
|
#
1.12 |
|
06-Oct-1997 |
enami |
Introduce new flag, -h, to manupilate access/modification time of symbolic link.
|
Revision tags: netbsd-1-2-PATCH001 netbsd-1-2-RELEASE netbsd-1-2-BETA netbsd-1-2-base netbsd-1-1-PATCH001 netbsd-1-1-RELEASE netbsd-1-1-base
|
#
1.11 |
|
31-Aug-1995 |
jtc |
Sync with 44lite2
|
#
1.10 |
|
07-Jun-1995 |
cgd |
can't assume that timeval.ts_sec is same type as time_t. grr.
|
#
1.9 |
|
07-Dec-1994 |
jtc |
Merged with 4.4lite. Changed to conform to NetBSD's new RCS Id convention.
|
Revision tags: netbsd-1-0-PATCH06 netbsd-1-0-PATCH05 netbsd-1-0-PATCH04 netbsd-1-0-PATCH03 netbsd-1-0-PATCH02 netbsd-1-0-PATCH1 netbsd-1-0-PATCH0 netbsd-1-0-RELEASE netbsd-1-0-base
|
#
1.8 |
|
31-Dec-1993 |
jtc |
Localization changes + minor bug fix.
|
#
1.7 |
|
16-Sep-1993 |
cgd |
fix for "touch -t CCYYMMDDhhmm[.SS]". the CC part didn't work. from Thomas Eberhardt <thomas@mathematik.uni-Bremen.de>
|
#
1.6 |
|
07-Aug-1993 |
mycroft |
Add 4.4-specific code in `#ifdef notyet's.
|
#
1.5 |
|
01-Aug-1993 |
mycroft |
Add RCS identifiers.
|
Revision tags: netbsd-0-9-RELEASE netbsd-0-9-BETA netbsd-0-9-ALPHA2 netbsd-0-9-ALPHA netbsd-0-9-base
|
#
1.4 |
|
02-Jun-1993 |
glass |
fix bug in touch's non-posix compatibility support. bug report also forwarded to CSRG as this is their current 'touch'. bug reported by Kim Andersen <kim@dde.dk>
|
#
1.3 |
|
01-May-1993 |
mycroft |
s/__dead/volatile/
|
#
1.2 |
|
30-Apr-1993 |
glass |
new touch
|
#
1.1 |
|
21-Mar-1993 |
cgd |
branches: 1.1.1; Initial revision
|