$xml->startTag ("operatingsystem");
# Basic OS fields.
- $xml->dataElement (root => $root);
+ $xml->dataElement (root => canonicalize ($root));
my ($s, $distro, $major_version);
$s = $g->inspect_get_type ($root);
$xml->startTag ("mountpoints");
foreach (@$fskeys) {
- $xml->dataElement ("mountpoint", $_, dev => $fshash->{$_});
+ $xml->dataElement ("mountpoint", $_,
+ dev => canonicalize ($fshash->{$_}));
}
$xml->endTag ("mountpoints");
}
my @fses = $g->inspect_get_filesystems ($root);
foreach (@fses) {
- $xml->startTag ("filesystem", dev => $_);
+ $xml->startTag ("filesystem",
+ dev => canonicalize ($_));
eval {
my $type = $g->vfs_type ($_);
}
}
+# The reverse of device name translation, see
+# BLOCK DEVICE NAMING in guestfs(3).
+sub canonicalize
+{
+ local $_ = shift;
+
+ if (m{^/dev/[hv]d([a-z]\d)$}) {
+ return "/dev/sd$1";
+ }
+ $_;
+}
+
=head1 SHELL QUOTING
Libvirt guest names can contain arbitrary characters, some of which