Changes by: cha0smaster
Update of /cvsroot/linux-ntfs/ntfsprogs/libntfs
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10367/libntfs
Modified Files:
volume.c
Log Message:
libntfs/volume.c: fix ntfs_check_if_mounted to cope with dirrerent names of same file.
ntfsprogs/ntfsmount.c: don't put relative path to /etc/mtab.
Index: volume.c
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfsprogs/libntfs/volume.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -p -r1.46 -r1.47
--- volume.c 6 Jul 2005 22:47:18 -0000 1.46
+++ volume.c 18 Jul 2005 02:09:43 -0000 1.47
@@ -1246,16 +1246,35 @@ int ntfs_umount(ntfs_volume *vol,
static int ntfs_mntent_check(const char *file, unsigned long *mnt_flags)
{
struct mntent *mnt;
+ char *real_file = NULL, *real_fsname = NULL;
FILE *f;
+ int err = 0;
- if (!(f = setmntent(MOUNTED, "r")))
+ real_file = malloc(PATH_MAX + 1);
+ if (!real_file)
return -1;
- while ((mnt = getmntent(f)))
- if (!strcmp(file, mnt->mnt_fsname))
+ real_fsname = malloc(PATH_MAX + 1);
+ if (!real_fsname) {
+ err = errno;
+ goto exit;
+ }
+ if (!realpath(file, real_file)) {
+ err = errno;
+ goto exit;
+ }
+ if (!(f = setmntent(MOUNTED, "r"))) {
+ err = errno;
+ goto exit;
+ }
+ while ((mnt = getmntent(f))) {
+ if (!realpath(mnt->mnt_fsname, real_fsname))
+ continue;
+ if (!strcmp(real_file, real_fsname))
break;
+ }
endmntent(f);
if (!mnt)
- return 0;
+ goto exit;
*mnt_flags = NTFS_MF_MOUNTED;
if (!strcmp(mnt->mnt_dir, "/"))
*mnt_flags |= NTFS_MF_ISROOT;
@@ -1263,6 +1282,15 @@ static int ntfs_mntent_check(const char
if (hasmntopt(mnt, "ro") && !hasmntopt(mnt, "rw"))
*mnt_flags |= NTFS_MF_READONLY;
#endif
+exit:
+ if (real_file)
+ free(real_file);
+ if (real_fsname)
+ free(real_fsname);
+ if (err) {
+ errno = err;
+ return -1;
+ }
return 0;
}
#endif /* HAVE_MNTENT_H */
|