X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=inspector%2Fvirt-inspector.c;h=607e5ae09ff24994df58c39803b6e2ce691631dc;hb=6d0d3b7f02a5a4801c6347e1ef0c8cd7755c2454;hp=d016b2ddd5ba08b21c3e11dfe027c59128a34707;hpb=9e7c6a548353bde925c16434711bcc6208038d83;p=libguestfs.git diff --git a/inspector/virt-inspector.c b/inspector/virt-inspector.c index d016b2d..607e5ae 100644 --- a/inspector/virt-inspector.c +++ b/inspector/virt-inspector.c @@ -20,11 +20,13 @@ #include #include +#include #include #include #include #include #include +#include #include #include @@ -51,6 +53,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); @@ -425,6 +428,14 @@ output_root (xmlTextWriterPtr xo, char *root) free (str); ); + str = guestfs_inspect_get_hostname (g, root); + if (!str) exit (EXIT_FAILURE); + if (STRNEQ (str, "unknown")) + XMLERROR (-1, + xmlTextWriterWriteElement (xo, BAD_CAST "hostname", + BAD_CAST str)); + free (str); + str = guestfs_inspect_get_format (g, root); if (!str) exit (EXIT_FAILURE); if (STRNEQ (str, "unknown")) @@ -458,6 +469,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 +486,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 +605,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;