From c172055e46e06e6c461b886529ad6aae5d94159e Mon Sep 17 00:00:00 2001 From: Eric Smith Date: Thu, 16 May 2019 22:44:30 -0600 Subject: [PATCH] Minor refactoring. --- sosdisk.py | 74 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 56 insertions(+), 18 deletions(-) diff --git a/sosdisk.py b/sosdisk.py index 75ab8d7..75cabc2 100644 --- a/sosdisk.py +++ b/sosdisk.py @@ -279,6 +279,8 @@ class SOSTree(SOSStorage): self.last_block_index = j class SOSDirectoryEntry: + entry_size = 39 + def __init__(self, disk): self.disk = disk @@ -344,8 +346,8 @@ class SOSFileEntry(SOSDirectoryEntry): return self.pos = 0 self.eof = eof [2] << 16 | eof [1] << 8 | eof[0] - self.name = bytes_to_sos_filename(name_length, name_b) - self.creation = u32_to_sos_timestamp(creation_b) + self._name = bytes_to_sos_filename(name_length, name_b) + self._creation = u32_to_sos_timestamp(creation_b) if self.storage_type == StorageType.subdirectory: assert self.file_type == FileType.dir self.subdir = SOSDirectory(disk, self.key_pointer) @@ -354,19 +356,20 @@ class SOSFileEntry(SOSDirectoryEntry): assert self.file_type != FileType.dir self.storage = SOSStorage.create(self.disk, self.storage_type, self.key_pointer) + @property + def name(self): + return self._name - def get_name(self): - return self.name - + @property + def creation_timestamp(self): + return self._creation def __len__(self): return self.eof - def __getitem__(self, key): return self.storage.__getitem__(key) - def seek(self, offset, from_what = 0): if from_what == 0: self.pos = offset @@ -407,7 +410,7 @@ class SOSFileEntry(SOSDirectoryEntry): ft = FileType(self.file_type).name except ValueError as e: ft = '$%02x' % self.file_type - print(' %s %s %s %6d' % (self.creation, ft, attrs, self.eof), end = '', file = file) + print(' %s %s %s %6d' % (self.creation_timestamp, ft, attrs, self.eof), end = '', file = file) print(' %s' % (prefix + self.name), file = file) if recursive and self.storage_type == StorageType.subdirectory: self.subdir.print(prefix + self.name + '/', @@ -417,6 +420,8 @@ class SOSFileEntry(SOSDirectoryEntry): class SOSDirectoryBlock: + first_entry_offset = 4 + def __init__(self, disk, directory, # the directory containing this block @@ -424,30 +429,49 @@ class SOSDirectoryBlock: first_dir_block = False, new = False, directory_name = None, # if new - prev_block = None): # if new + prev_block_num = None): # if new self.disk = disk self.directory = directory self.entries = [] - self.entry_count = (self.disk.block_size - 4) // self.directory.entry_length if new: self.__create_new(block_num, first_dir_block) else: self.__read_from_image(block_num, first_dir_block) + @property + def prev_block(self): + return struct.unpack('