--- bin/fw-info.pl 2007/11/18 14:17:54 73 +++ bin/fw-info.pl 2007/11/18 14:50:21 74 @@ -6,6 +6,9 @@ use strict; use Data::Dump qw/dump/; +use File::Find; + +my $debug = 0; my @images = @ARGV; push @images, '/srv/tftp/BANT-R' unless @images; @@ -20,16 +23,34 @@ return $b; } -for my $path ( @images ) { - next unless -f $path; +sub firmware { + my $path = shift; open(my $fh, $path) || die "Can't open $path: $!"; my $b; read($fh, $b, length($magic)); - warn "# $path not a firmware image\n" unless ($b eq $magic); + if ($b ne $magic) { + warn "# $path not a firmware image\n"; + return; + } my $version = get_from($fh, 32, 4); my $board = get_from($fh, 0x136, 6); my $name = get_from($fh, 0x144, 15); chomp($name); + $version = join('.',unpack('CCCC', $version)); + printf("%8s %6s %s\t%s\n", $version, $board, $name, $path); +} - printf("%8s %6s %s\t%s\n", join('.',unpack('CCCC', $version)), $board, $name, $path); +for my $path ( @images ) { + warn "# ? $path\n" if $debug; + if ( -d $path ) { + find( sub { + my $path = $File::Find::name; + warn "# ?? $path\n" if $debug; + firmware( $path ) if -f $path; + }, $path ); + } elsif ( -f $path ) { + firmware( $path ); + } else { + warn "# unknown: $path\n"; + } }