diff options
-rw-r--r-- | mount.go | 24 |
1 files changed, 23 insertions, 1 deletions
@@ -1,6 +1,7 @@ package main import ( + "bytes" "encoding/json" "fmt" "log" @@ -362,7 +363,9 @@ func initGoFuse(fs pathfs.FileSystem, args *argContainer) *fuse.Server { tlog.Info.Printf(tlog.ColorYellow + "THE OPTION \"-forcedecode\" IS ACTIVE. GOCRYPTFS WILL RETURN CORRUPT DATA!" + tlog.ColorReset) } - if args.nonempty { + // fusermount from libfuse 3.x removed the "nonempty" option and exits + // with an error if it sees it. Only add it to the options on libfuse 2.x. + if args.nonempty && haveFusermount2() { mOpts.Options = append(mOpts.Options, "nonempty") } // Set values shown in "df -T" and friends @@ -436,6 +439,25 @@ func initGoFuse(fs pathfs.FileSystem, args *argContainer) *fuse.Server { return srv } +// haveFusermount2 finds out if the "fusermount" binary is from libfuse 2.x. +func haveFusermount2() bool { + cmd := exec.Command("/bin/fusermount", "-V") + var out bytes.Buffer + cmd.Stdout = &out + err := cmd.Run() + if err != nil { + tlog.Warn.Printf("warning: haveFusermount2: %v", err) + return false + } + // libfuse 2: fusermount version: 2.9.9 + // libfuse 3: fusermount3 version: 3.9.0 + v := out.String() + if strings.HasPrefix(v, "fusermount version") { + return true + } + return false +} + func handleSigint(srv *fuse.Server, mountpoint string) { ch := make(chan os.Signal, 1) signal.Notify(ch, os.Interrupt) |