Removed duplicated code.
Signed-off-by: Matteo Cafasso <noxdafox(a)gmail.com>
---
src/tsk.c | 69 ++++++++++++++++++++++++++-------------------------------------
1 file changed, 28 insertions(+), 41 deletions(-)
diff --git a/src/tsk.c b/src/tsk.c
index 6b1b29c..8e6d266 100644
--- a/src/tsk.c
+++ b/src/tsk.c
@@ -34,96 +34,71 @@
#include "guestfs-internal-all.h"
#include "guestfs-internal-actions.h"
-static struct guestfs_tsk_dirent_list *parse_dirent_file (guestfs_h *, FILE *);
+static struct guestfs_tsk_dirent_list *parse_dirent_file (guestfs_h *, const char *);
static int deserialise_dirent_list (guestfs_h *, FILE *, struct guestfs_tsk_dirent_list
*);
+static char *make_temp_file (guestfs_h *, const char *);
struct guestfs_tsk_dirent_list *
guestfs_impl_filesystem_walk (guestfs_h *g, const char *mountable)
{
int ret = 0;
- CLEANUP_FCLOSE FILE *fp = NULL;
CLEANUP_UNLINK_FREE char *tmpfile = NULL;
- ret = guestfs_int_lazy_make_tmpdir (g);
- if (ret < 0)
- return NULL;
-
- tmpfile = safe_asprintf (g, "%s/filesystem_walk%d", g->tmpdir,
++g->unique);
+ tmpfile = make_temp_file (g, "filesystem_walk");
ret = guestfs_internal_filesystem_walk (g, mountable, tmpfile);
if (ret < 0)
return NULL;
- fp = fopen (tmpfile, "r");
- if (fp == NULL) {
- perrorf (g, "fopen: %s", tmpfile);
- return NULL;
- }
-
- return parse_dirent_file (g, fp); /* caller frees */
+ 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_FCLOSE FILE *fp = NULL;
CLEANUP_UNLINK_FREE char *tmpfile = NULL;
- ret = guestfs_int_lazy_make_tmpdir (g);
- if (ret < 0)
- return NULL;
-
- tmpfile = safe_asprintf (g, "%s/find_inode%d", g->tmpdir,
++g->unique);
+ tmpfile = make_temp_file (g, "find_inode");
ret = guestfs_internal_find_inode (g, mountable, inode, tmpfile);
if (ret < 0)
return NULL;
- fp = fopen (tmpfile, "r");
- if (fp == NULL) {
- perrorf (g, "fopen: %s", tmpfile);
- return NULL;
- }
-
- return parse_dirent_file (g, fp); /* caller frees */
+ return parse_dirent_file (g, tmpfile); /* caller frees */
}
struct guestfs_tsk_dirent_list *
guestfs_impl_find_block (guestfs_h *g, const char *mountable, int64_t block)
{
int ret = 0;
- CLEANUP_FCLOSE FILE *fp = NULL;
CLEANUP_UNLINK_FREE char *tmpfile = NULL;
- ret = guestfs_int_lazy_make_tmpdir (g);
- if (ret < 0)
- return NULL;
-
- tmpfile = safe_asprintf (g, "%s/find_block%d", g->tmpdir,
++g->unique);
+ tmpfile = make_temp_file (g, "find_block");
ret = guestfs_internal_find_block (g, mountable, block, tmpfile);
if (ret < 0)
return NULL;
- fp = fopen (tmpfile, "r");
- if (fp == NULL) {
- perrorf (g, "fopen: %s", tmpfile);
- return NULL;
- }
-
- return parse_dirent_file (g, fp); /* caller frees */
+ 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.
*/
static struct guestfs_tsk_dirent_list *
-parse_dirent_file (guestfs_h *g, FILE *fp)
+parse_dirent_file (guestfs_h *g, const char *tmpfile)
{
int ret = 0;
+ CLEANUP_FCLOSE FILE *fp = NULL;
struct guestfs_tsk_dirent_list *dirents = NULL;
+ fp = fopen (tmpfile, "r");
+ if (fp == NULL) {
+ perrorf (g, "fopen: %s", tmpfile);
+ return NULL;
+ }
+
/* Initialise results array. */
dirents = safe_malloc (g, sizeof (*dirents));
dirents->len = 8;
@@ -178,3 +153,15 @@ deserialise_dirent_list (guestfs_h *g, FILE *fp,
return ret ? 0 : -1;
}
+
+static char *
+make_temp_file (guestfs_h *g, const char *name)
+{
+ int ret = 0;
+
+ ret = guestfs_int_lazy_make_tmpdir (g);
+ if (ret < 0)
+ return NULL;
+
+ return safe_asprintf (g, "%s/%s%d", g->tmpdir, name, ++g->unique);
+}
--
2.9.3