ports/x11/dbus/patches/patch-dbus_dbus-sysdeps-util-unix_c

96 lines
2 KiB
Text
Raw Normal View History

2023-08-16 22:26:55 +00:00
XXX push upstream
Index: dbus/dbus-sysdeps-util-unix.c
--- dbus/dbus-sysdeps-util-unix.c.orig
+++ dbus/dbus-sysdeps-util-unix.c
@@ -61,6 +61,10 @@
#include <systemd/sd-daemon.h>
#endif
+#ifdef __OpenBSD__
+#include <sys/sysctl.h>
+#endif
+
#ifndef O_BINARY
#define O_BINARY 0
#endif
@@ -1158,7 +1162,13 @@ _dbus_command_for_pid (unsigned long pid,
/* This is all Linux-specific for now */
DBusString path;
DBusString cmdline;
+#ifndef __OpenBSD__
int fd;
+#else
+ char **argv, **args;
+ int mib[4];
+ size_t len;
+#endif
if (!_dbus_string_init (&path))
{
@@ -1173,6 +1183,7 @@ _dbus_command_for_pid (unsigned long pid,
return FALSE;
}
+#ifndef __OpenBSD__
if (!_dbus_string_append_printf (&path, "/proc/%ld/cmdline", pid))
goto oom;
@@ -1200,6 +1211,37 @@ _dbus_command_for_pid (unsigned long pid,
if (!_dbus_close (fd, error))
goto fail;
+#else /* OpenBSD */
+ args = NULL;
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC_ARGS;
+ mib[2] = pid;
+ mib[3] = KERN_PROC_ARGV;
+
+ if (sysctl (mib, 4, NULL, &len, NULL, 0) == -1)
+ goto fail;
+
+ args = malloc (len);
+ if (args == NULL)
+ goto fail;
+
+ if (sysctl (mib, 4, args, &len, NULL, 0) == -1)
+ goto fail;
+
+ for (argv = args; *argv != NULL; argv++) {
+ if (argv != args)
+ {
+ if (!_dbus_string_append_printf (&cmdline, " "))
+ goto fail;
+ }
+ if (!_dbus_string_append_printf (&cmdline, "%s", *argv))
+ goto fail;
+ }
+
+ if (_dbus_string_get_length (&cmdline) > max_len)
+ _dbus_string_set_length (&cmdline, max_len);
+
+#endif
string_squash_nonprintable (&cmdline);
@@ -1208,12 +1250,18 @@ _dbus_command_for_pid (unsigned long pid,
_dbus_string_free (&cmdline);
_dbus_string_free (&path);
+#ifdef __OpenBSD__
+ free (args);
+#endif
return TRUE;
oom:
_DBUS_SET_OOM (error);
fail:
_dbus_string_free (&cmdline);
_dbus_string_free (&path);
+#ifdef __OpenBSD__
+ free (args);
+#endif
return FALSE;
}