summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2011-03-23 16:00:48 +0000
committerRichard W.M. Jones <rjones@redhat.com>2011-03-23 16:00:48 +0000
commit3f1e3223c491aa057d02c1da418ed896d09fff7c (patch)
tree7859c338e4264acaa5656adc2ab67156de794c51 /src
parent0daf7e81a659bcdc1ce327151cc1207b124a35a1 (diff)
downloadlibguestfs-3f1e3223c491aa057d02c1da418ed896d09fff7c.tar.gz
libguestfs-3f1e3223c491aa057d02c1da418ed896d09fff7c.tar.xz
libguestfs-3f1e3223c491aa057d02c1da418ed896d09fff7c.zip
New API: guestfs_inspect_get_product_variant
This returns a product variant for inspected operating systems. In practice this is a useful way to distinguish between consumer and enterprise/server versions of Windows that otherwise have the same version number.
Notes
Notes: Labels: feature
Diffstat (limited to 'src')
-rw-r--r--src/guestfs-internal.h1
-rw-r--r--src/inspect.c25
2 files changed, 26 insertions, 0 deletions
diff --git a/src/guestfs-internal.h b/src/guestfs-internal.h
index d0dcf235..155763d8 100644
--- a/src/guestfs-internal.h
+++ b/src/guestfs-internal.h
@@ -244,6 +244,7 @@ struct inspect_fs {
enum inspect_os_package_format package_format;
enum inspect_os_package_management package_management;
char *product_name;
+ char *product_variant;
int major_version;
int minor_version;
char *arch;
diff --git a/src/inspect.c b/src/inspect.c
index 1129a53d..b4acf177 100644
--- a/src/inspect.c
+++ b/src/inspect.c
@@ -1558,6 +1558,14 @@ check_windows_software_registry (guestfs_h *g, struct inspect_fs *fs)
free (version);
}
+ else if (STRCASEEQ (key, "InstallationType")) {
+ fs->product_variant = hivex_value_string (h, values[i]);
+ if (!fs->product_variant) {
+ perrorf (g, "hivex_value_string");
+ free (key);
+ goto out;
+ }
+ }
free (key);
}
@@ -1966,6 +1974,16 @@ guestfs__inspect_get_product_name (guestfs_h *g, const char *root)
}
char *
+guestfs__inspect_get_product_variant (guestfs_h *g, const char *root)
+{
+ struct inspect_fs *fs = search_for_root (g, root);
+ if (!fs)
+ return NULL;
+
+ return safe_strdup (g, fs->product_variant ? : "unknown");
+}
+
+char *
guestfs__inspect_get_windows_systemroot (guestfs_h *g, const char *root)
{
struct inspect_fs *fs = search_for_root (g, root);
@@ -2850,6 +2868,12 @@ guestfs__inspect_get_product_name (guestfs_h *g, const char *root)
}
char *
+guestfs__inspect_get_product_variant (guestfs_h *g, const char *root)
+{
+ NOT_IMPL(NULL);
+}
+
+char *
guestfs__inspect_get_windows_systemroot (guestfs_h *g, const char *root)
{
NOT_IMPL(NULL);
@@ -2924,6 +2948,7 @@ guestfs___free_inspect_info (guestfs_h *g)
for (i = 0; i < g->nr_fses; ++i) {
free (g->fses[i].device);
free (g->fses[i].product_name);
+ free (g->fses[i].product_variant);
free (g->fses[i].arch);
free (g->fses[i].hostname);
free (g->fses[i].windows_systemroot);