summaryrefslogtreecommitdiffstats
path: root/Mac/Lib
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2002-08-05 21:53:57 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2002-08-05 21:53:57 (GMT)
commit0a9d7559e8e07336860fb2aa901c1ba8b77b5921 (patch)
tree4b700a5423ba81e356f09b505d4ee23719d6ee40 /Mac/Lib
parent11845e00b267e30f87bbb2f2e7039fe9fe3fa594 (diff)
downloadcpython-0a9d7559e8e07336860fb2aa901c1ba8b77b5921.zip
cpython-0a9d7559e8e07336860fb2aa901c1ba8b77b5921.tar.gz
cpython-0a9d7559e8e07336860fb2aa901c1ba8b77b5921.tar.bz2
In copy() don't try to obtain an FSSpec until we know the destination
exists. Partial fix for #585923.
Diffstat (limited to 'Mac/Lib')
-rw-r--r--Mac/Lib/macostools.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/Mac/Lib/macostools.py b/Mac/Lib/macostools.py
index ca0c7c6..5b94ee2 100644
--- a/Mac/Lib/macostools.py
+++ b/Mac/Lib/macostools.py
@@ -27,6 +27,8 @@ BUFSIZ=0x80000 # Copy in 0.5Mb chunks
def mkalias(src, dst, relative=None):
"""Create a finder alias"""
srcfss = macfs.FSSpec(src)
+ # The next line will fail under unix-Python if the destination
+ # doesn't exist yet. We should change this code to be fsref-based.
dstfss = macfs.FSSpec(dst)
if relative:
relativefss = macfs.FSSpec(relative)
@@ -82,13 +84,15 @@ def touched_ae(dst):
def copy(src, dst, createpath=0, copydates=1, forcetype=None):
"""Copy a file, including finder info, resource fork, etc"""
+ if hasattr(src, 'as_pathname'):
+ src = src.as_pathname()
+ if hasattr(dst, 'as_pathname'):
+ dst = dst.as_pathname()
if createpath:
mkdirs(os.path.split(dst)[0])
- srcfss = macfs.FSSpec(src)
- dstfss = macfs.FSSpec(dst)
- ifp = open(srcfss.as_pathname(), 'rb')
- ofp = open(dstfss.as_pathname(), 'wb')
+ ifp = open(src, 'rb')
+ ofp = open(dst, 'wb')
d = ifp.read(BUFSIZ)
while d:
ofp.write(d)
@@ -96,8 +100,8 @@ def copy(src, dst, createpath=0, copydates=1, forcetype=None):
ifp.close()
ofp.close()
- ifp = openrf(srcfss.as_pathname(), '*rb')
- ofp = openrf(dstfss.as_pathname(), '*wb')
+ ifp = openrf(src, '*rb')
+ ofp = openrf(dst, '*wb')
d = ifp.read(BUFSIZ)
while d:
ofp.write(d)
@@ -105,6 +109,8 @@ def copy(src, dst, createpath=0, copydates=1, forcetype=None):
ifp.close()
ofp.close()
+ srcfss = macfs.FSSpec(src)
+ dstfss = macfs.FSSpec(dst)
sf = srcfss.GetFInfo()
df = dstfss.GetFInfo()
df.Creator, df.Type = sf.Creator, sf.Type