dissect.cstruct 5.0.dev0__py3-none-any.whl → 5.0.dev7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. dissect/cstruct/__init__.py +2 -2
  2. dissect/cstruct/bitbuffer.py +3 -3
  3. dissect/cstruct/compiler.py +7 -7
  4. dissect/cstruct/cstruct.py +192 -65
  5. dissect/cstruct/expression.py +8 -9
  6. dissect/cstruct/lexer.py +17 -7
  7. dissect/cstruct/parser.py +31 -13
  8. dissect/cstruct/tools/stubgen.py +18 -22
  9. dissect/cstruct/types/base.py +78 -33
  10. dissect/cstruct/types/char.py +21 -11
  11. dissect/cstruct/types/enum.py +33 -13
  12. dissect/cstruct/types/int.py +9 -7
  13. dissect/cstruct/types/leb128.py +6 -4
  14. dissect/cstruct/types/packed.py +19 -10
  15. dissect/cstruct/types/pointer.py +74 -56
  16. dissect/cstruct/types/structure.py +130 -30
  17. dissect/cstruct/types/void.py +6 -4
  18. dissect/cstruct/types/wchar.py +26 -14
  19. dissect/cstruct/{utils.py → util.py} +36 -25
  20. {dissect_cstruct-5.0.dev0.dist-info → dissect_cstruct-5.0.dev7.dist-info}/METADATA +1 -1
  21. dissect_cstruct-5.0.dev7.dist-info/RECORD +32 -0
  22. {dissect_cstruct-5.0.dev0.dist-info → dissect_cstruct-5.0.dev7.dist-info}/scm_file_list.json +2 -2
  23. dissect_cstruct-5.0.dev7.dist-info/scm_version.json +8 -0
  24. dissect_cstruct-5.0.dev0.dist-info/RECORD +0 -32
  25. dissect_cstruct-5.0.dev0.dist-info/scm_version.json +0 -8
  26. /dissect/cstruct/{exceptions.py → exception.py} +0 -0
  27. {dissect_cstruct-5.0.dev0.dist-info → dissect_cstruct-5.0.dev7.dist-info}/WHEEL +0 -0
  28. {dissect_cstruct-5.0.dev0.dist-info → dissect_cstruct-5.0.dev7.dist-info}/entry_points.txt +0 -0
  29. {dissect_cstruct-5.0.dev0.dist-info → dissect_cstruct-5.0.dev7.dist-info}/licenses/COPYRIGHT +0 -0
  30. {dissect_cstruct-5.0.dev0.dist-info → dissect_cstruct-5.0.dev7.dist-info}/licenses/LICENSE +0 -0
  31. {dissect_cstruct-5.0.dev0.dist-info → dissect_cstruct-5.0.dev7.dist-info}/top_level.txt +0 -0
@@ -1,10 +1,14 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import sys
4
- from typing import Any, BinaryIO, ClassVar
4
+ from typing import TYPE_CHECKING, Any, BinaryIO, ClassVar
5
5
 
6
+ from dissect.cstruct.exception import ArraySizeError
6
7
  from dissect.cstruct.types.base import EOF, BaseArray, BaseType
7
8
 
9
+ if TYPE_CHECKING:
10
+ from dissect.cstruct.cstruct import Endianness
11
+
8
12
 
9
13
  class WcharArray(str, BaseArray):
10
14
  """Wide-character array type for reading and writing UTF-16 strings."""
@@ -16,14 +20,20 @@ class WcharArray(str, BaseArray):
16
20
  return type.__call__(cls, "\x00" * (0 if cls.dynamic or cls.null_terminated else cls.num_entries))
17
21
 
18
22
  @classmethod
19
- def _read(cls, stream: BinaryIO, context: dict[str, Any] | None = None) -> WcharArray:
20
- return type.__call__(cls, super()._read(stream, context))
23
+ def _read(cls, stream: BinaryIO, *, context: dict[str, Any] | None = None, endian: Endianness) -> WcharArray:
24
+ return type.__call__(cls, super()._read(stream, context=context, endian=endian))
21
25
 
