Source code for dfvfs.vfs.apm_directory

# -*- coding: utf-8 -*-
"""The Apple Partition Map (APM) directory implementation."""

from dfvfs.path import apm_path_spec
from dfvfs.vfs import directory


[docs] class APMDirectory(directory.Directory): """File system directory that uses pyvsapm.""" _STATUS_FLAG_IS_VALID = 0x00000001 _STATUS_FLAG_IS_ALLOCATED = 0x00000002 def _EntriesGenerator(self): """Retrieves directory entries. Since a directory can contain a vast number of entries using a generator is more memory efficient. Yields: APMPathSpec: a path specification. """ entry_index = getattr(self.path_spec, 'entry_index', None) location = getattr(self.path_spec, 'location', None) # Only the virtual root file has directory entries. if (entry_index is None and location is not None and location == self._file_system.LOCATION_ROOT): vsapm_volume = self._file_system.GetAPMVolume() for partition_index, partition in enumerate(vsapm_volume.partitions): if (partition.status_flags & self._STATUS_FLAG_IS_VALID and partition.status_flags & self._STATUS_FLAG_IS_ALLOCATED): apm_entry_index = partition_index + 1 yield apm_path_spec.APMPathSpec( entry_index=entry_index, location=f'/p{apm_entry_index:d}', parent=self.path_spec.parent)