Create files as temp file and move to real location only when complete.
Added some try-except statements around listdir and mkdir operations.
diff --git a/Tools/scripts/ftpmirror.py b/Tools/scripts/ftpmirror.py
index 3cbe351..ba9335d 100755
--- a/Tools/scripts/ftpmirror.py
+++ b/Tools/scripts/ftpmirror.py
@@ -1,4 +1,4 @@
-#! /ufs/guido/bin/sgi/python
+#! /usr/local/bin/python
 
 # Mirror a remote ftp subtree into a local directory tree.
 # Basic usage: ftpmirror [options] host remotedir localdir
@@ -98,7 +98,11 @@
 	pwd = f.pwd()
 	if localdir and not os.path.isdir(localdir):
 		if verbose: print 'Creating local directory', localdir
-		makedir(localdir)
+		try:
+		    makedir(localdir)
+		except os.error, msg:
+		    print "Failed to establish local directory", localdir
+		    return
 	infofilename = os.path.join(localdir, '.mirrorinfo')
 	try:
 		text = open(infofilename, 'r').read()
@@ -158,6 +162,7 @@
 				print 'Already have this version of', filename
 			continue
 		fullname = os.path.join(localdir, filename)
+		tempname = os.path.join(localdir, '@'+filename)
 		if interactive:
 			doit = askabout('file', filename, pwd)
 			if not doit:
@@ -165,13 +170,13 @@
 					info[filename] = 'Not retrieved'
 				continue
 		try:
-			os.unlink(fullname)
+			os.unlink(tempname)
 		except os.error:
 			pass
 		try:
-			fp = open(fullname, 'w')
+			fp = open(tempname, 'w')
 		except IOError, msg:
-			print "Can't create %s: %s" % (fullname, str(msg))
+			print "Can't create %s: %s" % (tempname, str(msg))
 			continue
 		if verbose:
 			print 'Retrieving %s from %s as %s...' % \
@@ -190,6 +195,13 @@
 		fp.close()
 		if fp1 != fp:
 			fp1.close()
+		try:
+		    os.rename(tempname, fullname)
+		except os.error, msg:
+			print "Can't rename %s to %s: %s" % (tempname,
+							     fullname,
+							     str(msg))
+			continue
 		info[filename] = infostuff
 		writedict(info, infofilename)
 		if verbose:
@@ -205,8 +217,11 @@
 			print
 	#
 	# Remove local files that are no longer in the remote directory
-	if not localdir: names = os.listdir(os.curdir)
-	else: names = os.listdir(localdir)
+	try:
+	    if not localdir: names = os.listdir(os.curdir)
+	    else: names = os.listdir(localdir)
+	except os.error:
+	    names = []
 	for name in names:
 		if name[0] == '.' or info.has_key(name) or name in subdirs:
 			continue