summaryrefslogtreecommitdiffstats
path: root/inspector
diff options
context:
space:
mode:
Diffstat (limited to 'inspector')
-rw-r--r--inspector/example-windows.xml3
-rw-r--r--inspector/virt-inspector.c54
-rw-r--r--inspector/virt-inspector.rng13
3 files changed, 70 insertions, 0 deletions
diff --git a/inspector/example-windows.xml b/inspector/example-windows.xml
index 8e53159a..8b3b8a70 100644
--- a/inspector/example-windows.xml
+++ b/inspector/example-windows.xml
@@ -20,6 +20,9 @@
<type>ntfs</type>
</filesystem>
</filesystems>
+ <drive_mappings>
+ <drive_mapping name="C">/dev/sda2</drive_mapping>
+ </drive_mappings>
<applications>
<application>
<name>test1</name>
diff --git a/inspector/virt-inspector.c b/inspector/virt-inspector.c
index d016b2dd..7724be65 100644
--- a/inspector/virt-inspector.c
+++ b/inspector/virt-inspector.c
@@ -51,6 +51,7 @@ static void output_roots (xmlTextWriterPtr xo, char **roots);
static void output_root (xmlTextWriterPtr xo, char *root);
static void output_mountpoints (xmlTextWriterPtr xo, char *root);
static void output_filesystems (xmlTextWriterPtr xo, char *root);
+static void output_drive_mappings (xmlTextWriterPtr xo, char *root);
static void output_applications (xmlTextWriterPtr xo, char *root);
static void canonicalize (char *dev);
static void free_strings (char **argv);
@@ -458,6 +459,8 @@ output_root (xmlTextWriterPtr xo, char *root)
output_filesystems (xo, root);
+ output_drive_mappings (xo, root);
+
output_applications (xo, root);
XMLERROR (-1, xmlTextWriterEndElement (xo));
@@ -473,6 +476,15 @@ compare_keys (const void *p1, const void *p2)
}
static int
+compare_keys_nocase (const void *p1, const void *p2)
+{
+ const char *key1 = * (char * const *) p1;
+ const char *key2 = * (char * const *) p2;
+
+ return strcasecmp (key1, key2);
+}
+
+static int
compare_keys_len (const void *p1, const void *p2)
{
const char *key1 = * (char * const *) p1;
@@ -583,6 +595,48 @@ output_filesystems (xmlTextWriterPtr xo, char *root)
}
static void
+output_drive_mappings (xmlTextWriterPtr xo, char *root)
+{
+ char **drive_mappings = NULL;
+ size_t i;
+
+ DISABLE_GUESTFS_ERRORS_FOR (
+ drive_mappings = guestfs_inspect_get_drive_mappings (g, root);
+ );
+ if (drive_mappings == NULL)
+ return;
+
+ if (drive_mappings[0] == NULL) {
+ free_strings (drive_mappings);
+ return;
+ }
+
+ /* Sort by key. */
+ qsort (drive_mappings,
+ count_strings (drive_mappings) / 2, 2 * sizeof (char *),
+ compare_keys_nocase);
+
+ XMLERROR (-1, xmlTextWriterStartElement (xo, BAD_CAST "drive_mappings"));
+
+ for (i = 0; drive_mappings[i] != NULL; i += 2) {
+ canonicalize (drive_mappings[i+1]);
+
+ XMLERROR (-1,
+ xmlTextWriterStartElement (xo, BAD_CAST "drive_mapping"));
+ XMLERROR (-1,
+ xmlTextWriterWriteAttribute (xo, BAD_CAST "name",
+ BAD_CAST drive_mappings[i]));
+ XMLERROR (-1,
+ xmlTextWriterWriteString (xo, BAD_CAST drive_mappings[i+1]));
+ XMLERROR (-1, xmlTextWriterEndElement (xo));
+ }
+
+ XMLERROR (-1, xmlTextWriterEndElement (xo));
+
+ free_strings (drive_mappings);
+}
+
+static void
output_applications (xmlTextWriterPtr xo, char *root)
{
struct guestfs_application_list *apps;
diff --git a/inspector/virt-inspector.rng b/inspector/virt-inspector.rng
index 7a822e68..669e8bc6 100644
--- a/inspector/virt-inspector.rng
+++ b/inspector/virt-inspector.rng
@@ -47,6 +47,7 @@
<ref name="mountpoints"/>
<ref name="filesystems"/>
+ <optional><ref name="drive_mappings"/></optional>
<optional><ref name="applications"/></optional>
</interleave>
@@ -83,6 +84,18 @@
</element>
</define>
+ <!-- drive mappings (for Windows) -->
+ <define name="drive_mappings">
+ <element name="drive_mappings">
+ <oneOrMore>
+ <element name="drive_mapping">
+ <attribute name="name"><text/></attribute>
+ <text/>
+ </element>
+ </oneOrMore>
+ </element>
+ </define>
+
<!-- applications installed -->
<define name="applications">
<element name="applications">