From a8532145296a97ffe1df63f9be91c88b63cbf603 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Mon, 5 Dec 2016 16:10:20 +0100 Subject: [PATCH] inspect: change is_root flag into enum Introduce a new enum to classify the role of a filesystem, if available. This will help later on when doing operations on non-root filesystems, like detecting particular mountpoints such as /usr. The new enum has only "root" as known role, which replaces the is_root flag. (cherry picked from commit 0c4edcecbaa82be2251d296e524e3bb50840ba9e) --- src/guestfs-internal.h | 7 ++++++- src/inspect-fs-cd.c | 2 +- src/inspect-fs.c | 20 ++++++++++---------- src/inspect.c | 17 +++++++++-------- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/guestfs-internal.h b/src/guestfs-internal.h index 2002253..6f31438 100644 --- a/src/guestfs-internal.h +++ b/src/guestfs-internal.h @@ -594,8 +594,13 @@ enum inspect_os_package_management { OS_PACKAGE_MANAGEMENT_APK, }; +enum inspect_os_role { + OS_ROLE_UNKNOWN = 0, + OS_ROLE_ROOT, +}; + struct inspect_fs { - int is_root; + enum inspect_os_role role; char *mountable; enum inspect_os_type type; enum inspect_os_distro distro; diff --git a/src/inspect-fs-cd.c b/src/inspect-fs-cd.c index 09974b5..ab6ee4e 100644 --- a/src/inspect-fs-cd.c +++ b/src/inspect-fs-cd.c @@ -525,7 +525,7 @@ guestfs_int_check_installer_iso (guestfs_h *g, struct inspect_fs *fs, /* Otherwise we matched an ISO, so fill in the fs fields. */ fs->mountable = safe_strdup (g, device); - fs->is_root = 1; + fs->role = OS_ROLE_ROOT; if (osinfo->is_installer) fs->format = OS_FORMAT_INSTALLER; fs->type = osinfo->type; diff --git a/src/inspect-fs.c b/src/inspect-fs.c index 87609ab..58f08b8 100644 --- a/src/inspect-fs.c +++ b/src/inspect-fs.c @@ -166,7 +166,7 @@ check_filesystem (guestfs_h *g, const char *mountable, is_dir_bin && guestfs_is_file (g, "/etc/freebsd-update.conf") > 0 && guestfs_is_file (g, "/etc/fstab") > 0) { - fs->is_root = 1; + fs->role = OS_ROLE_ROOT; fs->format = OS_FORMAT_INSTALLED; if (guestfs_int_check_freebsd_root (g, fs) == -1) return -1; @@ -177,7 +177,7 @@ check_filesystem (guestfs_h *g, const char *mountable, guestfs_is_file (g, "/netbsd") > 0 && guestfs_is_file (g, "/etc/fstab") > 0 && guestfs_is_file (g, "/etc/release") > 0) { - fs->is_root = 1; + fs->role = OS_ROLE_ROOT; fs->format = OS_FORMAT_INSTALLED; if (guestfs_int_check_netbsd_root (g, fs) == -1) return -1; @@ -188,7 +188,7 @@ check_filesystem (guestfs_h *g, const char *mountable, guestfs_is_file (g, "/bsd") > 0 && guestfs_is_file (g, "/etc/fstab") > 0 && guestfs_is_file (g, "/etc/motd") > 0) { - fs->is_root = 1; + fs->role = OS_ROLE_ROOT; fs->format = OS_FORMAT_INSTALLED; if (guestfs_int_check_openbsd_root (g, fs) == -1) return -1; @@ -197,7 +197,7 @@ check_filesystem (guestfs_h *g, const char *mountable, else if (guestfs_is_file (g, "/hurd/console") > 0 && guestfs_is_file (g, "/hurd/hello") > 0 && guestfs_is_file (g, "/hurd/null") > 0) { - fs->is_root = 1; + fs->role = OS_ROLE_ROOT; fs->format = OS_FORMAT_INSTALLED; /* XXX could be more specific */ if (guestfs_int_check_hurd_root (g, fs) == -1) return -1; @@ -208,7 +208,7 @@ check_filesystem (guestfs_h *g, const char *mountable, guestfs_is_file (g, "/service/vm") > 0 && guestfs_is_file (g, "/etc/fstab") > 0 && guestfs_is_file (g, "/etc/version") > 0) { - fs->is_root = 1; + fs->role = OS_ROLE_ROOT; fs->format = OS_FORMAT_INSTALLED; if (guestfs_int_check_minix_root (g, fs) == -1) return -1; @@ -219,7 +219,7 @@ check_filesystem (guestfs_h *g, const char *mountable, is_symlink_to (g, "/bin", "usr/bin") > 0) && (guestfs_is_file (g, "/etc/fstab") > 0 || guestfs_is_file (g, "/etc/hosts") > 0)) { - fs->is_root = 1; + fs->role = OS_ROLE_ROOT; fs->format = OS_FORMAT_INSTALLED; if (guestfs_int_check_linux_root (g, fs) == -1) return -1; @@ -230,7 +230,7 @@ check_filesystem (guestfs_h *g, const char *mountable, guestfs_is_dir (g, "/home") > 0 && guestfs_is_dir (g, "/usr") > 0 && guestfs_is_file (g, "/etc/coreos/update.conf") > 0) { - fs->is_root = 1; + fs->role = OS_ROLE_ROOT; fs->format = OS_FORMAT_INSTALLED; if (guestfs_int_check_coreos_root (g, fs) == -1) return -1; @@ -265,7 +265,7 @@ check_filesystem (guestfs_h *g, const char *mountable, /* Windows root? */ else if ((windows_systemroot = guestfs_int_get_windows_systemroot (g)) != NULL) { - fs->is_root = 1; + fs->role = OS_ROLE_ROOT; fs->format = OS_FORMAT_INSTALLED; if (guestfs_int_check_windows_root (g, fs, windows_systemroot) == -1) return -1; @@ -280,7 +280,7 @@ check_filesystem (guestfs_h *g, const char *mountable, /* FreeDOS? */ else if (guestfs_int_is_dir_nocase (g, "/FDOS") > 0 && guestfs_int_is_file_nocase (g, "/FDOS/FREEDOS.BSS") > 0) { - fs->is_root = 1; + fs->role = OS_ROLE_ROOT; fs->format = OS_FORMAT_INSTALLED; fs->type = OS_TYPE_DOS; fs->distro = OS_DISTRO_FREEDOS; @@ -308,7 +308,7 @@ check_filesystem (guestfs_h *g, const char *mountable, guestfs_is_file (g, "/amd64/txtsetup.sif") > 0 || guestfs_is_file (g, "/freedos/freedos.ico") > 0 || guestfs_is_file (g, "/boot/loader.rc") > 0)) { - fs->is_root = 1; + fs->role = OS_ROLE_ROOT; fs->format = OS_FORMAT_INSTALLER; if (guestfs_int_check_installer_root (g, fs) == -1) return -1; diff --git a/src/inspect.c b/src/inspect.c index 497794e..e82c476 100644 --- a/src/inspect.c +++ b/src/inspect.c @@ -105,7 +105,7 @@ collect_coreos_inspection_info (guestfs_h *g) for (i = 0; i < g->nr_fses; ++i) { struct inspect_fs *fs = &g->fses[i]; - if (fs->distro == OS_DISTRO_COREOS && fs->is_root) + if (fs->distro == OS_DISTRO_COREOS && fs->role == OS_ROLE_ROOT) root = fs; } @@ -115,7 +115,7 @@ collect_coreos_inspection_info (guestfs_h *g) for (i = 0; i < g->nr_fses; ++i) { struct inspect_fs *fs = &g->fses[i]; - if (fs->distro != OS_DISTRO_COREOS || fs->is_root != 0) + if (fs->distro != OS_DISTRO_COREOS || fs->role == OS_ROLE_ROOT) continue; /* CoreOS is designed to contain 2 /usr partitions (USR-A, USR-B): @@ -162,15 +162,16 @@ check_for_duplicated_bsd_root (guestfs_h *g) fs->type == OS_TYPE_NETBSD || fs->type == OS_TYPE_OPENBSD; - if (fs->is_root && is_bsd && + if (fs->role == OS_ROLE_ROOT && is_bsd && match (g, fs->mountable, re_primary_partition)) { bsd_primary = fs; continue; } - if (fs->is_root && bsd_primary && bsd_primary->type == fs->type) { - /* remove the is root flag from the bsd_primary */ - bsd_primary->is_root = 0; + if (fs->role == OS_ROLE_ROOT && bsd_primary && + bsd_primary->type == fs->type) { + /* remove the root role from the bsd_primary */ + bsd_primary->role = OS_ROLE_UNKNOWN; bsd_primary->format = OS_FORMAT_UNKNOWN; return; } @@ -196,7 +197,7 @@ guestfs_impl_inspect_get_roots (guestfs_h *g) * list in this case. */ for (i = 0; i < g->nr_fses; ++i) { - if (g->fses[i].is_root) + if (g->fses[i].role == OS_ROLE_ROOT) guestfs_int_add_string (g, &ret, g->fses[i].mountable); } guestfs_int_end_stringsbuf (g, &ret); @@ -694,7 +695,7 @@ guestfs_int_search_for_root (guestfs_h *g, const char *root) for (i = 0; i < g->nr_fses; ++i) { struct inspect_fs *fs = &g->fses[i]; - if (fs->is_root && STREQ (root, fs->mountable)) + if (fs->role == OS_ROLE_ROOT && STREQ (root, fs->mountable)) return fs; } -- 1.8.3.1