Implemented FSCatalogInfo structure support, and used this to implement

FSSpec.SetDates() and GetDates(). Closes #662836.
This commit is contained in:
Jack Jansen 2003-01-15 22:36:16 +00:00
parent a5caa6fcd9
commit 2d0909b9cb
3 changed files with 32 additions and 17 deletions

View File

@ -21,6 +21,23 @@ READ = 1
WRITE = 2 WRITE = 2
smAllScripts = -3 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: # The old name of the error object:
error = Carbon.File.Error error = Carbon.File.Error
@ -52,12 +69,20 @@ class FSSpec(Carbon.File.FSSpec):
return self.FSpSetFInfo(info) return self.FSpSetFInfo(info)
def GetDates(self): def GetDates(self):
import os catInfoFlags = kFSCatInfoCreateDate|kFSCatInfoContentMod|kFSCatInfoBackupDate
statb = os.stat(self.as_pathname()) catinfo, d1, d2, d3 = FSRef(self).FSGetCatalogInfo(catInfoFlags)
return statb.st_ctime, statb.st_mtime, 0 cdate = catinfo.createDate
mdate = catinfo.contentModDate
bdate = catinfo.backupDate
return _utc2time(cdate), _utc2time(mdate), _utc2time(bdate)
def SetDates(self, *dates): def SetDates(self, cdate, mdate, bdate):
pass # print "FSSpec.SetDates not yet implemented" 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): class FSRef(Carbon.File.FSRef):
def as_fsspec(self): def as_fsspec(self):

View File

@ -370,7 +370,6 @@ static int FSCatalogInfo_tp_init(PyObject *self, PyObject *args, PyObject *kwds)
"atributeModDate", "atributeModDate",
"accessDate", "accessDate",
"backupDate", "backupDate",
"permissions",
"valence", "valence",
"dataLogicalSize", "dataLogicalSize",
"dataPhysicalSize", "dataPhysicalSize",
@ -380,7 +379,7 @@ static int FSCatalogInfo_tp_init(PyObject *self, PyObject *args, PyObject *kwds)
"userPrivileges" "userPrivileges"
, 0}; , 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.volume,
&((FSCatalogInfoObject *)self)->ob_itself.parentDirID, &((FSCatalogInfoObject *)self)->ob_itself.parentDirID,
&((FSCatalogInfoObject *)self)->ob_itself.nodeID, &((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.attributeModDate,
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.accessDate, UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.accessDate,
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.backupDate, 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.valence,
&((FSCatalogInfoObject *)self)->ob_itself.dataLogicalSize, &((FSCatalogInfoObject *)self)->ob_itself.dataLogicalSize,
&((FSCatalogInfoObject *)self)->ob_itself.dataPhysicalSize, &((FSCatalogInfoObject *)self)->ob_itself.dataPhysicalSize,

View File

@ -413,7 +413,7 @@ class FSCatalogInfoDefinition(PEP253Mixin, ObjectDefinition):
), ),
] ]
# The same info, but in a different form # 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, INITARGS = """&((FSCatalogInfoObject *)self)->ob_itself.nodeFlags,
&((FSCatalogInfoObject *)self)->ob_itself.volume, &((FSCatalogInfoObject *)self)->ob_itself.volume,
&((FSCatalogInfoObject *)self)->ob_itself.parentDirID, &((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.attributeModDate,
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.accessDate, UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.accessDate,
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.backupDate, 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.valence,
&((FSCatalogInfoObject *)self)->ob_itself.dataLogicalSize, &((FSCatalogInfoObject *)self)->ob_itself.dataLogicalSize,
&((FSCatalogInfoObject *)self)->ob_itself.dataPhysicalSize, &((FSCatalogInfoObject *)self)->ob_itself.dataPhysicalSize,
@ -444,7 +440,6 @@ class FSCatalogInfoDefinition(PEP253Mixin, ObjectDefinition):
"atributeModDate", "atributeModDate",
"accessDate", "accessDate",
"backupDate", "backupDate",
"permissions",
"valence", "valence",
"dataLogicalSize", "dataLogicalSize",
"dataPhysicalSize", "dataPhysicalSize",