Skip to content

Commit 361c6e3

Browse files
authored
Merge pull request #44 from sviehb/fix-inode-versioning
Fix extraction of files with size greater than one erase block.
2 parents ddbc592 + 5d8e2f0 commit 361c6e3

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from distutils.core import setup
55

6-
version = "0.3"
6+
version = "0.4"
77

88
setup(
99
name="jefferson",

src/scripts/jefferson

+7-6
Original file line numberDiff line numberDiff line change
@@ -318,10 +318,9 @@ def scan_fs(content, endianness, verbose=False):
318318
inode.unpack(content_mv[0 + offset :])
319319

320320
if inode.ino in fs[JFFS2_NODETYPE_INODE]:
321-
if inode.version > fs[JFFS2_NODETYPE_INODE][inode.ino].version:
322-
fs[JFFS2_NODETYPE_INODE][inode.ino] = inode
321+
fs[JFFS2_NODETYPE_INODE][inode.ino].append(inode)
323322
else:
324-
fs[JFFS2_NODETYPE_INODE][inode.ino] = inode
323+
fs[JFFS2_NODETYPE_INODE][inode.ino] = [inode]
325324
if verbose:
326325
print("0x%08X:" % (offset), inode)
327326
elif unknown_node.nodetype == JFFS2_NODETYPE_CLEANMARKER:
@@ -358,15 +357,17 @@ def get_device(inode):
358357
return os.makedev((node.old_id >> 8) & 0xFF, node.old_id & 0xFF)
359358
return None
360359

360+
def sort_version(item):
361+
return item.version
361362

362363
def dump_fs(fs, target):
363364
node_dict = {}
364365

365366
for dirent in fs[JFFS2_NODETYPE_DIRENT].values():
366367
dirent.inodes = []
367-
for inode in fs[JFFS2_NODETYPE_INODE].values():
368-
if inode.ino == dirent.ino:
369-
dirent.inodes.append(inode)
368+
for ino, inodes in fs[JFFS2_NODETYPE_INODE].items():
369+
if ino == dirent.ino:
370+
dirent.inodes = sorted(inodes, key=sort_version)
370371
node_dict[dirent.ino] = dirent
371372

372373
for dirent in fs[JFFS2_NODETYPE_DIRENT].values():

0 commit comments

Comments
 (0)