summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2010-11-13 14:41:01 +0000
committerRichard W.M. Jones <rjones@redhat.com>2010-11-13 14:41:01 +0000
commita5fd85e7392b589d9d90ab515ad3e4bd1befd874 (patch)
tree4bc88ec11e0c7839e6f953843c5c101af8b76ac3
parent55e6ccb23e0b1f954107b4d0284d3d41f7a4e7b8 (diff)
downloadlibguestfs-a5fd85e7392b589d9d90ab515ad3e4bd1befd874.tar.gz
libguestfs-a5fd85e7392b589d9d90ab515ad3e4bd1befd874.tar.xz
libguestfs-a5fd85e7392b589d9d90ab515ad3e4bd1befd874.zip
inspect: Optimize root filesystem check.
Avoid duplicate checks for things like /etc and /bin.
-rw-r--r--src/inspect.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/inspect.c b/src/inspect.c
index f5e4490b..2f543b58 100644
--- a/src/inspect.c
+++ b/src/inspect.c
@@ -257,13 +257,18 @@ check_filesystem (guestfs_h *g, const char *device)
fs->device = safe_strdup (g, device);
fs->is_mountable = 1;
+ /* Optimize some of the tests by avoiding multiple tests of the same thing. */
+ int is_dir_etc = guestfs_is_dir (g, "/etc") > 0;
+ int is_dir_bin = guestfs_is_dir (g, "/bin") > 0;
+ int is_dir_share = guestfs_is_dir (g, "/share") > 0;
+
/* Grub /boot? */
if (guestfs_is_file (g, "/grub/menu.lst") > 0 ||
guestfs_is_file (g, "/grub/grub.conf") > 0)
fs->content = FS_CONTENT_LINUX_BOOT;
/* Linux root? */
- else if (guestfs_is_dir (g, "/etc") > 0 &&
- guestfs_is_dir (g, "/bin") > 0 &&
+ else if (is_dir_etc &&
+ is_dir_bin &&
guestfs_is_file (g, "/etc/fstab") > 0) {
fs->is_root = 1;
fs->content = FS_CONTENT_LINUX_ROOT;
@@ -271,16 +276,16 @@ check_filesystem (guestfs_h *g, const char *device)
return -1;
}
/* Linux /usr/local? */
- else if (guestfs_is_dir (g, "/etc") > 0 &&
- guestfs_is_dir (g, "/bin") > 0 &&
- guestfs_is_dir (g, "/share") > 0 &&
+ else if (is_dir_etc &&
+ is_dir_bin &&
+ is_dir_share &&
guestfs_exists (g, "/local") == 0 &&
guestfs_is_file (g, "/etc/fstab") == 0)
fs->content = FS_CONTENT_LINUX_USR_LOCAL;
/* Linux /usr? */
- else if (guestfs_is_dir (g, "/etc") > 0 &&
- guestfs_is_dir (g, "/bin") > 0 &&
- guestfs_is_dir (g, "/share") > 0 &&
+ else if (is_dir_etc &&
+ is_dir_bin &&
+ is_dir_share &&
guestfs_exists (g, "/local") > 0 &&
guestfs_is_file (g, "/etc/fstab") == 0)
fs->content = FS_CONTENT_LINUX_USR;