diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2020-01-19 17:51:33 +0100 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2020-01-19 17:51:33 +0100 |
commit | 1a4af498b497bfe1acb40d8aff0c65d9b22b3aa5 (patch) | |
tree | be88b633cf30bc168cc22afedec57114bc3d410d /extras | |
parent | 84bd62267760fd02db895e21c5c2c8bf20162342 (diff) |
Add a helper function to unpack directory index entries
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'extras')
-rw-r--r-- | extras/browse.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/extras/browse.c b/extras/browse.c index 1179b33..1d6417f 100644 --- a/extras/browse.c +++ b/extras/browse.c @@ -3,6 +3,7 @@ #include "sqfs/id_table.h" #include "sqfs/inode.h" #include "sqfs/super.h" +#include "sqfs/error.h" #include "sqfs/dir.h" #include "sqfs/io.h" @@ -358,16 +359,22 @@ static void stat_cmd(const char *filename) if (inode->data.dir_ext.size == 0) break; - idx = (sqfs_dir_index_t *)inode->extra; + for (i = 0; ; ++i) { + ret = sqfs_inode_unpack_dir_index_entry(inode, &idx, i); + if (ret == SQFS_ERROR_OUT_OF_BOUNDS) + break; + if (ret < 0) { + printf("Error reading index, error code %d\n", + ret); + break; + } - for (i = 0; i < inode->data.dir_ext.inodex_count; ++i) { printf("\tIndex: %u\n", idx->index); printf("\tStart block: %u\n", idx->start_block); printf("\tSize: %u\n", idx->size + 1); printf("\tEntry: %.*s\n\n", idx->size + 1, idx->name); - idx = (sqfs_dir_index_t *) - ((char *)idx + sizeof(*idx) + idx->size + 1); + free(idx); } break; } |