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.
This commit is contained in:
Landry Breuil
2012-04-23 10:47:49 +02:00
parent cb00cbcd3f
commit 0984dd8aa3

View File

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