From 50f5255a44870863e4a9b6bcb7a62b5319fefd62 Mon Sep 17 00:00:00 2001 From: Nikolaus Rath Date: Sun, 2 Oct 2016 10:26:40 -0700 Subject: Introduce separate mount/umount functions for low-level API. --- lib/fuse_lowlevel.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'lib/fuse_lowlevel.c') diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c index 8b08f3a..ad10175 100755 --- a/lib/fuse_lowlevel.c +++ b/lib/fuse_lowlevel.c @@ -2938,6 +2938,42 @@ out: return NULL; } +struct fuse_chan *fuse_session_mount(const char *mountpoint, + struct fuse_args *args) +{ + struct fuse_chan *ch; + int fd; + + /* + * Make sure file descriptors 0, 1 and 2 are open, otherwise chaos + * would ensue. + */ + do { + fd = open("/dev/null", O_RDWR); + if (fd > 2) + close(fd); + } while (fd >= 0 && fd <= 2); + + fd = fuse_kern_mount(mountpoint, args); + if (fd == -1) + return NULL; + + ch = fuse_chan_new(fd); + if (!ch) + fuse_kern_unmount(mountpoint, fd); + + return ch; +} + +void fuse_session_unmount(const char *mountpoint, struct fuse_chan *ch) +{ + if (mountpoint) { + int fd = ch ? fuse_chan_clearfd(ch) : -1; + fuse_kern_unmount(mountpoint, fd); + fuse_chan_put(ch); + } +} + #ifdef linux int fuse_req_getgroups(fuse_req_t req, int size, gid_t list[]) { -- cgit v1.2.3