openbsd-ports/devel/glib2/patches/patch-gio_gunixmount_c
2019-02-10 14:42:38 +00:00

83 lines
2.3 KiB
Plaintext

$OpenBSD: patch-gio_gunixmount_c,v 1.18 2019/02/10 14:42:38 ajacoutot Exp $
Index: gio/gunixmount.c
--- gio/gunixmount.c.orig
+++ gio/gunixmount.c
@@ -27,6 +27,10 @@
#include <sys/wait.h>
#include <unistd.h>
+#ifdef __OpenBSD__
+#include <glib/gstdio.h> /* g_access */
+#endif
+
#include <glib.h>
#include "gsubprocess.h"
#include "gioenums.h"
@@ -330,12 +334,35 @@ g_unix_mount_unmount (GMount *mount,
gpointer user_data)
{
GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
+
+#ifdef __OpenBSD__
+ char *mntbase, *pkexec;
+ char *argv[] = {"umount", NULL, NULL, NULL};
+ mntbase = g_path_get_dirname (unix_mount->mount_path);
+ if ((getuid() != 0) &&
+ ((pkexec = g_find_program_in_path ("pkexec")) != NULL) &&
+ (g_access (mntbase, X_OK) != -1))
+ {
+ argv[0] = pkexec;
+ argv[1] = "/sbin/umount";
+ argv[2] = unix_mount->mount_path;
+ }
+ else
+ {
+ if (unix_mount->mount_path != NULL)
+ argv[1] = unix_mount->mount_path;
+ else
+ argv[1] = unix_mount->device_path;
+ }
+ g_free (mntbase);
+#else
char *argv[] = {"umount", NULL, NULL};
if (unix_mount->mount_path != NULL)
argv[1] = unix_mount->mount_path;
else
argv[1] = unix_mount->device_path;
+#endif
eject_unmount_do (mount, cancellable, callback, user_data, argv);
}
@@ -356,12 +383,29 @@ g_unix_mount_eject (GMount *mount,
gpointer user_data)
{
GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
+#ifdef __OpenBSD__
+ char *mntbase, *pkexec;
+ char *argv[] = {"eject", NULL, NULL, NULL};
+ mntbase = g_path_get_dirname (unix_mount->mount_path);
+ /* eject(1) on OpenBSD does not try to unmount first and requires a device */
+ g_unix_mount_unmount (mount, flags, cancellable, NULL, user_data);
+ if ((getuid() != 0) &&
+ ((pkexec = g_find_program_in_path ("pkexec")) != NULL) &&
+ (g_access (mntbase, X_OK) != -1))
+ {
+ argv[0] = pkexec;
+ argv[1] = "/bin/eject";
+ argv[2] = unix_mount->device_path;
+ }
+ g_free (mntbase);
+#else
char *argv[] = {"eject", NULL, NULL};
if (unix_mount->mount_path != NULL)
argv[1] = unix_mount->mount_path;
else
argv[1] = unix_mount->device_path;
+#endif
eject_unmount_do (mount, cancellable, callback, user_data, argv);
}