]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
fix a typo in samestat() (ST_DEV, not STD_DEV);
authorGuido van Rossum <guido@python.org>
Wed, 6 May 1992 11:36:49 +0000 (11:36 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 6 May 1992 11:36:49 +0000 (11:36 +0000)
rewrite ismount() to compare stats of path and path/..

Lib/posixpath.py

index 1b1b3aee082a98011c9b1fed69722c3f23e1a69d..b178e6728d4613809de67c7ed4de2c7843acdef6 100644 (file)
@@ -158,38 +158,27 @@ def sameopenfile(fp1, fp2):
 
 def samestat(s1, s2):
        return s1[stat.ST_INO] == s2[stat.ST_INO] and \
-               s1[stat.ST_DEV] == s2[stat.STD_DEV]
-
-
-# Subroutine and global data used by ismount().
-
-_mounts = []
-
-def _getmounts():
-       import commands, string
-       mounts = []
-       data = commands.getoutput('/etc/mount')
-       lines = string.splitfields(data, '\n')
-       for line in lines:
-               words = string.split(line)
-               if len(words) >= 3 and words[1] == 'on':
-                       mounts.append(words[2])
-       return mounts
+               s1[stat.ST_DEV] == s2[stat.ST_DEV]
 
 
 # Is a path a mount point?
-# This only works for normalized paths,
-# and only if the mount table as printed by /etc/mount is correct.
-# It tries to make relative paths absolute by prefixing them with the
-# current directory, but it won't normalize arguments containing '../'
-# or symbolic links.
+# (Does this work for all UNIXes?  Is it even guaranteed to work by POSIX?)
 
 def ismount(path):
-       if not isabs(path):
-               path = join(posix.getcwd(), path)
-       if not _mounts:
-               _mounts[:] = _getmounts()
-       return path in _mounts
+       try:
+               s1 = posix.stat(path)
+               s2 = posix.stat(join(path, '..'))
+       except posix.error:
+               return 0 # It doesn't exist -- so not a mount point :-)
+       dev1 = s1[stat.ST_DEV]
+       dev2 = s2[stat.ST_DEV]
+       if dev1 != dev2:
+               return 1                # path/.. on a different device as path
+       ino1 = s1[stat.ST_INO]
+       ino2 = s2[stat.ST_INO]
+       if ino1 == ino2:
+               return 1                # path/.. is the same i-node as path
+       return 0
 
 
 # Directory tree walk.