]> err.no Git - dpkg/commitdiff
Dpkg::Control: fix error messages during parsing
authorRaphael Hertzog <hertzog@debian.org>
Sun, 1 Jun 2008 19:37:17 +0000 (21:37 +0200)
committerRaphael Hertzog <hertzog@debian.org>
Sun, 1 Jun 2008 19:37:17 +0000 (21:37 +0200)
Make sure that the errors during parsing are meaningful and refer to
the filename when possible and not always "standard input".

scripts/Dpkg/Control.pm

index fd0c27eca77d0f8d23783b96ec0eeb5edebc3c27..a54db17740954c3a42a46bd43bc4979be7951d16 100644 (file)
@@ -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"));
        }
     }
 }