[Mono-dev] Can anyone review this fix for FreeBSD build?

Atsushi Eno atsushi at ximian.com
Sun Nov 9 09:34:17 EST 2008


Atsushi Eno


Index: configure.in
===================================================================
--- configure.in	(revision 118305)
+++ configure.in	(working copy)
@@ -2054,6 +2054,37 @@
 	unset fpu
 fi

+case $host_os in
+darwin* | *bsd* )
+	AC_MSG_CHECKING(if sysctl.h defines kinfo_proc completely)
+	AC_TRY_COMPILE([
+		#include <sys/types.h>
+		#include <sys/sysctl.h>
+	], [
+		struct kinfo_proc kp;
+	],
+		AC_MSG_RESULT(yes)
+		AC_DEFINE(SYSCTL_H_DEFINES_KINFO_PROC, 1, [sysctl.h has complete
definition of struct kinfo_proc])
+	,
+		AC_MSG_RESULT(no)
+
+		AC_MSG_CHECKING(if struct kinfo_proc has member kp_proc)
+		AC_TRY_COMPILE([
+			#include <sys/types.h>
+			#include <sys/user.h>
+		], [
+			struct kinfo_proc kp;
+			kp.kp_proc;
+		],
+			AC_MSG_RESULT(yes)
+		,
+			AC_MSG_RESULT(no)
+			AC_DEFINE(KINFO_PROC_HAS_NO_KP_PROC, 1, [struct kinfo_proc has no
member kp_proc])
+		)
+	)
+	;;
+esac
+
 if test ${TARGET} = unknown; then
 	CPPFLAGS="$CPPFLAGS -DNO_PORT"
 	AC_MSG_WARN("mono has not been ported to $host: some things may not
work.")
Index: mono/utils/mono-proclib.c
===================================================================
--- mono/utils/mono-proclib.c	(revision 118305)
+++ mono/utils/mono-proclib.c	(working copy)
@@ -17,6 +17,9 @@
 #include <sys/types.h>
 #include <sys/sysctl.h>
 #include <sys/proc.h>
+# if !defined SYSCTL_H_DEFINES_KINFO_PROC
+#include <sys/user.h>
+# endif
 #define USE_SYSCTL 1
 #endif

@@ -54,8 +57,13 @@
 	}
 	res = data_len/sizeof (struct kinfo_proc);
 	buf = g_realloc (buf, res * sizeof (void*));
+# if !defined KINFO_PROC_HAS_NO_KP_PROC
 	for (i = 0; i < res; ++i)
 		buf [i] = GINT_TO_POINTER (processes [i].kp_proc.p_pid);
+# else
+	for (i = 0; i < res; ++i)
+		buf [i] = GINT_TO_POINTER (processes [i].ki_pid);
+# endif
 	free (processes);
 	if (size)
 		*size = res;
@@ -162,7 +170,11 @@
 	if (res < 0 || data_len != sizeof (struct kinfo_proc)) {
 		return buf;
 	}
+# if !defined KINFO_PROC_HAS_NO_KP_PROC
 	strncpy (buf, processi.kp_proc.p_comm, len - 1);
+# else
+	strncpy (buf, processi.ki_comm, len - 1);
+# endif
 	return buf;
 #else
 	char fname [128];


More information about the Mono-devel-list mailing list