$OpenBSD: patch-src_libtracker-common_tracker-dbus_c,v 1.3 2011/07/06 14:01:51 jasper Exp $

Don't use /proc for getting the process name.

--- src/libtracker-common/tracker-dbus.c.orig	Wed Apr 27 10:42:28 2011
+++ src/libtracker-common/tracker-dbus.c	Wed Jul  6 15:09:37 2011
@@ -23,6 +23,14 @@
 
 #include <dbus/dbus-glib-bindings.h>
 
+#ifdef __OpenBSD__
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#include <stdio.h>
+#include <kvm.h>
+#endif
+
 #include "tracker-dbus.h"
 #include "tracker-log.h"
 
@@ -199,13 +207,15 @@ client_data_new (gchar *sender)
 	}
 
 	if (get_binary) {
-		gchar *filename;
-		gchar *pid_str;
+#ifndef __OpenBSD__
 		gchar *contents = NULL;
-		GError *error = NULL;
 		gchar **strv;
+		gchar *filename;
+		GError *error = NULL;
+		gchar *pid_str;
 
 		pid_str = g_strdup_printf ("%ld", cd->pid);
+
 		filename = g_build_filename (G_DIR_SEPARATOR_S,
 		                             "proc",
 		                             pid_str,
@@ -231,6 +241,29 @@ client_data_new (gchar *sender)
 
 		g_strfreev (strv);
 		g_free (contents);
+#else
+		int nproc;
+		struct kinfo_proc *kp;
+		kvm_t *kd;
+		char **pargv;
+
+		if ((kd = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, NULL)) == NULL)
+			return cd;
+
+		if ((kp = kvm_getprocs(kd, KERN_PROC_PID, cd->pid, sizeof(*kp), &nproc)) == NULL)
+			goto out;
+
+		if ((kp->p_flag & P_SYSTEM) != 0) 
+			goto out;
+
+		if ((pargv = kvm_getargv(kd, kp, 0)) == NULL)
+			goto out;
+
+		cd->binary = g_path_get_basename(pargv[0]);
+
+out:
+		kvm_close(kd);
+#endif
 	}
 
 	return cd;
