$OpenBSD: patch-src_libs_zbxsysinfo_openbsd_proc_c,v 1.5 2013/01/24 18:48:15 robert Exp $
--- src/libs/zbxsysinfo/openbsd/proc.c.orig	Sat Dec  8 12:09:15 2012
+++ src/libs/zbxsysinfo/openbsd/proc.c	Wed Jan 23 19:01:33 2013
@@ -39,7 +39,7 @@
 #	endif
 #endif
 
-#ifdef KERN_PROC2
+#if defined(__OpenBSD__)
 #	define ZBX_P_COMM	p_comm
 #	define ZBX_P_PID	p_pid
 #	define ZBX_P_STAT	p_stat
@@ -126,13 +126,12 @@ int     PROC_MEM(const char *cmd, const char *param, u
 
 	struct passwd		*usrinfo;
 
-#ifdef KERN_PROC2
+#if defined(__OpenBSD__)
 	int			mib[6];
-	struct kinfo_proc2	*proc = NULL;
 #else
 	int			mib[4];
-	struct kinfo_proc	*proc = NULL;
 #endif
+	struct kinfo_proc	*proc = NULL;
 
 	char	**argv = NULL, *args = NULL;
 	size_t	argv_alloc = 0, args_alloc = 0;
@@ -194,40 +193,24 @@ int     PROC_MEM(const char *cmd, const char *param, u
 		mib[3] = 0;
 	}
 
-#ifdef KERN_PROC2
-	mib[1] = KERN_PROC2;
-	mib[4] = sizeof(struct kinfo_proc2);
+	mib[1] = KERN_PROC;
+#if defined(__OpenBSD__)
+	mib[4] = sizeof(struct kinfo_proc);
 	mib[5] = 0;
+#endif
 
 	sz = 0;
-	if (0 != sysctl(mib, 6, NULL, &sz, NULL, 0))
+	if (0 != sysctl(mib, (sizeof(mib) / sizeof(mib[0])), NULL, &sz, NULL, 0))
 		return SYSINFO_RET_FAIL;
 
-	proc = (struct kinfo_proc2 *)zbx_malloc(proc, sz);
-	mib[5] = (int)(sz / sizeof(struct kinfo_proc2));
-	if (0 != sysctl(mib, 6, proc, &sz, NULL, 0))
-	{
-		zbx_free(proc);
-		return SYSINFO_RET_FAIL;
-	}
-
-	count = sz / sizeof(struct kinfo_proc2);
-#else
-	mib[1] = KERN_PROC;
-
-	sz = 0;
-	if (0 != sysctl(mib, 4, NULL, &sz, NULL, 0))
-		return SYSINFO_RET_FAIL;
-
 	proc = (struct kinfo_proc *)zbx_malloc(proc, sz);
-	if (0 != sysctl(mib, 4, proc, &sz, NULL, 0))
+	if (0 != sysctl(mib, (sizeof(mib) / sizeof(mib[0])), proc, &sz, NULL, 0))
 	{
 		zbx_free(proc);
 		return SYSINFO_RET_FAIL;
 	}
 
 	count = sz / sizeof(struct kinfo_proc);
-#endif
 
 	for (i = 0; i < count; i++)
 	{
@@ -295,13 +278,12 @@ int	PROC_NUM(const char *cmd, const char *param, unsig
 
 	struct passwd		*usrinfo;
 
-#ifdef KERN_PROC2
+#if defined(__OpenBSD__)
 	int			mib[6];
-	struct kinfo_proc2	*proc = NULL;
 #else
 	int			mib[4];
-	struct kinfo_proc	*proc = NULL;
 #endif
+	struct kinfo_proc	*proc = NULL;
 
 	char	**argv = NULL, *args = NULL;
 	size_t	argv_alloc = 0, args_alloc = 0;
@@ -361,40 +343,25 @@ int	PROC_NUM(const char *cmd, const char *param, unsig
 		mib[3] = 0;
 	}
 
-#ifdef KERN_PROC2
-	mib[1] = KERN_PROC2;
-	mib[4] = sizeof(struct kinfo_proc2);
+	mib[1] = KERN_PROC;
+#if defined(__OpenBSD__)
+	mib[4] = sizeof(struct kinfo_proc);
 	mib[5] = 0;
+#endif
 
 	sz = 0;
-	if (0 != sysctl(mib, 6, NULL, &sz, NULL, 0))
+	if (0 != sysctl(mib, (sizeof(mib) / sizeof(mib[0])), NULL, &sz, NULL, 0))
 		return SYSINFO_RET_FAIL;
 
-	proc = (struct kinfo_proc2 *)zbx_malloc(proc, sz);
-	mib[5] = (int)(sz / sizeof(struct kinfo_proc2));
-	if (0 != sysctl(mib, 6, proc, &sz, NULL, 0))
-	{
-		zbx_free(proc);
-		return SYSINFO_RET_FAIL;
-	}
-
-	count = sz / sizeof(struct kinfo_proc2);
-#else
-	mib[1] = KERN_PROC;
-
-	sz = 0;
-	if (0 != sysctl(mib, 4, NULL, &sz, NULL, 0))
-		return SYSINFO_RET_FAIL;
-
 	proc = (struct kinfo_proc *)zbx_malloc(proc, sz);
-	if (0 != sysctl(mib, 4, proc, &sz, NULL, 0))
+	mib[5] = (int)(sz / sizeof(struct kinfo_proc));
+	if (0 != sysctl(mib, (sizeof(mib) / sizeof(mib[0])), proc, &sz, NULL, 0))
 	{
 		zbx_free(proc);
 		return SYSINFO_RET_FAIL;
 	}
 
 	count = sz / sizeof(struct kinfo_proc);
-#endif
 
 	for (i = 0; i < count; i++)
 	{
