In copy() don't try to obtain an FSSpec until we know the destination
exists. Partial fix for #585923.
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 @@
 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,29 +84,33 @@
 	
 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])
+	
+	ifp = open(src, 'rb')
+	ofp = open(dst, 'wb')
+	d = ifp.read(BUFSIZ)
+	while d:
+		ofp.write(d)
+		d = ifp.read(BUFSIZ)
+	ifp.close()
+	ofp.close()
+	
+	ifp = openrf(src, '*rb')
+	ofp = openrf(dst, '*wb')
+	d = ifp.read(BUFSIZ)
+	while d:
+		ofp.write(d)
+		d = ifp.read(BUFSIZ)
+	ifp.close()
+	ofp.close()
+	
 	srcfss = macfs.FSSpec(src)
 	dstfss = macfs.FSSpec(dst)
-	
-	ifp = open(srcfss.as_pathname(), 'rb')
-	ofp = open(dstfss.as_pathname(), 'wb')
-	d = ifp.read(BUFSIZ)
-	while d:
-		ofp.write(d)
-		d = ifp.read(BUFSIZ)
-	ifp.close()
-	ofp.close()
-	
-	ifp = openrf(srcfss.as_pathname(), '*rb')
-	ofp = openrf(dstfss.as_pathname(), '*wb')
-	d = ifp.read(BUFSIZ)
-	while d:
-		ofp.write(d)
-		d = ifp.read(BUFSIZ)
-	ifp.close()
-	ofp.close()
-	
 	sf = srcfss.GetFInfo()
 	df = dstfss.GetFInfo()
 	df.Creator, df.Type = sf.Creator, sf.Type