diff options
author | Richard Jones <rjones@redhat.com> | 2009-04-15 14:19:03 +0100 |
---|---|---|
committer | Richard Jones <rjones@redhat.com> | 2009-04-15 14:19:03 +0100 |
commit | 3e9f98d0f73ec483b970c19ad1752acc380c38b9 (patch) | |
tree | 289d4be94d1a980e6625a8045955a782c0a1724c /examples/to-xml.c | |
parent | 0c2376a5c05053ce6a0479ade544be860c400fdb (diff) | |
download | libguestfs-3e9f98d0f73ec483b970c19ad1752acc380c38b9.tar.gz libguestfs-3e9f98d0f73ec483b970c19ad1752acc380c38b9.tar.xz libguestfs-3e9f98d0f73ec483b970c19ad1752acc380c38b9.zip |
Display ext2/3 details, and some bug fixes.
Diffstat (limited to 'examples/to-xml.c')
-rw-r--r-- | examples/to-xml.c | 38 |
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"); +} |