diff --git a/dissect/extfs/c_ext.py b/dissect/extfs/c_ext.py index e5b0e07..fd6cdf8 100644 --- a/dissect/extfs/c_ext.py +++ b/dissect/extfs/c_ext.py @@ -1,6 +1,6 @@ import stat -from dissect import cstruct +from dissect.cstruct import cstruct ext_def = """ #define EXT2_SBOFF 1024 // offset to superblock @@ -397,8 +397,7 @@ }; """ -c_ext = cstruct.cstruct() -c_ext.load(ext_def) +c_ext = cstruct().load(ext_def) EXT2 = 2 EXT3 = 3 diff --git a/dissect/extfs/c_jdb2.py b/dissect/extfs/c_jdb2.py index 12f9778..d5d6e41 100644 --- a/dissect/extfs/c_jdb2.py +++ b/dissect/extfs/c_jdb2.py @@ -1,4 +1,4 @@ -from dissect import cstruct +from dissect.cstruct import cstruct jdb2_def = """ #define JBD2_MAGIC_NUMBER 0xC03B3998 @@ -87,5 +87,4 @@ }; """ -c_jdb2 = cstruct.cstruct(endian=">") -c_jdb2.load(jdb2_def) +c_jdb2 = cstruct(endian=">").load(jdb2_def) diff --git a/dissect/extfs/extfs.py b/dissect/extfs/extfs.py index 50dcc10..d7e89ea 100644 --- a/dissect/extfs/extfs.py +++ b/dissect/extfs/extfs.py @@ -9,7 +9,6 @@ from typing import BinaryIO, Iterator, Optional, Union from uuid import UUID -from dissect.cstruct import Instance from dissect.util import ts from dissect.util.stream import RangeStream, RunlistStream @@ -154,7 +153,7 @@ def get_inode( return inode - def _read_group_desc(self, group_num: int) -> Instance: + def _read_group_desc(self, group_num: int) -> c_ext.ext2_group_desc | c_ext.ext4_group_desc: if group_num >= self.groups_count: raise Error("Group number exceeds amount of groups") @@ -204,7 +203,7 @@ def __init__( def __repr__(self) -> str: return f"" - def _read_inode(self) -> Instance: + def _read_inode(self) -> c_ext.ext4_inode: block_group_num, index = divmod(self.inum - 1, self.extfs.sb.s_inodes_per_group) block_group = self.extfs._read_group_desc(block_group_num) @@ -218,7 +217,7 @@ def _read_inode(self) -> Instance: return c_ext.ext4_inode(self.extfs.fh) @property - def inode(self) -> Instance: + def inode(self) -> c_ext.ext4_inode: if not self._inode: self._inode = self._read_inode() return self._inode @@ -456,7 +455,7 @@ def open(self) -> BinaryIO: class XAttr: - def __init__(self, extfs: ExtFS, inode: INode, entry: Instance, value: bytes): + def __init__(self, extfs: ExtFS, inode: INode, entry: c_ext.ext4_xattr_entry, value: bytes): self.extfs = extfs self.inode = inode self.entry = entry @@ -496,7 +495,7 @@ def _parse_indirect(inode: INode, offset: int, num_blocks: int, level: int) -> l return blocks -def _parse_extents(inode: INode, buf: bytes) -> Iterator[Instance]: +def _parse_extents(inode: INode, buf: bytes) -> Iterator[c_ext.ext4_extent]: extent_header = c_ext.ext4_extent_header(buf) if extent_header.eh_magic != 0xF30A: diff --git a/dissect/extfs/journal.py b/dissect/extfs/journal.py index 0dd6065..5903741 100644 --- a/dissect/extfs/journal.py +++ b/dissect/extfs/journal.py @@ -4,7 +4,6 @@ import io from typing import BinaryIO, Iterator, Optional -from dissect.cstruct import Instance from dissect.util.stream import RangeStream from dissect.extfs.c_jdb2 import c_jdb2 @@ -83,7 +82,7 @@ def walk(self) -> Iterator[CommitBlock]: class DescriptorBlock: - def __init__(self, jdb2: JDB2, header: Instance, block: int): + def __init__(self, jdb2: JDB2, header: c_jdb2.journal_header, block: int): self.jdb2 = jdb2 self.header = header self.journal_block = block @@ -110,7 +109,9 @@ def tags(self) -> Iterator[DescriptorBlockTag]: class DescriptorBlockTag: - def __init__(self, descriptor: DescriptorBlock, tag: Instance, journal_block: int): + def __init__( + self, descriptor: DescriptorBlock, tag: c_jdb2.journal_block_tag | c_jdb2.journal_block_tag3, journal_block: int + ): self.descriptor = descriptor self.tag = tag self.journal_block = journal_block @@ -127,7 +128,11 @@ def open(self) -> BinaryIO: class CommitBlock: def __init__( - self, jdb2: JDB2, header: Instance, journal_block: int, descriptors: Optional[list[DescriptorBlock]] = None + self, + jdb2: JDB2, + header: c_jdb2.commit_header, + journal_block: int, + descriptors: Optional[list[DescriptorBlock]] = None, ): self.jdb2 = jdb2 self.header = header diff --git a/pyproject.toml b/pyproject.toml index 5fc3eab..5936721 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,8 +25,8 @@ classifiers = [ "Topic :: Utilities", ] dependencies = [ - "dissect.cstruct>=3.0.dev,<4.0.dev", - "dissect.util>=3.0.dev,<4.0.dev", + "dissect.cstruct>=4.dev,<5", + "dissect.util>=3,<4", ] dynamic = ["version"] @@ -35,6 +35,12 @@ homepage = "https://dissect.tools" documentation = "https://docs.dissect.tools/en/latest/projects/dissect.extfs" repository = "https://github.com/fox-it/dissect.extfs" +[project.optional-dependencies] +dev = [ + "dissect.cstruct>=4.0.dev,<5.0.dev", + "dissect.util>=3.0.dev,<4.0.dev", +] + [tool.black] line-length = 120 diff --git a/tox.ini b/tox.ini index 67e8e8a..7bd2890 100644 --- a/tox.ini +++ b/tox.ini @@ -11,6 +11,7 @@ minversion = 4.4.3 requires = virtualenv>=20.16.6 [testenv] +extras = dev deps = pytest pytest-cov