New API: find_inode

Library's counterpart of the daemon's internal_find_inode command.

It writes the daemon's command output on a temporary file and parses it,
deserialising the XDR formatted tsk_dirent structs.

It returns to the caller the list of tsk_dirent structs generated by the
internal_find_inode command.

Signed-off-by: Matteo Cafasso <noxdafox@gmail.com>
This commit is contained in:
Matteo Cafasso
2016-09-19 19:42:51 +03:00
committed by Pino Toscano
parent eccce186a3
commit 9eb21ca54a
2 changed files with 29 additions and 0 deletions

View File

@@ -3717,6 +3717,18 @@ Unknown file type
=back" };
{ defaults with
name = "find_inode"; added = (1, 35, 6);
style = RStructList ("dirents", "tsk_dirent"), [Mountable "device"; Int64 "inode";], [];
optional = Some "libtsk";
progress = true; cancellable = true;
shortdesc = "search the entries associated to the given inode";
longdesc = "\
Searches all the entries associated with the given inode.
For each entry, a C<tsk_dirent> structure is returned.
See C<filesystem_walk> for more information about C<tsk_dirent> structures." };
]
(* daemon_functions are any functions which cause some action

View File

@@ -55,6 +55,23 @@ guestfs_impl_filesystem_walk (guestfs_h *g, const char *mountable)
return parse_dirent_file (g, tmpfile); /* caller frees */
}
struct guestfs_tsk_dirent_list *
guestfs_impl_find_inode (guestfs_h *g, const char *mountable, int64_t inode)
{
int ret = 0;
CLEANUP_UNLINK_FREE char *tmpfile = NULL;
tmpfile = make_temp_file (g, "find_inode");
if (tmpfile == NULL)
return NULL;
ret = guestfs_internal_find_inode (g, mountable, inode, tmpfile);
if (ret < 0)
return NULL;
return parse_dirent_file (g, tmpfile); /* caller frees */
}
/* Parse the file content and return dirents list.
* Return a list of tsk_dirent on success, NULL on error.
*/