daemon/readdir: avoid a small leak
[libguestfs.git] / inspector / virt-inspector.pl
index f12af42..66b1553 100755 (executable)
@@ -672,6 +672,7 @@ sub assign_mount_points
                } else {
                    $fs->{used} = 1
                }
+                $fs->{spec} = $spec;
            }
        }
     }
@@ -705,6 +706,12 @@ sub find_filesystem
     } else {
        return ($_, $fses{$_}) if exists $fses{$_};
 
+        # The following is to handle the case where an fstab entry specifies a
+        # specific device rather than its label or uuid, and the libguestfs
+        # appliance has named the device differently due to the use of a
+        # different driver.
+        # This will work as long as the underlying drivers recognise devices in
+        # the same order.
        if (m{^/dev/hd(.*)} && exists $fses{"/dev/sd$1"}) {
            return ("/dev/sd$1", $fses{"/dev/sd$1"});
        }
@@ -875,13 +882,22 @@ sub check_for_modprobe_aliases
         @results = $g->aug_match($pattern);
 
         for my $path ( @results ) {
+            $path =~ m{^/files(.*)/alias(?:\[\d*\])?$}
+                or die("$path doesn't match augeas pattern");
+            my $file = $1;
+
             my $alias;
             $alias = $g->aug_get($path);
 
             my $modulename;
             $modulename = $g->aug_get($path.'/modulename');
 
-            $modprobe_aliases{$alias} = $modulename;
+            my %aliasinfo;
+            $aliasinfo{modulename} = $modulename;
+            $aliasinfo{augeas} = $path;
+            $aliasinfo{file} = $file;
+
+            $modprobe_aliases{$alias} = \%aliasinfo;
         }
     }
 
@@ -1011,7 +1027,7 @@ sub output_text_os
        if (@keys) {
            print "  Modprobe aliases:\n";
            foreach (@keys) {
-               printf "    %-30s %s\n", $_, $aliases{$_}
+               printf "    %-30s %s\n", $_, $aliases{$_}->{modulename}
            }
        }
     }
@@ -1093,7 +1109,8 @@ sub output_xml_os
         foreach my $field ( [ "label" => "label" ],
                             [ "uuid" => "uuid" ],
                             [ "type" => "fstype" ],
-                            [ "content" => "content" ] ) {
+                            [ "content" => "content" ],
+                            [ "spec" => "spec" ] ) {
             $xml->dataElement($field->[0], $filesystems->{$_}{$field->[1]})
                 if exists $filesystems->{$_}{$field->[1]};
         }
@@ -1108,7 +1125,15 @@ sub output_xml_os
        if (@keys) {
             $xml->startTag("modprobealiases");
            foreach (@keys) {
-                $xml->dataElement("alias", $aliases{$_}, "device" => $_);
+                $xml->startTag("alias", "device" => $_);
+
+                foreach my $field ( [ "modulename" => "modulename" ],
+                                    [ "augeas" => "augeas" ],
+                                    [ "file" => "file" ] ) {
+                    $xml->dataElement($field->[0], $aliases{$_}->{$field->[1]});
+                }
+
+                $xml->endTag("alias");
            }
             $xml->endTag("modprobealiases");
        }