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];
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to