<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>