From e44e3482bdb4d0ebde2d8b41830ac2cdb07948fb Mon Sep 17 00:00:00 2001 From: Yang Zhang Date: Fri, 28 Aug 2015 09:58:54 +0800 Subject: Add qemu 2.4.0 Change-Id: Ic99cbad4b61f8b127b7dc74d04576c0bcbaaf4f5 Signed-off-by: Yang Zhang --- qemu/roms/ipxe/contrib/errdb/errdb.pl | 109 ++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100755 qemu/roms/ipxe/contrib/errdb/errdb.pl (limited to 'qemu/roms/ipxe/contrib/errdb/errdb.pl') diff --git a/qemu/roms/ipxe/contrib/errdb/errdb.pl b/qemu/roms/ipxe/contrib/errdb/errdb.pl new file mode 100755 index 000000000..6423d8347 --- /dev/null +++ b/qemu/roms/ipxe/contrib/errdb/errdb.pl @@ -0,0 +1,109 @@ +#!/usr/bin/perl -w + +=head1 NAME + +errdb.pl + +=head1 SYNOPSIS + +errdb.pl [options] ../../src/bin/errors + +Options: + + -d,--database=db Specify path to errors.db + -h,--help Display brief help message + -v,--verbose Increase verbosity + -q,--quiet Decrease verbosity + +=cut + +use Getopt::Long; +use Pod::Usage; +use DBI; +use strict; +use warnings; + +# Parse command-line options +my $verbosity = 0; +my $errdb = "errors.db"; +Getopt::Long::Configure ( 'bundling', 'auto_abbrev' ); +GetOptions ( + 'database|d=s' => sub { shift; $errdb = shift; }, + 'verbose|v+' => sub { $verbosity++; }, + 'quiet|q+' => sub { $verbosity--; }, + 'help|h' => sub { pod2usage ( 1 ); }, +) or die "Could not parse command-line options\n"; +pod2usage ( 1 ) unless @ARGV >= 1; + +# Open database +my $dbh = DBI->connect ( "dbi:SQLite:dbname=".$errdb, "", "", + { RaiseError => 1, PrintError => 0 } ); +$dbh->begin_work(); + +# Create errors table if necessary +eval { + $dbh->selectall_arrayref ( "SELECT * FROM errors LIMIT 1" ); +}; +if ( $@ ) { + print "Creating errors table\n" if $verbosity >= 1; + $dbh->do ( "CREATE TABLE errors (". + " errno char(8) NOT NULL,". + " description text NOT NULL,". + " PRIMARY KEY ( errno ) )" ); +} + +# Create xrefs table if necessary +eval { + $dbh->selectall_arrayref ( "SELECT * FROM xrefs LIMIT 1" ); +}; +if ( $@ ) { + print "Creating xrefs table\n" if $verbosity >= 1; + $dbh->do ( "CREATE TABLE xrefs (". + " errno char(8) NOT NULL,". + " filename text NOT NULL,". + " line integer NOT NULL,". + " UNIQUE ( errno, filename, line ),". + " FOREIGN KEY ( errno ) REFERENCES errors ( errno ) )" ); + $dbh->do ( "CREATE INDEX xrefs_errno ON xrefs ( errno )" ); +} + +# Parse input file(s) +my $errors = {}; +my $xrefs = {}; +while ( <> ) { + chomp; + ( my $errno, my $filename, my $line, my $description ) = split ( /\t/ ); + $errno = substr ( $errno, 0, 6 ) unless $errno =~ /^7f/; + $errors->{$errno} = $description; + $xrefs->{$errno} ||= {}; + $xrefs->{$errno}->{$filename} ||= {}; + $xrefs->{$errno}->{$filename}->{$line} ||= 1; +} + +# Ensure all errors are present in database +my $error_update = + $dbh->prepare ( "UPDATE errors SET description = ? WHERE errno = ?" ); +my $error_insert = $dbh->prepare ( "INSERT INTO errors VALUES ( ?, ? )" ); +while ( ( my $errno, my $description ) = each %$errors ) { + print "Error ".$errno." is \"".$description."\"\n" if $verbosity >= 2; + if ( $error_update->execute ( $description, $errno ) == 0 ) { + $error_insert->execute ( $errno, $description ); + } +} + +# Replace xrefs in database +$dbh->do ( "DELETE FROM xrefs" ); +my $xref_insert = $dbh->prepare ( "INSERT INTO xrefs VALUES ( ?, ?, ? )" ); +while ( ( my $errno, my $xref_errno ) = each %$xrefs ) { + while ( ( my $filename, my $xref_filename ) = each %$xref_errno ) { + foreach my $line ( keys %$xref_filename ) { + print "Error ".$errno." is used at ".$filename." line ".$line."\n" + if $verbosity >= 2; + $xref_insert->execute ( $errno, $filename, $line ); + } + } +} + +# Close database +$dbh->commit(); +$dbh->disconnect(); -- cgit 1.2.3-korg