The following commit has been merged in the master branch:
commit 73957553935c79bf2beff09a85404713df9bad02
Author: Raphael Hertzog <[EMAIL PROTECTED]>
Date:   Sun Jun 1 21:37:17 2008 +0200

    Dpkg::Control: fix error messages during parsing
    
    Make sure that the errors during parsing are meaningful and refer to
    the filename when possible and not always "standard input".

diff --git a/scripts/Dpkg/Control.pm b/scripts/Dpkg/Control.pm
index fd0c27e..a54db17 100644
--- a/scripts/Dpkg/Control.pm
+++ b/scripts/Dpkg/Control.pm
@@ -52,7 +52,7 @@ sub new {
     bless $self, $class;
     if ($arg) {
         if ($arg eq "-") {
-            $self->parse_fh(\*STDIN);
+            $self->parse_fh(\*STDIN, _g("standard input"));
         } else {
             $self->parse($arg);
         }
@@ -81,30 +81,33 @@ Parse the content of $file. Exits in case of errors.
 sub parse {
     my ($self, $file) = @_;
     open(CDATA, "<", $file) || syserr(_g("cannot read %s"), $file);
-    $self->parse_fh(\*CDATA);
+    $self->parse_fh(\*CDATA, $file);
     close(CDATA);
 }
 
-=item $c->parse_fh($fh)
+=item $c->parse_fh($fh, $description)
 
 Parse a control file from the given filehandle. Exits in case of errors.
+$description is used to describe the filehandle, ideally it's a filename
+or a description of where the data comes from. It's used in error
+messages.
 
 =cut
 sub parse_fh {
-    my ($self, $fh) = @_;
+    my ($self, $fh, $desc) = @_;
     $self->reset();
-    my $cdata = parsecdata($fh, _g("standard input"));
+    my $cdata = parsecdata($fh, $desc);
     return if not defined $cdata;
     $self->{source} = $cdata;
     unless (exists $cdata->{Source}) {
-       syntaxerr(_g("standard input"), _g("first block lacks a source field"));
+       syntaxerr($desc, _g("first block lacks a source field"));
     }
     while (1) {
-       $cdata = parsecdata($fh, _g("standard input"));
+       $cdata = parsecdata($fh, $desc);
        last if not defined $cdata;
        push @{$self->{packages}}, $cdata;
        unless (exists $cdata->{Package}) {
-           syntaxerr(_g("standard input"), _g("block lacks a package field"));
+           syntaxerr($desc, _g("block lacks a package field"));
        }
     }
 }

-- 
dpkg's main repository


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to