<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/8e3a750ba4e6f238d476c353c39ae6a549e08605">https://github.com/macports/macports-legacy-support/commit/8e3a750ba4e6f238d476c353c39ae6a549e08605</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 8e3a750ba4e6f238d476c353c39ae6a549e08605
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Fri Jan 17 15:45:26 2025 -0800

<span style='display:block; white-space:pre;color:#404040;'>    Implement interim clock_gettime_nsec_np().
</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/61691
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Since a proper implementation of clock_gettime_nsec_np() would be
</span><span style='display:block; white-space:pre;color:#404040;'>    significant work, and should be accompanied by some needed rework of
</span><span style='display:block; white-space:pre;color:#404040;'>    time.c and test_time.c in general, for now we just provide a wrapper
</span><span style='display:block; white-space:pre;color:#404040;'>    around clock_gettime().  This is functionally correct but suboptimal
</span><span style='display:block; white-space:pre;color:#404040;'>    in performance.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    It also cleans up the scale factors, converting the fairly pointless
</span><span style='display:block; white-space:pre;color:#404040;'>    THOUSAND to a number, removing the unused MILLIONS, and replacing
</span><span style='display:block; white-space:pre;color:#404040;'>    BILLIONS with separate 32- and 64-bit versions, both now explictly
</span><span style='display:block; white-space:pre;color:#404040;'>    unsigned.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    It also cleans up some include issues.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    TESTED:
</span><span style='display:block; white-space:pre;color:#404040;'>    Passes all tests on all platforms, including added test.
</span>---
 include/time.h |  4 ++++
 src/time.c     | 28 +++++++++++++++++++++-------
 2 files changed, 25 insertions(+), 7 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 7fcefb5..087abfb 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;'>@@ -80,6 +80,10 @@ __MP__BEGIN_DECLS
</span> extern int clock_gettime( clockid_t clk_id, struct timespec *ts );
 extern int clock_getres ( clockid_t clk_id, struct timespec *ts );
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+__uint64_t clock_gettime_nsec_np(clockid_t __clock_id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> __MP__END_DECLS
 
 #endif /* __MPLS_SDK_SUPPORT_GETTIME__ */
<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 69e43e9..95f8ef1 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;'>@@ -1,5 +1,6 @@
</span> /*
  * Copyright (c) 2018 Chris Jones <jonesc@macports.org>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright (c) 2025 Frederick H. G. Wright II <fw@fwright.net>
</span>  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -14,10 +15,13 @@
</span>  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "time.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* MP support header */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "MacportsLegacySupport.h"
</span> 
 #if __MPLS_LIB_SUPPORT_GETTIME__
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <time.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #include <sys/time.h>
 #include <sys/sysctl.h>
 #include <sys/resource.h>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -27,9 +31,17 @@
</span> #include <mach/mach_time.h>
 #include <mach/thread_act.h>
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#define BILLION  1000000000L
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define MILLION  1000000L
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define THOUSAND 1000L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define BILLION32 1000000000U
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define BILLION64 1000000000ULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Interim implementation of clock_gettime_nsec_np() as wrapper */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+uint64_t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+clock_gettime_nsec_np(clockid_t clk_id)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  struct timespec ts;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  if (clock_gettime(clk_id, &ts)) return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return ts.tv_sec * BILLION64 + ts.tv_nsec;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span> 
 int clock_gettime( clockid_t clk_id, struct timespec *ts )
 {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -90,8 +102,8 @@ int clock_gettime( clockid_t clk_id, struct timespec *ts )
</span>         if ( kr != KERN_SUCCESS ) { return kr; }
       }
       uint64_t tdiff =  mach_absolute_time() * ( timebase.numer / timebase.denom );
<span style='display:block; white-space:pre;background:#ffe0e0;'>-      ts->tv_sec  = tdiff / BILLION;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ts->tv_nsec = tdiff % BILLION;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      ts->tv_sec  = tdiff / BILLION32;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      ts->tv_nsec = tdiff % BILLION32;
</span>       ret = 0;
     }
   }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -110,7 +122,7 @@ int clock_getres( clockid_t clk_id, struct timespec *ts )
</span>     {
       // return 1us precision
       ts->tv_sec  = 0;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-      ts->tv_nsec = THOUSAND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      ts->tv_nsec = 1000;
</span>       ret         = 0;
     }
     else if ( CLOCK_MONOTONIC_RAW == clk_id ||
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -131,6 +143,8 @@ int clock_getres( clockid_t clk_id, struct timespec *ts )
</span> 
 #if __MPLS_LIB_SUPPORT_TIMESPEC_GET__
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <time.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> int timespec_get(struct timespec *ts, int base)
 {
   switch (base) {
</pre><pre style='margin:0'>

</pre>