X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=src%2Finspect_fs_windows.c;h=60d9c0fdf91864f28e42460a7615a19bcd574e6c;hp=9a2e1fb08e2afb0b9035fd9743e7846ad31dbb50;hb=41cd0e302d6554facd6b9f7daaa78304361efaef;hpb=3336b5448f12c9eb25bf7a0cecda1315c4cf07ea diff --git a/src/inspect_fs_windows.c b/src/inspect_fs_windows.c index 9a2e1fb..60d9c0f 100644 --- a/src/inspect_fs_windows.c +++ b/src/inspect_fs_windows.c @@ -29,9 +29,7 @@ #include #include -#ifdef HAVE_PCRE #include -#endif #ifdef HAVE_HIVEX #include @@ -46,7 +44,7 @@ #include "guestfs-internal-actions.h" #include "guestfs_protocol.h" -#if defined(HAVE_PCRE) && defined(HAVE_HIVEX) +#if defined(HAVE_HIVEX) /* Compile all the regular expressions once when the shared library is * loaded. PCRE is thread safe so we're supposedly OK here if @@ -159,11 +157,6 @@ check_windows_arch (guestfs_h *g, struct inspect_fs *fs) static int check_windows_software_registry (guestfs_h *g, struct inspect_fs *fs) { - const char *basename = "software"; - char tmpdir_basename[strlen (g->tmpdir) + strlen (basename) + 2]; - snprintf (tmpdir_basename, sizeof tmpdir_basename, "%s/%s", - g->tmpdir, basename); - size_t len = strlen (fs->windows_systemroot) + 64; char software[len]; snprintf (software, len, "%s/system32/config/software", @@ -176,15 +169,17 @@ check_windows_software_registry (guestfs_h *g, struct inspect_fs *fs) */ return 0; + char *software_hive = NULL; int ret = -1; hive_h *h = NULL; hive_value_h *values = NULL; - if (guestfs___download_to_tmp (g, software_path, basename, - MAX_REGISTRY_SIZE) == -1) + software_hive = guestfs___download_to_tmp (g, fs, software_path, "software", + MAX_REGISTRY_SIZE); + if (software_hive == NULL) goto out; - h = hivex_open (tmpdir_basename, g->verbose ? HIVEX_OPEN_VERBOSE : 0); + h = hivex_open (software_hive, g->verbose ? HIVEX_OPEN_VERBOSE : 0); if (h == NULL) { perrorf (g, "hivex_open"); goto out; @@ -268,6 +263,7 @@ check_windows_software_registry (guestfs_h *g, struct inspect_fs *fs) if (h) hivex_close (h); free (values); free (software_path); + free (software_hive); return ret; } @@ -275,11 +271,6 @@ check_windows_software_registry (guestfs_h *g, struct inspect_fs *fs) static int check_windows_system_registry (guestfs_h *g, struct inspect_fs *fs) { - const char *basename = "system"; - char tmpdir_basename[strlen (g->tmpdir) + strlen (basename) + 2]; - snprintf (tmpdir_basename, sizeof tmpdir_basename, "%s/%s", - g->tmpdir, basename); - size_t len = strlen (fs->windows_systemroot) + 64; char system[len]; snprintf (system, len, "%s/system32/config/system", @@ -292,6 +283,7 @@ check_windows_system_registry (guestfs_h *g, struct inspect_fs *fs) */ return 0; + char *system_hive = NULL; int ret = -1; hive_h *h = NULL; hive_node_h root, node; @@ -299,11 +291,13 @@ check_windows_system_registry (guestfs_h *g, struct inspect_fs *fs) int32_t dword; size_t i, count; - if (guestfs___download_to_tmp (g, system_path, basename, - MAX_REGISTRY_SIZE) == -1) + system_hive = + guestfs___download_to_tmp (g, fs, system_path, "system", + MAX_REGISTRY_SIZE); + if (system_hive == NULL) goto out; - h = hivex_open (tmpdir_basename, g->verbose ? HIVEX_OPEN_VERBOSE : 0); + h = hivex_open (system_hive, g->verbose ? HIVEX_OPEN_VERBOSE : 0); if (h == NULL) { perrorf (g, "hivex_open"); goto out; @@ -449,6 +443,7 @@ check_windows_system_registry (guestfs_h *g, struct inspect_fs *fs) if (h) hivex_close (h); free (values); free (system_path); + free (system_hive); return ret; } @@ -532,4 +527,4 @@ guestfs___case_sensitive_path_silently (guestfs_h *g, const char *path) return ret; } -#endif /* defined(HAVE_PCRE) && defined(HAVE_HIVEX) */ +#endif /* defined(HAVE_HIVEX) */