<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-legacy-support.
</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/2d25480917bcd36fb774b46155db7ef54d6a110b">https://github.com/macports/macports-legacy-support/commit/2d25480917bcd36fb774b46155db7ef54d6a110b</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 2d25480917bcd36fb774b46155db7ef54d6a110b
</span>Author: Kirill A. Korinsky <kirill@korins.ky>
AuthorDate: Fri Aug 18 15:02:16 2023 +0200
<span style='display:block; white-space:pre;color:#404040;'> time.c: added missing CLOCK_*
</span>---
include/time.h | 35 ++++++++++++++++++++++++++++-------
src/time.c | 29 +++++++++++++++++++++--------
test/test_time.cpp | 34 +++++++++++++++++++++++++++++++++-
3 files changed, 82 insertions(+), 16 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/time.h b/include/time.h
</span><span style='display:block; white-space:pre;color:#808080;'>index d042e24..4a62300 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/time.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/time.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -44,12 +44,35 @@ __MP__END_DECLS
</span> #if __MP_LEGACY_SUPPORT_GETTIME__
/* One define types and methods if not already defined. */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#if !defined(CLOCK_REALTIME) && !defined(CLOCK_MONOTONIC) && !defined(CLOCK_MONOTONIC_RAW)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define CLOCK_REALTIME 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define CLOCK_MONOTONIC 6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define CLOCK_MONOTONIC_RAW 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !defined(CLOCK_REALTIME) && !defined(CLOCK_MONOTONIC)
</span> typedef int clockid_t;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* !defined(CLOCK_REALTIME) && !defined(CLOCK_MONOTONIC) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef CLOCK_REALTIME
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define CLOCK_REALTIME 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef CLOCK_MONOTONIC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define CLOCK_MONOTONIC 6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef CLOCK_MONOTONIC_RAW
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define CLOCK_MONOTONIC_RAW 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef CLOCK_MONOTONIC_RAW_APPROX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define CLOCK_MONOTONIC_RAW_APPROX 5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef CLOCK_UPTIME_RAW
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define CLOCK_UPTIME_RAW 8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef CLOCK_UPTIME_RAW_APPROX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define CLOCK_UPTIME_RAW_APPROX 8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef CLOCK_PROCESS_CPUTIME_ID
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define CLOCK_PROCESS_CPUTIME_ID 12
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span>
__MP__BEGIN_DECLS
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -58,8 +81,6 @@ extern int clock_getres ( clockid_t clk_id, struct timespec *ts );
</span>
__MP__END_DECLS
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* !defined(CLOCK_REALTIME) && !defined(CLOCK_MONOTONIC) */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> #endif /* _MP_LEGACY_SUPPORT_GETTIME__ */
/* Legacy implementation of timespec */
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/time.c b/src/time.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 0b49b96..61a078c 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/time.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/time.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -21,6 +21,7 @@
</span>
#include <sys/time.h>
#include <sys/sysctl.h>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/resource.h>
</span> #include <mach/mach_time.h>
#define BILLION 1000000000L
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -44,11 +45,7 @@ int clock_gettime( clockid_t clk_id, struct timespec *ts )
</span> struct timeval boottime;
size_t boottime_len = sizeof(boottime);
ret = sysctlbyname("kern.boottime", &boottime, &boottime_len, NULL, 0);
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if (ret == -1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- boottime.tv_sec = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- boottime.tv_usec = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (ret != KERN_SUCCESS) { return ret; }
</span> struct timeval tv;
ret = gettimeofday(&tv, NULL);
timersub(&tv, &boottime, &tv);
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -56,7 +53,18 @@ int clock_gettime( clockid_t clk_id, struct timespec *ts )
</span> ts->tv_nsec = tv.tv_usec * 1000;
ret = 0;
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- else if ( CLOCK_MONOTONIC_RAW == clk_id )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else if ( CLOCK_PROCESS_CPUTIME_ID == clk_id )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct rusage ru;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ret = getrusage(RUSAGE_SELF, &ru);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ timeradd(&ru.ru_utime, &ru.ru_stime, &ru.ru_utime);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ts->tv_sec = ru.ru_utime.tv_sec;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ts->tv_nsec = ru.ru_utime.tv_usec * 1000;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else if ( CLOCK_MONOTONIC_RAW == clk_id ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CLOCK_MONOTONIC_RAW_APPROX == clk_id ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CLOCK_UPTIME_RAW == clk_id ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CLOCK_UPTIME_RAW_APPROX == clk_id )
</span> {
static mach_timebase_info_data_t timebase;
if ( 0 == timebase.numer || 0 == timebase.denom ) {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -78,14 +86,19 @@ int clock_getres( clockid_t clk_id, struct timespec *ts )
</span> if ( ts )
{
if ( CLOCK_REALTIME == clk_id ||
<span style='display:block; white-space:pre;background:#ffe0e0;'>- CLOCK_MONOTONIC == clk_id )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CLOCK_MONOTONIC == clk_id ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CLOCK_PROCESS_CPUTIME_ID == clk_id )
</span> {
// return 1us precision
ts->tv_sec = 0;
ts->tv_nsec = THOUSAND;
ret = 0;
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- else if ( CLOCK_MONOTONIC_RAW == clk_id )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else if ( CLOCK_MONOTONIC_RAW == clk_id ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CLOCK_MONOTONIC_RAW_APPROX == clk_id ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CLOCK_PROCESS_CPUTIME_ID == clk_id ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CLOCK_UPTIME_RAW == clk_id ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CLOCK_UPTIME_RAW_APPROX == clk_id )
</span> {
// return 1ns precision
ts->tv_sec = 0;
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_time.cpp b/test/test_time.cpp
</span><span style='display:block; white-space:pre;color:#808080;'>index 5019f25..1c8b81a 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/test/test_time.cpp
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/test/test_time.cpp
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -44,7 +44,7 @@ int main()
</span> std::cout << "CLOCK_MONOTONIC ("<< CLOCK_MONOTONIC << ") " << time(CLOCK_MONOTONIC) << std::endl;
}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span> int c = 0;
res(CLOCK_MONOTONIC_RAW);
while ( ++c < 10 )
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -52,5 +52,37 @@ int main()
</span> std::cout << "CLOCK_MONOTONIC_RAW ("<< CLOCK_MONOTONIC_RAW << ") " << time(CLOCK_MONOTONIC_RAW) << std::endl;
}
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int c = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ res(CLOCK_MONOTONIC_RAW_APPROX);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while ( ++c < 10 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::cout << "CLOCK_MONOTONIC_RAW_APPROX ("<< CLOCK_MONOTONIC_RAW_APPROX << ") " << time(CLOCK_MONOTONIC_RAW_APPROX) << std::endl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int c = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ res(CLOCK_UPTIME_RAW);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while ( ++c < 10 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::cout << "CLOCK_UPTIME_RAW ("<< CLOCK_UPTIME_RAW << ") " << time(CLOCK_UPTIME_RAW) << std::endl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int c = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ res(CLOCK_UPTIME_RAW_APPROX);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while ( ++c < 10 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::cout << "CLOCK_UPTIME_RAW_APPROX ("<< CLOCK_UPTIME_RAW_APPROX << ") " << time(CLOCK_UPTIME_RAW_APPROX) << std::endl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int c = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ res(CLOCK_PROCESS_CPUTIME_ID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while ( ++c < 10 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::cout << "CLOCK_PROCESS_CPUTIME_ID ("<< CLOCK_PROCESS_CPUTIME_ID << ") " << time(CLOCK_PROCESS_CPUTIME_ID) << std::endl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> return 0;
}
</pre><pre style='margin:0'>
</pre>