Просмотр исходного кода

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".
Raphael Hertzog лет назад: 18
Родитель
Сommit
7395755393
1 измененных файлов с 11 добавлено и 8 удалено
  1. 11 8
      scripts/Dpkg/Control.pm

+ 11 - 8
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"));
 	}
     }
 }