]> granicus.if.org Git - python/commitdiff
Implemented FSCatalogInfo structure support, and used this to implement
authorJack Jansen <jack.jansen@cwi.nl>
Wed, 15 Jan 2003 22:36:16 +0000 (22:36 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Wed, 15 Jan 2003 22:36:16 +0000 (22:36 +0000)
FSSpec.SetDates() and GetDates(). Closes #662836.

Lib/plat-mac/macfs.py
Mac/Modules/file/_Filemodule.c
Mac/Modules/file/filesupport.py

index 5822b197e0cc8ebda78ad8573af9806d967ba2aa..b0132aef0be33c60336eeb15a9b976aa5df31087 100644 (file)
@@ -21,6 +21,23 @@ READ = 1
 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 @@ class FSSpec(Carbon.File.FSSpec):
                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):
index baa379ee788d3301518e60c7ff1d6d87fdf2116c..0e288893557f62e5042818420e88e62e12c97dff 100644 (file)
@@ -370,7 +370,6 @@ static int FSCatalogInfo_tp_init(PyObject *self, PyObject *args, PyObject *kwds)
                        "atributeModDate",
                        "accessDate",
                        "backupDate",
-                       "permissions",
                        "valence",
                        "dataLogicalSize",
                        "dataPhysicalSize",
@@ -380,7 +379,7 @@ static int FSCatalogInfo_tp_init(PyObject *self, PyObject *args, PyObject *kwds)
                        "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 @@ static int FSCatalogInfo_tp_init(PyObject *self, PyObject *args, PyObject *kwds)
                        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,
index b3269e115a3c4fa01b5928f8c64d9920fea67e8c..4f2796302449f39ec9636924d3af0125f4078a09 100644 (file)
@@ -413,7 +413,7 @@ class FSCatalogInfoDefinition(PEP253Mixin, ObjectDefinition):
                ),
        ]
        # 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 @@ class FSCatalogInfoDefinition(PEP253Mixin, ObjectDefinition):
                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 @@ class FSCatalogInfoDefinition(PEP253Mixin, ObjectDefinition):
                "atributeModDate",
                "accessDate",
                "backupDate",
-               "permissions",
                "valence",
                "dataLogicalSize",
                "dataPhysicalSize",