$OpenBSD: patch-src_util_c,v 1.8 2012/07/05 07:18:59 ajacoutot Exp $

We don't use /proc on OpenBSD.

--- src/util.c.orig	Thu Jun 28 17:28:15 2012
+++ src/util.c	Thu Jul  5 09:01:58 2012
@@ -32,11 +32,20 @@
 
 #include <polkit/polkit.h>
 
+#ifdef __OpenBSD__
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#include <kvm.h>
+kvm_t *kd;
+#endif
+
 #include "util.h"
 
 static gchar *
 get_cmdline_of_pid (GPid pid)
 {
+#ifndef __OpenBSD__
   gchar *ret;
   gchar *filename;
   gchar *contents;
@@ -70,7 +79,30 @@ get_cmdline_of_pid (GPid pid)
  out:
   g_free (filename);
   g_free (contents);
+#else /* OpenBSD */
+  gchar *ret;
+  int nproc;
+  struct kinfo_proc *kp;
+  char **pargv;
 
+  if ((kd = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, NULL)) == NULL)
+    goto out;
+
+  if ((kp = kvm_getprocs(kd, KERN_PROC_PID, 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;
+
+  ret = g_path_get_basename(pargv[0]);
+
+out:
+  kvm_close(kd);
+#endif
+
   return ret;
 }
 
@@ -204,12 +236,14 @@ get_caller_loginuid (GDBusMethodInvocation *context, g
 static void
 setup_loginuid (gpointer data)
 {
+#ifndef __OpenBSD
         const char *id = data;
         int fd;
 
         fd = open ("/proc/self/loginuid", O_WRONLY);
         write (fd, id, strlen (id));
         close (fd);
+#endif
 }
 
 gboolean
