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