On Thursday, 15 September 2016 23:16:39 CEST Matteo Cafasso wrote:
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 <noxdafox(a)gmail.com>
---
daemon/tsk.c | 22 +++++++++++++++++++---
generator/actions.ml | 5 ++---
2 files changed, 21 insertions(+), 6 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 *);
Minor coding style here ...
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/..' */
... and here too.
Note that, theoretically, you could join all the conditions in a single
one, as "if" is short-circuited:
return (TSK_FS_ISDOT (fsfile->name->name) &&
!(fsfile->fs_info->root_inum == fsfile->name->meta_addr &&
/* Root */
STREQ(fsfile->name->name, ".")) /* Avoid '..'
'bin/..' 'etc/..' */
LGTM otherwise.
Thanks,
--
Pino Toscano