Skip to content

Commit e3c4449

Browse files
committed
fix inspect offset for nested struct/union
1 parent 364a13f commit e3c4449

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

cstruct/abstract.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,18 +238,25 @@ def inspect(self, start_addr: Optional[int] = None, end_addr: Optional[int] = No
238238
"""
239239
buffer = StringIO()
240240
if hasattr(self, "__mem__"):
241-
mem = self.__mem__
241+
mem = self.__mem__[self.__base__ :]
242242
else:
243243
mem = self.pack()
244-
for i in range(start_addr or 0, end_addr or self.size, 16):
245-
row = mem[i : i + 16]
244+
if end_addr is None:
245+
end_addr = self.size
246+
for i in range(start_addr or 0, end_addr, 16):
247+
row = mem[i : min(i + 16, end_addr)]
246248
buffer.write(f"{i:08x} ")
247249
for j, c in enumerate(row):
248250
separator = " " if j == 7 else ""
249251
buffer.write(f" {c:02x}{separator}")
252+
for j in range(len(row) - 1, 15):
253+
separator = " " if j == 7 else ""
254+
buffer.write(f" {separator}")
250255
buffer.write(" |")
251256
for c in row:
252257
buffer.write(chr(c) if c >= 32 and c < 127 else ".")
258+
for j in range(len(row) - 1, 15):
259+
buffer.write(" ")
253260
buffer.write("|")
254261
buffer.write("\n")
255262
buffer.seek(0, 0)

tests/test_nested.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,8 @@ def test_nested_struct_offset():
259259
assert o.pack() == b'ciao_ciao\x00\x00\xbc\x08\xe4\xb0\x0cX4\xe6\x07\x00\x003333'
260260
assert o.u1.pack() == b'\xe6\x07\x00\x00'
261261
assert o.aaa.pack() == b'3333'
262+
assert o.u1.a_op.inspect() == "00000000 e6 07 00 00 |.... |\n"
263+
assert o.u1.b_op.inspect() == "00000000 e6 07 00 |... |\n"
262264

263265

264266
def test_nested_anonymous_struct_offset():
@@ -308,6 +310,9 @@ def test_nested_anonymous_struct_offset():
308310
assert o.pack() == b'ciao_ciao\x00\x00\xbc\x08\xe4\xb0\x0cX4\xe6\x07\x00\x003333'
309311
assert o.__anonymous0.pack() == b'\xe6\x07\x00\x00'
310312
assert o.aaa.pack() == b'3333'
313+
assert o.__anonymous0.inspect() == "00000000 e6 07 00 00 |.... |\n"
314+
assert o.__anonymous0.a_op.inspect() == "00000000 e6 07 00 00 |.... |\n"
315+
assert o.__anonymous0.b_op.inspect() == "00000000 e6 07 00 |... |\n"
311316

312317
o = Opu()
313318
o.preamble = b'ciao_ciao'
@@ -325,3 +330,5 @@ def test_nested_anonymous_struct_offset():
325330
assert o.pack() == b'ciao_ciao\x00\x00\xbc\x08\xe4\xb0\x0cX4\xe6\x07\x00\x003333'
326331
assert o.a_op.pack() == b'\xe6\x07\x00\x00'
327332
assert o.aaa.pack() == b'3333'
333+
assert o.a_op.inspect() == "00000000 e6 07 00 00 |.... |\n"
334+
assert o.b_op.inspect() == "00000000 e6 07 00 |... |\n"

0 commit comments

Comments
 (0)