… | |
… | |
298 | } |
298 | } |
299 | |
299 | |
300 | \%pak |
300 | \%pak |
301 | } |
301 | } |
302 | |
302 | |
303 | sub read_arch($) { |
303 | sub read_arch($;$) { |
304 | my ($path) = @_; |
304 | my ($path, $toplevel) = @_; |
305 | |
305 | |
306 | my %arc; |
306 | my %arc; |
307 | my ($more, $prev); |
307 | my ($more, $prev); |
308 | |
308 | |
309 | open my $fh, "<:raw:perlio:utf8", $path |
309 | open my $fh, "<:raw:perlio:utf8", $path |
… | |
… | |
366 | } else { |
366 | } else { |
367 | push @{ $arc{arch} }, $arc; |
367 | push @{ $arc{arch} }, $arc; |
368 | } |
368 | } |
369 | $prev = $arc; |
369 | $prev = $arc; |
370 | $more = undef; |
370 | $more = undef; |
|
|
371 | } elsif ($toplevel && /^(\S+)\s+(.*)$/) { |
|
|
372 | if ($1 eq "lev_array") { |
|
|
373 | while (<$fh>) { |
|
|
374 | last if /^endplst\s*$/; |
|
|
375 | push @{$toplevel->{lev_array}}, $_+0; |
|
|
376 | } |
|
|
377 | } else { |
|
|
378 | $toplevel->{$1} = $2; |
|
|
379 | } |
371 | } elsif (/^\s*($|#)/) { |
380 | } elsif (/^\s*($|#)/) { |
372 | # |
381 | # |
373 | } else { |
382 | } else { |
374 | warn "$path: unparseable top-level line '$_'"; |
383 | die "$path: unparseable top-level line '$_'"; |
375 | } |
384 | } |
376 | } |
385 | } |
377 | |
386 | |
378 | undef $parse_block; # work around bug in perl not freeing $fh etc. |
387 | undef $parse_block; # work around bug in perl not freeing $fh etc. |
379 | |
388 | |