Coverity: Check guestfs_inspect_get_product_name() != NULL before using.
[libguestfs.git] / fish / inspect.c
index cc3916b..07af818 100644 (file)
@@ -28,8 +28,6 @@
 
 #include "options.h"
 
-static void do_decrypt (void);
-
 /* Global that saves the root device between inspect_mount and
  * print_inspect_prompt.
  */
@@ -75,7 +73,13 @@ compare_keys (const void *p1, const void *p2)
 void
 inspect_mount (void)
 {
-  do_decrypt ();
+  if (live) {
+    fprintf (stderr, _("%s: don't use --live and -i options together\n"),
+             program_name);
+    exit (EXIT_FAILURE);
+  }
+
+  inspect_do_decrypt ();
 
   char **roots = guestfs_inspect_os (g);
   if (roots == NULL)
@@ -96,6 +100,12 @@ inspect_mount (void)
   root = roots[0];
   free (roots);
 
+  inspect_mount_root (root);
+}
+
+void
+inspect_mount_root (const char *root)
+{
   char **mountpoints = guestfs_inspect_get_mountpoints (g, root);
   if (mountpoints == NULL)
     exit (EXIT_FAILURE);
@@ -107,6 +117,7 @@ inspect_mount (void)
          compare_keys_len);
 
   size_t i;
+  size_t mount_errors = 0;
   for (i = 0; mountpoints[i] != NULL; i += 2) {
     int r;
     if (!read_only)
@@ -114,10 +125,14 @@ inspect_mount (void)
     else
       r = guestfs_mount_ro (g, mountpoints[i+1], mountpoints[i]);
     if (r == -1)
-      exit (EXIT_FAILURE);
+      mount_errors++;
   }
 
   free_strings (mountpoints);
+
+  if (mount_errors)
+    fprintf (stderr, _("%s: some filesystems could not be mounted (ignored)\n"),
+             program_name);
 }
 
 /* This function is called only if the above function was called,
@@ -127,7 +142,7 @@ void
 print_inspect_prompt (void)
 {
   char *name = guestfs_inspect_get_product_name (g, root);
-  if (STRNEQ (name, "unknown"))
+  if (name && STRNEQ (name, "unknown"))
     printf (_("Operating system: %s\n"), name);
   free (name);
 
@@ -178,8 +193,8 @@ make_mapname (const char *device, char *mapname, size_t len)
  * for Fedora whole-disk encryption.  WIP to make this work for other
  * encryption schemes.
  */
-static void
-do_decrypt (void)
+void
+inspect_do_decrypt (void)
 {
   char **partitions = guestfs_list_partitions (g);
   if (partitions == NULL)
@@ -204,6 +219,7 @@ do_decrypt (void)
 
       need_rescan = 1;
     }
+    free (type);
   }
 
   free_strings (partitions);