get process informations. Remove the mkbundle.cs patch and replace it with one that uses configure.in so the libgc dependency ends up in the pkg-config file. Move disabled features to configure.in from our Makefile
126 lines
3.2 KiB
Plaintext
126 lines
3.2 KiB
Plaintext
$OpenBSD: patch-mono_utils_mono-proclib_c,v 1.6 2010/04/08 12:12:33 robert Exp $
|
|
--- mono/utils/mono-proclib.c.orig Sat Oct 31 05:22:03 2009
|
|
+++ mono/utils/mono-proclib.c Thu Apr 8 11:55:46 2010
|
|
@@ -13,6 +13,9 @@
|
|
#endif
|
|
|
|
/* FIXME: bsds untested */
|
|
+#if defined(__FreeBSD__) || defined(__OpenBSD__)
|
|
+#include <sys/param.h>
|
|
+#endif
|
|
#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
|
|
#include <sys/types.h>
|
|
#include <sys/sysctl.h>
|
|
@@ -21,8 +24,13 @@
|
|
#include <sys/user.h>
|
|
#endif
|
|
#ifdef HAVE_STRUCT_KINFO_PROC_KP_PROC
|
|
-#define kinfo_pid_member kp_proc.p_pid
|
|
-#define kinfo_name_member kp_proc.p_comm
|
|
+# ifdef KERN_PROC2
|
|
+# define kinfo_pid_member p_pid
|
|
+# define kinfo_name_member p_comm
|
|
+# else
|
|
+# define kinfo_pid_member kp_proc.p_pid
|
|
+# define kinfo_name_member kp_proc.p_comm
|
|
+# endif
|
|
#else
|
|
#define kinfo_pid_member ki_pid
|
|
#define kinfo_name_member ki_comm
|
|
@@ -41,10 +49,16 @@ gpointer*
|
|
mono_process_list (int *size)
|
|
{
|
|
#if USE_SYSCTL
|
|
- int mib [4];
|
|
int res, i;
|
|
+#ifdef KERN_PROC2
|
|
+ int mib [6];
|
|
+ size_t data_len = sizeof (struct kinfo_proc2) * 400;
|
|
+ struct kinfo_proc2 *processes = malloc (data_len);
|
|
+#else
|
|
+ int mib [4];
|
|
size_t data_len = sizeof (struct kinfo_proc) * 400;
|
|
struct kinfo_proc *processes = malloc (data_len);
|
|
+#endif
|
|
void **buf = NULL;
|
|
|
|
if (size)
|
|
@@ -52,17 +66,33 @@ mono_process_list (int *size)
|
|
if (!processes)
|
|
return NULL;
|
|
|
|
+#ifdef KERN_PROC2
|
|
mib [0] = CTL_KERN;
|
|
+ mib [1] = KERN_PROC2;
|
|
+ mib [2] = KERN_PROC_ALL;
|
|
+ mib [3] = 0;
|
|
+ mib [4] = sizeof(struct kinfo_proc2);
|
|
+ mib [5] = 400; /* XXX */
|
|
+
|
|
+ res = sysctl (mib, 6, processes, &data_len, NULL, 0);
|
|
+#else
|
|
+ mib [0] = CTL_KERN;
|
|
mib [1] = KERN_PROC;
|
|
mib [2] = KERN_PROC_ALL;
|
|
mib [3] = 0;
|
|
|
|
res = sysctl (mib, 4, processes, &data_len, NULL, 0);
|
|
+#endif /* KERN_PROC2 */
|
|
+
|
|
if (res < 0) {
|
|
free (processes);
|
|
return NULL;
|
|
}
|
|
+#ifdef KERN_PROC2
|
|
+ res = data_len/sizeof (struct kinfo_proc2);
|
|
+#else
|
|
res = data_len/sizeof (struct kinfo_proc);
|
|
+#endif /* KERN_PROC2 */
|
|
buf = g_realloc (buf, res * sizeof (void*));
|
|
for (i = 0; i < res; ++i)
|
|
buf [i] = GINT_TO_POINTER (processes [i].kinfo_pid_member);
|
|
@@ -155,14 +185,34 @@ char*
|
|
mono_process_get_name (gpointer pid, char *buf, int len)
|
|
{
|
|
#if USE_SYSCTL
|
|
- int mib [4];
|
|
int res;
|
|
+#ifdef KERN_PROC2
|
|
+ int mib [6];
|
|
+ size_t data_len = sizeof (struct kinfo_proc2);
|
|
+ struct kinfo_proc2 processi;
|
|
+#else
|
|
+ int mib [4];
|
|
size_t data_len = sizeof (struct kinfo_proc);
|
|
struct kinfo_proc processi;
|
|
+#endif /* KERN_PROC2 */
|
|
|
|
memset (buf, 0, len);
|
|
|
|
+#ifdef KERN_PROC2
|
|
mib [0] = CTL_KERN;
|
|
+ mib [1] = KERN_PROC2;
|
|
+ mib [2] = KERN_PROC_PID;
|
|
+ mib [3] = GPOINTER_TO_UINT (pid);
|
|
+ mib [4] = sizeof(struct kinfo_proc2);
|
|
+ mib [5] = 400; /* XXX */
|
|
+
|
|
+ res = sysctl (mib, 6, &processi, &data_len, NULL, 0);
|
|
+
|
|
+ if (res < 0 || data_len != sizeof (struct kinfo_proc2)) {
|
|
+ return buf;
|
|
+ }
|
|
+#else
|
|
+ mib [0] = CTL_KERN;
|
|
mib [1] = KERN_PROC;
|
|
mib [2] = KERN_PROC_PID;
|
|
mib [3] = GPOINTER_TO_UINT (pid);
|
|
@@ -171,6 +221,7 @@ mono_process_get_name (gpointer pid, char *buf, int le
|
|
if (res < 0 || data_len != sizeof (struct kinfo_proc)) {
|
|
return buf;
|
|
}
|
|
+#endif /* KERN_PROC2 */
|
|
strncpy (buf, processi.kinfo_name_member, len - 1);
|
|
return buf;
|
|
#else
|