digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__cramfs {
label="Cramfs";
graph[style=dotted];
cramfs__seq [label=<
pos | size | type | id |
0 | ... | SuperBlockStruct | super_block |
>];
cramfs__inst__page_size [label=<>];
subgraph cluster__super_block_struct {
label="Cramfs::SuperBlockStruct";
graph[style=dotted];
super_block_struct__seq [label=<
pos | size | type | id |
0 | 4 | | magic |
4 | 4 | u4le | size |
8 | 4 | u4le | flags |
12 | 4 | u4le | future |
16 | 16 | | signature |
32 | 16 | Info | fsid |
48 | 16 | str(ASCII) | name |
64 | ... | Inode | root |
>];
super_block_struct__inst__flag_fsid_v2 [label=<
id | value |
flag_fsid_v2 | ((flags >> 0) & 1) |
>];
super_block_struct__inst__flag_holes [label=<
id | value |
flag_holes | ((flags >> 8) & 1) |
>];
super_block_struct__inst__flag_wrong_signature [label=<
id | value |
flag_wrong_signature | ((flags >> 9) & 1) |
>];
super_block_struct__inst__flag_sorted_dirs [label=<
id | value |
flag_sorted_dirs | ((flags >> 1) & 1) |
>];
super_block_struct__inst__flag_shifted_root_offset [label=<
id | value |
flag_shifted_root_offset | ((flags >> 10) & 1) |
>];
}
subgraph cluster__chunked_data_inode {
label="Cramfs::ChunkedDataInode";
graph[style=dotted];
chunked_data_inode__seq [label=<
pos | size | type | id |
0 | 4 | u4le | block_end_index |
repeat (((_parent.size + _root.page_size) - 1) / _root.page_size) times |
... | ⇲ | | raw_blocks |
>];
}
subgraph cluster__inode {
label="Cramfs::Inode";
graph[style=dotted];
inode__seq [label=<
pos | size | type | id |
0 | 2 | u2le | mode |
2 | 2 | u2le | uid |
4 | 4 | u4le | size_gid |
8 | 4 | u4le | namelen_offset |
12 | namelen | str(utf-8) | name |
>];
inode__inst__attr [label=<
id | value |
attr | ((mode >> 9) & 7) |
>];
inode__inst__as_reg_file [label=<
pos | size | type | id |
offset | ... | ChunkedDataInode | as_reg_file |
>];
inode__inst__perm_u [label=<
id | value |
perm_u | ((mode >> 6) & 7) |
>];
inode__inst__as_symlink [label=<
pos | size | type | id |
offset | ... | ChunkedDataInode | as_symlink |
>];
inode__inst__perm_o [label=<>];
inode__inst__size [label=<
id | value |
size | (size_gid & 16777215) |
>];
inode__inst__gid [label=<
id | value |
gid | (size_gid >> 24) |
>];
inode__inst__perm_g [label=<
id | value |
perm_g | ((mode >> 3) & 7) |
>];
inode__inst__namelen [label=<
id | value |
namelen | ((namelen_offset & 63) << 2) |
>];
inode__inst__as_dir [label=<
pos | size | type | id |
offset | size | DirInode | as_dir |
>];
inode__inst__type [label=<
id | value |
type | Kaitai::Struct::Stream::resolve_enum(FILE_TYPE, ((mode >> 12) & 15)) |
>];
inode__inst__offset [label=<
id | value |
offset | (((namelen_offset >> 6) & 67108863) << 2) |
>];
}
subgraph cluster__dir_inode {
label="Cramfs::DirInode";
graph[style=dotted];
dir_inode__seq [label=<
pos | size | type | id |
0 | ... | Inode | children |
repeat to end of stream |
>];
}
subgraph cluster__info {
label="Cramfs::Info";
graph[style=dotted];
info__seq [label=<
pos | size | type | id |
0 | 4 | u4le | crc |
4 | 4 | u4le | edition |
8 | 4 | u4le | blocks |
12 | 4 | u4le | files |
>];
}
}
cramfs__seq:super_block_type -> super_block_struct__seq [style=bold];
super_block_struct__seq:fsid_type -> info__seq [style=bold];
super_block_struct__seq:root_type -> inode__seq [style=bold];
super_block_struct__seq:flags_type -> super_block_struct__inst__flag_fsid_v2 [color="#404040"];
super_block_struct__seq:flags_type -> super_block_struct__inst__flag_holes [color="#404040"];
super_block_struct__seq:flags_type -> super_block_struct__inst__flag_wrong_signature [color="#404040"];
super_block_struct__seq:flags_type -> super_block_struct__inst__flag_sorted_dirs [color="#404040"];
super_block_struct__seq:flags_type -> super_block_struct__inst__flag_shifted_root_offset [color="#404040"];
inode__inst__size:size_type -> chunked_data_inode__seq:block_end_index__repeat [color="#404040"];
cramfs__inst__page_size:page_size_type -> chunked_data_inode__seq:block_end_index__repeat [color="#404040"];
cramfs__inst__page_size:page_size_type -> chunked_data_inode__seq:block_end_index__repeat [color="#404040"];
inode__inst__namelen:namelen_type -> inode__seq:name_size [color="#404040"];
inode__seq:mode_type -> inode__inst__attr [color="#404040"];
inode__inst__offset:offset_type -> inode__inst__as_reg_file:as_reg_file_pos [color="#404040"];
inode__inst__as_reg_file:as_reg_file_type -> chunked_data_inode__seq [style=bold];
inode__seq:mode_type -> inode__inst__perm_u [color="#404040"];
inode__inst__offset:offset_type -> inode__inst__as_symlink:as_symlink_pos [color="#404040"];
inode__inst__as_symlink:as_symlink_type -> chunked_data_inode__seq [style=bold];
inode__seq:mode_type -> inode__inst__perm_o [color="#404040"];
inode__seq:size_gid_type -> inode__inst__size [color="#404040"];
inode__seq:size_gid_type -> inode__inst__gid [color="#404040"];
inode__seq:mode_type -> inode__inst__perm_g [color="#404040"];
inode__seq:namelen_offset_type -> inode__inst__namelen [color="#404040"];
inode__inst__offset:offset_type -> inode__inst__as_dir:as_dir_pos [color="#404040"];
inode__inst__size:size_type -> inode__inst__as_dir:as_dir_size [color="#404040"];
inode__inst__as_dir:as_dir_type -> dir_inode__seq [style=bold];
inode__seq:mode_type -> inode__inst__type [color="#404040"];
inode__seq:namelen_offset_type -> inode__inst__offset [color="#404040"];
dir_inode__seq:children_type -> inode__seq [style=bold];
}