<pre style='margin:0'>
Mojca Miklavec (mojca) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/c8b63f830c681d6b82099078383ca1ebdeca3987">https://github.com/macports/macports-ports/commit/c8b63f830c681d6b82099078383ca1ebdeca3987</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new c8b63f8 perl5: update to 5.24.3 and 5.26.1
</span>c8b63f8 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit c8b63f830c681d6b82099078383ca1ebdeca3987
</span>Author: Mojca Miklavec <mojca@macports.org>
AuthorDate: Wed Nov 1 01:33:07 2017 +0100
<span style='display:block; white-space:pre;color:#404040;'> perl5: update to 5.24.3 and 5.26.1
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> * Update perl5.24 to 5.24.3.
</span><span style='display:block; white-space:pre;color:#404040;'> * Update perl5.26 to 5.26.1.
</span><span style='display:block; white-space:pre;color:#404040;'> * Add a variant +perl5.26 to perl5.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Closes: https://trac.macports.org/ticket/55206
</span><span style='display:block; white-space:pre;color:#404040;'> See: https://trac.macports.org/ticket/55207
</span><span style='display:block; white-space:pre;color:#404040;'> See: https://trac.macports.org/ticket/55208
</span>---
lang/perl5/Portfile | 10 +-
.../5.24/install-under-short-version-PR43480.patch | 6 +-
lang/perl5/files/5.24/patch-dist-Time-HiRes.diff | 1415 --------------------
3 files changed, 6 insertions(+), 1425 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/perl5/Portfile b/lang/perl5/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index b5efb54..5e1e9cf 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/perl5/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/perl5/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -26,8 +26,8 @@ set perl5.versions_info {
</span> 5.18 4 3 d97181a98f7acc80125b0d2a182a6a2cd7542ceb 1fb4d27b75cd244e849f253320260efe1750641aaff4a18ce0d67556ff1b96a5
5.20 3 2 499846a1c92e00dd357cb782bc14787b8cd47051 1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b
5.22 4 0 54fdbcbf249134dc7d82b693417900286201b5e7 8b3122046d1186598082d0e6da53193b045e85e3505e7d37ee0bdd0bdb539b71
<span style='display:block; white-space:pre;background:#ffe0e0;'>- 5.24 2 0 a50397964e25396ffc43167819a70043fcfaf194 e28c8fa588c4227eb25350036b45d7b1b46d61bb3a2194ee09dc79be6ed0fd0f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 5.26 0 2 a853a1ec299d7c6ba8239e8ed444ee6d922b8938 f21d66de84982175e95ad15fd8d0e22fed2cc2de7e4394f5d48dbe451be2f6f2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 5.24 3 0 61e7a9786f1e0f26da7de51c3d1e350d132e2a6c c1af071e7bc133cedff9dd2278d6d92aa78f3514f195ab201c476382c130854e
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 5.26 1 0 fff5bf2e6ad6488b8866bf300c32707972b8ffc6 2812a01dd4d4cd7650cb70abfe259ee572bf6a0f1ee95763422ba7e54c68d12d
</span> }
foreach {perl5.v perl5.subversion perl5.revision perl5.rmd160 perl5.sha256} ${perl5.versions_info} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -84,10 +84,6 @@ foreach {perl5.v perl5.subversion perl5.revision perl5.rmd160 perl5.sha256} ${pe
</span> ${perl5.major}/patch-dist-IO-t-cachepropagate-unix.t.diff
}
if {${perl5.major} == 5.24} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # Prevent build error on Sierra
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # https://trac.macports.org/ticket/52012
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- patchfiles-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ${perl5.major}/patch-dist-Time-HiRes.diff
</span> patchfiles-append \
${perl5.major}/fix-ld-modification.patch
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -196,7 +192,7 @@ if {$subport eq $name} {
</span>
perl5.require_variant yes
perl5.conflict_variants yes
<span style='display:block; white-space:pre;background:#ffe0e0;'>- perl5.branches 5.24
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ perl5.branches 5.24 5.26
</span> perl5.default_branch 5.24
perl5.create_variants ${perl5.branches}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/perl5/files/5.24/install-under-short-version-PR43480.patch b/lang/perl5/files/5.24/install-under-short-version-PR43480.patch
</span><span style='display:block; white-space:pre;color:#808080;'>index 5571660..85986dd 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/perl5/files/5.24/install-under-short-version-PR43480.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/perl5/files/5.24/install-under-short-version-PR43480.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -10,7 +10,7 @@ https://trac.macports.org/ticket/43480
</span> api_versionstring=`echo $api_revision $api_version $api_subversion | \
$awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
;;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -7296,7 +7298,7 @@ esac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -7310,7 +7312,7 @@ esac
</span> : /opt/perl/lib/perl5... would be redundant.
: The default "style" setting is made in installstyle.U
case "$installstyle" in
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -19,7 +19,7 @@ https://trac.macports.org/ticket/43480
</span> *) set dflt privlib lib/$version ;;
esac
eval $prefixit
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -7544,7 +7548,7 @@ siteprefixexp="$ansexp"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -7558,7 +7560,7 @@ siteprefixexp="$ansexp"
</span> prog=`echo $package | $sed 's/-*[0-9.]*$//'`
case "$sitelib" in
'') case "$installstyle" in
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -28,7 +28,7 @@ https://trac.macports.org/ticket/43480
</span> *) dflt=$siteprefix/lib/site_$prog/$version ;;
esac
;;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -7962,7 +7964,7 @@ case "$vendorprefix" in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -7976,7 +7978,7 @@ case "$vendorprefix" in
</span> '')
prog=`echo $package | $sed 's/-*[0-9.]*$//'`
case "$installstyle" in
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/perl5/files/5.24/patch-dist-Time-HiRes.diff b/lang/perl5/files/5.24/patch-dist-Time-HiRes.diff
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 2a791a6..0000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/perl5/files/5.24/patch-dist-Time-HiRes.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,1415 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-https://github.com/macports/macports-ports/pull/607
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-https://perl5.git.perl.org/perl.git/commit/c4a535af41823cc84534bf8dbecfdcc3eb7daa86
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- MANIFEST
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ MANIFEST
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -3557,6 +3557,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dist/Time-HiRes/t/tv_interval.t Test for Time::HiRes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dist/Time-HiRes/t/ualarm.t Test for Time::HiRes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dist/Time-HiRes/t/usleep.t Test for Time::HiRes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+dist/Time-HiRes/t/utime.t Test for Time::HiRes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dist/Time-HiRes/t/Watchdog.pm Test for Time::HiRes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dist/Time-HiRes/typemap Time::HiRes extension
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dist/XSLoader/Makefile.PL Dynamic Loader makefile writer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- Porting/Maintainers.pl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ Porting/Maintainers.pl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1374,7 +1374,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- },
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 'Time::HiRes' => {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- 'DISTRIBUTION' => 'RJBS/Time-HiRes-1.9728.tar.gz',
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ 'DISTRIBUTION' => 'JHI/Time-HiRes-1.9739.tar.gz',
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 'FILES' => q[dist/Time-HiRes],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- },
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/Changes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/Changes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,5 +1,55 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Revision history for the Perl extension Time::HiRes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+1.9739 [2016-06-28]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - the upcoming macOS 10.12 (Sierra, the operating system formerly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ known as OS X, or Darwin) has implemented the clock_gettime()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ and clock_getres() interfaces but not the clock_nanosleep()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+1.9738 [2016-06-26]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - fix the dates in the Changes, it's not July yet
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ [rt.cpan.org #115553]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - in cygwin, drop the utime.t expected timestamp resolution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - documented for utime that the actual timestamp resolution depends
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ on the operating system and the filesystem, just like for stat
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - looks like in gnukfreebsd 10.1 neither futimens or utimensat work
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ even though they exist, skipping utime tests there for now
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - demodernize the Test::More use in utime.t (no subtest) to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ better support older Perl installations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - for all the tests, drop the Test::More 0.82 requirement,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ the only "modern" thing used is the note routine which
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ can be replaced with print("# ...\n") (or printf),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ with this works back at least with Test::More 0.54 (perl 5.8.7)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+1.9737 [2016-06-22]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - utime in HiRes.xs had dXSARGS which was unnecessary, leading
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ to two markstack pops, panic, and two-minute wait for the watchdog
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ (thanks to Dave Mitchell for the eagle-eye)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - even though 5.10.x should have the Perl_ck_warner, many CPAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ smokes proved otherwise, so requiring now at least 5.12 for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Perl_ck_warner use in IS_SAFE_PATHNAME()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+1.9736 [2016-06-22]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - the IS_SAFE_PATHNAME() emulation was too modern for Perl 5.10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - make it so that only one value is set for -DTIME_HIRES_STAT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ even on systems that support many options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - the 1.9734 (only released in blead, and as part of the development
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ release 5.25.2) fix for Darwin's clock_gettime was wrong under
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ threaded builds, leading into mutex panics in clock.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - the d_hires_utime determination was made more precise
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - the utime.t was failing in platforms where only one of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ futimens/utimensat was present (neither or both was okay)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+1.9735 [2016-06-20]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - Time::HiRes should override `utime` to allow setting hires
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ (futimens and utimensat support)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ [rt.perl.org #114809]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - the utime patch used IS_SAFE_PATHNAME() which isn't available in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ too old Perls, so emulate (in case the Devel::PPPort is too old)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+1.9734 [2016-06-17]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ - fix Darwins with clock_gettime: blead 2d41a263
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ [rt.perl.org #128427]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1.9733 [2016-04-23]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- - C90 declaration-after-statement error with darwin threads: blead de1003b4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- [rt.cpan.org #113856]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/HiRes.pm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/HiRes.pm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -23,12 +23,12 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF ITIMER_REALPROF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- TIMER_ABSTIME
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- d_nanosleep d_clock_gettime d_clock_getres
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ d_nanosleep d_clock_gettime d_clock_getres d_hires_utime
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- d_clock d_clock_nanosleep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- stat lstat
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ stat lstat utime
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--our $VERSION = '1.9733';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+our $VERSION = '1.9739';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- our $XS_VERSION = $VERSION;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $VERSION = eval $VERSION;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -60,6 +60,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ($i eq 'clock' && !&d_clock) ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ($i eq 'nanosleep' && !&d_nanosleep) ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ($i eq 'usleep' && !&d_usleep) ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ($i eq 'utime' && !&d_hires_utime) ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ($i eq 'ualarm' && !&d_ualarm)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- require Carp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Carp::croak("Time::HiRes::$i(): unimplemented in this platform");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -92,7 +93,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use Time::HiRes qw( usleep ualarm gettimeofday tv_interval nanosleep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- clock_gettime clock_getres clock_nanosleep clock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- stat lstat );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ stat lstat utime);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- usleep ($microseconds);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- nanosleep ($nanoseconds);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -137,6 +138,9 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my @stat = stat(FH);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my @stat = lstat("file");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ use Time::HiRes qw( utime );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ utime $floating_seconds, $floating_seconds, file...;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- =head1 DESCRIPTION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- The C<Time::HiRes> module implements a Perl interface to the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -446,6 +450,26 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- the access time stamp from t2 need not be greater-than the modify
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- time stamp from t1: it may be equal or I<less>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+=item utime LIST
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+As L<perlfunc/utime>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+but with the ability to set the access/modify file timestamps
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+in subsecond resolution, if the operating system and the filesystem
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+both support such timestamps. To override the standard utime():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ use Time::HiRes qw(utime);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+Test for the value of &Time::HiRes::d_hires_utime to find out whether
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+the operating system supports setting subsecond file timestamps.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+As with CORE::utime(), passing undef as both the atime and mtime will
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+call the syscall with a NULL argument.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+The actual achievable subsecond resolution depends on the combination
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+of the operating system and the filesystem.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+Returns the number of files successfully changed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- =back
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- =head1 EXAMPLES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -586,9 +610,13 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Some systems have APIs but not implementations: for example QNX and Haiku
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- have the interval timer APIs but not the functionality.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--In OS X clock_getres(), clock_gettime() and clock_nanosleep() are
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--emulated using the Mach timers; as a side effect of being emulated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--the CLOCK_REALTIME and CLOCK_MONOTONIC are the same timer.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+In pre-Sierra macOS (pre-10.12, OS X) clock_getres(), clock_gettime()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+and clock_nanosleep() are emulated using the Mach timers; as a side
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+effect of being emulated the CLOCK_REALTIME and CLOCK_MONOTONIC are
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+the same timer.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gnukfreebsd seems to have non-functional futimens() and utimensat()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+(at least as of 10.1): therefore the hires utime() does not work.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- =head1 SEE ALSO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/HiRes.xs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/HiRes.xs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -747,21 +747,33 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif /* !TIME_HIRES_STAT */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--/* Until Apple implements clock_gettime() (ditto clock_getres())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * we will emulate it using Mach interfaces. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#if defined(PERL_DARWIN) && !defined(CLOCK_REALTIME)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--# include <mach/mach_time.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Until Apple implements clock_gettime()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * (ditto clock_getres() and clock_nanosleep())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * we will emulate them using the Mach kernel interfaces. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(PERL_DARWIN) && \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ (defined(TIME_HIRES_CLOCK_GETTIME_EMULATION) || \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ defined(TIME_HIRES_CLOCK_GETRES_EMULATION) || \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ defined(TIME_HIRES_CLOCK_NANOSLEEP_EMULATION))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef CLOCK_REALTIME
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # define CLOCK_REALTIME 0x01
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # define CLOCK_MONOTONIC 0x02
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef TIMER_ABSTIME
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # define TIMER_ABSTIME 0x01
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifdef USE_ITHREADS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# define PERL_DARWIN_MUTEX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef PERL_DARWIN_MUTEX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- STATIC perl_mutex darwin_time_mutex;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <mach/mach_time.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static uint64_t absolute_time_init;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static mach_timebase_info_data_t timebase_info;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static struct timespec timespec_init;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -769,7 +781,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static int darwin_time_init() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct timeval tv;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int success = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#ifdef USE_ITHREADS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef PERL_DARWIN_MUTEX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- MUTEX_LOCK(&darwin_time_mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (absolute_time_init == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -784,12 +796,13 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#ifdef USE_ITHREADS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef PERL_DARWIN_MUTEX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- MUTEX_UNLOCK(&darwin_time_mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return success;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef TIME_HIRES_CLOCK_GETTIME_EMULATION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static int clock_gettime(int clock_id, struct timespec *ts) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (darwin_time_init() && timebase_info.denom) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- switch (clock_id) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -821,7 +834,9 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SETERRNO(EINVAL, LIB_INVARG);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif /* TIME_HIRES_CLOCK_GETTIME_EMULATION */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef TIME_HIRES_CLOCK_GETRES_EMULATION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static int clock_getres(int clock_id, struct timespec *ts) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (darwin_time_init() && timebase_info.denom) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- switch (clock_id) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -841,7 +856,9 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SETERRNO(EINVAL, LIB_INVARG);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif /* TIME_HIRES_CLOCK_GETRES_EMULATION */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef TIME_HIRES_CLOCK_NANOSLEEP_EMULATION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static int clock_nanosleep(int clock_id, int flags,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const struct timespec *rqtp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct timespec *rmtp) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -879,6 +896,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SETERRNO(EINVAL, LIB_INVARG);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif /* TIME_HIRES_CLOCK_NANOSLEEP_EMULATION */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif /* PERL_DARWIN */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -921,6 +939,22 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* In case Perl and/or Devel::PPPort are too old, minimally emulate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * IS_SAFE_PATHNAME() (which looks for zero bytes in the pathname). */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef IS_SAFE_PATHNAME
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if PERL_VERSION >= 12 /* Perl_ck_warner is 5.10.0 -> */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef WARN_SYSCALLS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define WARNEMUCAT WARN_SYSCALLS /* 5.22.0 -> */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define WARNEMUCAT WARN_MISC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define WARNEMU(opname) Perl_ck_warner(aTHX_ packWARN(WARNEMUCAT), "Invalid \\0 character in pathname for %s",opname)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define WARNEMU(opname) Perl_warn(aTHX_ "Invalid \\0 character in pathname for %s",opname)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define IS_SAFE_PATHNAME(pv, len, opname) (((len)>1)&&memchr((pv), 0, (len)-1)?(SETERRNO(ENOENT, LIB_INVARG),WARNEMU(opname),FALSE):(TRUE))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- MODULE = Time::HiRes PACKAGE = Time::HiRes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- PROTOTYPES: ENABLE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -941,7 +975,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #if defined(PERL_DARWIN)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--# ifdef USE_ITHREADS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# if defined(USE_ITHREADS) && defined(PERL_DARWIN_MUTEX)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- MUTEX_INIT(&darwin_time_mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1317,6 +1351,82 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif /* #if defined(HAS_GETITIMER) && defined(HAS_SETITIMER) */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(TIME_HIRES_UTIME)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+I32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+utime(accessed, modified, ...)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+PROTOTYPE: $$@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ PREINIT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ SV* accessed;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ SV* modified;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ SV* file;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ struct timespec utbuf[2];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ struct timespec *utbufp = utbuf;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ int tot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ CODE:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ accessed = ST(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ modified = ST(1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ items -= 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ tot = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if ( accessed == &PL_sv_undef && modified == &PL_sv_undef )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ utbufp = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (SvNV(accessed) < 0.0 || SvNV(modified) < 0.0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ croak("Time::HiRes::utime(%"NVgf", %"NVgf"): negative time not invented yet", SvNV(accessed), SvNV(modified));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Zero(&utbuf, sizeof utbuf, char);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ utbuf[0].tv_sec = (Time_t)SvNV(accessed); /* time accessed */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ utbuf[0].tv_nsec = (long)( ( SvNV(accessed) - utbuf[0].tv_sec ) * 1e9 );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ utbuf[1].tv_sec = (Time_t)SvNV(modified); /* time modified */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ utbuf[1].tv_nsec = (long)( ( SvNV(modified) - utbuf[1].tv_sec ) * 1e9 );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ while (items > 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ file = POPs; items--;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (SvROK(file) && GvIO(SvRV(file)) && IoIFP(sv_2io(SvRV(file)))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ int fd = PerlIO_fileno(IoIFP(sv_2io(file)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (fd < 0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ SETERRNO(EBADF,RMS_IFI);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef HAS_FUTIMENS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (futimens(fd, utbufp) == 0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ tot++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else /* HAS_FUTIMES */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ croak("futimens unimplemented in this platform");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif /* HAS_FUTIMES */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef HAS_UTIMENSAT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ STRLEN len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ char * name = SvPV(file, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (IS_SAFE_PATHNAME(name, len, "utime") &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ utimensat(AT_FDCWD, name, utbufp, 0) == 0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ tot++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else /* HAS_UTIMENSAT */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ croak("utimensat unimplemented in this platform");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif /* HAS_UTIMENSAT */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ } /* while items */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ RETVAL = tot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ OUTPUT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ RETVAL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else /* #if defined(TIME_HIRES_UTIME) */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+I32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+utime(accessed, modified, ...)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ CODE:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ croak("Time::HiRes::utime(): unimplemented in this platform");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ RETVAL = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ OUTPUT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ RETVAL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif /* #if defined(TIME_HIRES_UTIME) */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #if defined(TIME_HIRES_CLOCK_GETTIME)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- NV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/Makefile.PL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/Makefile.PL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -354,6 +354,41 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- EOM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+sub has_futimens {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return 1 if
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ try_compile_and_link(<<EOM);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "EXTERN.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "perl.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "XSUB.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <sys/time.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int main(int argc, char** argv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ int ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ struct timespec ts[2];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ret = futimens(0, ts);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ret == 0 ? exit(0) : exit(errno ? errno : -1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+EOM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+sub has_utimensat{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return 1 if
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ try_compile_and_link(<<EOM);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "EXTERN.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "perl.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "XSUB.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <sys/time.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <fcntl.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int main(int argc, char** argv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ int ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ struct timespec ts[2];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ret = utimensat(AT_FDCWD, 0, ts, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ret == 0 ? exit(0) : exit(errno ? errno : -1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+EOM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sub DEFINE {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my ($def, $val) = @_;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $define = defined $val ? "$def=$val" : $def ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -548,7 +583,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } elsif ($^O eq 'darwin') {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $has_clock_gettime_emulation++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $has_clock_gettime++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- $DEFINE .= ' -DTIME_HIRES_CLOCK_GETTIME';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ $DEFINE .= ' -DTIME_HIRES_CLOCK_GETTIME -DTIME_HIRES_CLOCK_GETTIME_EMULATION';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($has_clock_gettime) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -577,7 +612,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } elsif ($^O eq 'darwin') {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $has_clock_getres_emulation++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $has_clock_getres++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- $DEFINE .= ' -DTIME_HIRES_CLOCK_GETRES';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ $DEFINE .= ' -DTIME_HIRES_CLOCK_GETRES -DTIME_HIRES_CLOCK_GETRES_EMULATION';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($has_clock_getres) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -603,7 +638,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } elsif ($^O eq 'darwin') {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $has_clock_nanosleep++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $has_clock_nanosleep_emulation++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- $DEFINE .= ' -DTIME_HIRES_CLOCK_NANOSLEEP';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ $DEFINE .= ' -DTIME_HIRES_CLOCK_NANOSLEEP -DTIME_HIRES_CLOCK_NANOSLEEP_EMULATION';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($has_clock_nanosleep) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -631,6 +666,36 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print "NOT found.\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print "Looking for futimens()... ";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my $has_futimens;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (has_futimens()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ $has_futimens++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ $DEFINE .= ' -DHAS_FUTIMENS';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if ($has_futimens) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print "found.\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print "NOT found.\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print "Looking for utimensat()... ";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my $has_utimensat;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (has_utimensat()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ $has_utimensat++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ $DEFINE .= ' -DHAS_UTIMENSAT';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if ($has_utimensat) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print "found.\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print "NOT found.\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if ($has_futimens or $has_utimensat) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ $DEFINE .= ' -DTIME_HIRES_UTIME';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print "Looking for stat() subsecond timestamps...\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print "Trying struct stat st_atimespec.tv_nsec...";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -644,7 +709,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- EOM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $has_stat_st_xtimespec++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- DEFINE('TIME_HIRES_STAT', 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ DEFINE('TIME_HIRES_STAT_ST_XTIMESPEC'); # 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($has_stat_st_xtimespec) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -664,7 +729,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- EOM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $has_stat_st_xtimensec++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- DEFINE('TIME_HIRES_STAT', 2);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ DEFINE('TIME_HIRES_STAT_ST_XTIMENSEC'); # 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($has_stat_st_xtimensec) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -684,7 +749,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- EOM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $has_stat_st_xtime_n++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- DEFINE('TIME_HIRES_STAT', 3);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ DEFINE('TIME_HIRES_STAT_ST_XTIME_N'); # 3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($has_stat_st_xtime_n) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -704,7 +769,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- EOM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $has_stat_st_xtim++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- DEFINE('TIME_HIRES_STAT', 4);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ DEFINE('TIME_HIRES_STAT_XTIM'); # 4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($has_stat_st_xtim) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -724,7 +789,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- EOM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $has_stat_st_uxtime++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- DEFINE('TIME_HIRES_STAT', 5);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ DEFINE('TIME_HIRES_STAT_ST_UXTIME'); # 5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($has_stat_st_uxtime) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -733,6 +798,19 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print "NOT found.\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ # See HiRes.xs hrstatns()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if ($has_stat_st_xtimespec) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ DEFINE('TIME_HIRES_STAT', 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ } elsif ($has_stat_st_xtimensec) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ DEFINE('TIME_HIRES_STAT', 2);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ } elsif ($has_stat_st_xtime_n) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ DEFINE('TIME_HIRES_STAT', 3);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ } elsif ($has_stat_st_xtim) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ DEFINE('TIME_HIRES_STAT', 4);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ } elsif ($has_stat_st_uxtime) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ DEFINE('TIME_HIRES_STAT', 5);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($DEFINE =~ /-DTIME_HIRES_STAT=\d+/) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print "You seem to have stat() subsecond timestamps.\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print "(Your struct stat has them, but the filesystems must help.)\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -791,7 +869,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 'DynaLoader' => 0,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 'Exporter' => 0,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 'ExtUtils::MakeMaker' => 0,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- 'Test::More' => "0.82",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ 'Test::More' => 0,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 'strict' => 0,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- },
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 'dist' => {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -869,7 +947,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach (qw (d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- d_nanosleep d_clock_gettime d_clock_getres
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- d_clock d_clock_nanosleep d_hires_stat)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ d_clock d_clock_nanosleep d_hires_stat
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ d_futimens d_utimensat d_hires_utime)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $macro = $_;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($macro =~ /^(d_nanosleep|d_clock)$/) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $macro =~ s/^d_(.+)/TIME_HIRES_\U$1/;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -879,6 +958,13 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- push @names, {name => $_, macro => "TIME_HIRES_STAT", value => $d_hires_stat,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- default => ["IV", "0"]};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- next;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ } elsif ($macro =~ /^(d_hires_utime)$/) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my $d_hires_utime =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ($DEFINE =~ /-DHAS_FUTIMENS/ ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ $DEFINE =~ /-DHAS_UTIMENSAT/) ? 1 : 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ push @names, {name => $_, macro => "TIME_HIRES_UTIME", value => $d_hires_utime,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ default => ["IV", "0"]};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ next;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } elsif ($macro =~ /^(d_clock_gettime|d_clock_getres|d_clock_nanosleep)$/) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $macro =~ s/^d_(.+)/TIME_HIRES_\U$1/;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $val = ($DEFINE =~ /-D$macro\b/) ? 1 : 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/fallback/const-c.inc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/fallback/const-c.inc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -19,6 +19,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifndef pTHX_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define pTHX_ /* 5.6 or later define this for threading support. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- constant_11 (pTHX_ const char *name, IV *iv_return) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* When generated this function returned values for the list of names given
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -87,6 +88,51 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+constant_13 (pTHX_ const char *name, IV *iv_return) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* When generated this function returned values for the list of names given
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ here. However, subsequent manual editing may have added or removed some.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ CLOCK_HIGHRES TIMER_ABSTIME d_hires_utime */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* Offset 1 gives the best switch position. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ switch (name[1]) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ case 'I':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (memEQ(name, "TIMER_ABSTIME", 13)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* ^ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef TIMER_ABSTIME
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *iv_return = TIMER_ABSTIME;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return PERL_constant_ISIV;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return PERL_constant_NOTDEF;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ case 'L':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (memEQ(name, "CLOCK_HIGHRES", 13)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* ^ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef CLOCK_HIGHRES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *iv_return = CLOCK_HIGHRES;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return PERL_constant_ISIV;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return PERL_constant_NOTDEF;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ case '_':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (memEQ(name, "d_hires_utime", 13)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* ^ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef TIME_HIRES_UTIME
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *iv_return = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return PERL_constant_ISIV;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *iv_return = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return PERL_constant_ISIV;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return PERL_constant_NOTFOUND;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- constant_14 (pTHX_ const char *name, IV *iv_return) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* When generated this function returned values for the list of names given
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- here. However, subsequent manual editing may have added or removed some.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -250,16 +296,17 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {name=>"d_getitimer", type=>"IV", macro=>"HAS_GETITIMER", value=>"1", default=>["IV", "0"]},
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {name=>"d_gettimeofday", type=>"IV", macro=>"HAS_GETTIMEOFDAY", value=>"1", default=>["IV", "0"]},
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {name=>"d_hires_stat", type=>"IV", macro=>"TIME_HIRES_STAT", value=>"1", default=>["IV", "0"]},
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ {name=>"d_hires_utime", type=>"IV", macro=>"TIME_HIRES_UTIME", value=>"1", default=>["IV", "0"]},
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {name=>"d_nanosleep", type=>"IV", macro=>"TIME_HIRES_NANOSLEEP", value=>"1", default=>["IV", "0"]},
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {name=>"d_setitimer", type=>"IV", macro=>"HAS_SETITIMER", value=>"1", default=>["IV", "0"]},
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {name=>"d_ualarm", type=>"IV", macro=>"HAS_UALARM", value=>"1", default=>["IV", "0"]},
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {name=>"d_usleep", type=>"IV", macro=>"HAS_USLEEP", value=>"1", default=>["IV", "0"]});
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--print constant_types(); # macro defs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+print constant_types(), "\n"; # macro defs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach (C_constant ("Time::HiRes", 'constant', 'IV', $types, undef, 3, @names) ) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print $_, "\n"; # C constant subs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--print "#### XS Section:\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+print "\n#### XS Section:\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print XS_constant ("Time::HiRes", $types);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- __END__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -322,33 +369,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- case 13:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- /* Names all of length 13. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- /* CLOCK_HIGHRES TIMER_ABSTIME */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- /* Offset 2 gives the best switch position. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- switch (name[2]) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- case 'M':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if (memEQ(name, "TIMER_ABSTIME", 13)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- /* ^ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#ifdef TIMER_ABSTIME
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- *iv_return = TIMER_ABSTIME;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return PERL_constant_ISIV;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return PERL_constant_NOTDEF;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- case 'O':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if (memEQ(name, "CLOCK_HIGHRES", 13)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- /* ^ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#ifdef CLOCK_HIGHRES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- *iv_return = CLOCK_HIGHRES;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return PERL_constant_ISIV;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return PERL_constant_NOTDEF;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return constant_13 (aTHX_ name, iv_return);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- case 14:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return constant_14 (aTHX_ name, iv_return);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/t/Watchdog.pm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/t/Watchdog.pm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -10,44 +10,44 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $TheEnd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($Config{d_fork}) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "I am the main process $$, starting the watchdog process...";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# I am the main process $$, starting the watchdog process...\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $watchdog_pid = fork();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (defined $watchdog_pid) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($watchdog_pid == 0) { # We are the kid, set up the watchdog.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $ppid = getppid();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "I am the watchdog process $$, sleeping for $waitfor seconds...";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# I am the watchdog process $$, sleeping for $waitfor seconds...\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sleep($waitfor - 2); # Workaround for perlbug #49073
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sleep(2); # Wait for parent to exit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (kill(0, $ppid)) { # Check if parent still exists
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- warn "\n$0: overall time allowed for tests (${waitfor}s) exceeded!\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "Terminating main process $ppid...";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("Terminating main process $ppid...\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kill('KILL', $ppid);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "This is the watchdog process $$, over and out.";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# This is the watchdog process $$, over and out.\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- exit(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "The watchdog process $watchdog_pid launched, continuing testing...";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# The watchdog process $watchdog_pid launched, continuing testing...\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $TheEnd = time() + $waitfor;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- warn "$0: fork failed: $!\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "No watchdog process (need fork)";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# No watchdog process (need fork)\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- END {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($watchdog_pid) { # Only in the main process.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $left = $TheEnd - time();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note sprintf "I am the main process $$, terminating the watchdog process $watchdog_pid before it terminates me in %d seconds (testing took %d seconds).", $left, $waitfor - $left;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ printf("# I am the main process $$, terminating the watchdog process $watchdog_pid before it terminates me in %d seconds (testing took %d seconds).\n", $left, $waitfor - $left);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (kill(0, $watchdog_pid)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- local $? = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $kill = kill('KILL', $watchdog_pid); # We are done, the watchdog can go.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- wait();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note sprintf "kill KILL $watchdog_pid = %d", $kill;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ printf("# kill KILL $watchdog_pid = %d\n", $kill);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- unlink("ktrace.out"); # Used in BSD system call tracing.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "All done.";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# All done.\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/t/alarm.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/t/alarm.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,6 +1,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use strict;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--use Test::More 0.82 tests => 10;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Test::More tests => 10;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use t::Watchdog;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- BEGIN { require_ok "Time::HiRes"; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -29,12 +29,14 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my ($r, $i, $not, $ok);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ $not = "";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $r = [Time::HiRes::gettimeofday()];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $i = 5;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $oldaction;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($use_sigaction) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $oldaction = new POSIX::SigAction;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note sprintf "sigaction tick, ALRM = %d", &POSIX::SIGALRM;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ printf("# sigaction tick, ALRM = %d\n", &POSIX::SIGALRM);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Perl's deferred signals may be too wimpy to break through
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # a restartable select(), so use POSIX::sigaction if available.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -44,7 +46,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $oldaction)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- or die "Error setting SIGALRM handler with sigaction: $!\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "SIG tick";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# SIG tick\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $SIG{ALRM} = "tick";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -56,8 +58,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::alarm(0.3);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- select (undef, undef, undef, 3);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $ival = Time::HiRes::tv_interval ($r);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "Select returned! $i $ival";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note abs($ival/3 - 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# Select returned! $i $ival\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ printf("# %s\n", abs($ival/3 - 1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Whether select() gets restarted after signals is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # implementation dependent. If it is restarted, we
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # will get about 3.3 seconds: 3 from the select, 0.3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -86,7 +88,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sub tick {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $i--;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $ival = Time::HiRes::tv_interval ($r);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "Tick! $i $ival";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# Tick! $i $ival\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $exp = 0.3 * (5 - $i);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($exp == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $not = "tick: divisor became zero";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -106,8 +108,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::alarm(0); # can't cancel usig %SIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# $not\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok !$not;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note $not || $ok;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SKIP: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -126,7 +128,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # http://groups.google.com/group/perl.perl5.porters/browse_thread/thread/adaffaaf939b042e/20dafc298df737f0%2320dafc298df737f0?sa=X&oi=groupsr&start=0&num=3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Perl changes [18765] and [18770], perl bug [perl #20920]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "Finding delay loop...";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# Finding delay loop...\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $T = 0.01;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $DelayN = 1024;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -137,7 +139,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for ($i = 0; $i < $DelayN; $i++) { }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $t1 = Time::HiRes::time();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $dt = $t1 - $t0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "N = $DelayN, t1 = $t1, t0 = $t0, dt = $dt";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# N = $DelayN, t1 = $t1, t0 = $t0, dt = $dt\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- last N if $dt > $T;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $DelayN *= 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } while (1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -169,7 +171,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $SIG{ALRM} = sub {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $a++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "Alarm $a - ", Time::HiRes::time();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ printf("# Alarm $a - %s\n", Time::HiRes::time());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::alarm(0) if $a >= $A; # Disarm the alarm.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $Delay->(2); # Try burning CPU at least for 2T seconds.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -204,18 +206,18 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $alrm = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $SIG{ALRM} = sub { $alrm++ };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $got = Time::HiRes::alarm(2.7);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $got == 0 or note $got;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $got == 0 or print("# $got\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $t0 = Time::HiRes::time();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 while Time::HiRes::time() - $t0 <= 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $got = Time::HiRes::alarm(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $got > 0 && $got < 1.8 or note $got;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $got > 0 && $got < 1.8 or print("# $got\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $alrm == 0 or note $alrm;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $alrm == 0 or print("# $alrm\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $got = Time::HiRes::alarm(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $got == 0 or note $got;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $got == 0 or print("# $got\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/t/clock.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/t/clock.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,6 +1,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use strict;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--use Test::More 0.82 tests => 5;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Test::More tests => 5;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use t::Watchdog;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- BEGIN { require_ok "Time::HiRes"; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -13,10 +13,10 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return $@ eq '';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--note sprintf "have_clock_gettime = %d", &Time::HiRes::d_clock_gettime;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--note sprintf "have_clock_getres = %d", &Time::HiRes::d_clock_getres;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--note sprintf "have_clock_nanosleep = %d", &Time::HiRes::d_clock_nanosleep;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--note sprintf "have_clock = %d", &Time::HiRes::d_clock;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+printf("# have_clock_gettime = %d\n", &Time::HiRes::d_clock_gettime);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+printf("# have_clock_getres = %d\n", &Time::HiRes::d_clock_getres);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+printf("# have_clock_nanosleep = %d\n", &Time::HiRes::d_clock_nanosleep);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+printf("# have_clock = %d\n", &Time::HiRes::d_clock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Ideally, we'd like to test that the timers are rather precise.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # However, if the system is busy, there are no guarantees on how
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -36,25 +36,25 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $ok = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- TRY: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for my $try (1..3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "CLOCK_REALTIME: try = $try";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# CLOCK_REALTIME: try = $try\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $t0 = Time::HiRes::clock_gettime(&CLOCK_REALTIME);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $T = 1.5;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::sleep($T);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $t1 = Time::HiRes::clock_gettime(&CLOCK_REALTIME);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($t0 > 0 && $t1 > $t0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "t1 = $t1, t0 = $t0";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# t1 = $t1, t0 = $t0\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $dt = $t1 - $t0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $rt = abs(1 - $dt / $T);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "dt = $dt, rt = $rt";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# dt = $dt, rt = $rt\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ($rt <= 2 * $limit) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $ok = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- last TRY;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "Error: t0 = $t0, t1 = $t1";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# Error: t0 = $t0, t1 = $t1\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $r = rand() + rand();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note sprintf "Sleeping for %.6f seconds...\n", $r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ printf("# Sleeping for %.6f seconds...\n", $r);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::sleep($r);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -64,7 +64,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SKIP: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- skip "no clock_getres", 1 unless &Time::HiRes::d_clock_getres;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $tr = Time::HiRes::clock_getres();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $tr > 0 or note "tr = $tr";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $tr > 0 or print("# tr = $tr\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SKIP: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -73,17 +73,17 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $s = 1.5e9;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $t = Time::HiRes::clock_nanosleep(&CLOCK_REALTIME, $s);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $r = abs(1 - $t / $s);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $r < 2 * $limit or note "t = $t, r = $r";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $r < 2 * $limit or print("# t = $t, r = $r\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SKIP: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- skip "no clock", 1 unless &Time::HiRes::d_clock;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my @clock = Time::HiRes::clock();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "clock = @clock";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# clock = @clock\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for my $i (1..3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (my $j = 0; $j < 1e6; $j++) { }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- push @clock, Time::HiRes::clock();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "clock = @clock";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# clock = @clock\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok $clock[0] >= 0 &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $clock[1] > $clock[0] &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/t/gettimeofday.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/t/gettimeofday.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -8,26 +8,26 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--use Test::More 0.82 tests => 6;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Test::More tests => 6;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use t::Watchdog;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my @one = Time::HiRes::gettimeofday();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--note 'gettimeofday returned ', 0+@one, ' args';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+printf("# gettimeofday returned %d args\n", 0+@one);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok @one == 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--ok $one[0] > 850_000_000 or note "@one too small";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ok $one[0] > 850_000_000 or print("# @one too small\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sleep 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my @two = Time::HiRes::gettimeofday();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok $two[0] > $one[0] || ($two[0] == $one[0] && $two[1] > $one[1])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- or note "@two is not greater than @one";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ or print("# @two is not greater than @one\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $f = Time::HiRes::time();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--ok $f > 850_000_000 or note "$f too small";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--ok $f - $two[0] < 2 or note "$f - $two[0] >= 2";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ok $f > 850_000_000 or print("# $f too small\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ok $f - $two[0] < 2 or print("# $f - $two[0] >= 2\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $r = [Time::HiRes::gettimeofday()];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $g = Time::HiRes::tv_interval $r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--ok $g < 2 or note $g;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ok $g < 2 or print("# $g\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/t/itimer.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/t/itimer.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -25,7 +25,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--use Test::More 0.82 tests => 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Test::More tests => 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use t::Watchdog;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $limit = 0.25; # 25% is acceptable slosh for testing timers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -35,11 +35,11 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $SIG{VTALRM} = sub {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $i ? $i-- : Time::HiRes::setitimer(&Time::HiRes::ITIMER_VIRTUAL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "Tick! $i ", Time::HiRes::tv_interval($r);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ printf("# Tick! $i %s\n", Time::HiRes::tv_interval($r));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--note "setitimer: ", join(" ",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- Time::HiRes::setitimer(&Time::HiRes::ITIMER_VIRTUAL, 0.5, 0.4));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+printf("# setitimer: %s\n", join(" ",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Time::HiRes::setitimer(&Time::HiRes::ITIMER_VIRTUAL, 0.5, 0.4)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Assume interval timer granularity of $limit * 0.5 seconds. Too bold?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $virt = Time::HiRes::getitimer(&Time::HiRes::ITIMER_VIRTUAL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -47,19 +47,19 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "ITIMER_VIRTUAL defined with sufficient granularity")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- or diag "virt=" . (defined $virt ? $virt : 'undef');
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--note "getitimer: ", join(" ",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- Time::HiRes::getitimer(&Time::HiRes::ITIMER_VIRTUAL));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+printf("# getitimer: %s\n", join(" ",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Time::HiRes::getitimer(&Time::HiRes::ITIMER_VIRTUAL)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while (Time::HiRes::getitimer(&Time::HiRes::ITIMER_VIRTUAL)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $j;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (1..1000) { $j++ } # Can't be unbreakable, must test getitimer().
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--note "getitimer: ", join(" ",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- Time::HiRes::getitimer(&Time::HiRes::ITIMER_VIRTUAL));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+printf("# getitimer: %s\n", join(" ",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Time::HiRes::getitimer(&Time::HiRes::ITIMER_VIRTUAL)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $virt = Time::HiRes::getitimer(&Time::HiRes::ITIMER_VIRTUAL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--note "at end, i=$i";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+print("# at end, i=$i\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- is($virt, 0, "time left should be zero");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $SIG{VTALRM} = 'DEFAULT';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/t/nanosleep.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/t/nanosleep.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -8,7 +8,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--use Test::More 0.82 tests => 3;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Test::More tests => 3;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use t::Watchdog;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- eval { Time::HiRes::nanosleep(-5) };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -21,7 +21,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::nanosleep(10_000_000);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $three = CORE::time;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok $one == $two || $two == $three
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- or note "slept too long, $one $two $three";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ or print("# slept too long, $one $two $three\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SKIP: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- skip "no gettimeofday", 1 unless &Time::HiRes::d_gettimeofday;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -29,7 +29,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::nanosleep(500_000_000);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $f2 = Time::HiRes::time();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $d = $f2 - $f;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $d > 0.4 && $d < 0.9 or note "slept $d secs $f to $f2";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $d > 0.4 && $d < 0.9 or print("# slept $d secs $f to $f2\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/t/sleep.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/t/sleep.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,6 +1,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use strict;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--use Test::More 0.82 tests => 4;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Test::More tests => 4;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use t::Watchdog;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- BEGIN { require_ok "Time::HiRes"; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -26,12 +26,12 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SKIP: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- skip "no subsecond alarm", 2 unless $can_subsecond_alarm;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $f = Time::HiRes::time;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "time...$f";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# time...$f\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $r = [Time::HiRes::gettimeofday()];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::sleep (0.5);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "sleep...", Time::HiRes::tv_interval($r);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ printf("# sleep...%s\n", Time::HiRes::tv_interval($r));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/t/stat.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/t/stat.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -13,7 +13,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--use Test::More 0.82 tests => 43;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Test::More tests => 43;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use t::Watchdog;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my @atime;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -42,8 +42,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- is_deeply $lstat, $stat;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 while unlink $$;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--note "mtime = @mtime";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--note "atime = @atime";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+print("# mtime = @mtime\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+print("# atime = @atime\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $ai = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $mi = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $ss = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -63,7 +63,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $ss++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--note "ai = $ai, mi = $mi, ss = $ss";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+print("# ai = $ai, mi = $mi, ss = $ss\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Need at least 75% of monotonical increase and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # 20% of subsecond results. Yes, this is guessing.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SKIP: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/t/time.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/t/time.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,6 +1,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use strict;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--use Test::More 0.82 tests => 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Test::More tests => 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use t::Watchdog;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- BEGIN { require_ok "Time::HiRes"; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -16,8 +16,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # (CORE::time() may be rounding down, up, or closest),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # but allow 10% of slop.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok abs($s) / $n <= 1.10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- or note "Time::HiRes::time() not close to CORE::time()";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "s = $s, n = $n, s/n = ", abs($s)/$n;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ or print("# Time::HiRes::time() not close to CORE::time()\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ printf("# s = $s, n = $n, s/n = %s\n", abs($s)/$n);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/t/tv_interval.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/t/tv_interval.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,10 +1,10 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use strict;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--use Test::More 0.82 tests => 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Test::More tests => 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- BEGIN { require_ok "Time::HiRes"; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $f = Time::HiRes::tv_interval [5, 100_000], [10, 500_000];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--ok abs($f - 5.4) < 0.001 or note $f;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ok abs($f - 5.4) < 0.001 or print("# $f\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/t/ualarm.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/t/ualarm.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -8,7 +8,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--use Test::More 0.82 tests => 12;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Test::More tests => 12;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use t::Watchdog;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use Config;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -24,13 +24,13 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $tick = 0; Time::HiRes::ualarm(10_000); while ($tick == 0) { }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $three = CORE::time;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok $one == $two || $two == $three
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- or note "slept too long, $one $two $three";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "tick = $tick, one = $one, two = $two, three = $three";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ or print("# slept too long, $one $two $three\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# tick = $tick, one = $one, two = $two, three = $three\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $tick = 0; Time::HiRes::ualarm(10_000, 10_000); while ($tick < 3) { }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::ualarm(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "tick = $tick, one = $one, two = $two, three = $three";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# tick = $tick, one = $one, two = $two, three = $three\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- eval { Time::HiRes::ualarm(-4) };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -59,24 +59,24 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $alarmed = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- local $SIG{ ALRM } = sub { $alarmed++ };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $t0 = Time::HiRes::time();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "t0 = $t0";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "ualarm($n)";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# t0 = $t0\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# ualarm($n)\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::ualarm($n); 1 while $alarmed == 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $t1 = Time::HiRes::time();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "t1 = $t1";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# t1 = $t1\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $dt = $t1 - $t0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "dt = $dt";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# dt = $dt\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $r = $dt / ($n/1e6);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "r = $r";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# r = $r\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $ok =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ($n < 1_000_000 || # Too much noise.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ($r >= 0.8 && $r <= 1.6));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- last if $ok;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $nap = bellish(3, 15);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note sprintf "Retrying in %.1f seconds...\n", $nap;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ printf("# Retrying in %.1f seconds...\n", $nap);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::sleep($nap);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $ok or note "ualarm($n) close enough";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $ok or print("# ualarm($n) close enough\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -93,12 +93,12 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } while $t1 - $t0 <= 0.3;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $got1 = Time::HiRes::ualarm(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "t0 = $t0";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "got0 = $got0";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "t1 = $t1";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "t1 - t0 = ", ($t1 - $t0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- note "got1 = $got1";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $got0 == 0 or note $got0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# t0 = $t0\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# got0 = $got0\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# t1 = $t1\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ printf("# t1 - t0 = %s\n", ($t1 - $t0));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ print("# got1 = $got1\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $got0 == 0 or print("# $got0\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SKIP: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- skip "alarm interval exceeded", 2 if $t1 - $t0 >= 0.5;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok $got1 > 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -106,7 +106,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok $got1 < 300_000;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $got2 = Time::HiRes::ualarm(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $got2 == 0 or note $got2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $got2 == 0 or print("# $got2\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/t/usleep.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/t/usleep.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -8,7 +8,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--use Test::More 0.82 tests => 6;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Test::More tests => 6;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use t::Watchdog;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- eval { Time::HiRes::usleep(-2) };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -23,7 +23,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::usleep(10_000);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $three = CORE::time;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok $one == $two || $two == $three
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--or note "slept too long, $one $two $three";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+or print("# slept too long, $one $two $three\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SKIP: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- skip "no gettimeofday", 1 unless &Time::HiRes::d_gettimeofday;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -31,7 +31,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::usleep(500_000);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $f2 = Time::HiRes::time();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $d = $f2 - $f;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $d > 0.4 && $d < 0.9 or note "slept $d secs $f to $f2";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $d > 0.4 && $d < 0.9 or print("# slept $d secs $f to $f2\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SKIP: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -39,7 +39,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $r = [ Time::HiRes::gettimeofday() ];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Time::HiRes::sleep( 0.5 );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $f = Time::HiRes::tv_interval $r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $f > 0.4 && $f < 0.9 or note "slept $f instead of 0.5 secs.";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $f > 0.4 && $f < 0.9 or print("# slept $f instead of 0.5 secs.\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SKIP: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -59,7 +59,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SKIP: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- skip $msg, 1 unless $td < $sleep * (1 + $limit);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $a < $limit or note $msg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $a < $limit or print("# $msg\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $t0 = Time::HiRes::gettimeofday();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -71,7 +71,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SKIP: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- skip $msg, 1 unless $td < $sleep * (1 + $limit);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ok $a < $limit or note $msg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ok $a < $limit or print("# $msg\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dist/Time-HiRes/t/utime.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dist/Time-HiRes/t/utime.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,101 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use strict;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+BEGIN {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ require Time::HiRes;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ require Test::More;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ unless(&Time::HiRes::d_hires_utime) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Test::More::plan(skip_all => "no hires_utime");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ unless (&Time::HiRes::d_futimens) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Test::More::plan(skip_all => "no futimens()");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ unless (&Time::HiRes::d_utimensat) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Test::More::plan(skip_all => "no utimensat()");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if ($^O eq 'gnukfreebsd') {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Test::More::plan(skip_all => "futimens() and utimensat() not working in $^O");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Test::More tests => 18;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use t::Watchdog;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use File::Temp qw( tempfile );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Config;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# Cygwin timestamps have less precision.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+my $atime = $^O eq 'cygwin' ? 1.1111111 : 1.111111111;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+my $mtime = $^O eq 'cygwin' ? 2.2222222 : 2.222222222;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+print "# utime \$fh\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ is Time::HiRes::utime($atime, $mtime, $fh), 1, "One file changed";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($filename) )[8, 9];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ is $got_atime, $atime, "atime set correctly";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ is $got_mtime, $mtime, "mtime set correctly";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+print "#utime \$filename\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ is Time::HiRes::utime($atime, $mtime, $filename), 1, "One file changed";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh) )[8, 9];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ is $got_atime, $atime, "atime set correctly";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ is $got_mtime, $mtime, "mtime set correctly";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+print "utime \$filename and \$fh\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my ($fh2, $filename2) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ is Time::HiRes::utime($atime, $mtime, $filename1, $fh2), 2, "Two files changed";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh1) )[8, 9];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ is $got_atime, $atime, "File 1 atime set correctly";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ is $got_mtime, $mtime, "File 1 mtime set correctly";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($filename2) )[8, 9];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ is $got_atime, $atime, "File 2 atime set correctly";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ is $got_mtime, $mtime, "File 2 mtime set correctly";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+print "# utime undef sets time to now\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my ($fh2, $filename2) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my $now = Time::HiRes::time;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ is Time::HiRes::utime(undef, undef, $filename1, $fh2), 2, "Two files changed";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh1) )[8, 9];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ cmp_ok abs( $got_atime - $now), '<', 0.1, "File 1 atime set correctly";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ cmp_ok abs( $got_mtime - $now), '<', 0.1, "File 1 mtime set correctly";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($filename2) )[8, 9];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ cmp_ok abs( $got_atime - $now), '<', 0.1, "File 2 atime set correctly";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ cmp_ok abs( $got_mtime - $now), '<', 0.1, "File 2 mtime set correctly";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+print "# negative atime dies\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ eval { Time::HiRes::utime(-4, $mtime) };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ like $@, qr/::utime\(-4, 2\.22222\): negative time not invented yet/,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "negative time error";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+print "# negative mtime dies;\n";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ eval { Time::HiRes::utime($atime, -4) };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ like $@, qr/::utime\(1.11111, -4\): negative time not invented yet/,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "negative time error";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+done_testing;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+1;
</span></pre><pre style='margin:0'>
</pre>