Commit ec6d05be authored by Jack Jansen's avatar Jack Jansen

In copy() don't try to obtain an FSSpec until we know the destination

exists. Partial fix for #585923.
parent a9686ef4
...@@ -27,6 +27,8 @@ BUFSIZ=0x80000 # Copy in 0.5Mb chunks ...@@ -27,6 +27,8 @@ BUFSIZ=0x80000 # Copy in 0.5Mb chunks
def mkalias(src, dst, relative=None): def mkalias(src, dst, relative=None):
"""Create a finder alias""" """Create a finder alias"""
srcfss = macfs.FSSpec(src) 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) dstfss = macfs.FSSpec(dst)
if relative: if relative:
relativefss = macfs.FSSpec(relative) relativefss = macfs.FSSpec(relative)
...@@ -82,13 +84,15 @@ def touched_ae(dst): ...@@ -82,13 +84,15 @@ def touched_ae(dst):
def copy(src, dst, createpath=0, copydates=1, forcetype=None): def copy(src, dst, createpath=0, copydates=1, forcetype=None):
"""Copy a file, including finder info, resource fork, etc""" """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: if createpath:
mkdirs(os.path.split(dst)[0]) mkdirs(os.path.split(dst)[0])
srcfss = macfs.FSSpec(src)
dstfss = macfs.FSSpec(dst)
ifp = open(srcfss.as_pathname(), 'rb') ifp = open(src, 'rb')
ofp = open(dstfss.as_pathname(), 'wb') ofp = open(dst, 'wb')
d = ifp.read(BUFSIZ) d = ifp.read(BUFSIZ)
while d: while d:
ofp.write(d) ofp.write(d)
...@@ -96,8 +100,8 @@ def copy(src, dst, createpath=0, copydates=1, forcetype=None): ...@@ -96,8 +100,8 @@ def copy(src, dst, createpath=0, copydates=1, forcetype=None):
ifp.close() ifp.close()
ofp.close() ofp.close()
ifp = openrf(srcfss.as_pathname(), '*rb') ifp = openrf(src, '*rb')
ofp = openrf(dstfss.as_pathname(), '*wb') ofp = openrf(dst, '*wb')
d = ifp.read(BUFSIZ) d = ifp.read(BUFSIZ)
while d: while d:
ofp.write(d) ofp.write(d)
...@@ -105,6 +109,8 @@ def copy(src, dst, createpath=0, copydates=1, forcetype=None): ...@@ -105,6 +109,8 @@ def copy(src, dst, createpath=0, copydates=1, forcetype=None):
ifp.close() ifp.close()
ofp.close() ofp.close()
srcfss = macfs.FSSpec(src)
dstfss = macfs.FSSpec(dst)
sf = srcfss.GetFInfo() sf = srcfss.GetFInfo()
df = dstfss.GetFInfo() df = dstfss.GetFInfo()
df.Creator, df.Type = sf.Creator, sf.Type df.Creator, df.Type = sf.Creator, sf.Type
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment