<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
On 26/08/16 14:15, Pino Toscano wrote:<br>
<blockquote cite="mid:1688752.2Uoxm3tiYs@thyrus.usersys.redhat.com"
type="cite">
<pre wrap="">On Thursday, 25 August 2016 23:53:51 CEST Matteo Cafasso wrote:
</pre>
<blockquote type="cite">
<pre wrap="">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 <a class="moz-txt-link-rfc2396E" href="mailto:noxdafox@gmail.com"><noxdafox@gmail.com></a>
---
daemon/tsk.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/daemon/tsk.c b/daemon/tsk.c
index dd368d7..6e6df6d 100644
--- a/daemon/tsk.c
+++ b/daemon/tsk.c
@@ -48,6 +48,7 @@ static char file_type (TSK_FS_FILE *);
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 int entry_is_dot(TSK_FS_FILE *);
static void reply_with_tsk_error (const char *);
</pre>
</blockquote>
<pre wrap="">
Since in patch #2 this forward declaration is moved, put it at the
right place already in this patch.
</pre>
<blockquote type="cite">
<pre wrap=""> int
@@ -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;
</pre>
</blockquote>
<pre wrap="">
Nitpick: add a space between the function name and the opening round
bracket.
</pre>
<blockquote type="cite">
<pre wrap=""> /* Build the full relative path of the entry */
@@ -271,6 +270,18 @@ reply_with_tsk_error (const char *funcname)
reply_with_error ("%s: unknown error", funcname);
}
+/* Check whether the entry is dot and is not Root. */
+static int
+entry_is_dot(TSK_FS_FILE *fsfile)
</pre>
</blockquote>
<pre wrap="">
Ditto.
</pre>
<blockquote type="cite">
<pre wrap="">+{
+ if (TSK_FS_ISDOT (fsfile->name->name))
+ if (fsfile->fs_info->root_inum != fsfile->name->meta_addr ||
+ strcmp (fsfile->name->name, "."))
</pre>
</blockquote>
<pre wrap="">
Simply merge the two if's into a single if (A && B) condition?
Also, the strcmp is already done by TSK_FS_ISDOT, isn't it?
So this should be like:
if (TSK_FS_ISDOT (fsfile->name->name)
&& (fsfile->fs_info->root_inum != fsfile->name->meta_addr))</pre>
</blockquote>
It's a bit more complicated, that's why I preferred to keep the two
if statements separated.<br>
<br>
TSK_FS_ISDOT returns whether the string is either '.' or '..'.<br>
Yet we want to return Root so we check if that's the case. <br>
<br>
Problem is that we'd return multiple entries for Root because:<br>
.<br>
..<br>
etc/..<br>
bin/..<br>
<br>
Are all matching the statement:<br>
<pre wrap="">fsfile->fs_info->root_inum != fsfile->name->meta_addr</pre>
<br>
Either we check that we return it only once (which complicates the
logic quite a bit) or we strictly ensure the entry 'meta_addr' is
root and the name is '.'. <br>
I'll add a comment to make the logic more clear. Yet if you have
better ideas they're more than welcome.<br>
<br>
<blockquote cite="mid:1688752.2Uoxm3tiYs@thyrus.usersys.redhat.com"
type="cite">
<pre wrap="">
</pre>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Libguestfs mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Libguestfs@redhat.com">Libguestfs@redhat.com</a>
<a class="moz-txt-link-freetext" href="https://www.redhat.com/mailman/listinfo/libguestfs">https://www.redhat.com/mailman/listinfo/libguestfs</a></pre>
</blockquote>
<br>
</body>
</html>