MCPcopy Create free account
hub / github.com/RT-Thread/env-windows / _FileInFile

Class _FileInFile

tools/python-3.11.9-amd64/Lib/tarfile.py:605–706  ·  view source on GitHub ↗

A thin wrapper around an existing file object that provides a part of its data as an individual file object.

Source from the content-addressed store, hash-verified

603# Extraction file object
604#------------------------
605class _FileInFile(object):
606 """A thin wrapper around an existing file object that
607 provides a part of its data as an individual file
608 object.
609 """
610
611 def __init__(self, fileobj, offset, size, blockinfo=None):
612 self.fileobj = fileobj
613 self.offset = offset
614 self.size = size
615 self.position = 0
616 self.name = getattr(fileobj, "name", None)
617 self.closed = False
618
619 if blockinfo is None:
620 blockinfo = [(0, size)]
621
622 # Construct a map with data and zero blocks.
623 self.map_index = 0
624 self.map = []
625 lastpos = 0
626 realpos = self.offset
627 for offset, size in blockinfo:
628 if offset > lastpos:
629 self.map.append((False, lastpos, offset, None))
630 self.map.append((True, offset, offset + size, realpos))
631 realpos += size
632 lastpos = offset + size
633 if lastpos < self.size:
634 self.map.append((False, lastpos, self.size, None))
635
636 def flush(self):
637 pass
638
639 def readable(self):
640 return True
641
642 def writable(self):
643 return False
644
645 def seekable(self):
646 return self.fileobj.seekable()
647
648 def tell(self):
649 """Return the current file position.
650 """
651 return self.position
652
653 def seek(self, position, whence=io.SEEK_SET):
654 """Seek to a position in the file.
655 """
656 if whence == io.SEEK_SET:
657 self.position = min(max(position, 0), self.size)
658 elif whence == io.SEEK_CUR:
659 if position < 0:
660 self.position = max(self.position + position, 0)
661 else:
662 self.position = min(self.position + position, self.size)

Callers 1

__init__Method · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected