mirror of
https://github.com/elliotnunn/machfs.git
synced 2024-09-27 17:56:08 +00:00
API: add 'sparse' option to Volume.write()
This will cause it to return a (bytes, num_free_bytes, bytes) tuple.
This commit is contained in:
parent
1362dab2c0
commit
eb61c947de
@ -218,7 +218,7 @@ class Volume(AbstractFolder):
|
|||||||
self.pop('Desktop DB', None)
|
self.pop('Desktop DB', None)
|
||||||
self.pop('Desktop DF', None)
|
self.pop('Desktop DF', None)
|
||||||
|
|
||||||
def write(self, size=800*1024, align=512, desktopdb=True, bootable=True, startapp=None):
|
def write(self, size=800*1024, align=512, desktopdb=True, bootable=True, startapp=None, sparse=False):
|
||||||
if align < 512 or align % 512:
|
if align < 512 or align % 512:
|
||||||
raise ValueError('align must be multiple of 512')
|
raise ValueError('align must be multiple of 512')
|
||||||
|
|
||||||
@ -459,8 +459,17 @@ class Volume(AbstractFolder):
|
|||||||
vib += bytes(512-len(vib))
|
vib += bytes(512-len(vib))
|
||||||
|
|
||||||
assert all(len(x) == drAlBlkSiz for x in blkaccum)
|
assert all(len(x) == drAlBlkSiz for x in blkaccum)
|
||||||
finalchunks = [bootblocks, vib, bitmap, *blkaccum]
|
left_elements = [bootblocks, vib, bitmap, *blkaccum]
|
||||||
finalchunks.append(bytes(size - sum(len(x) for x in finalchunks) - 2*512))
|
|
||||||
finalchunks.append(vib)
|
unused_offset = sum(len(x) for x in left_elements)
|
||||||
finalchunks.append(bytes(512))
|
unused_length = size - unused_offset - 2*512
|
||||||
return b''.join(finalchunks)
|
|
||||||
|
right_elements = [vib, bytes(512)]
|
||||||
|
|
||||||
|
if sparse:
|
||||||
|
return b''.join(left_elements), unused_length, b''.join(right_elements)
|
||||||
|
else:
|
||||||
|
all_elements = left_elements
|
||||||
|
all_elements.append(bytes(unused_length))
|
||||||
|
all_elements.extend(right_elements)
|
||||||
|
return b''.join(all_elements)
|
||||||
|
Loading…
Reference in New Issue
Block a user