mirror of
https://github.com/elliotnunn/machfs.git
synced 2024-11-25 07:32:07 +00:00
Handle creation, mod and bkup dates consistently
This commit is contained in:
parent
ddc8445771
commit
793fa1e44a
@ -91,7 +91,7 @@ class Folder(directory.AbstractFolder):
|
|||||||
self.x = 0 # where to put this spatially?
|
self.x = 0 # where to put this spatially?
|
||||||
self.y = 0
|
self.y = 0
|
||||||
|
|
||||||
self.crdat = self.mddat = self.bkdat = 0
|
self.crdate = self.mddate = self.bkdate = 0
|
||||||
|
|
||||||
|
|
||||||
class File:
|
class File:
|
||||||
@ -103,7 +103,7 @@ class File:
|
|||||||
self.y = 0
|
self.y = 0
|
||||||
|
|
||||||
self.locked = False
|
self.locked = False
|
||||||
self.crdat = self.mddat = self.bkdat = 0
|
self.crdate = self.mddate = self.bkdate = 0
|
||||||
|
|
||||||
self.rsrc = bytearray()
|
self.rsrc = bytearray()
|
||||||
self.data = bytearray()
|
self.data = bytearray()
|
||||||
@ -119,8 +119,7 @@ class Volume(directory.AbstractFolder):
|
|||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
self.bootblocks = bytes(1024) # optional; for booting HFS volumes
|
self.bootblocks = bytes(1024) # optional; for booting HFS volumes
|
||||||
self.crdate = 0 # date and time of volume creation
|
self.crdate = self.mddate = self.bkdate = 0
|
||||||
self.lsmod = 0 # date and time of last modification
|
|
||||||
self.name = 'Untitled'
|
self.name = 'Untitled'
|
||||||
|
|
||||||
def read(self, from_volume):
|
def read(self, from_volume):
|
||||||
@ -135,9 +134,7 @@ class Volume(directory.AbstractFolder):
|
|||||||
drCTFlSize, drCTExtRec, \
|
drCTFlSize, drCTExtRec, \
|
||||||
= struct.unpack_from('>2sLLHHHHHLLHLH28pLHLLLHLL32sHHHL12sL12s', from_volume, 1024)
|
= struct.unpack_from('>2sLLHHHHHLLHLH28pLHLLLHLL32sHHHL12sL12s', from_volume, 1024)
|
||||||
|
|
||||||
self.crdate = drCrDate
|
self.crdate, self.mddate, self.bkdate = drCrDate, drLsMod, drVolBkUp
|
||||||
self.lsmod = drLsMod
|
|
||||||
self.name = drVN.decode('mac_roman')
|
|
||||||
|
|
||||||
block2offset = lambda block: 512*drAlBlSt + drAlBlkSiz*block
|
block2offset = lambda block: 512*drAlBlSt + drAlBlkSiz*block
|
||||||
getextents = lambda extents: b''.join(from_volume[block2offset(firstblk):block2offset(firstblk+blkcnt)] for (firstblk, blkcnt) in extents)
|
getextents = lambda extents: b''.join(from_volume[block2offset(firstblk):block2offset(firstblk+blkcnt)] for (firstblk, blkcnt) in extents)
|
||||||
@ -188,7 +185,7 @@ class Volume(directory.AbstractFolder):
|
|||||||
cnids[dirDirID] = f
|
cnids[dirDirID] = f
|
||||||
childlist.append((ckrParID, ckrCName, f))
|
childlist.append((ckrParID, ckrCName, f))
|
||||||
|
|
||||||
f.crdat, f.mddat, f.bkdat = dirCrDat, dirMdDat, dirBkDat
|
f.crdate, f.mddate, f.bkdate = dirCrDat, dirMdDat, dirBkDat
|
||||||
|
|
||||||
elif datatype == 'file':
|
elif datatype == 'file':
|
||||||
filFlags, filTyp, filUsrWds, filFlNum, \
|
filFlags, filTyp, filUsrWds, filFlNum, \
|
||||||
@ -203,7 +200,7 @@ class Volume(directory.AbstractFolder):
|
|||||||
cnids[filFlNum] = f
|
cnids[filFlNum] = f
|
||||||
childlist.append((ckrParID, ckrCName, f))
|
childlist.append((ckrParID, ckrCName, f))
|
||||||
|
|
||||||
f.crdat, f.mddat, f.bkdat = filCrDat, filMdDat, filBkDat
|
f.crdate, f.mddate, f.bkdate = filCrDat, filMdDat, filBkDat
|
||||||
f.type, f.creator, f.flags, f.x, f.y = struct.unpack_from('>4s4sHHH', filUsrWds)
|
f.type, f.creator, f.flags, f.x, f.y = struct.unpack_from('>4s4sHHH', filUsrWds)
|
||||||
|
|
||||||
f.data = getfork(filLgLen, filExtRec, filFlNum, 'data')
|
f.data = getfork(filLgLen, filExtRec, filFlNum, 'data')
|
||||||
@ -313,7 +310,7 @@ class Volume(directory.AbstractFolder):
|
|||||||
filFlNum = wrap.cnid
|
filFlNum = wrap.cnid
|
||||||
filStBlk, filLgLen, filPyLen = wrap.dfrk[0], len(obj.data), bitmanip.pad_up(len(obj.data), drAlBlkSiz)
|
filStBlk, filLgLen, filPyLen = wrap.dfrk[0], len(obj.data), bitmanip.pad_up(len(obj.data), drAlBlkSiz)
|
||||||
filRStBlk, filRLgLen, filRPyLen = wrap.rfrk[0], len(obj.rsrc), bitmanip.pad_up(len(obj.rsrc), drAlBlkSiz)
|
filRStBlk, filRLgLen, filRPyLen = wrap.rfrk[0], len(obj.rsrc), bitmanip.pad_up(len(obj.rsrc), drAlBlkSiz)
|
||||||
filCrDat, filMdDat, filBkDat = obj.crdat, obj.mddat, obj.bkdat
|
filCrDat, filMdDat, filBkDat = obj.crdate, obj.mddate, obj.bkdate
|
||||||
filFndrInfo = bytes(16) # todo must fix
|
filFndrInfo = bytes(16) # todo must fix
|
||||||
filClpSize = 0 # todo must fix
|
filClpSize = 0 # todo must fix
|
||||||
filExtRec = struct.pack('>HHHHHH', *wrap.dfrk, 0, 0, 0, 0)
|
filExtRec = struct.pack('>HHHHHH', *wrap.dfrk, 0, 0, 0, 0)
|
||||||
@ -336,7 +333,7 @@ class Volume(directory.AbstractFolder):
|
|||||||
dirFlags = 0 # must fix
|
dirFlags = 0 # must fix
|
||||||
dirVal = len(wrap.of)
|
dirVal = len(wrap.of)
|
||||||
dirDirID = wrap.cnid
|
dirDirID = wrap.cnid
|
||||||
dirCrDat, dirMdDat, dirBkDat = (0,0,0) if obj is self else (obj.crdat, obj.mddat, obj.bkdat)
|
dirCrDat, dirMdDat, dirBkDat = obj.crdate, obj.mddate, obj.bkdate
|
||||||
dirUsrInfo = bytes(16)
|
dirUsrInfo = bytes(16)
|
||||||
dirFndrInfo = bytes(16)
|
dirFndrInfo = bytes(16)
|
||||||
mainrec_val = struct.pack('>BxHHLLLL16s16sxxxxxxxxxxxxxxxx',
|
mainrec_val = struct.pack('>BxHHLLLL16s16sxxxxxxxxxxxxxxxx',
|
||||||
@ -385,8 +382,7 @@ class Volume(directory.AbstractFolder):
|
|||||||
drVolBkUp = 0 # date and time of last backup
|
drVolBkUp = 0 # date and time of last backup
|
||||||
drVSeqNum = 0 # volume backup sequence number
|
drVSeqNum = 0 # volume backup sequence number
|
||||||
drFndrInfo = bytes(32) # information used by the Finder
|
drFndrInfo = bytes(32) # information used by the Finder
|
||||||
drCrDate = self.crdate
|
drCrDate, drLsMod, drVolBkUp = self.crdate, self.mddate, self.bkdate
|
||||||
drLsMod = self.lsmod
|
|
||||||
|
|
||||||
if not (1 <= len(drVN) <= 27):
|
if not (1 <= len(drVN) <= 27):
|
||||||
raise ValueError('Volume name range 1-27 chars')
|
raise ValueError('Volume name range 1-27 chars')
|
||||||
|
Loading…
Reference in New Issue
Block a user