22
26
  @classmethod
23
- def _write(cls, stream: BinaryIO, data: str) -> int:
27
+ def _write(cls, stream: BinaryIO, data: str, *, endian: Endianness) -> int:
24
28
  if cls.null_terminated:
25
29
  data += "\x00"
26
- return stream.write(data.encode(Wchar.__encoding_map__[cls.cs.endian]))
30
+
31
+ if not cls.dynamic and (remaining := cls.num_entries - (actual_size := len(data))):
32
+ if remaining < 0:
33
+ raise ArraySizeError(f"Expected static array size {cls.num_entries}, got {actual_size} instead.")
34
+ data += "\x00" * remaining
35
+
36
+ return stream.write(data.encode(Wchar.__encoding_map__[endian]))
27
37
 
28
38
 
29
39
  class Wchar(str, BaseType):
@@ -32,7 +42,7 @@ class Wchar(str, BaseType):
32
42
  ArrayType = WcharArray
33
43
 
34
44
  __slots__ = ()
35
- __encoding_map__: ClassVar[dict[str, str]] = {
45
+ __encoding_map__: ClassVar[dict[Endianness, str]] = {
36
46
  "@": f"utf-16-{sys.byteorder[0]}e",
37
47
  "=": f"utf-16-{sys.byteorder[0]}e",
38
48
  "<": "utf-16-le",
@@ -45,11 +55,13 @@ class Wchar(str, BaseType):
45
55
  return type.__call__(cls, "\x00")
46
56
 
47
57
  @classmethod
48
- def _read(cls, stream: BinaryIO, context: dict[str, Any] | None = None) -> Wchar:
49
- return cls._read_array(stream, 1, context)
58
+ def _read(cls, stream: BinaryIO, *, context: dict[str, Any] | None = None, endian: Endianness) -> Wchar:
59
+ return cls._read_array(stream, 1, context=context, endian=endian)
50
60
 
51
61
  @classmethod
52
- def _read_array(cls, stream: BinaryIO, count: int, context: dict[str, Any] | None = None) -> Wchar:
62
+ def _read_array(
63
+ cls, stream: BinaryIO, count: int, *, context: dict[str, Any] | None = None, endian: Endianness
64
+ ) -> Wchar:
53
65
  if count == 0:
54
66
  return type.__call__(cls, "")
55
67
 
@@ -60,10 +72,10 @@ class Wchar(str, BaseType):
60
72
  if count != EOF and len(data) != count:
61
73
  raise EOFError(f"Read {len(data)} bytes, but expected {count}")
62
74
 
63
- return type.__call__(cls, data.decode(cls.__encoding_map__[cls.cs.endian]))
75
+ return type.__call__(cls, data.decode(cls.__encoding_map__[endian]))
64
76
 
65
77
  @classmethod
66
- def _read_0(cls, stream: BinaryIO, context: dict[str, Any] | None = None) -> Wchar:
78
+ def _read_0(cls, stream: BinaryIO, *, context: dict[str, Any] | None = None, endian: Endianness) -> Wchar:
67
79
  buf = []
68
80
  while True:
69
81
  point = stream.read(2)
@@ -75,8 +87,8 @@ class Wchar(str, BaseType):
75
87
 
76
88
  buf.append(point)
77
89
 
78
- return type.__call__(cls, b"".join(buf).decode(cls.__encoding_map__[cls.cs.endian]))
90
+ return type.__call__(cls, b"".join(buf).decode(cls.__encoding_map__[endian]))
79
91
 
80
92
  @classmethod
81
- def _write(cls, stream: BinaryIO, data: str) -> int:
82
- return stream.write(data.encode(cls.__encoding_map__[cls.cs.endian]))
93
+ def _write(cls, stream: BinaryIO, data: str, *, endian: Endianness) -> int:
94
+ return stream.write(data.encode(cls.__encoding_map__[endian]))
@@ -11,6 +11,7 @@ if TYPE_CHECKING:
11
11
  from collections.abc import Iterator
12
12
  from typing import Literal
13
13
 
14
+ from dissect.cstruct.cstruct import AllowedEndianness
14
15
  from dissect.cstruct.types.base import BaseType
15
16
  from dissect.cstruct.types.structure import Structure
16
17
 
@@ -51,13 +52,16 @@ COLOR_CLEAR_BOLD = "\033[1;0m"
51
52
 
52
53
  PRINTABLE = string.digits + string.ascii_letters + string.punctuation + " "
53
54
 
54
- ENDIANNESS_MAP: dict[str, Literal["big", "little"]] = {
55
- "@": sys.byteorder,
56
- "=": sys.byteorder,
55
+
56
+ ENDIANNESS_TO_BYTEORDER_MAP: dict[AllowedEndianness, Literal["big", "little"]] = {
57
57
  "<": "little",
58
58
  ">": "big",
59
59
  "!": "big",
60
+ "@": sys.byteorder,
61
+ "=": sys.byteorder,
60
62
  "network": "big",
63
+ "little": "little",
64
+ "big": "big",
61
65
  }
62
66
 
63
67
  Palette = list[tuple[int, str]]
@@ -323,111 +327,118 @@ def dumpstruct(
323
327
  return _dumpstruct(obj, obj.dumps(), offset, color, output, autoskip)
324
328
 
325
329
 
326
- def pack(value: int, size: int | None = None, endian: str = "little") -> bytes:
330
+ def pack(value: int, size: int | None = None, endian: AllowedEndianness = "little") -> bytes:
327
331
  """Pack an integer value to a given bit size, endianness.
328
332
 
329
333
  Arguments:
330
334
  value: Value to pack.
331
335
  size: Integer size in bits.
332
- endian: Endianness to use (little, big, network, <, > or !)
336
+ endian: Endianness to use (little, big, network, <, >, !, @ or =).
333
337
  """
338
+ if endian not in ENDIANNESS_TO_BYTEORDER_MAP:
339
+ raise ValueError(f"Invalid endianness: {endian!r} (should be little, big, network, <, >, !, @ or =)")
340
+
334
341
  size = ((size or value.bit_length()) + 7) // 8
335
- return value.to_bytes(size, ENDIANNESS_MAP.get(endian, endian), signed=value < 0)
342
+ return value.to_bytes(size, ENDIANNESS_TO_BYTEORDER_MAP[endian], signed=value < 0)
336
343
 
337
344
 
338
- def unpack(value: bytes, size: int | None = None, endian: str = "little", sign: bool = False) -> int:
345
+ def unpack(value: bytes, size: int | None = None, endian: AllowedEndianness = "little", sign: bool = False) -> int:
339
346
  """Unpack an integer value from a given bit size, endianness and sign.
340
347
 
341
348
  Arguments:
342
349
  value: Value to unpack.
343
350
  size: Integer size in bits.
344
- endian: Endianness to use (little, big, network, <, > or !)
351
+ endian: Endianness to use (little, big, network, <, >, !, @ or =).
345
352
  sign: Signedness of the integer.
346
353
  """
347
354
  if size and len(value) != size // 8:
348
355
  raise ValueError(f"Invalid byte value, expected {size // 8} bytes, got {len(value)} bytes")
349
- return int.from_bytes(value, ENDIANNESS_MAP.get(endian, endian), signed=sign)
356
+
357
+ if endian not in ENDIANNESS_TO_BYTEORDER_MAP:
358
+ raise ValueError(f"Invalid endianness: {endian!r} (should be little, big, network, <, >, !, @ or =)")
359
+
360
+ return int.from_bytes(value, ENDIANNESS_TO_BYTEORDER_MAP[endian], signed=sign)
350
361
 
351
362
 
352
- def p8(value: int, endian: str = "little") -> bytes:
363
+ def p8(value: int, endian: AllowedEndianness = "little") -> bytes:
353
364
  """Pack an 8 bit integer.
354
365
 
355
366
  Arguments:
356
367
  value: Value to pack.
357
- endian: Endianness to use (little, big, network, <, > or !)
368
+ endian: Endianness to use (little, big, network, <, >, !, @ or =).
358
369
  """
359
370
  return pack(value, 8, endian)
360
371
 
361
372
 
362
- def p16(value: int, endian: str = "little") -> bytes:
373
+ def p16(value: int, endian: AllowedEndianness = "little") -> bytes:
363
374
  """Pack a 16 bit integer.
364
375
 
365
376
  Arguments:
366
377
  value: Value to pack.
367
- endian: Endianness to use (little, big, network, <, > or !)
378
+ endian: Endianness to use (little, big, network, <, >, !, @ or =).
368
379
  """
369
380
  return pack(value, 16, endian)
370
381
 
371
382
 
372
- def p32(value: int, endian: str = "little") -> bytes:
383
+ def p32(value: int, endian: AllowedEndianness = "little") -> bytes:
373
384
  """Pack a 32 bit integer.
374
385
 
375
386
  Arguments:
376
387
  value: Value to pack.
377
- endian: Endianness to use (little, big, network, <, > or !)
388
+ endian: Endianness to use (little, big, network, <, >, !, @ or =).
378
389
  """
379
390
  return pack(value, 32, endian)
380
391
 
381
392
 
382
- def p64(value: int, endian: str = "little") -> bytes:
393
+ def p64(value: int, endian: AllowedEndianness = "little") -> bytes:
383
394
  """Pack a 64 bit integer.
384
395
 
385
396
  Arguments:
386
397
  value: Value to pack.
387
- endian: Endianness to use (little, big, network, <, > or !)
398
+ endian: Endianness to use (little, big, network, <, >, !, @ or =).
388
399
  """
389
400
  return pack(value, 64, endian)
390
401
 
391
402
 
392
- def u8(value: bytes, endian: str = "little", sign: bool = False) -> int:
403
+ def u8(value: bytes, endian: AllowedEndianness = "little", sign: bool = False) -> int:
393
404
  """Unpack an 8 bit integer.
394
405
 
395
406
  Arguments:
396
407
  value: Value to unpack.
397
- endian: Endianness to use (little, big, network, <, > or !)
408
+ endian: Endianness to use (little, big, network, <, >, !, @ or =).
398
409
  sign: Signedness of the integer.
399
410
  """
400
411
  return unpack(value, 8, endian, sign)
401
412
 
402
413
 
403
- def u16(value: bytes, endian: str = "little", sign: bool = False) -> int:
414
+ def u16(value: bytes, endian: AllowedEndianness = "little", sign: bool = False) -> int:
404
415
  """Unpack a 16 bit integer.
405
416
 
406
417
  Arguments:
407
418
  value: Value to unpack.
408
- endian: Endianness to use (little, big, network, <, > or !)
419
+ endian: Endianness to use (little, big, network, <, >, !, @ or =).
409
420
  sign: Signedness of the integer.
410
421
  """
411
422
  return unpack(value, 16, endian, sign)
412
423
 
413
424
 
414
- def u32(value: bytes, endian: str = "little", sign: bool = False) -> int:
425
+ def u32(value: bytes, endian: AllowedEndianness = "little", sign: bool = False) -> int:
415
426
  """Unpack a 32 bit integer.
416
427
 
417
428
  Arguments:
418
429
  value: Value to unpack.
419
- endian: Endianness to use (little, big, network, <, > or !)
430
+ endian: Endianness to use (little, big, network, <, >, !, @ or =).
420
431
  sign: Signedness of the integer.
421
432
  """
422
433
  return unpack(value, 32, endian, sign)
423
434
 
424
435
 
425
- def u64(value: bytes, endian: str = "little", sign: bool = False) -> int:
436
+ def u64(value: bytes, endian: AllowedEndianness = "little", sign: bool = False) -> int:
426
437
  """Unpack a 64 bit integer.
427
438
 
428
439
  Arguments:
429
440
  value: Value to unpack.
430
- endian: Endianness to use (little, big, network, <, > or !)
441
+ endian: Endianness to use (little, big, network, <, >, !, @ or =).
431
442
  sign: Signedness of the integer.
432
443
  """
433
444
  return unpack(value, 64, endian, sign)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dissect.cstruct
3
- Version: 5.0.dev0
3
+ Version: 5.0.dev7
4
4
  Summary: A Dissect module implementing a parser for C-like structures: structure parsing in Python made easy
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
6
  License-Expression: Apache-2.0
@@ -0,0 +1,32 @@
1
+ dissect/cstruct/__init__.py,sha256=8VNVQfPH4aH5V_kD-jvtLPwQ-ag9ppKHTy3dbxIR6ik,1378
2
+ dissect/cstruct/bitbuffer.py,sha256=lZuLUOluHx4mzFGRp62_FO45_iJwXayyzv9-v8b0Q08,2687
3
+ dissect/cstruct/compiler.py,sha256=vVg2H-pi9ugQ8Xvhs1JQ--4BjA5gtO2tW-1W8jr36V4,14283
4
+ dissect/cstruct/cstruct.py,sha256=bsCesSpbE0H4MUsHwb2iEbeadOBlOSAVENwyoP-UkP8,24929
5
+ dissect/cstruct/exception.py,sha256=RqD08LuBkbMqa3iQ1A05DNN8XgEmQR_SUnguwe9LGo8,316
6
+ dissect/cstruct/expression.py,sha256=MEwqHGgqA2fUk4kYk4lRLDWNTAMhB4-saJ5BgTxl7OA,7956
7
+ dissect/cstruct/lexer.py,sha256=NDUfAWgyxgRNRuVO8ExXQ51LqQXS2mv9bywVa_M7tFQ,19665
8
+ dissect/cstruct/parser.py,sha256=xCK-1O8c86sVFvjaXXSRgTsJWWd0ncKM6KJf2wbyGG8,21348
9
+ dissect/cstruct/util.py,sha256=S__kLEb9HKZg_WZR4CGtXDxkIkERLKbzFTHoU8FT8tU,15313
10
+ dissect/cstruct/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ dissect/cstruct/tools/stubgen.py,sha256=FLQieYE-MeKK31DcrDzwNUropUYHPjwdfcDb1X2L6j4,7651
12
+ dissect/cstruct/types/__init__.py,sha256=6P71Pu94Dv7RNjZpDZ19pqzx-G0QzmQw4q0-3zWALso,911
13
+ dissect/cstruct/types/base.py,sha256=rU1S2FQllx7X7BQG7qMOwNa7waxAJyuTHTNwtkiAz0g,12763
14
+ dissect/cstruct/types/char.py,sha256=s4zDmnbuOjwHgcsnEihjSqgC6H3t1jsfBTYH2ykwvHU,2997
15
+ dissect/cstruct/types/enum.py,sha256=YIWyP3H0tdxmuSI82enoULiN0YevpnU0UaY5ioBCYfI,8518
16
+ dissect/cstruct/types/flag.py,sha256=7xxQjFEDPHSQOxBHgcc75WzPiAxflOquwr7Z7c3erLE,2347
17
+ dissect/cstruct/types/int.py,sha256=Ewejng5pBYnQHPtzL5W0wQMJVUPYyrY8ALES8mFaabI,1324
18
+ dissect/cstruct/types/leb128.py,sha256=V97XTJT_Xbw1LpTwTN1OkjPHuQQAQUxd8OGuA6yEDmE,2387
19
+ dissect/cstruct/types/packed.py,sha256=78nQWm-yylgfK3858nN-XZhO5jiqyO-piGNEyPD2ps4,2458
20
+ dissect/cstruct/types/pointer.py,sha256=eGMrB_tTnKXKmYrcqyA_12IdukXcxRG3WOeQ1dgt7lk,3927
21
+ dissect/cstruct/types/structure.py,sha256=7pBg0moZbszeRomFEp5CbAHZcd1J8IVTmEG9Mo2eKS0,37571
22
+ dissect/cstruct/types/void.py,sha256=LCYnTcxsFPaxln36QEUxWuCZVioHRRckMuqtlm6tH54,1218
23
+ dissect/cstruct/types/wchar.py,sha256=YCYlu91D9AMVpWOLbVMdpvDDURH-EqyppM5UMDU5UQw,3200
24
+ dissect_cstruct-5.0.dev7.dist-info/licenses/COPYRIGHT,sha256=H-18RXfshdH9AdHwW2eO1Xa-5s6tY5eipHh5c0whDu4,316
25
+ dissect_cstruct-5.0.dev7.dist-info/licenses/LICENSE,sha256=PhUqiw6jAh2KbBdVRPBq_hfAvfcTBin7nZ3CK7NQbTM,11341
26
+ dissect_cstruct-5.0.dev7.dist-info/METADATA,sha256=IUF-_jFf7_GABYqAww23JWUTr-f73OKwmaICtDcOGc8,9255
27
+ dissect_cstruct-5.0.dev7.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
28
+ dissect_cstruct-5.0.dev7.dist-info/entry_points.txt,sha256=z53zqZqwD2OLrAkRwrP4wTeiU9CQe7xrMly0T2c0_wQ,71
29
+ dissect_cstruct-5.0.dev7.dist-info/scm_file_list.json,sha256=nuFWhDGL6VmjcwOB94CSfjNBblnsa9imUy8X4BLyvhw,2306
30
+ dissect_cstruct-5.0.dev7.dist-info/scm_version.json,sha256=wMGNV4ui6dgAUOW0hK23797wTuOlVvhVvvLFz_dXXFk,162
31
+ dissect_cstruct-5.0.dev7.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
32
+ dissect_cstruct-5.0.dev7.dist-info/RECORD,,
@@ -14,10 +14,10 @@
14
14
  ".github/workflows/dissect-ci.yml",
15
15
  "dissect/cstruct/parser.py",
16
16
  "dissect/cstruct/compiler.py",
17
+ "dissect/cstruct/exception.py",
18
+ "dissect/cstruct/util.py",
17
19
  "dissect/cstruct/cstruct.py",
18
20
  "dissect/cstruct/bitbuffer.py",
19
- "dissect/cstruct/utils.py",
20
- "dissect/cstruct/exceptions.py",
21
21
  "dissect/cstruct/lexer.py",
22
22
  "dissect/cstruct/expression.py",
23
23
  "dissect/cstruct/__init__.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "5.0.dev0",
3
+ "distance": 7,
4
+ "node": "g32253fe9f286383a8bda6b953c7c85571cd89833",
5
+ "dirty": true,
6
+ "branch": "main",
7
+ "node_date": "2026-07-20"
8
+ }
@@ -1,32 +0,0 @@
1
- dissect/cstruct/__init__.py,sha256=Z47dU_PpbZyc2ZSyu-ww-ncX6igaTw0ItVHzVgiaiKI,1380
2
- dissect/cstruct/bitbuffer.py,sha256=bid_N4ZsaTeC3x5Fzs8viUrldT863dMPtEDih20Nt6k,2644
3
- dissect/cstruct/compiler.py,sha256=uOjteLdoUIVNSX71TsBAusW8U085RRH9dXkbK3dp1vY,14203
4
- dissect/cstruct/cstruct.py,sha256=Rq7RodLtegSbJzB0fYtSnbdBcx39Oxwm6rKZoKZVIeY,20129
5
- dissect/cstruct/exceptions.py,sha256=RqD08LuBkbMqa3iQ1A05DNN8XgEmQR_SUnguwe9LGo8,316
6
- dissect/cstruct/expression.py,sha256=BIqSs-xvCb4WvUb0_xjg2A4hclH8cs_W0lIGydzluIE,8027
7
- dissect/cstruct/lexer.py,sha256=NEU1Ww29jWjOfhODNXMGhsBR9b-_ITnz5J-4A3kf688,19178
8
- dissect/cstruct/parser.py,sha256=7F_QmlY7SZRXq-SOnbu7C6M2D8FKN63zvNNfE0D4bvQ,20545
9
- dissect/cstruct/utils.py,sha256=3ZEeZ_bAZRm7IcyeB6i9h7qrcYB42LW9GJR9BtKTUDg,14650
10
- dissect/cstruct/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- dissect/cstruct/tools/stubgen.py,sha256=wvl07h3VnJZWe9ygX4QMxjEH1ZcWaI_6_pSdAJoOEXk,7820
12
- dissect/cstruct/types/__init__.py,sha256=6P71Pu94Dv7RNjZpDZ19pqzx-G0QzmQw4q0-3zWALso,911
13
- dissect/cstruct/types/base.py,sha256=-NYmoX4vEfaFsnAIwQ0nZCz8X2qKEomgpnef2jB4klQ,9708
14
- dissect/cstruct/types/char.py,sha256=9XYCjCF0D_5o3EYnmIcjev-5GI2NzxOhd1ct1xF6SAM,2457
15
- dissect/cstruct/types/enum.py,sha256=vOsD99P7VLhj6vcH_ow1jmyipLP63FmqUQ9GLZ1L8Pc,7565
16
- dissect/cstruct/types/flag.py,sha256=7xxQjFEDPHSQOxBHgcc75WzPiAxflOquwr7Z7c3erLE,2347
17
- dissect/cstruct/types/int.py,sha256=MGsdUxJt-lj3nl9wzAgGX8cb_vJOtGLiCHwYZs1j_IA,1156
18
- dissect/cstruct/types/leb128.py,sha256=kDmsWGXX6vr1bm4uJcilsrQ7JABdQRio16rBZV21pno,2243
19
- dissect/cstruct/types/packed.py,sha256=tpZpb8tiSMXr1np6p0-nZqT4sY7zieO-4E16lmMmqJA,2128
20
- dissect/cstruct/types/pointer.py,sha256=PqeJOoNBUfMd5uO2kpF6OHeW7Q6R1N1W1V4q1MakN4I,3912
21
- dissect/cstruct/types/structure.py,sha256=I9LVeZ81rNE5GDT6wxpUL-PqMO31Ae6TVLLzTGyd6mM,33012
22
- dissect/cstruct/types/void.py,sha256=Gvh0HqI6jQSj2uesdo3J8-G41brWCz8pmP16l8xTBxE,1074
23
- dissect/cstruct/types/wchar.py,sha256=N9Y_XX2_hZEe2DwepJjxsB6xuRJ6zINRalcUofR59kY,2608
24
- dissect_cstruct-5.0.dev0.dist-info/licenses/COPYRIGHT,sha256=H-18RXfshdH9AdHwW2eO1Xa-5s6tY5eipHh5c0whDu4,316
25
- dissect_cstruct-5.0.dev0.dist-info/licenses/LICENSE,sha256=PhUqiw6jAh2KbBdVRPBq_hfAvfcTBin7nZ3CK7NQbTM,11341
26
- dissect_cstruct-5.0.dev0.dist-info/METADATA,sha256=ujB3Cdxy5Yc--uXeWI4IIE24zn_t5r70jW_xmC7OBzc,9255
27
- dissect_cstruct-5.0.dev0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
28
- dissect_cstruct-5.0.dev0.dist-info/entry_points.txt,sha256=z53zqZqwD2OLrAkRwrP4wTeiU9CQe7xrMly0T2c0_wQ,71
29
- dissect_cstruct-5.0.dev0.dist-info/scm_file_list.json,sha256=K27Mlh84EZbq__O4ajx8gV0dOE5BF81hxo0Hvtrzz1U,2308
30
- dissect_cstruct-5.0.dev0.dist-info/scm_version.json,sha256=He7zR_9aI3hjUAyokmxGFi-iCH_17nbqSm6K2gebcEo,163
31
- dissect_cstruct-5.0.dev0.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
32
- dissect_cstruct-5.0.dev0.dist-info/RECORD,,
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "5.0.dev0",
3
- "distance": 0,
4
- "node": "g7678a8f531377054d12afef5c69107e1e08b49a8",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-07-07"
8
- }
File without changes