Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import struct
- import sys
- class InfoWrapper(object):
- def __init__(self, source):
- self._source = source
- self._count = 0
- self._header_buffer = b''
- def read(self, size):
- chunk = self._source.read(size)
- if len(self._header_buffer) < 512 * 4:
- self._header_buffer += chunk
- self._count += len(chunk)
- return chunk
- def _qcow_header_data(self):
- magic, version, bf_offset, bf_sz, cluster_bits, size = (
- struct.unpack('>IIQIIQ', self._header_buffer[:32]))
- return magic, size
- @property
- def is_qcow(self):
- if len(self._header_buffer) < 512:
- return False
- magic, size = self._qcow_header_data()
- return magic == 0x514649FB
- @property
- def qcow_size(self):
- magic, size = self._qcow_header_data()
- return size
- @property
- def raw_size(self):
- return self._count
- if __name__ == '__main__':
- stream = InfoWrapper(sys.stdin)
- while True:
- chunk = stream.read(65536)
- # Pretend this writes to some destination
- if not chunk:
- break
- if stream.is_qcow:
- print('Source was qcow file, virtual size %i' % stream.qcow_size)
- else:
- print('Source was raw file, size %i' % stream.raw_size)
Advertisement
Add Comment
Please, Sign In to add comment