[Xfce4-commits] <xfce4-taskmanager:master> OpemBSD removed KERN_PROC2/KINFO_PROC2 some months ago, do the #ifdef dance

Landry Breuil noreply at xfce.org
Mon Apr 23 10:52:01 CEST 2012


Updating branch refs/heads/master
         to 0984dd8aa312507354db838054a3af39730b95dd (commit)
       from cb00cbcd3faef7670adf2ddf57b8c7cc18caf508 (commit)

commit 0984dd8aa312507354db838054a3af39730b95dd
Author: Landry Breuil <landry at xfce.org>
Date:   Mon Apr 23 10:47:49 2012 +0200

    OpemBSD removed KERN_PROC2/KINFO_PROC2 some months ago, do the #ifdef dance
    
    Effectively merges http://www.openbsd.org/cgi-bin/cvsweb/ports/x11/xfce4/xfce4-taskmanager/patches/patch-src_task-manager-bsd_c?rev=1.1
    Keep the old code for NetBSD/DragonflyBSD.

 src/task-manager-bsd.c |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/src/task-manager-bsd.c b/src/task-manager-bsd.c
index 30e3301..2bdfd70 100644
--- a/src/task-manager-bsd.c
+++ b/src/task-manager-bsd.c
@@ -41,7 +41,11 @@ gboolean get_task_list (GArray *task_list)
 {
 	int mib[6];
 	size_t size;
+#ifdef __OpenBSD__
+	struct kinfo_proc *kp;
+#else
 	struct kinfo_proc2 *kp;
+#endif
 	Task t;
 	struct passwd *passwdp;
 	char **args, **ptr;
@@ -49,23 +53,48 @@ gboolean get_task_list (GArray *task_list)
 	int nproc, i;
 
 	mib[0] = CTL_KERN;
+#ifdef __OpenBSD__
+	mib[1] = KERN_PROC;
+#else
 	mib[1] = KERN_PROC2;
+#endif
 	mib[2] = KERN_PROC_ALL;
 	mib[3] = 0;
+#ifdef __OpenBSD__
+	mib[4] = sizeof(struct kinfo_proc);
+#else
 	mib[4] = sizeof(struct kinfo_proc2);
+#endif
 	mib[5] = 0;
 	if (sysctl(mib, 6, NULL, &size, NULL, 0) < 0)
+#ifdef __OpenBSD__
+		errx(1, "could not get kern.proc size");
+#else
 		errx(1, "could not get kern.proc2 size");
+#endif
 	size = 5 * size / 4;		/* extra slop */
 	if ((kp = malloc(size)) == NULL)
 		errx(1,"failed to allocate memory for proc structures");
+#ifdef __OpenBSD__
+	mib[5] = (int)(size / sizeof(struct kinfo_proc));
+#else
 	mib[5] = (int)(size / sizeof(struct kinfo_proc2));
+#endif
 	if (sysctl(mib, 6, kp, &size, NULL, 0) < 0)
+#ifdef __OpenBSD__
+		errx(1, "could not read kern.proc");
+	nproc = (int)(size / sizeof(struct kinfo_proc));
+#else
 		errx(1, "could not read kern.proc2");
 	nproc = (int)(size / sizeof(struct kinfo_proc2));
+#endif
 	for (i=0 ; i < nproc ; i++)
 	{
+#ifdef __OpenBSD__
+		struct kinfo_proc p = kp[i];
+#else
 		struct kinfo_proc2 p = kp[i];
+#endif
 		t.pid = p.p_pid;
 		t.ppid = p.p_ppid;
 		t.uid = p.p_uid;
@@ -117,17 +146,34 @@ gboolean
 pid_is_sleeping (guint pid)
 {
 	int mib[6];
+#ifdef __OpenBSD__
+	struct kinfo_proc kp;
+	size_t size = sizeof(struct kinfo_proc);
+#else
 	struct kinfo_proc2 kp;
 	size_t size = sizeof(struct kinfo_proc2);
+#endif
 
 	mib[0] = CTL_KERN;
+#ifdef __OpenBSD__
+	mib[1] = KERN_PROC;
+#else
 	mib[1] = KERN_PROC2;
+#endif
 	mib[2] = KERN_PROC_PID;
 	mib[3] = pid;
+#ifdef __OpenBSD__
+	mib[4] = sizeof(struct kinfo_proc);
+#else
 	mib[4] = sizeof(struct kinfo_proc2);
+#endif
 	mib[5] = 1;
 	if (sysctl(mib, 6, &kp, &size, NULL, 0) < 0)
+#ifdef __OpenBSD__
+		errx(1, "could not read kern.proc for pid %d", pid);
+#else
 		errx(1, "could not read kern.proc2 for pid %d", pid);
+#endif
 	return (kp.p_stat == SSLEEP ? TRUE : FALSE);
 }
 


More information about the Xfce4-commits mailing list