SerCeMan / jnr-fuse

FUSE implementation in Java using Java Native Runtime (JNR)
MIT License
365 stars 87 forks source link

Allow mounting to non-existing mount points #73

Closed overheadhunter closed 5 years ago

overheadhunter commented 5 years ago

During an attempt to mount, jnr-fuse checks whether the mount point is an existing directory. If it is not, an exception is thrown:

ru.serce.jnrfuse.FuseException: Mount point should be directory
    at ru.serce.jnrfuse.AbstractFuseFS.mount(AbstractFuseFS.java:263)
    ... 15 common frames omitted

There is already an exception for winfsp:

https://github.com/SerCeMan/jnr-fuse/blob/4b97249333ef360335ed7fe2e7cf46a37f34cfcd/src/main/java/ru/serce/jnrfuse/AbstractFuseFS.java#L254-L259

There are, however, further cases in which it is desirable to mount to a non-existing directory. According to this commit to sshfs FUSE has certain workarounds:

In order to allow non-privileged users to mount FUSE volumes under /Volumes FUSE will create non-existent mount points automatically.

Therefore I kindly request to either disable this check completely (let the software depending on jnr-fuse take care of it) or add an overloaded method, e.g. public void mount(Path mountPoint, boolean blocking, boolean debug, boolean requireMountPointToExist, String[] fuseOpts).

Thank you ❤️

SerCeMan commented 5 years ago

Hey, @overheadhunter!

Thank you for your patience. Looking at osxfuse, removing the check seems reasonable to me. That way, jnr-fuse will more closely resemble fuse.

Would you be able to open a PR? If not, I'll try to take a look at this sometime during the next week.