With the current implementation, the root inode of the given partition is ignored.
The root inode is now reported. Its name will be a single dot '.' reproducing the TSK API. Signed-off-by: Matteo Cafasso <noxda...@gmail.com> --- daemon/tsk.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/daemon/tsk.c b/daemon/tsk.c index dd368d7..9884472 100644 --- a/daemon/tsk.c +++ b/daemon/tsk.c @@ -49,6 +49,7 @@ static int file_flags (TSK_FS_FILE *fsfile); static void file_metadata (TSK_FS_META *, guestfs_int_tsk_dirent *); static int send_dirent_info (guestfs_int_tsk_dirent *); static void reply_with_tsk_error (const char *); +static int entry_is_dot(TSK_FS_FILE *); int do_internal_filesystem_walk (const mountable_t *mountable) @@ -113,9 +114,7 @@ fswalk_callback (TSK_FS_FILE *fsfile, const char *path, void *data) CLEANUP_FREE char *fname = NULL; struct guestfs_int_tsk_dirent dirent; - /* Ignore ./ and ../ */ - ret = TSK_FS_ISDOT (fsfile->name->name); - if (ret != 0) + if (entry_is_dot (fsfile)) return TSK_WALK_CONT; /* Build the full relative path of the entry */ @@ -271,6 +270,23 @@ reply_with_tsk_error (const char *funcname) reply_with_error ("%s: unknown error", funcname); } +/* Check whether the entry is dot and is not Root. + * Return 1 if it is dot, 0 otherwise or if it is the Root entry. + */ +static int +entry_is_dot (TSK_FS_FILE *fsfile) +{ + if (TSK_FS_ISDOT (fsfile->name->name)) { + if (fsfile->fs_info->root_inum == fsfile->name->meta_addr && /* Root */ + STREQ(fsfile->name->name, ".")) /* Avoid 'bin/..' 'etc/..' */ + return 0; + else + return 1; + } + + return 0; +} + int optgroup_libtsk_available (void) { -- 2.9.3 _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://www.redhat.com/mailman/listinfo/libguestfs