83 lines
2.3 KiB
Plaintext
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);
|
|
}
|