Implemented FSCatalogInfo structure support, and used this to implement
FSSpec.SetDates() and GetDates(). Closes #662836.
diff --git a/Lib/plat-mac/macfs.py b/Lib/plat-mac/macfs.py
index 5822b19..b0132ae 100644
--- a/Lib/plat-mac/macfs.py
+++ b/Lib/plat-mac/macfs.py
@@ -21,6 +21,23 @@
 WRITE = 2
 smAllScripts = -3
 
+#
+# Find the epoch conversion for file dates in a way that works on OS9 and OSX
+import time
+if time.gmtime(0)[0] == 1970:
+	_EPOCHCONVERT = -((1970-1904)*365 + 17) * (24*60*60) + 0x100000000L
+	def _utc2time(utc):
+		t = utc[1] + _EPOCHCONVERT
+		return int(t)
+	def _time2utc(t):
+		t = t - _EPOCHCONVERT
+		if t < -0x7fffffff:
+			t = t + 0x10000000L
+		return (0, int(t), 0)
+else:
+	def _utc2time(utc): return utc[1]
+	def _time2utc(t): return (0, t, 0)
+
 # The old name of the error object:
 error = Carbon.File.Error
 
@@ -52,12 +69,20 @@
 		return self.FSpSetFInfo(info)
 		
 	def GetDates(self):
-		import os
-		statb = os.stat(self.as_pathname())
-		return statb.st_ctime, statb.st_mtime, 0
+		catInfoFlags = kFSCatInfoCreateDate|kFSCatInfoContentMod|kFSCatInfoBackupDate
+		catinfo, d1, d2, d3 = FSRef(self).FSGetCatalogInfo(catInfoFlags)
+		cdate = catinfo.createDate
+		mdate = catinfo.contentModDate
+		bdate = catinfo.backupDate
+		return _utc2time(cdate), _utc2time(mdate), _utc2time(bdate)
 	
-	def SetDates(self, *dates):
-		pass # print "FSSpec.SetDates not yet implemented"
+	def SetDates(self, cdate, mdate, bdate):
+		catInfoFlags = kFSCatInfoCreateDate|kFSCatInfoContentMod|kFSCatInfoBackupDate
+		catinfo = Carbon.File.FSCatalogInfo(
+			createDate = _time2utc(cdate),
+			contentModDate = _time2utc(mdate),
+			backupDate = _time2utc(bdate))
+		FSRef(self).FSSetCatalogInfo(catInfoFlags, catinfo)
 	
 class FSRef(Carbon.File.FSRef):
 	def as_fsspec(self):
diff --git a/Mac/Modules/file/_Filemodule.c b/Mac/Modules/file/_Filemodule.c
index baa379e..0e28889 100644
--- a/Mac/Modules/file/_Filemodule.c
+++ b/Mac/Modules/file/_Filemodule.c
@@ -370,7 +370,6 @@
 			"atributeModDate",
 			"accessDate",
 			"backupDate",
-			"permissions",
 			"valence",
 			"dataLogicalSize",
 			"dataPhysicalSize",
@@ -380,7 +379,7 @@
 			"userPrivileges"
 			, 0};
 
-	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|HhllO&O&O&O&O&(llll)llllllb", kw, &((FSCatalogInfoObject *)self)->ob_itself.nodeFlags,
+	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|HhllO&O&O&O&O&llllllb", kw, &((FSCatalogInfoObject *)self)->ob_itself.nodeFlags,
 			&((FSCatalogInfoObject *)self)->ob_itself.volume,
 			&((FSCatalogInfoObject *)self)->ob_itself.parentDirID,
 			&((FSCatalogInfoObject *)self)->ob_itself.nodeID,
@@ -389,10 +388,6 @@
 			UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.attributeModDate,
 			UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.accessDate,
 			UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.backupDate,
-			&((FSCatalogInfoObject *)self)->ob_itself.permissions[0],
-			&((FSCatalogInfoObject *)self)->ob_itself.permissions[1],
-			&((FSCatalogInfoObject *)self)->ob_itself.permissions[2],
-			&((FSCatalogInfoObject *)self)->ob_itself.permissions[3],
 			&((FSCatalogInfoObject *)self)->ob_itself.valence,
 			&((FSCatalogInfoObject *)self)->ob_itself.dataLogicalSize,
 			&((FSCatalogInfoObject *)self)->ob_itself.dataPhysicalSize,
diff --git a/Mac/Modules/file/filesupport.py b/Mac/Modules/file/filesupport.py
index b3269e1..4f27963 100644
--- a/Mac/Modules/file/filesupport.py
+++ b/Mac/Modules/file/filesupport.py
@@ -413,7 +413,7 @@
 		),
 	]
 	# The same info, but in a different form
-	INITFORMAT = "HhllO&O&O&O&O&(llll)llllllb"
+	INITFORMAT = "HhllO&O&O&O&O&llllllb"
 	INITARGS = """&((FSCatalogInfoObject *)self)->ob_itself.nodeFlags,
 		&((FSCatalogInfoObject *)self)->ob_itself.volume,
 		&((FSCatalogInfoObject *)self)->ob_itself.parentDirID,
@@ -423,10 +423,6 @@
 		UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.attributeModDate,
 		UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.accessDate,
 		UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.backupDate,
-		&((FSCatalogInfoObject *)self)->ob_itself.permissions[0],
-		&((FSCatalogInfoObject *)self)->ob_itself.permissions[1],
-		&((FSCatalogInfoObject *)self)->ob_itself.permissions[2],
-		&((FSCatalogInfoObject *)self)->ob_itself.permissions[3],
 		&((FSCatalogInfoObject *)self)->ob_itself.valence,
 		&((FSCatalogInfoObject *)self)->ob_itself.dataLogicalSize,
 		&((FSCatalogInfoObject *)self)->ob_itself.dataPhysicalSize,
@@ -444,7 +440,6 @@
 		"atributeModDate",
 		"accessDate",
 		"backupDate",
-		"permissions",
 		"valence",
 		"dataLogicalSize",
 		"dataPhysicalSize",