diff options
Diffstat (limited to 'sbin/mount/mount.c')
-rw-r--r-- | sbin/mount/mount.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/sbin/mount/mount.c b/sbin/mount/mount.c index eb32616..5f49893 100644 --- a/sbin/mount/mount.c +++ b/sbin/mount/mount.c @@ -391,14 +391,21 @@ main(int argc, char *argv[]) int ismounted(struct fstab *fs, struct statfs *mntbuf, int mntsize) { + char realfsfile[PATH_MAX]; int i; if (fs->fs_file[0] == '/' && fs->fs_file[1] == '\0') /* the root file system can always be remounted */ return (0); + /* The user may have specified a symlink in fstab, resolve the path */ + if (realpath(fs->fs_file, realfsfile) == NULL) { + /* Cannot resolve the path, use original one */ + strlcpy(realfsfile, fs->fs_file, sizeof(realfsfile)); + } + for (i = mntsize - 1; i >= 0; --i) - if (strcmp(fs->fs_file, mntbuf[i].f_mntonname) == 0 && + if (strcmp(realfsfile, mntbuf[i].f_mntonname) == 0 && (!isremountable(fs->fs_vfstype) || strcmp(fs->fs_spec, mntbuf[i].f_mntfromname) == 0)) return (1); |