summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Jones <rjones@redhat.com>2009-04-15 14:19:03 +0100
committerRichard Jones <rjones@redhat.com>2009-04-15 14:19:03 +0100
commit3e9f98d0f73ec483b970c19ad1752acc380c38b9 (patch)
tree289d4be94d1a980e6625a8045955a782c0a1724c
parent0c2376a5c05053ce6a0479ade544be860c400fdb (diff)
downloadlibguestfs-3e9f98d0f73ec483b970c19ad1752acc380c38b9.tar.gz
libguestfs-3e9f98d0f73ec483b970c19ad1752acc380c38b9.tar.xz
libguestfs-3e9f98d0f73ec483b970c19ad1752acc380c38b9.zip
Display ext2/3 details, and some bug fixes.
-rw-r--r--examples/to-xml.c38
1 files changed, 34 insertions, 4 deletions
diff --git a/examples/to-xml.c b/examples/to-xml.c
index eba3a7a3..63e896da 100644
--- a/examples/to-xml.c
+++ b/examples/to-xml.c
@@ -23,6 +23,7 @@
static void display_partition (guestfs_h *g, const char *dev);
static void display_partitions (guestfs_h *g, const char *dev);
+static void display_ext23 (guestfs_h *g, const char *dev, const char *fstype);
int
main (int argc, char *argv[])
@@ -114,10 +115,12 @@ display_partition (guestfs_h *g, const char *dev)
display_partitions (g, dev);
else if (strncmp (what, "LVM2", 4) == 0)
printf ("<physvol/>\n");
- else if (strstr (what, "ext2 filesystem data") == 0)
- printf ("<fs type=\"ext2\"/>\n");
- else if (strstr (what, "ext3 filesystem data") == 0)
- printf ("<fs type=\"ext3\"/>\n");
+ else if (strstr (what, "ext2 filesystem data") != NULL)
+ display_ext23 (g, dev, "ext2");
+ else if (strstr (what, "ext3 filesystem data") != NULL)
+ display_ext23 (g, dev, "ext3");
+ else if (strstr (what, "Linux/i386 swap file") != NULL)
+ printf ("<linux-swap/>\n");
else
printf ("<unknown/>\n");
@@ -156,3 +159,30 @@ display_partitions (guestfs_h *g, const char *dev)
free (parts);
printf ("</partitions>\n");
}
+
+/* Display some details on the ext2/3 filesystem on dev. */
+static void
+display_ext23 (guestfs_h *g, const char *dev, const char *fstype)
+{
+ char **sbfields;
+ int i;
+
+ printf ("<fs type=\"%s\">\n", fstype);
+ CALL (sbfields = guestfs_tune2fs_l (g, dev), NULL);
+
+ for (i = 0; sbfields[i] != NULL; i += 2) {
+ /* Just pick out a few important fields to display. There
+ * is much more that could be displayed here.
+ */
+ if (strcmp (sbfields[i], "Filesystem UUID") == 0)
+ printf ("<uuid>%s</uuid>\n", sbfields[i+1]);
+ else if (strcmp (sbfields[i], "Block size") == 0)
+ printf ("<blocksize>%s</blocksize>\n", sbfields[i+1]);
+
+ free (sbfields[i]);
+ free (sbfields[i+1]);
+ }
+ free (sbfields);
+
+ printf ("</fs>\n");
+}