Coverity: Don't close fd_cwd if fd_cwd == -1.
[libguestfs.git] / src / inspect.c
index f3cc54e..e7408b6 100644 (file)
@@ -228,7 +228,7 @@ static int check_windows_root (guestfs_h *g, struct inspect_fs *fs);
 static int check_windows_arch (guestfs_h *g, struct inspect_fs *fs);
 static int check_windows_software_registry (guestfs_h *g, struct inspect_fs *fs);
 static int check_windows_system_registry (guestfs_h *g, struct inspect_fs *fs);
-static char *resolve_windows_path_silently (guestfs_h *g, const char *);
+static char *case_sensitive_path_silently (guestfs_h *g, const char *);
 static int is_file_nocase (guestfs_h *g, const char *);
 static int is_dir_nocase (guestfs_h *g, const char *);
 static int extend_fses (guestfs_h *g);
@@ -360,9 +360,9 @@ check_filesystem (guestfs_h *g, const char *device)
    * would *not* be Windows root disks.  (RHBZ#674130)
    */
   else if (is_file_nocase (g, "/AUTOEXEC.BAT") > 0 ||
-           is_dir_nocase (g, "/WINDOWS") > 0 ||
-           is_dir_nocase (g, "/WIN32") > 0 ||
-           is_dir_nocase (g, "/WINNT") > 0 ||
+           is_dir_nocase (g, "/WINDOWS/SYSTEM32") > 0 ||
+           is_dir_nocase (g, "/WIN32/SYSTEM32") > 0 ||
+           is_dir_nocase (g, "/WINNT/SYSTEM32") > 0 ||
            is_file_nocase (g, "/boot.ini") > 0 ||
            is_file_nocase (g, "/ntldr") > 0) {
     fs->is_root = 1;
@@ -1034,7 +1034,7 @@ check_windows_root (guestfs_h *g, struct inspect_fs *fs)
   for (i = 0;
        systemroot == NULL && i < sizeof systemroots / sizeof systemroots[0];
        ++i) {
-    systemroot = resolve_windows_path_silently (g, systemroots[i]);
+    systemroot = case_sensitive_path_silently (g, systemroots[i]);
   }
 
   if (!systemroot) {
@@ -1072,7 +1072,7 @@ check_windows_arch (guestfs_h *g, struct inspect_fs *fs)
   char cmd_exe[len];
   snprintf (cmd_exe, len, "%s/system32/cmd.exe", fs->windows_systemroot);
 
-  char *cmd_exe_path = resolve_windows_path_silently (g, cmd_exe);
+  char *cmd_exe_path = case_sensitive_path_silently (g, cmd_exe);
   if (!cmd_exe_path)
     return 0;
 
@@ -1099,7 +1099,7 @@ check_windows_software_registry (guestfs_h *g, struct inspect_fs *fs)
   snprintf (software, len, "%s/system32/config/software",
             fs->windows_systemroot);
 
-  char *software_path = resolve_windows_path_silently (g, software);
+  char *software_path = case_sensitive_path_silently (g, software);
   if (!software_path)
     /* If the software hive doesn't exist, just accept that we cannot
      * find product_name etc.
@@ -1208,7 +1208,7 @@ check_windows_system_registry (guestfs_h *g, struct inspect_fs *fs)
   snprintf (system, len, "%s/system32/config/system",
             fs->windows_systemroot);
 
-  char *system_path = resolve_windows_path_silently (g, system);
+  char *system_path = case_sensitive_path_silently (g, system);
   if (!system_path)
     /* If the system hive doesn't exist, just accept that we cannot
      * find hostname etc.
@@ -1283,7 +1283,7 @@ check_windows_system_registry (guestfs_h *g, struct inspect_fs *fs)
 }
 
 static char *
-resolve_windows_path_silently (guestfs_h *g, const char *path)
+case_sensitive_path_silently (guestfs_h *g, const char *path)
 {
   guestfs_error_handler_cb old_error_cb = g->error_cb;
   g->error_cb = NULL;
@@ -1298,7 +1298,7 @@ is_file_nocase (guestfs_h *g, const char *path)
   char *p;
   int r;
 
-  p = resolve_windows_path_silently (g, path);
+  p = case_sensitive_path_silently (g, path);
   if (!p)
     return 0;
   r = guestfs_is_file (g, p);
@@ -1312,7 +1312,7 @@ is_dir_nocase (guestfs_h *g, const char *path)
   char *p;
   int r;
 
-  p = resolve_windows_path_silently (g, path);
+  p = case_sensitive_path_silently (g, path);
   if (!p)
     return 0;
   r = guestfs_is_dir (g, p);
@@ -2002,12 +2002,12 @@ list_applications_windows (guestfs_h *g, struct inspect_fs *fs)
   snprintf (software, len, "%s/system32/config/software",
             fs->windows_systemroot);
 
-  char *software_path = resolve_windows_path_silently (g, software);
-  if (!software_path)
-    /* If the software hive doesn't exist, just accept that we cannot
-     * find product_name etc.
-     */
-    return 0;
+  char *software_path = case_sensitive_path_silently (g, software);
+  if (!software_path) {
+    /* Missing software hive is a problem. */
+    error (g, "no HKLM\\SOFTWARE hive found in the guest");
+    return NULL;
+  }
 
   struct guestfs_application_list *apps = NULL, *ret = NULL;
   hive_h *h = NULL;