Implement get_processname_from_proc() for OpenBSD

Index: io-layer/processes.c
===================================================================
--- io-layer/processes.c        (revision 154749)
+++ io-layer/processes.c        (working copy)
@@ -2153,10 +2153,12 @@
 
 static gchar *get_process_name_from_proc (pid_t pid)
 {
-       gchar *filename = NULL;
        gchar *ret = NULL;
+#if !defined(__OpenBSD__)
        gchar buf[256];
+       gchar *filename = NULL;
        FILE *fp;
+#endif
 
 #if defined(PLATFORM_SOLARIS)
        filename = g_strdup_printf ("/proc/%d/psinfo", pid);
@@ -2172,6 +2174,22 @@
                fclose (fp);
        }
        g_free (filename);
+#elif defined(__OpenBSD__)
+       int res;
+       int mib [6];
+       struct kinfo_proc2 result;
+       size_t data_len = sizeof (struct kinfo_proc2);
+
+       mib [0] = CTL_KERN;
+       mib [1] = KERN_PROC2;
+       mib [2] = KERN_PROC_PID;
+       mib [3] = pid;
+       mib [4] = sizeof(struct kinfo_proc2);
+       mib [5] = 400; /* XXX */
+
+       res = sysctl (mib, 6, &result, &data_len, NULL, 0);
+       if (res == 0)
+               ret = g_strdup (result.p_comm);
 #elif defined(PLATFORM_MACOSX)
        memset (buf, '\0', sizeof(buf));
        proc_name (pid, buf, sizeof(buf));
@@ -2242,7 +2260,9 @@
        gchar *procname_ext = NULL;
        glong len;
        gsize bytes;
+#if !defined(__OpenBSD__)
        FILE *fp;
+#endif
        GSList *mods = NULL;
        WapiProcModule *found_module;
        guint32 count;
@@ -2285,6 +2305,14 @@
 #ifdef PLATFORM_MACOSX
        {
                mods = load_modules ();
+#elif defined(__OpenBSD__)
+       {
+               if (module == NULL && base == TRUE) {
+                       procname_ext = get_process_name_from_proc (pid);
+               } else {
+                       g_free (proc_name);
+                       return(0);
+               }
 #else
        if ((fp = open_process_map (pid, "r")) == NULL) {
                if (errno == EACCES && module == NULL && base == TRUE) {
_______________________________________________
Mono-devel-list mailing list
[email protected]
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to