From 1e41af7b87da67418f6f4fdc2f96c3ee7a4d3822 Mon Sep 17 00:00:00 2001 From: Eric Smith Date: Sun, 15 Apr 2018 22:28:16 -0600 Subject: [PATCH] Use memoryview for blocks and other disk structures. More work on mkfs subcommand. --- sosdisk.py | 102 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 76 insertions(+), 26 deletions(-) diff --git a/sosdisk.py b/sosdisk.py index 5759e90..d0dcc61 100644 --- a/sosdisk.py +++ b/sosdisk.py @@ -238,8 +238,8 @@ class SOSVolumeDirectoryHeader(SOSDirectoryEntry): assert self.storage_type == StorageType.volume_directory_header assert self.version == 0 assert self.min_version == 0 - assert self.entry_length == 0x27 - assert self.entries_per_block == 0x0d + assert self.entry_length == 39 # XXX compare to SOSDirectory entry_length instead + assert self.entries_per_block == 13 # XXX compare to SOSDirectory entries_per_block instead assert self.total_blocks == disk.block_count self.creation = u32_to_sos_timestamp(creation_b) @@ -310,43 +310,83 @@ class SOSFileEntry(SOSDirectoryEntry): class SOSDirectoryBlock: - def __init__(self, disk, block_num, first_dir_block = False): + def __init__(self, + disk, + directory, # the directory containing this block + block_num, + first_dir_block = False, + new = False, + directory_name = None, # if new + prev_block = None): # if new self.disk = disk - data = disk.get_blocks(block_num) + 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) + + def __read_from_image(self, block_num, first_dir_block = False): + data = self.disk.get_blocks(block_num) self.prev_block, self.next_block = struct.unpack('