summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2012-03-07 18:09:59 +0000
committerRichard W.M. Jones <rjones@redhat.com>2012-03-07 18:36:47 +0000
commita9510b7b22663ac27c8d59cee1bbd777468e1cac (patch)
tree9c86b59d7b71b8bd0c3812e854983c8e5459a28a /src
parent518cdb596e3d1e75e30d8df8fff5835aa2842479 (diff)
downloadlibguestfs-a9510b7b22663ac27c8d59cee1bbd777468e1cac.tar.gz
libguestfs-a9510b7b22663ac27c8d59cee1bbd777468e1cac.tar.xz
libguestfs-a9510b7b22663ac27c8d59cee1bbd777468e1cac.zip
inspection: Add detection of FreeDOS (RHBZ#786215).
FreeDOS is returned as type="dos", distro="freedos". No version or application information is returned at present.
Diffstat (limited to 'src')
-rw-r--r--src/guestfs-internal.h3
-rw-r--r--src/inspect.c2
-rw-r--r--src/inspect_apps.c1
-rw-r--r--src/inspect_fs.c15
-rw-r--r--src/inspect_fs_unix.c1
-rw-r--r--src/inspect_icon.c2
6 files changed, 24 insertions, 0 deletions
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: ;
}