From 3bb710d6473fdcf3fb13fcfbff8e3942494c2fc5 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 30 Jul 1996 16:35:26 +0000 Subject: [PATCH] updated again --- Lib/dos-8x3/posixfil.py | 19 ++++++++++--- Lib/dos-8x3/posixpat.py | 59 ++++++++++++++++++++++------------------- Lib/dos_8x3/posixfil.py | 19 ++++++++++--- Lib/dos_8x3/posixpat.py | 59 ++++++++++++++++++++++------------------- 4 files changed, 96 insertions(+), 60 deletions(-) diff --git a/Lib/dos-8x3/posixfil.py b/Lib/dos-8x3/posixfil.py index 459cd520784..64cda986223 100755 --- a/Lib/dos-8x3/posixfil.py +++ b/Lib/dos-8x3/posixfil.py @@ -174,12 +174,25 @@ class _posixfile_: elif len(args) > 3: raise TypeError, 'too many arguments' - flock = struct.pack('hhllhh', l_type, l_whence, l_start, l_len, 0, 0) + # Hack by davem@magnet.com to get locking to go on freebsd + import sys, os + if sys.platform == 'freebsd2': + flock = struct.pack('lxxxxlxxxxlhh', \ + l_start, l_len, os.getpid(), l_type, l_whence) + else: + flock = struct.pack('hhllhh', \ + l_type, l_whence, l_start, l_len, 0, 0) + flock = fcntl.fcntl(self._file_.fileno(), cmd, flock) if '?' in how: - l_type, l_whence, l_start, l_len, l_sysid, l_pid = \ - struct.unpack('hhllhh', flock) + if sys.platform == 'freebsd2': + l_start, l_len, l_pid, l_type, l_whence = \ + struct.unpack('lxxxxlxxxxlhh', flock) + else: + l_type, l_whence, l_start, l_len, l_sysid, l_pid = \ + struct.unpack('hhllhh', flock) + if l_type != FCNTL.F_UNLCK: if l_type == FCNTL.F_RDLCK: return 'r', l_len, l_start, l_whence, l_pid diff --git a/Lib/dos-8x3/posixpat.py b/Lib/dos-8x3/posixpat.py index d2848344886..4590f8dc31e 100755 --- a/Lib/dos-8x3/posixpat.py +++ b/Lib/dos-8x3/posixpat.py @@ -1,6 +1,12 @@ -# Module 'posixpath' -- common operations on POSIX pathnames +# Module 'posixpath' -- common operations on Posix pathnames. +# Some of this can actually be useful on non-Posix systems too, e.g. +# for manipulation of the pathname component of URLs. +# The "os.path" name is an alias for this module on Posix systems; +# on other systems (e.g. Mac, Windows), os.path provides the same +# operations in a manner specific to that platform, and is an alias +# to another module (e.g. macpath, ntpath). -import posix +import os import stat @@ -102,12 +108,12 @@ def commonprefix(m): # Is a path a symbolic link? -# This will always return false on systems where posix.lstat doesn't exist. +# This will always return false on systems where os.lstat doesn't exist. def islink(path): try: - st = posix.lstat(path) - except (posix.error, AttributeError): + st = os.lstat(path) + except (os.error, AttributeError): return 0 return stat.S_ISLNK(st[stat.ST_MODE]) @@ -117,20 +123,20 @@ def islink(path): def exists(path): try: - st = posix.stat(path) - except posix.error: + st = os.stat(path) + except os.error: return 0 return 1 -# Is a path a posix directory? +# Is a path a directory? # This follows symbolic links, so both islink() and isdir() can be true # for the same path. def isdir(path): try: - st = posix.stat(path) - except posix.error: + st = os.stat(path) + except os.error: return 0 return stat.S_ISDIR(st[stat.ST_MODE]) @@ -141,8 +147,8 @@ def isdir(path): def isfile(path): try: - st = posix.stat(path) - except posix.error: + st = os.stat(path) + except os.error: return 0 return stat.S_ISREG(st[stat.ST_MODE]) @@ -150,18 +156,17 @@ def isfile(path): # Are two filenames really pointing to the same file? def samefile(f1, f2): - s1 = posix.stat(f1) - s2 = posix.stat(f2) + s1 = os.stat(f1) + s2 = os.stat(f2) return samestat(s1, s2) # Are two open files really referencing the same file? # (Not necessarily the same file descriptor!) -# XXX Oops, posix.fstat() doesn't exist yet! def sameopenfile(fp1, fp2): - s1 = posix.fstat(fp1) - s2 = posix.fstat(fp2) + s1 = os.fstat(fp1) + s2 = os.fstat(fp2) return samestat(s1, s2) @@ -174,13 +179,13 @@ def samestat(s1, s2): # Is a path a mount point? -# (Does this work for all UNIXes? Is it even guaranteed to work by POSIX?) +# (Does this work for all UNIXes? Is it even guaranteed to work by Posix?) def ismount(path): try: - s1 = posix.stat(path) - s2 = posix.stat(join(path, '..')) - except posix.error: + s1 = os.stat(path) + s2 = os.stat(join(path, '..')) + except os.error: return 0 # It doesn't exist -- so not a mount point :-) dev1 = s1[stat.ST_DEV] dev2 = s2[stat.ST_DEV] @@ -203,8 +208,8 @@ def ismount(path): def walk(top, func, arg): try: - names = posix.listdir(top) - except posix.error: + names = os.listdir(top) + except os.error: return func(arg, top, names) exceptions = ('.', '..') @@ -231,9 +236,9 @@ def expanduser(path): while i < n and path[i] <> '/': i = i+1 if i == 1: - if not posix.environ.has_key('HOME'): + if not os.environ.has_key('HOME'): return path - userhome = posix.environ['HOME'] + userhome = os.environ['HOME'] else: import pwd try: @@ -267,9 +272,9 @@ def expandvars(path): j = i + len(_varprog.group(0)) if name[:1] == '{' and name[-1:] == '}': name = name[1:-1] - if posix.environ.has_key(name): + if os.environ.has_key(name): tail = path[j:] - path = path[:i] + posix.environ[name] + path = path[:i] + os.environ[name] i = len(path) path = path + tail else: diff --git a/Lib/dos_8x3/posixfil.py b/Lib/dos_8x3/posixfil.py index 459cd520784..64cda986223 100755 --- a/Lib/dos_8x3/posixfil.py +++ b/Lib/dos_8x3/posixfil.py @@ -174,12 +174,25 @@ class _posixfile_: elif len(args) > 3: raise TypeError, 'too many arguments' - flock = struct.pack('hhllhh', l_type, l_whence, l_start, l_len, 0, 0) + # Hack by davem@magnet.com to get locking to go on freebsd + import sys, os + if sys.platform == 'freebsd2': + flock = struct.pack('lxxxxlxxxxlhh', \ + l_start, l_len, os.getpid(), l_type, l_whence) + else: + flock = struct.pack('hhllhh', \ + l_type, l_whence, l_start, l_len, 0, 0) + flock = fcntl.fcntl(self._file_.fileno(), cmd, flock) if '?' in how: - l_type, l_whence, l_start, l_len, l_sysid, l_pid = \ - struct.unpack('hhllhh', flock) + if sys.platform == 'freebsd2': + l_start, l_len, l_pid, l_type, l_whence = \ + struct.unpack('lxxxxlxxxxlhh', flock) + else: + l_type, l_whence, l_start, l_len, l_sysid, l_pid = \ + struct.unpack('hhllhh', flock) + if l_type != FCNTL.F_UNLCK: if l_type == FCNTL.F_RDLCK: return 'r', l_len, l_start, l_whence, l_pid diff --git a/Lib/dos_8x3/posixpat.py b/Lib/dos_8x3/posixpat.py index d2848344886..4590f8dc31e 100755 --- a/Lib/dos_8x3/posixpat.py +++ b/Lib/dos_8x3/posixpat.py @@ -1,6 +1,12 @@ -# Module 'posixpath' -- common operations on POSIX pathnames +# Module 'posixpath' -- common operations on Posix pathnames. +# Some of this can actually be useful on non-Posix systems too, e.g. +# for manipulation of the pathname component of URLs. +# The "os.path" name is an alias for this module on Posix systems; +# on other systems (e.g. Mac, Windows), os.path provides the same +# operations in a manner specific to that platform, and is an alias +# to another module (e.g. macpath, ntpath). -import posix +import os import stat @@ -102,12 +108,12 @@ def commonprefix(m): # Is a path a symbolic link? -# This will always return false on systems where posix.lstat doesn't exist. +# This will always return false on systems where os.lstat doesn't exist. def islink(path): try: - st = posix.lstat(path) - except (posix.error, AttributeError): + st = os.lstat(path) + except (os.error, AttributeError): return 0 return stat.S_ISLNK(st[stat.ST_MODE]) @@ -117,20 +123,20 @@ def islink(path): def exists(path): try: - st = posix.stat(path) - except posix.error: + st = os.stat(path) + except os.error: return 0 return 1 -# Is a path a posix directory? +# Is a path a directory? # This follows symbolic links, so both islink() and isdir() can be true # for the same path. def isdir(path): try: - st = posix.stat(path) - except posix.error: + st = os.stat(path) + except os.error: return 0 return stat.S_ISDIR(st[stat.ST_MODE]) @@ -141,8 +147,8 @@ def isdir(path): def isfile(path): try: - st = posix.stat(path) - except posix.error: + st = os.stat(path) + except os.error: return 0 return stat.S_ISREG(st[stat.ST_MODE]) @@ -150,18 +156,17 @@ def isfile(path): # Are two filenames really pointing to the same file? def samefile(f1, f2): - s1 = posix.stat(f1) - s2 = posix.stat(f2) + s1 = os.stat(f1) + s2 = os.stat(f2) return samestat(s1, s2) # Are two open files really referencing the same file? # (Not necessarily the same file descriptor!) -# XXX Oops, posix.fstat() doesn't exist yet! def sameopenfile(fp1, fp2): - s1 = posix.fstat(fp1) - s2 = posix.fstat(fp2) + s1 = os.fstat(fp1) + s2 = os.fstat(fp2) return samestat(s1, s2) @@ -174,13 +179,13 @@ def samestat(s1, s2): # Is a path a mount point? -# (Does this work for all UNIXes? Is it even guaranteed to work by POSIX?) +# (Does this work for all UNIXes? Is it even guaranteed to work by Posix?) def ismount(path): try: - s1 = posix.stat(path) - s2 = posix.stat(join(path, '..')) - except posix.error: + s1 = os.stat(path) + s2 = os.stat(join(path, '..')) + except os.error: return 0 # It doesn't exist -- so not a mount point :-) dev1 = s1[stat.ST_DEV] dev2 = s2[stat.ST_DEV] @@ -203,8 +208,8 @@ def ismount(path): def walk(top, func, arg): try: - names = posix.listdir(top) - except posix.error: + names = os.listdir(top) + except os.error: return func(arg, top, names) exceptions = ('.', '..') @@ -231,9 +236,9 @@ def expanduser(path): while i < n and path[i] <> '/': i = i+1 if i == 1: - if not posix.environ.has_key('HOME'): + if not os.environ.has_key('HOME'): return path - userhome = posix.environ['HOME'] + userhome = os.environ['HOME'] else: import pwd try: @@ -267,9 +272,9 @@ def expandvars(path): j = i + len(_varprog.group(0)) if name[:1] == '{' and name[-1:] == '}': name = name[1:-1] - if posix.environ.has_key(name): + if os.environ.has_key(name): tail = path[j:] - path = path[:i] + posix.environ[name] + path = path[:i] + os.environ[name] i = len(path) path = path + tail else: