diff options
Diffstat (limited to 'filesystems/fusefs-libs/files/patch-lib_mount__bsd.c')
-rw-r--r-- | filesystems/fusefs-libs/files/patch-lib_mount__bsd.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/filesystems/fusefs-libs/files/patch-lib_mount__bsd.c b/filesystems/fusefs-libs/files/patch-lib_mount__bsd.c new file mode 100644 index 000000000000..765ec8fb8159 --- /dev/null +++ b/filesystems/fusefs-libs/files/patch-lib_mount__bsd.c @@ -0,0 +1,77 @@ +--- lib/mount_bsd.c.orig 2015-05-22 09:24:02 UTC ++++ lib/mount_bsd.c +@@ -10,6 +10,8 @@ + #include "fuse_misc.h" + #include "fuse_opt.h" + ++#include <sys/param.h> ++#include <sys/mount.h> + #include <sys/stat.h> + #include <sys/wait.h> + #include <sys/sysctl.h> +@@ -78,6 +80,7 @@ static const struct fuse_opt fuse_mount_ + FUSE_DUAL_OPT_KEY("ro", KEY_KERN), + FUSE_DUAL_OPT_KEY("rw", KEY_KERN), + FUSE_DUAL_OPT_KEY("auto", KEY_KERN), ++ FUSE_DUAL_OPT_KEY("automounted", KEY_KERN), + /* options supported under both Linux and FBSD */ + FUSE_DUAL_OPT_KEY("allow_other", KEY_KERN), + FUSE_DUAL_OPT_KEY("default_permissions",KEY_KERN), +@@ -192,56 +195,12 @@ void fuse_unmount_compat22(const char *m + free(umount_cmd); + } + +-static void do_unmount(char *dev, int fd) +-{ +- char device_path[SPECNAMELEN + 12]; +- const char *argv[4]; +- const char umount_cmd[] = "/sbin/umount"; +- pid_t pid; +- +- snprintf(device_path, SPECNAMELEN + 12, _PATH_DEV "%s", dev); +- +- argv[0] = umount_cmd; +- argv[1] = "-f"; +- argv[2] = device_path; +- argv[3] = NULL; +- +- pid = fork(); +- +- if (pid == -1) +- return; +- +- if (pid == 0) { +- close(fd); +- execvp(umount_cmd, (char **)argv); +- exit(1); +- } +- +- waitpid(pid, NULL, 0); +-} +- + void fuse_kern_unmount(const char *mountpoint, int fd) + { + char *ep, dev[128]; + struct stat sbuf; + +- (void)mountpoint; +- +- if (fstat(fd, &sbuf) == -1) +- goto out; +- +- devname_r(sbuf.st_rdev, S_IFCHR, dev, 128); +- +- if (strncmp(dev, "fuse", 4)) +- goto out; +- +- strtol(dev + 4, &ep, 10); +- if (*ep != '\0') +- goto out; +- +- do_unmount(dev, fd); +- +-out: ++ unmount(mountpoint, MNT_FORCE); + close(fd); + } + |