Fix isMounted to resolve symlinks and normalize paths

The target path may contain symlinks (e.g. /media/Storage/ ->
/mnt/merged/raid/Storage/) but /proc/mounts records the resolved real
path. Use filepath.EvalSymlinks and filepath.Clean so the comparison
matches regardless of symlinks or trailing slashes.
This commit is contained in:
James Coleman 2026-03-30 22:43:53 -05:00
parent d5a3653915
commit ac0ea56f98

10
main.go
View File

@ -6,6 +6,7 @@ import (
"log"
"os"
"os/exec"
"path/filepath"
"regexp"
"strings"
"sync"
@ -34,7 +35,14 @@ type App struct {
var app *App
// isMounted checks /proc/mounts for a target mountpoint to determine if it is mounted.
// Symlinks in the target path are resolved so the comparison matches the real
// paths recorded by the kernel.
func isMounted(target string) bool {
cleanTarget := filepath.Clean(target)
if resolved, err := filepath.EvalSymlinks(cleanTarget); err == nil {
cleanTarget = resolved
}
file, err := os.Open("/proc/mounts")
if err != nil {
log.Fatal(err)
@ -47,7 +55,7 @@ func isMounted(target string) bool {
if len(args) < 3 {
continue
}
if args[1] == target {
if filepath.Clean(args[1]) == cleanTarget {
return true
}
}