From a9510b7b22663ac27c8d59cee1bbd777468e1cac Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Wed, 7 Mar 2012 18:09:59 +0000 Subject: inspection: Add detection of FreeDOS (RHBZ#786215). FreeDOS is returned as type="dos", distro="freedos". No version or application information is returned at present. --- src/guestfs-internal.h | 3 +++ src/inspect.c | 2 ++ src/inspect_apps.c | 1 + src/inspect_fs.c | 15 +++++++++++++++ src/inspect_fs_unix.c | 1 + src/inspect_icon.c | 2 ++ 6 files changed, 24 insertions(+) (limited to 'src') diff --git a/src/guestfs-internal.h b/src/guestfs-internal.h index 452a1b66..82cb9a56 100644 --- a/src/guestfs-internal.h +++ b/src/guestfs-internal.h @@ -257,6 +257,7 @@ enum inspect_fs_content { FS_CONTENT_NETBSD_ROOT, FS_CONTENT_INSTALLER, FS_CONTENT_HURD_ROOT, + FS_CONTENT_FREEDOS_ROOT, }; enum inspect_os_format { @@ -273,6 +274,7 @@ enum inspect_os_type { OS_TYPE_FREEBSD, OS_TYPE_NETBSD, OS_TYPE_HURD, + OS_TYPE_DOS, }; enum inspect_os_distro { @@ -297,6 +299,7 @@ enum inspect_os_distro { OS_DISTRO_OPENSUSE, OS_DISTRO_BUILDROOT, OS_DISTRO_CIRROS, + OS_DISTRO_FREEDOS, }; enum inspect_os_package_format { diff --git a/src/inspect.c b/src/inspect.c index 46e1e4d5..d3bb76a4 100644 --- a/src/inspect.c +++ b/src/inspect.c @@ -188,6 +188,7 @@ guestfs__inspect_get_type (guestfs_h *g, const char *root) char *ret; switch (fs->type) { + case OS_TYPE_DOS: ret = safe_strdup (g, "dos"); break; case OS_TYPE_FREEBSD: ret = safe_strdup (g, "freebsd"); break; case OS_TYPE_HURD: ret = safe_strdup (g, "hurd"); break; case OS_TYPE_LINUX: ret = safe_strdup (g, "linux"); break; @@ -224,6 +225,7 @@ guestfs__inspect_get_distro (guestfs_h *g, const char *root) case OS_DISTRO_CIRROS: ret = safe_strdup (g, "cirros"); break; case OS_DISTRO_DEBIAN: ret = safe_strdup (g, "debian"); break; case OS_DISTRO_FEDORA: ret = safe_strdup (g, "fedora"); break; + case OS_DISTRO_FREEDOS: ret = safe_strdup (g, "freedos"); break; case OS_DISTRO_GENTOO: ret = safe_strdup (g, "gentoo"); break; case OS_DISTRO_LINUX_MINT: ret = safe_strdup (g, "linuxmint"); break; case OS_DISTRO_MAGEIA: ret = safe_strdup (g, "mageia"); break; diff --git a/src/inspect_apps.c b/src/inspect_apps.c index 2f3e3f15..603e25d4 100644 --- a/src/inspect_apps.c +++ b/src/inspect_apps.c @@ -106,6 +106,7 @@ guestfs__inspect_list_applications (guestfs_h *g, const char *root) case OS_TYPE_FREEBSD: case OS_TYPE_NETBSD: + case OS_TYPE_DOS: case OS_TYPE_UNKNOWN: default: /* nothing - keep GCC happy */; diff --git a/src/inspect_fs.c b/src/inspect_fs.c index 211f94df..b1dd4f66 100644 --- a/src/inspect_fs.c +++ b/src/inspect_fs.c @@ -261,6 +261,19 @@ check_filesystem (guestfs_h *g, const char *device, /* Windows volume (but not root)? */ else if (guestfs___is_dir_nocase (g, "/System Volume Information") > 0) fs->content = FS_CONTENT_WINDOWS_VOLUME; + /* FreeDOS? */ + else if (guestfs___is_dir_nocase (g, "/FDOS") > 0 && + guestfs___is_file_nocase (g, "/FDOS/FREEDOS.BSS") > 0) { + fs->is_root = 1; + fs->content = FS_CONTENT_FREEBSD_ROOT; + fs->format = OS_FORMAT_INSTALLED; + fs->type = OS_TYPE_DOS; + fs->distro = OS_DISTRO_FREEDOS; + /* FreeDOS is a mix of 16 and 32 bit, but assume it requires a + * 32 bit i386 processor. + */ + fs->arch = safe_strdup (g, "i386"); + } /* Install CD/disk? Skip these checks if it's not a whole device * (eg. CD) or the first partition (eg. bootable USB key). */ @@ -424,6 +437,7 @@ check_package_format (guestfs_h *g, struct inspect_fs *fs) case OS_DISTRO_WINDOWS: case OS_DISTRO_BUILDROOT: case OS_DISTRO_CIRROS: + case OS_DISTRO_FREEDOS: case OS_DISTRO_UNKNOWN: default: fs->package_format = OS_PACKAGE_FORMAT_UNKNOWN; @@ -479,6 +493,7 @@ check_package_management (guestfs_h *g, struct inspect_fs *fs) case OS_DISTRO_WINDOWS: case OS_DISTRO_BUILDROOT: case OS_DISTRO_CIRROS: + case OS_DISTRO_FREEDOS: case OS_DISTRO_UNKNOWN: default: fs->package_management = OS_PACKAGE_MANAGEMENT_UNKNOWN; diff --git a/src/inspect_fs_unix.c b/src/inspect_fs_unix.c index 252cce3c..5e58eb9c 100644 --- a/src/inspect_fs_unix.c +++ b/src/inspect_fs_unix.c @@ -686,6 +686,7 @@ check_hostname_unix (guestfs_h *g, struct inspect_fs *fs) break; case OS_TYPE_WINDOWS: /* not here, see check_windows_system_registry */ + case OS_TYPE_DOS: case OS_TYPE_UNKNOWN: default: /* nothing, keep GCC warnings happy */; diff --git a/src/inspect_icon.c b/src/inspect_icon.c index 943479c0..6cb5553f 100644 --- a/src/inspect_icon.c +++ b/src/inspect_icon.c @@ -165,6 +165,7 @@ guestfs__inspect_get_icon (guestfs_h *g, const char *root, size_t *size_r, /* These are just to keep gcc warnings happy. */ case OS_DISTRO_ARCHLINUX: case OS_DISTRO_BUILDROOT: + case OS_DISTRO_FREEDOS: case OS_DISTRO_GENTOO: case OS_DISTRO_LINUX_MINT: case OS_DISTRO_MANDRIVA: @@ -190,6 +191,7 @@ guestfs__inspect_get_icon (guestfs_h *g, const char *root, size_t *size_r, case OS_TYPE_FREEBSD: case OS_TYPE_NETBSD: + case OS_TYPE_DOS: case OS_TYPE_UNKNOWN: default: ; } -- cgit