<pre style='margin:0'>
Clemens Lang (neverpanic) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/42458dbfc05f1c41f62703cb77d538469974fe0b">https://github.com/macports/macports-base/commit/42458dbfc05f1c41f62703cb77d538469974fe0b</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 42458dbfc05f1c41f62703cb77d538469974fe0b
</span>Author: harens <12570877+harens@users.noreply.github.com>
AuthorDate: Mon Jun 27 11:37:32 2022 +0100

<span style='display:block; white-space:pre;color:#404040;'>    Fix sysctl implementation on non-Darwin
</span>---
 src/macports1.0/sysctl.c | 45 +++++++++++++++++++++++++++++++++++++--------
 1 file changed, 37 insertions(+), 8 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/sysctl.c b/src/macports1.0/sysctl.c
</span><span style='display:block; white-space:pre;color:#808080;'>index f278f4e4..4cf1e8d5 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/sysctl.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/sysctl.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -39,8 +39,11 @@
</span> #include <errno.h>
 #include <sys/types.h>
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#if HAVE_SYS_SYSCTL_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* sys/sysctl.h is deprecated on Linux and behaves unexpectedly */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if HAVE_SYS_SYSCTL_H && !defined __linux__
</span> #include <sys/sysctl.h>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <unistd.h>
</span> #endif
 
 #include "sysctl.h"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -48,13 +51,9 @@
</span> /*
  * Read-only wrapper for sysctlbyname(3). Only works for values of type CTLTYPE_INT and CTLTYPE_QUAD.
  */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef HAVE_SYSCTLBYNAME
</span> int SysctlCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int SysctlCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc UNUSED, Tcl_Obj *CONST objv[] UNUSED)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span> {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef HAVE_SYSCTLBYNAME
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if defined HAVE_SYSCTLBYNAME && !defined __linux__
</span>     const char error_message[] = "sysctl failed: ";
     Tcl_Obj *tcl_result;
     int res;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -92,7 +91,37 @@ int SysctlCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc UNUSED,
</span>     Tcl_SetObjResult(interp, tcl_result);
     return TCL_OK;
 #else
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Tcl_NewStringObj("sysctl not available", -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    char *name;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if (objc != 2) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        Tcl_WrongNumArgs(interp, 1, objv, "name");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return TCL_ERROR;
</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;'>+    name = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if (strcmp(name, "hw.activecpu") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        int res = sysconf(_SC_NPROCESSORS_ONLN);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (res < 1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            Tcl_SetObjResult(interp, Tcl_NewStringObj("sysconf not available", -1));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        Tcl_SetObjResult(interp, Tcl_NewIntObj(res));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else if (strcmp(name, "hw.memsize") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        long pages = sysconf(_SC_PHYS_PAGES);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        long page_size = sysconf(_SC_PAGE_SIZE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        unsigned long long res = pages * page_size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (pages < 0 || page_size < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            Tcl_SetObjResult(interp, Tcl_NewStringObj("sysconf not available", -1));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        Tcl_SetObjResult(interp, Tcl_NewIntObj(res));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        Tcl_SetObjResult(interp, Tcl_NewStringObj("sysctl option not defined", -1));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }     
</span> #endif
 }
</pre><pre style='margin:0'>

</pre>