mirror of
https://mojerepo.cf/NeoBoot/NeoBoot-9.git
synced 2025-10-28 23:46:05 +01:00
Delete __init__.py
This commit is contained in:
@@ -1,116 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
from ubi.block import sort
|
||||
|
||||
class ubi_file(object):
|
||||
|
||||
def __init__(self, path, block_size, start_offset = 0, end_offset = None):
|
||||
self._fhandle = open(path, 'rb')
|
||||
self._start_offset = start_offset
|
||||
if end_offset:
|
||||
self._end_offset = end_offset
|
||||
else:
|
||||
self._fhandle.seek(0, 2)
|
||||
self._end_offset = self.tell()
|
||||
self._block_size = block_size
|
||||
if start_offset >= self._end_offset:
|
||||
raise Exception('Start offset larger than file size!')
|
||||
self._fhandle.seek(self._start_offset)
|
||||
|
||||
def _set_start(self, i):
|
||||
self._start_offset = i
|
||||
|
||||
def _get_start(self):
|
||||
return self._start_offset
|
||||
|
||||
start_offset = property(_get_start, _set_start)
|
||||
|
||||
def _get_end(self):
|
||||
return self._end_offset
|
||||
|
||||
end_offset = property(_get_end)
|
||||
|
||||
def _get_block_size(self):
|
||||
return self._block_size
|
||||
|
||||
block_size = property(_get_block_size)
|
||||
|
||||
def seek(self, offset):
|
||||
self._fhandle.seek(offset)
|
||||
|
||||
def read(self, size):
|
||||
return self._fhandle.read(size)
|
||||
|
||||
def tell(self):
|
||||
return self._fhandle.tell()
|
||||
|
||||
def reset(self):
|
||||
self._fhandle.seek(self.start_offset)
|
||||
|
||||
def reader(self):
|
||||
self.reset()
|
||||
while True:
|
||||
cur_loc = self._fhandle.tell()
|
||||
if self.end_offset and cur_loc > self.end_offset:
|
||||
break
|
||||
elif self.end_offset and self.end_offset - cur_loc < self.block_size:
|
||||
chunk_size = self.end_offset - cur_loc
|
||||
else:
|
||||
chunk_size = self.block_size
|
||||
buf = self.read(chunk_size)
|
||||
if not buf:
|
||||
break
|
||||
yield buf
|
||||
|
||||
def read_block(self, block):
|
||||
self.seek(block.file_offset)
|
||||
return self._fhandle.read(block.size)
|
||||
|
||||
def read_block_data(self, block):
|
||||
self.seek(block.file_offset + block.ec_hdr.data_offset)
|
||||
buf = self._fhandle.read(block.size - block.ec_hdr.data_offset - block.vid_hdr.data_pad)
|
||||
return buf
|
||||
|
||||
|
||||
class leb_virtual_file:
|
||||
|
||||
def __init__(self, ubi, volume):
|
||||
self._ubi = ubi
|
||||
self._volume = volume
|
||||
self._blocks = sort.by_leb(self._volume.get_blocks(self._ubi.blocks))
|
||||
self._seek = 0
|
||||
self.leb_data_size = len(self._blocks) * self._ubi.leb_size
|
||||
self._last_leb = -1
|
||||
self._last_buf = ''
|
||||
|
||||
def read(self, i):
|
||||
buf = ''
|
||||
leb = int(self.tell() / self._ubi.leb_size)
|
||||
offset = self.tell() % self._ubi.leb_size
|
||||
if leb == self._last_leb:
|
||||
self.seek(self.tell() + i)
|
||||
return self._last_buf[offset:offset + i]
|
||||
else:
|
||||
buf = self._ubi.file.read_block_data(self._ubi.blocks[self._blocks[leb]])
|
||||
self._last_buf = buf
|
||||
self._last_leb = leb
|
||||
self.seek(self.tell() + i)
|
||||
return buf[offset:offset + i]
|
||||
|
||||
def reset(self):
|
||||
self.seek(0)
|
||||
|
||||
def seek(self, offset):
|
||||
self._seek = offset
|
||||
|
||||
def tell(self):
|
||||
return self._seek
|
||||
|
||||
def reader(self):
|
||||
last_leb = 0
|
||||
for block in self._blocks:
|
||||
while 0 != self._ubi.blocks[block].leb_num - last_leb:
|
||||
last_leb += 1
|
||||
yield '\xff' * self._ubi.leb_size
|
||||
|
||||
last_leb += 1
|
||||
yield self._ubi.file.read_block_data(self._ubi.blocks[block])
|
||||
Reference in New Issue
Block a user