Add support for mounting ufs from NetBSD, and fix FreeBSD detection on Fedora 16
authorMichael Scherer <misc@zarb.org>
Thu, 13 Oct 2011 23:05:06 +0000 (01:05 +0200)
committerRichard W.M. Jones <rjones@redhat.com>
Fri, 14 Oct 2011 09:26:16 +0000 (10:26 +0100)
While testing on Fedora 16, I noticed that Linux will mount the disk
without trouble by using automatically ufstype=old, and yet do not
let us read the directories. So we should start directly with usftype=ufs2,
and if it fail, try 44bsd, as used for netbsd and openbsd ( as seen on
http://wiki-static.aydogan.net/How_to_mount_FFS_partition_under_Linux ).

src/inspect_fs.c

index 2533626..68e2ddb 100644 (file)
@@ -120,9 +120,16 @@ guestfs___check_for_filesystem_on (guestfs_h *g, const char *device,
 
   /* Try mounting the device.  As above, ignore errors. */
   g->error_cb = NULL;
-  int r = guestfs_mount_ro (g, device, "/");
-  if (r == -1 && vfs_type && STREQ (vfs_type, "ufs")) /* Hack for the *BSDs. */
+  int r;
+  if (vfs_type && STREQ (vfs_type, "ufs")) { /* Hack for the *BSDs. */
+    /* FreeBSD fs is a variant of ufs called ufs2 ... */
     r = guestfs_mount_vfs (g, "ro,ufstype=ufs2", "ufs", device, "/");
+    if (r == -1)
+      /* while NetBSD and OpenBSD use another variant labeled 44bsd */
+      r = guestfs_mount_vfs (g, "ro,ufstype=44bsd", "ufs", device, "/");
+  } else {
+    r = guestfs_mount_ro (g, device, "/");
+  }
   free (vfs_type);
   g->error_cb = old_error_cb;
   if (r == -1)