diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2011-03-23 16:00:48 +0000 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2011-03-23 16:00:48 +0000 |
commit | 3f1e3223c491aa057d02c1da418ed896d09fff7c (patch) | |
tree | 7859c338e4264acaa5656adc2ab67156de794c51 /src | |
parent | 0daf7e81a659bcdc1ce327151cc1207b124a35a1 (diff) | |
download | libguestfs-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.h | 1 | ||||
-rw-r--r-- | src/inspect.c | 25 |
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); |